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

kar*_*thy 4 c++ containers design-patterns multi-agent openmp

我有一个用C++编写的模拟,我需要维护可变数量的代理,而我在确定如何很好地实现它时遇到了麻烦.每个代理看起来类似于:

class Agent{
public:
    Vector2f pos;
    float health;
    float data[DATASIZE];
    vector<Rule> rules;
}
Run Code Online (Sandbox Code Playgroud)

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

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

我应该为代理商使用什么样的容器或设计原则?直到现在我才使用矢量,但我认为很难从这个结构中抹去:我需要经常做的事情,因为事情总是在死.我应该看看有什么选择吗?我想过像List这样的东西,但我不认为它们可以并行化,因为它们是作为带有迭代器对象的链表实现的?

谢谢

Gra*_*rks 5

您可以在停止时将代理留在列表中,准备重新使用.不用担心缩小容器,而是保留了矢量的好处.您可以保留一个指向死/可重用代理的单独指针堆栈,只需在代理程序死亡时将其推送到其中,然后弹出一个指针以回收新代理程序.

foreach Agent {
    if (agent.health > 0) // skip dead agents
        process rules
Run Code Online (Sandbox Code Playgroud)