【发布时间】:2014-04-29 04:06:03
【问题描述】:
我需要创建模拟捕食者-猎物关系的应用程序。我可以使用一些框架(例如repast),但我想知道从头开始编写应用程序。
对我来说最大的问题是用食物来源、捕食者和猎物表示地图的方式。
非常简单的模型
我在考虑二维数组,比如说Cell。
单元格将具有布尔字段 predator、food 和 prey 以及相应的设置器和获取器。捕食者和猎物会四处游荡并观察特定半径(视线范围)内的细胞。
如果捕食者发现猎物,它就会向它移动。如果猎物发现捕食者,它会朝相反的方向移动。不受干扰的猎物会四处游荡,直到找到食物来源。
移动/徘徊
在本例中,Animal 前往目的地。
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
0 |_|_|_|_|_|_| |_|_|_|_|_|_| |_|_|_|_|_|_|
1 |_|A|_|_|_|_| |_|_|_|_|_|_| |_|_|_|_|_|_|
2 |_|_|x|x|_|_| -> |_|_|A|x|_|_| . . . |_|_|_|_|_|_|
3 |_|_|_|_|x|_| |_|_|_|_|x|_| |_|_|_|_|_|_|
4 |_|_|_|_|_|D| |_|_|_|_|_|D| |_|_|_|_|_|D|
0 1 2 3 4 5
此步行需要 5 次移动,动物将有一些特定的速度(2 次移动/秒)。在每一步中,一个 Cell 将predator 设置为false,另一个将其设置为true。
通过编程它看起来像这样(当然会有方法moveTo(x,y)):
Animal animal = new Animal(1,1);
animal.setPosition(2,2);
animal.setPosition(3,2);
animal.setPosition(4,3);
animal.setPosition(5,4);
观察
最大范围为 3 的捕食者观察样本。我已将观察到的细胞标记为 x。观察只是简单地检查getPrey() 是否返回true:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
0 |_|_|_|_|_|_|_| |_|_|_|_|_|_|_| |_|_|_|x|_|_|_|
1 |_|_|_|_|_|_|_| |_|_|_|x|_|_|_| |_|x|x|x|x|x|_|
2 |_|_|_|x|_|_|_| |_|_|x|x|x|_|_| |_|x|x|x|x|x|_|
3 |_|_|x|A|x|_|_| -> |_|x|x|A|x|x|_| -> |x|x|x|A|x|x|x|
4 |_|_|_|x|_|_|_| |_|_|x|x|x|_|_| |_|x|x|x|x|x|_|
5 |_|_|_|_|_|_|_| |_|_|_|x|_|_|_| |_|x|x|x|x|x|_|
6 |_|_|_|_|_|_|_| |_|_|_|_|_|_|_| |_|_|_|x|_|_|_|
0 1 2 3 4 5 6
最好的方法是观察每一步(移动)周围的区域,但这似乎需要大量的计算(检查条件)。我在这一点上是正确的吗?
这是将大部分数据保存在二维数组中的好方法吗?我将不胜感激任何建设性的答案。
这只是示例。未来我想添加繁殖、情绪、智能等。
谢谢。
编辑
我忘了提到问题的规模。
我认为 Predators 和 Prey 的数量会少于 100。但这只是猜测。地图大小为 500x500 甚至更小。
【问题讨论】:
-
这并不能回答您的问题,但您可能会发现它很有帮助。我写了这篇关于在基本方向(上、下、左、右)上移动二维数组的博客文章:aliteralmind.wordpress.com/2014/03/07/traverse_2d_array
-
你看过stackoverflow.com/questions/22569354/…,那里可能有想法吗?
标签: java arrays simulation conways-game-of-life