我正在尝试遍历一个图(有向),其中边具有权重。 如何使用权重来定义边缘遵循的顺序:权重越低(准确地说,权重的模块:边缘可以有负值。但这是一个细节),则优先级越高:低首先执行权重。如果(可能)两条边具有相同的权重,我会同时执行它们,或者,如果不可能,随机执行它们。 计划是对其中一个节点的值进行更改,然后让它在图上传播:传播必须遵循边的权重规则,到达的每个节点都会更改其值之一, 等等。 我还没有定义确切的变化,以及如何解决循环,但首先,我无法遵循最小权重规则以受控方式在图上传播。 为了查看传播情况,我将其推入 Gephi。 我确实成功地推动了传播: 遍历 = vg.V().has('Value','SomeStartNodeIChose').repeat(outE().otherV().simplePath()).until(has('Value','SomeEndNodeIChose')).path( ).by('值').by('权重');[] :> 遍历
这效果很好:我可以看到节点像圣诞树一样亮起来。 但我不能在这里插入一个 min() ......任何人都可以向新手解释一下这是如何工作的吗?
我的尝试显然很混乱,所以...... 遍历 = vg.V().has('Value','AirBnb').repeat(outE().where(min()).otherV().simplePath()).until(has('Value','舒适')).path().by('值').by('更新体重');[]
抛出:org.apache.tinkerpop.gremlin.tinkergraph.struct.TinkerEdge 无法转换为 java.lang.Comparable
遍历 = vg.V().has('Value','AirBnb').repeat(outE().where('Weight',is(min())).otherV().simplePath()).until (has('值','舒适')).path().by('值').by('更新体重');[] 抛出:没有方法签名:org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.where() 适用于参数类型:(String, org.apache.tinkerpop.gremlin.process.traversal.dsl .graph.DefaultGraphTraversal) 值: [权重, [IsStep(eq([MinGlobalStep]))]]
我可以继续说下去…… 我绝对不明白这是如何工作的...
min()
是一个减少障碍,所以你无法在
repeat()
内使用它。 相反,您可能想使用
order().by().limit(1)
来获得最小加权边缘:
g.V().has('Value','AirBnb').
repeat(
outE().order().by('weight').limit(1).
inV().
simplePath()
).
until(outE().count().is(eq(0))).path()