蚂蚁模拟:最好为每个蚂蚁或其他对象创建一个进程/线程?

| 简单的研究是: 蚂蚁寿命模拟 我正在创建一个面向对象的结构,该结构可以看到Anthill的类,Ant的类和整个模拟器的类。 现在,我正在集思广益,探讨如何使蚂蚁“活着” ... 我知道有一些像这样的项目才刚刚开始,但是我正在集思广益,我不是在寻找一个即食的菜。 真诚地,我必须进行一些测试以了解“什么更好”,在Python中,AFAIK线程使用的内存少于进程。 当您开始模拟时,“蚂蚁”要做的只是:以随机的方向走动,如果他们发现食物->吃/带到蚁丘,如果他们从另一个正在运输食物的蚁丘中发现另一只蚂蚁->攻击->收集食物->做必须做的事情……等等……这意味着我必须在整个蚂蚁和整个环境中“共享”信息。 所以我重写: 最好为每个Ant或其他对象创建一个进程/线程? 编辑: 由于我的问题是“什么更好”,我对收到的所有明智答案都予以了投票,并对它们进行了评论。 经过测试后,我将接受最佳答案。     
已邀请:
        我建议看看无堆栈。 Stackless引入了类似于微线程的小任务,这些小任务允许在不存在常规线程相关的性能和复杂性问题的情况下获得基于线程的编程的好处 据我所知,无堆栈可能存在的问题是,您需要使用修改的解释器或pypy才能使用微线程。但是,这可能是值得的,因为有一些公司使用无堆栈技术取得了巨大的成功(例如,将其用于EVE Online) 还可以查看greenlet,它也为您提供了一种微线程,而无需替换解释器。但是,与无堆栈的greenlet相比,仅提供了有限的功能集。     
        如果您不介意GPL,建议您使用Khronos模拟框架,该框架可将每个蚂蚁定义为生成器,因此您无需创建线程。 Khronos引擎负责调度。 我实际上正在开发一个名为GarlicSim的竞争项目,您也可以将其用于仿真,但是对于您的情况,Khronos会更好。 (除非您对GPL有问题。)     
        我编写了一个蚂蚁仿真程序(用于寻找一个好的TSP解决方案),并且不建议使用Thread-Solution。我使用循环为每个蚂蚁计算下一步,因此我的蚂蚁并不会真正并发地表现(而是在每个步骤之后进行同步)。 我看不出有任何理由使用线程为这些蚂蚁建模。它在运行时行为方面没有优势,在(代码的)优雅方面也不具有优势! 诚然,由于真正的蚂蚁是并发的,使用Thread可能更现实一些,但是出于仿真目的,恕我直言,这是可以忽略的。     
        我同意@delan-为每个Ant分配一个完整的线程似乎有点过头了,特别是如果您希望将其扩展到整个anthill且有成千上万个生物的话。 取而代之的是,您可以考虑使用线程在单个“周期”中更新许多蚂蚁。根据编写方式的不同-您需要仔细考虑需要共享的数据-您甚至可以使用这些线程池来扩大仿真范围。 还请记住,在CPython中,GIL阻止多个本机线程同时执行代码。     
        我认为线程解决方案是最好的。 即使蚂蚁是个人,它们也共享环境,这正是使用线程时所允许的。 过程解决方案与现实相适应,与环境实现通信系统将是艰巨的。 另一个解决方案是定义蚂蚁仅在发生滴答声时起作用。 然后,无需使用线程或进程。 例如 :
import time
...
while True:
    for ant in ants:
        ant.act()
    time.sleep(tickwait)
同时,此解决方案更易于实现。     

要回复问题请先登录注册