在 python 中建模群体行为

如何解决在 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)

输出:

animation

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?