13

我正在编写一个基因编程 (GP) 系统(用 C 语言,但这是一个小细节)。我读过很多文献(Koza、Poli、Langdon、Banzhaf、Brameier 等),但有些实现细节我从未见过解释。例如:

我使用的是稳态人口而不是世代相传的方法,主要是为了使用计算机的所有内存,而不是为临时人口保留一半。

Q1。在 GP 中,与 GA 不同,当您执行交叉时,您选择两个父母,但您是创建一个或两个孩子,还是您可以自由选择?

Q2。在稳态 GP 中,与世代系统相反,交叉创建的孩子取代了人口中的哪些成员?这是我没看到讨论过的。是两个父母,还是另外两个随机选择的成员?如果是后者,我可以理解,您可能会使用负锦标赛选择来选择替换成员,但这不会造成过早收敛吗?(在交叉事件之后,人口包含两个原始父母加上这些父母的两个孩子,另外两个随机成员被删除。精英主义是固有的。)

Q3。是否有专门针对 GP 的网络论坛或邮件列表?奇怪的是我还没有找到。雅虎的 GP 组几乎只用于发布公告,Poli/Langdon Field Guide 论坛几乎保持沉默,而像 gamedev.net 这样的通用/游戏编程网站上的 GP 讨论非常基础。

感谢您的任何帮助,您可以提供!

4

8 回答 8

8

首先,放松。

GP 中没有“正确”的方法。GP 更多的是艺术而不是科学。尝试很多方案并选择最有效的方案。

Q1:1、2 或许多。你选。

Q2:替换,1、2,全部。或者尝试一些精英主义。

Q3:您可能找不到讨论这些问题的论坛,因为没有正确/最佳答案。对不起。

PS。在我的研究中,交叉从未真正表现良好......

于 2010-01-12T08:54:23.710 回答
1

如果你能读懂 Python,你可能想看看Pyevolve。我主要在 GA 方面参与它,但它也支持 GP。也许你可以在那里得到一些提示。

于 2010-01-12T14:00:56.870 回答
1

Q1 是您的选择,但独生子女可能更常见。每次你做父母的抽签选择时,你都在施加选择压力,这就是你想要的。

Q2:消极的锦标赛选择是正确的方法。是的,失去低适应度的人群最初会导致快速收敛,但是一旦您的人群进入解决方案空间中难以搜索的部分,哪些人会输掉比赛就不会那么简单了/彩票。您必须提防的是基因库的停滞;我建议监测基因组的熵以追踪其异质性。“精英主义是与生俱来的”——嗯,是的,这就是重点!;-)

Q3:comp.ai.genetic 可能是你最好的选择。有时这个话题会出现在游戏开发论坛上,比如 Gamasutra。

PS C 中的遗传编程?!?你如何保证后代的生存能力?用非同音语言进行基因编程是一个真正的挑战。

于 2010-01-24T00:43:33.220 回答
1

查看MetaOptimize.com以满足您的堆叠需求。

于 2010-10-11T13:02:38.137 回答
0

I would create an unlimited number of offspring, but only on the basis of success, and let older members of the population die. Lack of fitness can also lead to early death. This just seems to follow a natural order.

于 2011-06-19T01:43:44.417 回答
0
  1. As Ray, says, it's mostly up to you but typically in a steady-state setup you would only create a single offspring.

  2. Again you have options. I wouldn't replace the parents. If they've been picked as parents based on their fitness you could be eliminating some of the fittest members of the population. Easiest is just to randomly pick an individual to be replaced. Alternatively, you could replace the least fit individual, but that can lead to premature convergence. Another option is to use the same selection strategy that you use to choose parents but use the inverse fitness so that it favours less fit individuals.

  3. You could try comp.ai.genetic on USENET (and Google Groups).

于 2010-01-12T11:32:05.243 回答
0

听起来您的一些问题不一定特定于基因编程;如果那是真的,您可能会碰巧向NEAT 用户组的人们询问。

他们主要讨论增强拓扑(或 NEAT)算法的神经进化,这是一种用于进化神经网络的遗传算法。但是像精英主义和交叉策略这样的主题非常笼统,可以适用于 GA 和 GP 算法。

否则,正如 Dan 和 Ray 所说,很多这些决定都是在对一个特定的软件和领域进行实验之后做出的。尝试将你的算法应用于不同的问题,并注意它的行为——一段时间后,你可能会对什么有效,什么无效有了直觉。

于 2010-01-12T20:20:29.213 回答
0
Q1. In GP, as opposed to GA, when you perform crossover you select two parents but 
do you create one child or two, or is that a free choice you have?

是的,这是您的选择;但一般来说,创建具有相同父母的多个个体是不可取的,因为由同一父母创建的个体趋势之间的差异将非常有限,并且可能会花费处理速度和内存,而这可能会花费在显示不同趋势的其他个体上以及需要分析的行为(但如果进化过程接近其终点,那么创造更多个体就不是问题)。

Q2. In steady state GP...

建议根据您采用的适应度函数提供的排名替换个人。

于 2014-05-12T10:14:12.360 回答