我想创建一个网络优化模型,它使用概率分布代替节点间权重的单点估计。首先,我编写了一个python脚本,在Neo4j中构建了一个示例网络:
from py2neo import neo4j
import random
random.seed(1234)
def makeGraph():
graph_db = neo4j.GraphDatabaseService()
graph_db.clear()
location = graph_db.get_or_create_index(neo4j.Node, "LOCATION")
loss = graph_db.get_or_create_index(neo4j.Relationship, "LOSS")
fromToLoss = []
fromToLoss.append(('start', 'm', random.gammavariate(alpha=3, beta=1)))
fromToLoss.append(('start', 'n', random.normalvariate(mu = 5, sigma = 0.5)))
fromToLoss.append(('start', 'o', random.gammavariate(alpha=6, beta=0.5)))
fromToLoss.append(('m', 'p', random.gammavariate(alpha=5, beta=0.5)))
fromToLoss.append(('n', 'p', random.gammavariate(alpha=7, beta=0.5)))
fromToLoss.append(('n', 'q', random.gammavariate(alpha=6, beta=0.5)))
fromToLoss.append(('o', 'q', random.normalvariate(mu = 5, sigma = 0.5)))
fromToLoss.append(('p', 'r', random.gammavariate(alpha=6, beta=0.5)))
fromToLoss.append(('p', 's', random.gammavariate(alpha=6, beta=0.5)))
fromToLoss.append(('q', 's', random.normalvariate(mu = 6, sigma = 0.4)))
fromToLoss.append(('q', 't', random.gammavariate(alpha=6, beta=0.5)))
fromToLoss.append(('r', 'end', random.normalvariate(mu = 5, sigma = 0.5)))
fromToLoss.append(('s', 'end', random.gammavariate(alpha = 5, beta=0.7)))
fromToLoss.append(('t', 'end', random.normalvariate(mu = 5, sigma = 0.5)))
for edge in fromToLoss:
vertexFrom, vertexTo, loss = edge
fromLocation = location.get_or_create('LOCATION', vertexFrom, {'location':vertexFrom})
toLocation = location.get_or_create('LOCATION', vertexTo, {'location':vertexTo})
path = fromLocation.get_or_create_path(("CONNECTS", {"distance": loss}), toLocation)
makeGraph()
Python脚本将创建以下图形:
从长远来看,我的目的是反复地从旅行的实际航程中抽取成本/时间,以便了解如何在网络中以最佳方式发送货物,以及预期的服务级别。这是一个有效的蒙特卡罗模拟通过加权网络的最短路径。在
我是Neo4j新手,尝试编写最短路径密码查询:
^{pr2}$它通过网络返回以下路径:
从距离来看,查询返回的通过网络的路由不是最短的。我设想顶点之间的边被平均加权。在
你能看到需要对Cypher查询做些什么来按距离加权最短路径吗?在
试试这个查询,这应该对你有用。在
首先尝试获取从StartNode到EndNode的路径,然后调用
REDUCE
函数,用初始值0设置一个累加器。当我们遍历集合(路径)并查看关系时,REDUCE
将在集合的每个元素的管道笔划后面运行表达式,因此我们需要r并对所有距离求和。最后但并非最不重要的是,我们按总距离排序,它将显示从节点228068到节点228077的最短路径。。。在帕特里克
相关问题 更多 >
编程相关推荐