gremlin apache:如何使用边的权重来定义边遵循的顺序?

问题描述 投票:0回答:1

我正在尝试遍历一个图(有向),其中边具有权重。 如何使用权重来定义边缘遵循的顺序:权重越低(准确地说,权重的模块:边缘可以有负值。但这是一个细节),则优先级越高:低首先执行权重。如果(可能)两条边具有相同的权重,我会同时执行它们,或者,如果不可能,随机执行它们。 计划是对其中一个节点的值进行更改,然后让它在图上传播:传播必须遵循边的权重规则,到达的每个节点都会更改其值之一, 等等。 我还没有定义确切的变化,以及如何解决循环,但首先,我无法遵循最小权重规则以受控方式在图上传播。 为了查看传播情况,我将其推入 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]))]]

我可以继续说下去…… 我绝对不明白这是如何工作的...

gremlin weighted graph-traversal
1个回答
0
投票

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()
    
© www.soinside.com 2019 - 2024. All rights reserved.