我想实现一种遗传算法来编写程序,以尝试解决特定问题。
“程序”只不过是将由适应性功能评估的功能列表,因此我可以知道什么是最好的“程序”。该序列对我而言并不复杂,不会影响适合度评估。
我要弄清楚的BIG CATCH是,调用的函数列表应该是可变的,就像可变的cromossomes数字一样。
我有需要使用可变参数来调用的函数,也可以使用可变参数来调用COULD(可选)的函数。
我已经找到了那些很棒的GA框架,但是对于基因编程我真的很陌生,我不知道什么是解决这个问题的最佳框架:
https://github.com/giacomelli/GeneticSharp
https://dev.heuristiclab.com
http://evolute-csharp.sourceforge.net/
因此,想象一下这个问题:
在2D空间之类的开放领域中,外星飞船需要在尽可能短的时间内从点A到达点B。但是程序不知道B点在哪里。
您可以将空旷的区域想象成一个像棋盘一样的网格,但是更大(100X100)。
空旷的地方可能会有障碍。飞船应尽量避免。
该程序必须执行某些功能,例如选择飞船的型号并填充气体。
然后,飞船可以执行诸如前进,后退,左移和右移等功能。
飞船还可以使用超高速,就像将其传输到网格中的任何点一样。
可选功能可以被调用多次,但是,如果它像一种突变一样起作用,那么这种功能只有5%的效果会很棒。
使用的所有功能和参数都会影响适应性评估。
功能的顺序不影响适应性评估。
为了更好地理解,如果我可以将我的INPUT描述为JSON,则将如下所示:
{
"FixedFunctions":[
{"Name":"ChooseModel", "Parameters":[{"Name":"Type", "MinValue":1, "MaxValue":5,"Step":1}]},
{"Name":"FillUp", "Parameters":[{"Name":"Litters", "MinValue":1, "MaxValue":100,"Step":2}]}
]
"OptionalFunctions":[
{"Name":"GoFront", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":50,"Step":5}]},
{"Name":"GoBack", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":50,"Step":2}]},
{"Name":"GoRight", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":25,"Step":2}]},
{"Name":"GoLeft", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":25,"Step":2}]},
{"Name":"HyperTeleport", "Parameters":[
{"Name":"PointX", "MinValue":1, "MaxValue":100,"Step":2},
{"Name":"PointY", "MinValue":1, "MaxValue":100,"Step":2}]}
]
}
因此,crocrosome可能很简单,也很复杂:
- [ChooseModel(1), FillUp(30), HyperTeleport(3,5), GoBack(50)]
- [ChooseModel(3), FillUp(60), HyperTeleport(20,50), GoRight(2)]
- [ChooseModel(4), FillUp(40), GoFront(10), GoRight(2), GoLeft(30), GoBack(80), HyperTeleport(20,30), GoRight(5)]
...
所以我在这里寻求帮助。解决我的问题的最佳方法是什么?
我发现的所有示例都谈论固定大小的cromossome,但是在我的问题中,我有多种选择。使用Heuristiclab真是太棒了,因为我可以暂停并继续进行操作(见操作即将开始)。
如果您阅读到这里,非常感谢!!!
抱歉,很长的帖子。 'O'
最佳答案
这是一个很好的关于使用javascript进行机器学习的教程,它可以引导火箭绕过障碍物。这正是您要在项目https://www.youtube.com/watch?v=bGz7mv2vD6g中实现的目标
它详细说明了如何根据适应性来设置火箭路径的演变。该算法将值添加到数组中,这是火箭为避开障碍物而采取的步骤。
每回合,将根据上一回合中最成功的火箭来更新每个火箭的路径阵列。随着时间的流逝,路径会不断改善。
关于c# - .Net可变染色体-外星飞船场景中的遗传算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46719792/