通过遗传算法生成代码
问题内容:
进化编程似乎是解决许多优化问题的好方法。这个想法很容易,实现也不会造成问题。
我想知道是否有任何方法可以用ruby / python脚本(或任何其他语言)逐步创建程序?
这个想法很简单:
- 创建大量程序
- 执行遗传操作(轮盘选择或其他选择),从最佳程序继承来创建新程序,等等。
- 循环点2,直到找到满足我们条件的程序
但是仍然存在一些问题:
- 染色体将如何表示?例如,染色体的一个单元格应该是一行代码吗?
- 染色体如何产生?如果它们将是代码行,那么我们如何生成它们以确保它们在语法上是正确的,等等?
可以生成的程序示例:
创建以N个数字作为输入并返回其平均值作为输出的脚本。
如果有尝试创建此类算法的尝试,我将很高兴看到任何链接/源。
问题答案:
如果确定要执行此操作,则需要遗传编程,而不是遗传算法。GP使您可以开发树状程序。您要做的就是给它一些基本操作(while($ register),read($
register),increment($ register),decrement($ register),divide($ result $
numerator $ denominator),print ,progn2(这是GP的“顺序执行两个命令”的意思)。
您可以产生以下内容:
progn2(
progn2(
read($1)
while($1
progn2(
while($1
progn2( #add the input to the total
increment($2)
decrement($1)
)
)
progn2( #increment number of values entered, read again
increment($3)
read($1)
)
)
)
)
progn2( #calculate result
divide($1 $2 $3)
print($1)
)
)
您将使用健身功能与实际解决方案有多接近。捕获量就在其中,无论如何您都必须按照传统方式进行计算*。然后有一些东西可以(您选择的语言)将其翻译成代码。请注意,由于其中存在潜在的无限循环,您将不得不在一段时间后中断执行(无法解决暂停问题),并且可能无法正常工作。哎呀
还要注意,我提供的代码将尝试除以零。
*有很多解决方法,但是通常情况并非遥不可及。