我已经阅读了很多关于遗传编程及其应用的论文,特别是“遗传编程:介绍和教程,技术和应用调查”的第 10 章(Langdon,Poli,McPhee,Koza;2008)不幸的是,我无法理解如何将基因编程应用于机器人技术,例如路径规划。
谁能用最简单的方式解释这一点?我知道这一切都取决于适应度函数。
我已经阅读了很多关于遗传编程及其应用的论文,特别是“遗传编程:介绍和教程,技术和应用调查”的第 10 章(Langdon,Poli,McPhee,Koza;2008)不幸的是,我无法理解如何将基因编程应用于机器人技术,例如路径规划。
谁能用最简单的方式解释这一点?我知道这一切都取决于适应度函数。
拿一个机器人,我们希望它能够从一个充满随机孔的 4x4 矩阵的右下角移动到左上角,它应该避免。用 1 表示孔,它可能看起来像:
exit
\/
[0,0,0,1]
[0,1,1,0]
[0,1,1,1]
[0,0,0,0]
/\
enter
当我们希望它从一开始就到达出口时,我们有一个自然的适应度函数:以最少的移动次数接近出口。
解决这个问题的遗传编程方法是创建随机计算机程序(链接的第二章很好地介绍了这个过程的树状性质)并让它们松动。这些策略中的绝大多数将/非常糟糕,例如“向右走一次”或“向左走十次”。
假设我们在第一次运行时制作了 100 个随机程序。我们首先根据我们的适应度函数(表现最好的随机程序)对他们的表现进行评分。我们取其中的一部分来生存并摆脱其余的,比如说 10% 生存。
我们将这些幸存的 10% 表现最好的程序,并通过再次随机修改它们来为下一代创建新程序,但不是完全修改。假设我们随机修改了它们的一半结构,而将另一半保留下来,不管我们想要下一代多少。我们现在让这一代再次松动,再次排名、得分、获得前 10% 并从中培育出新一代,依此类推,持续 n 代。
在这种情况下,如果我们说让网格保持原样,程序通常会提出一个大致类似于“向左 x4,向上 x4) 的规则,因为它以最简单的方式解决了这个问题,但如果我们说,在这个进化过程中不断随机化 1 在网格中的位置,我们将强制程序提出更通用的规则,例如检查它可以移动 1 的单元格,而不是移动到任何包含 1 的空间等。
因此,我们可以构建一个具有灵活策略的程序,能够在孔的数量/配置方面为我们的机器人应对不同的环境——这比必须为每个配置都进行编程要有用得多。
就像常规进化一样,经过数百万次试验,对表现最好的人进行轻微修改,这些程序变得非常专业和高性能,能够解决高度复杂的游戏、具有高度复杂特征的路径等。