gpt4 book ai didi

c++ - C++代码设计中的多代理系统

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:43 25 4
gpt4 key购买 nike

我有一个用 C++ 编写的模拟,我需要在其中维护可变数量的代理,但我无法决定如何很好地实现它。每个代理看起来都类似于:

class Agent{
public:
Vector2f pos;
float health;
float data[DATASIZE];
vector<Rule> rules;
}

我需要在我的模拟中维护可变数量的代理,这样:

  1. 优选地,代理的数量没有上限
  2. 我可以轻松添加代理
  3. 我可以在某些情况下(比如健康<0)轻松移除任何代理
  4. 我可以轻松地迭代所有代理并做一些事情(比如健康--)
  5. 最好,我可以使用 openMP 并行处理工作,因为许多更新都有些昂贵,但完全独立于其他代理。
  6. (编辑)代理的顺序根本不重要

我应该为代理使用什么样的容器或设计原则?直到现在我一直在使用 vector ,但我认为很难从这个结构中删除:我需要经常做的事情,因为事情总是会消亡。我应该考虑其他选择吗?我想到了类似 List 的东西,但我认为它们不能并行化,因为它们是作为带有迭代器对象的链表实现的?

谢谢

最佳答案

您可以在特工死后将其留在列表中,以备重新使用。不用担心缩小你的容器,你保留了 vector 的好处。您可以保留一个单独的指针堆栈,指向死的/可重用的代理,只需在代理死亡时插入它,弹出一个指针以回收新代理。

foreach Agent {
if (agent.health > 0) // skip dead agents
process rules

关于c++ - C++代码设计中的多代理系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3603465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com