标签: boids

有哪些关于植绒和群体算法的好资源?

前不久我读了小说" 猎物".虽然它绝对是有趣的科幻小说,但它引起了我对群体/群体AI的兴趣.我最近在reddit上看过一些这些演示的例子,比如Nvidia飞机植绒视频Chris Benjaminsen的植绒沙箱(来源).

我有兴趣编写一些涉及群体或植绒AI的模拟演示.我在大学时已经采用了人工智能,但是我们从未接触过模拟蜂群/植绒行为的主题,而快速翻阅我的教科书则表明它没有被讨论.

替代文字
植绒沙箱

学习flock/swarm算法的一些细节有哪些可靠的资源?有没有人在这个领域有任何经验,所以他们可以指出我正确的方向有关适合的AI书或发表的论文?

algorithm artificial-intelligence boids

15
推荐指数
2
解决办法
5504
查看次数

植绒行为问题

昨天我遇到了Craig Reynolds的Boids,随后我发现我会用Java实现一个简单的2D版本.我已经根据Conrad Parker的笔记精心制作了一个相当基本的设置.

但是,我得到了一些相当奇怪的(在我看来)行为.目前,我的boids合理地快速移动到粗糙的网格或格子中,然后在现场进行抽搐.我的意思是他们移动一点并且非常频繁地旋转.

目前,我已实施:

  1. 对准
  2. 凝聚
  3. 分割
  4. 速度限制

最初,我的boids随机分布在屏幕区域(与Parker方法略有不同),它们的速度都指向屏幕区域的中心(请注意,随机初始化的速度会产生相同的结果).更改速度限制值只会改变boids移动到此模式的速度,而不会形成模式.

我认为,这可能是:

  1. 我正在使用的参数的结果(现在我的代码如Parker的伪代码所述;我还没有尝试过雷诺兹所描述的由角度和半径定义的影响区域.)
  2. 我需要实现的东西,但我不知道.
  3. 我做错了什么.

预期的行为将更像雷诺兹的boids页面上applet中发生的二维版本,尽管现在我还没有实现任何方法来保持屏幕上的boid.

有没有人遇到过这个?有关原因和/或如何解决的任何想法?如果它有帮助,我可以发布一个.gif的行为.

java simulation artificial-life boids

8
推荐指数
1
解决办法
3723
查看次数

适用于Java中的Flocking Boids的2D空间数据结构

我正在进行植绒boids仿真,只是为了好玩,我想稍微优化一下.需要工作的区域是在给定的boid附近找到boids.我认为要做到这一点,某种适合任务的空间数据结构将是我最好的选择(见这里并向下滚动一下.).

无论我采用什么,我都会用Java从头开始实现自己.这样我就可以学到更多关于我选择的数据结构的知识,而不是我刚才调用的一堆库函数.

我知道R-Trees,kd treesQuadtrees.在我看来,它们都是可行的选择.但我对这些数据结构没有任何经验,我不完全确定最适合我的目的.我不需要这么大规模的任何东西- 我说的可能只有几百个,也许最多只有一千个,而不是一百万个,但请记住,我最终可能最终在Android手机上运行它.

请为此推荐一个数据结构(当然不限于上述内容),并给我一个很好的理由选择它.

是的,我已经看到了这个问题.不,我对答案不满意 - 根本没有任何理由.

哦,另外一件事 - 就像标题所说的那样,这仅仅是针对两个维度的.

java optimization spatial-index data-structures boids

7
推荐指数
1
解决办法
960
查看次数

统一定义视锥

我正在尝试统一实现一个 boids 植绒模型。

我已经设法实现了转向行为(分离、对齐、凝聚),但我目前正在使用代理的固定半径来定义其邻域(基本上是代理周围的气泡)。但是,我需要实现的是像这张图片中详述的那样的视锥:

boids视锥

我不确定如何统一实现这一点。有人能指出我正确的方向吗?

为了增加清晰度,我想做的是检测视锥中的所有其他代理,但我不确定如何实现它。目前,我只是在检测一定距离内的所有代理,尽管我需要忽略进行检测的代理(如图中所示),但我不想将其可视化,只需检测该定义邻域中的代理。

谢谢

artificial-intelligence unity-game-engine boids

5
推荐指数
1
解决办法
2252
查看次数

Python:在赋值错误之前引用的局部变量

我一直有错误

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),所有大写的变量都是常量(数字).有人知道如何解决这个问题?我在互联网上找到了许多可能的解决方案,但似乎没有任何工作..

python boids

2
推荐指数
1
解决办法
1120
查看次数

为什么我的四叉树没有提高性能?

我有一个 boids 植绒模拟设置。它最初的工作原理是让每个 boid 循环遍历每个 boid,以便它们都不断地知道彼此的位置,以便判断它们是近还是远,但后来我切换到四叉树设计,以便 boid 只需要遍历实际上就在附近的 boid。然而,它几乎没有对模拟的 FPS 做出任何改进。就好像我还在遍历每一个 boid。

我的实现有什么错误吗?Repo 在这里,相关代码主要在 main.js、quadtree.js 和 boid.js 中。现场直播在这里

javascript complexity-theory quadtree boids

0
推荐指数
1
解决办法
59
查看次数