遗传算法在.Net - 变量染色体 - 外来飞船场景

时间:2017-10-12 22:23:23

标签: c# machine-learning genetic-algorithm heuristics genetic-programming

我想实现编写程序的遗传算法,试图解决特定问题。

'程序'只是一个由健身功能评估的功能列表,所以我可以知道什么是最好的'程序'。这个序列不适合我,不会影响健康评估。

我想弄清楚的是 BIG CATCH ,所调用的函数列表应该是可变的,就像变量cromossomes number 一样。 我有需要调用的函数,带有可变参数,以及调用COULD(可选)的函数,以及可变参数。

我已经找到了那些优秀的GA框架,但我对遗传编程真的很陌生,我不知道用于解决这个问题的最佳框架是什么:

所以,想象一下这个问题:

  • 在开阔的场地中,像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}]}
        ]
}

所以cromossome可能很简单,因为它很复杂:

- [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)]
...

所以我在这里寻求帮助。解决问题的最佳方法是什么? 我发现的所有例子都谈到了固定大小的cromossomes,但在我的问题中我有不同数量的选项。使用Heuristiclab会很棒,因为我可以停下来继续,看看操作是否正在发生。

非常感谢你,如果你读到这里!!!

对不起,很长的帖子。 'O'

1 个答案:

答案 0 :(得分:0)

这是一个关于javascript中机器学习实现的非常好的教程,它引导火箭绕过障碍物。这正是您尝试使用项目https://www.youtube.com/watch?v=bGz7mv2vD6g

实现的目标

它详细解释了如何基于适应度建立火箭路径的演变。该算法将值添加到阵列中,这是火箭队为避免障碍而采取的步骤。

每一轮,每枚火箭的路径阵列都会根据上一轮最成功的火箭进行更新。随着时间的推移,路径会有所改善。