【问题标题】:Ant colony behavior using genetic programming使用遗传编程的蚁群行为
【发布时间】:2011-10-03 05:58:15
【问题描述】:

正如 Koza here 所述,我正在研究能够使用基因编程进行食物觅食行为的进化蚂蚁。每个时间步,我循环遍历每只蚂蚁,执行它的计算机程序(同一个程序被蚁群中的所有蚂蚁使用)。目前,我已经定义了简单的指令,如MOVE-ONE-STEPTURN-LEFTTURN-RIGHT 等。但我还有一个函数PROGN,它可以按顺序执行参数。我遇到的问题是因为PROGN 可以按顺序执行指令,这意味着蚂蚁可以在一个时间步内执行多个操作。与自然不同,我不能让蚂蚁并行运行,这意味着一只蚂蚁可能会去执行多个动作,操纵环境,而所有其他蚂蚁都在等待轮到他们。

我只是想知道,这是通常的做法,还是有更好的方法? Koza 似乎没有提及任何关于它的事情。问题是,我想扩展场景以拥有其他代理(例如敌人),这可能依赖于在单个时间步中仅发生一次的事情。

【问题讨论】:

  • 澄清一下:PROGN 是一组指令。目前,PROGN 中的所有指令都在一个时间步中运行,但PROGN 程序中的 n 指令最好在 n 中运行时间步长。这个总结正确吗?

标签: genetic-algorithm genetic-programming evolutionary-algorithm ant-colony


【解决方案1】:

我不熟悉 Koza 的工作,但我认为合理的方法是为每只蚂蚁分配一个跨时间步长的指令队列。通过这样做,您可以让蚂蚁在每个时间步执行一条指令PROGN 函数。例如,蚂蚁时间步长的高级逻辑可以是:

Do-Time-Step(ant):
1. if ant.Q is empty:  // then put the next instruction(s) into the queue
2.     instructions <- ant.Get-Next-Instructions()
3.     for instruction in instructions:
4.         ant.Q.enqueue(instruction)
5.     end for
6. end if
7. instruction <- ant.Q.dequeue()  // get the next instruction in the queue
8. ant.execute(instruction)        // have that ant do its job

【讨论】:

    【解决方案2】:

    对指令进行排队的另一种类似方法是预处理指令集,并将 PROGN 的实例扩展为组件指令集。如果您允许 PROGN 调用其他 PROGN,则必须递归完成。这样做的缺点是候选程序有点臃肿,但这只是在运行时。另一方面,它很容易、快速并且很容易调试。

    示例: 说 PROGN1 = {inst-p1 inst-p2}

    然后候选程序将以 {inst1 PROGN1 inst2} 开始,并在准备好在模拟中进行评估时扩展为 {inst1 inst-p1 inst-p2 inst2}。

    【讨论】:

      【解决方案3】:

      这完全取决于您的特定 GP 实施。

      在我的 GP 中,内核程序要么被重复评估,要么被并行评估——作为一个整体,即这种情况下的“原子”操作是单个程序评估。 因此,在评估下一个程序之前,种群中的所有个体都依次重复 n 次,或者所有个体只执行一次,然后再执行 n 次。

      我在使用这种并发级别的虚拟代理方面取得了非常好的结果。 绝对有可能进一步分解它,但是在这一点上,您会降低算法的可扩展性:

      虽然在多个 CPU 或内核之间分配程序评估很容易,但由于所有程序之间需要大量同步,因此对每个节点评估几乎毫无价值。

      鉴于现代系统(甚至智能手机)中 CPU/内核数量的迅速增加以及 GP 的“CPU 需求”,您可能需要重新考虑您的方法 - 您真的想在程序中包含移动/转向指令吗?

      为什么不重新设计它以使用在程序评估期间将方向和速度参数存储在某些寄存器/变量中的原语? 然后,模拟步骤根据程序存储的指令使用这些参数实际移动/转动您的代理。

      1. 评估程序(并行)
      2. 执行模拟
      3. 重复n次
      4. 评估适应度、选择、...

      干杯, 周杰伦

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 2011-10-23
        • 2014-11-25
        • 2011-09-13
        • 2023-03-28
        • 1970-01-01
        • 2011-07-09
        • 2010-10-31
        • 1970-01-01
        相关资源
        最近更新 更多