前不久我读了小说" 猎物".虽然它绝对是有趣的科幻小说,但它引起了我对群体/群体AI的兴趣.我最近在reddit上看过一些这些演示的例子,比如Nvidia飞机植绒视频和Chris Benjaminsen的植绒沙箱(来源).
我有兴趣编写一些涉及群体或植绒AI的模拟演示.我在大学时已经采用了人工智能,但是我们从未接触过模拟蜂群/植绒行为的主题,而快速翻阅我的教科书则表明它没有被讨论.

植绒沙箱
学习flock/swarm算法的一些细节有哪些可靠的资源?有没有人在这个领域有任何经验,所以他们可以指出我正确的方向有关适合的AI书或发表的论文?
昨天我遇到了Craig Reynolds的Boids,随后我发现我会用Java实现一个简单的2D版本.我已经根据Conrad Parker的笔记精心制作了一个相当基本的设置.
但是,我得到了一些相当奇怪的(在我看来)行为.目前,我的boids合理地快速移动到粗糙的网格或格子中,然后在现场进行抽搐.我的意思是他们移动一点并且非常频繁地旋转.
目前,我已实施:
最初,我的boids随机分布在屏幕区域(与Parker方法略有不同),它们的速度都指向屏幕区域的中心(请注意,随机初始化的速度会产生相同的结果).更改速度限制值只会改变boids移动到此模式的速度,而不会形成模式.
我认为,这可能是:
预期的行为将更像雷诺兹的boids页面上applet中发生的二维版本,尽管现在我还没有实现任何方法来保持屏幕上的boid.
有没有人遇到过这个?有关原因和/或如何解决的任何想法?如果它有帮助,我可以发布一个.gif的行为.
我正在进行植绒boids仿真,只是为了好玩,我想稍微优化一下.需要工作的区域是在给定的boid附近找到boids.我认为要做到这一点,某种适合任务的空间数据结构将是我最好的选择(见这里并向下滚动一下.).
无论我采用什么,我都会用Java从头开始实现自己.这样我就可以学到更多关于我选择的数据结构的知识,而不是我刚才调用的一堆库函数.
我知道R-Trees,kd trees和Quadtrees.在我看来,它们都是可行的选择.但我对这些数据结构没有任何经验,我不完全确定最适合我的目的.我不需要这么大规模的任何东西- 我说的可能只有几百个,也许最多只有一千个,而不是一百万个,但请记住,我最终可能最终在Android手机上运行它.
请为此推荐一个数据结构(当然不限于上述内容),并给我一个很好的理由选择它.
是的,我已经看到了这个问题.不,我对答案不满意 - 根本没有任何理由.
哦,另外一件事 - 就像标题所说的那样,这仅仅是针对两个维度的.
我正在尝试统一实现一个 boids 植绒模型。
我已经设法实现了转向行为(分离、对齐、凝聚),但我目前正在使用代理的固定半径来定义其邻域(基本上是代理周围的气泡)。但是,我需要实现的是像这张图片中详述的那样的视锥:

我不确定如何统一实现这一点。有人能指出我正确的方向吗?
为了增加清晰度,我想做的是检测视锥中的所有其他代理,但我不确定如何实现它。目前,我只是在检测一定距离内的所有代理,尽管我需要忽略进行检测的代理(如图中所示),但我不想将其可视化,只需检测该定义邻域中的代理。
谢谢
我一直有错误
UnboundLocalError:赋值前引用的局部变量'new_speedDx'
在尝试运行以下功能时:
def new_speedD(boid1):
bposx = boid1[0]
if bposx < WALL:
new_speedDx = WALL_FORCE
elif bposx > WIDTH - WALL:
new_speedDx = -WALL_FORCE
bposy = boid1[1]
if bposy < WALL:
new_speedDy = WALL_FORCE
elif bposx > WIDTH - WALL:
new_speedDy = -WALL_FORCE
return new_speedDx, new_speedDy
Run Code Online (Sandbox Code Playgroud)
在这个函数中,boid1是一个有4个元素的向量(xpos,ypos,xvelocity,yvelocity),所有大写的变量都是常量(数字).有人知道如何解决这个问题?我在互联网上找到了许多可能的解决方案,但似乎没有任何工作..
boids ×6
java ×2
algorithm ×1
javascript ×1
optimization ×1
python ×1
quadtree ×1
simulation ×1