如何解决在 python 中建模群体行为
我正在寻找一个图形解决方案(一个库)来使用 python 可视化群体行为。 整个集合将是一群像蚂蚁一样的粒子/物体,它们在 2D 空间中移动、碰撞、留下痕迹和跟随痕迹,并以各种方式进行交互。 我可以在后台完成所有计算,但我仍然想以某种方式将其可视化。
这里是棘手的部分: 当有超过几千个粒子在移动时,计算会占用太多资源,没有足够的能力来执行异想天开的事情,例如使用附加精灵或 tkinter_polygons 进行轨迹可视化,因为这会创建太多对象而无法顺利运行可视化。 (我为此尝试了 tkinter)。
另一方面,所有图形 - 粒子,轨迹和其他环境条件都可以计算并生成为单个图像 - 一个 numpy.array(据我所知,这将相当快)但是我不知道有任何合适的库能够以合理的帧频率显示/可视化阵列。就像渲染电影的帧一样。
我倾向于数组解决方案,因为这会给我数据反馈[在任何时间点,代码都会包含整个环境状态的信息,而不管可视化/GUI],因为我需要它来进行粒子交互。虽然我知道在画布上移动多边形并从 GUI 读取当前状态 [例如。碰撞] 可能更容易编码。
我应该从哪里开始? 游戏? 特金特? PyQT? 破折号?
解决方法
您可以检查OpenCV。
以下是一个包含 1,000 个粒子的示例,它们具有随机的起始坐标和速度:
import cv2
import numpy as np
# generate particle coordinates,velocities
n = 1000
cs = np.random.uniform(0,1,(2,n))
vs = np.random.uniform(-0.01,0.01,n))
# set image size
s = 200
cv2.namedWindow('img')
while True:
# calculate new coordinates
cs += vs
# generate image from coordinates
img = np.zeros((s,s,3))
img[tuple((cs * s % s).astype(int))] = 1
# show frame and wait 40ms
cv2.imshow('img',img)
cv2.waitKey(40)
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。