Graph 使用Mesa和;Networkx

Graph 使用Mesa和;Networkx,graph,data-visualization,networkx,agent,mesa,Graph,Data Visualization,Networkx,Agent,Mesa,我目前正在使用Mesa和Networkx进行多代理路径查找。这些节点表示一个时间点只能驻留一个代理的位置。边表示节点之间的距离。如何在每一个时间步中可视化代理沿边缘的移动?例如,在时间步长=4时,代理A位于边缘连接节点1和2的中间。 < P>我想使用“代码> NETWorkX和 MatPultLIB < /C> >,在节点之间绘制一些代理遍历。 导入matplotlib.pyplot作为plt 将networkx导入为nx 将matplotlib.animation导入为动画 导入matplot

我目前正在使用Mesa和Networkx进行多代理路径查找。这些节点表示一个时间点只能驻留一个代理的位置。边表示节点之间的距离。如何在每一个时间步中可视化代理沿边缘的移动?例如,在时间步长=4时,代理A位于边缘连接节点1和2的中间。

< P>我想使用“代码> NETWorkX和<代码> MatPultLIB < /C> >,在节点之间绘制一些代理遍历。

导入matplotlib.pyplot作为plt
将networkx导入为nx
将matplotlib.animation导入为动画
导入matplotlib
将numpy作为np导入
matplotlib.use('TkAgg')
plt.ion()
H=nx.八面体图()#生成一个随机图
pos=nx.spring_布局(H,迭代次数=200)#为节点找到合适的位置
为了做到这一点,首先我们需要在遍历时知道代理在每个步骤或帧中的位置。如果我们假设每个节点之间(或每个边上)有50个步骤,我们可以编写一个生成器来更新代理在每个帧中的位置:

def遍历(图形、开始、结束、节点之间的步数=50):
“”“生成代理的新位置。”。
:param graph:要将代理置于其上进行遍历的图形。
:param start:要从中启动的节点。
:param end:要结束的节点。
:param steps_在_节点之间:每条边上的步数。
"""
steps=np.linspace(0,1,节点之间的steps\u)
#找到从开始到结束的最佳路径
路径=nx.最短路径(图形,源=开始,目标=结束)
停止=np.空((0,2))
对于zip中的i,j(路径[1:],路径):
#获取代理在每个步骤中的位置
新站点=步骤[…,无]*位置[i]+(1-步骤[…,无])*位置[j]
停止=np.vstack((停止,新停止))
对于进站的s:
产量
然后我们可以按如下方式设置动画:

agent_pos=traverse(H,1,4)#使一个agent从1遍历到4
def更新位置(n):
plt.cla()
nx.draw(H,位置,节点大小=700,带标签=True,节点颜色为绿色)
c=plt.圆圈(下一个(代理位置),0.05,颜色为紫色,zorder=2,alpha=0.7)
plt.gca().add_补丁(c)
ani=animation.FuncAnimation(plt.gcf(),更新位置,间隔=30,重复=False)
plt.ioff()
plt.show()
最后,我们将有如下内容: