我正在研究一个简单的进化算法。
这个怎么运作:
我有一张网格图,上面的每个单元格要么是空白的,要么是植物的,要么是草食动物的。植物和食草动物是生物(植物不是,无论如何),所以它们都有能量和颜色。生物每隔几毫秒(当计时器触发时)做一些事情。植物不断补充能量,食草动物失去能量。如果植物完全充电,它会朝随机方向(北、南、东或西)看,如果该方向上的相邻单元格是空白的,则植物会在该单元格中繁殖。草食动物通过吃植物来恢复能量。当轮到草食动物做事时,它会随机查看相邻的单元格。如果它是空的,食草动物就会移动到那里。如果它是一种植物,食草动物会尝试吃掉它然后移动到那里。草食动物的颜色越接近植物的颜色,草食动物成功的机会就越大。如果草食动物的能量达到 0,它就会死亡。如果草食动物达到最大能量,它也会繁殖。后代的颜色总是与父母的颜色略有不同。
这是一张图片:
这是从内部吃掉的很多植物。
一段时间后,系统正常化:
大块消失,随时出现几种颜色。当然,这是意料之中的。
所以,我现在有一个工作程序。但是,它是由一个线程运行的,我想让它成为多线程的。我打算为地图上的每个单元格制作一个线程。
我知道这是矫枉过正,但我还是想这样做。那样的话,我可以拥有这些小原子碎片,细胞,它们都可以异步工作,它们可以在运行中相互插入,就像拼图一样。
这就是基本的想法。我想让细胞尽可能地自主。我试图实现这一点:我为每个单元创建了一个摇摆计时器,当计时器触发时,我启动了一个线程让单元运行。我还为每个单元添加了锁,这样当多个邻居尝试访问同一个小区。这样做的问题是每次单元尝试做某事时都会调用一个新线程。我知道这非常消耗资源(第一手经验),所以我想以某种方式为每个单元创建持久线程。每个线程将处理它自己的单元格的计时器、动作侦听器并在计时器触发时运行其单元格的动作。这些线程基本上永远不会停止。我需要帮助,因为我不确定如何实现这样的系统。
编辑:澄清问题:我需要一个线程示例,它侦听计时器事件并在计时器触发时运行东西。这一切都应该发生在线程内部。