Использование свойства родительской вершины для фильтрации идущих вершин - PullRequest
0 голосов
/ 17 октября 2019

Цель состоит в том, чтобы рассчитать максимальное объединенное значение pot графика. Правила следующие:

Два узла совместимы, если либо f-mkt одного узла отличается от всех узлов другого узла picks, либо если они одинаковы по крайней мере для одного, то его pick также должно быть таким же, как и у другого узла. Например, на приведенном ниже графике узел 1 имеет один f-mkt из 125*41, который также находится в узле 3, однако, поскольку его выбор 123*41*2 также совпадает с выбором в узле 3, они совместимы.
Однако узел 2 и узел 3 несовместимы, поскольку в обоих случаях имеется f-mkt из 124*40, но в узле 2 pick 123*40*1 в узле 2 не найдено, что делает их несовместимыми. Таким образом, максимальное объединенное значение pot графа равно max (узел 1 + узел 2, узел 1 + узел 3), которое в этом случае составляет 50 + 90 = 130.

Другими словами, объединенноеpot графика принимает максимум суммы pot связанных вершин каждого узла после устранения несовместимости.

<?xml version='1.0' ?>
<graphml xmlns='http://graphml.graphdrawing.org/xmlns'>
    <key id='labelV'   for='node' attr.name='labelV'  attr.type='string'></key>
    <key id='type'     for='node' attr.name='type'    attr.type='string'></key>
    <key id='picks'    for='node' attr.name='picks'   attr.type='string'></key>
    <key id='mkt'      for='node' attr.name='mkt'     attr.type='string'></key>
    <key id='f-mkt'   for='node' attr.name='f-mkt'  attr.type='string'></key>
    <key id='labelE'   for='edge' attr.name='labelE'  attr.type='string'></key>

    <graph id='routes' edgedefault='directed'>
        <!-- vertices -->
        <node id='1'>
            <data key='labelV'>transaction</data>
            <data key='type'>transaction</data>
            <data key='picks'>123*41*2</data>
            <data key='f-mkt'>123*41</data>
            <data key='pot'>50.0</data>
        </node>
        <node id='2'>
            <data key='labelV'>transaction</data>
            <data key='type'>transaction</data>
            <data key='picks'>123*40*1</data>
            <data key='f-mkt'>123*40</data>
            <data key='pot'>80.0</data>
        </node>
        <node id='3'>
            <data key='labelV'>transaction</data>
            <data key='type'>transaction</data>
            <data key='picks'>125*41*2</data>
            <data key='f-mkt'>125*41</data>
            <data key='pot'>90.0</data>
        </node>
        <node id='4'>
            <data key='labelV'>transaction</data>
            <data key='type'>transaction</data>
            <data key='picks'>123*41*1</data>
            <data key='f-mkt'>123*41</data>
            <data key='pot'>40.0</data>
        </node>

        <edge id='33' source='1' target='2'>
            <data key='labelE'>compatible</data>
        </edge>
        <edge id='34' source='1' target='3'>
            <data key='labelE'>compatible</data>
        </edge>
        <edge id='35' source='2' target='1'>
            <data key='labelE'>compatible</data>
        </edge>
        <edge id='36' source='3' target='1'>
            <data key='labelE'>compatible</data>
        </edge>

        <edge id='37' source='3' target='4'>
            <data key='labelE'>compatible</data>
        </edge>
        <edge id='38' source='4' target='3'>
            <data key='labelE'>compatible</data>
        </edge>
    </graph>
</graphml>

Вот код для завершения многозначных свойств

g.V(3).property(set,'picks','124*40*3').property(set,'picks','123*40*2')
g.V(3).property(set,'f-mkt','124*40').property(set,'f-mkt','123*40')

g.V(2).property(set, 'picks', '124*40*2')
g.V(2).property(set, 'f-mkt', '124*40')

РЕДАКТИРОВАТЬ: я хочу рассчитать максимальное pot для каждого узла в графе, взяв его подключенный подграф и применяя приведенные выше правила в этом подграфе, прежде чем взять сумму pot с подграфа, а затем максимальноевсех подграфов.

Чтобы достичь этого, мне нужно выполнить сравнение, как описано выше, но я даже не могу заставить работать следующий простой тест: 1 g.V(1).as('v').map{out().where(values('f-mkt').is(within(it.get().value('f-mkt'))))}

я получаю это как ответ:

[VertexStep(OUT,vertex), TraversalFilterStep([PropertiesStep([f-mkt],value), IsStep(within([123*41]))])]

Итак, как мне динамически передать это значение из родительского узла в шаг where?

...