c# - .Net 中的遗传算法 - 可变染色体 - 外星飞船场景

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

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

“程序”只不过是将由适应度函数评估的函数列表,因此我可以知道什么是最好的“程序”。顺序不适合我,不会影响适应度评价。

我想弄清楚的大问题是,调用的函数列表应该是可变的,例如可变的染色体数。 我有需要调用的函数,带有可变参数,也有可以(可选)调用的函数,也带有可变参数。

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

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

  • 在一个开放的领域,比如一个二维空间,一艘外星飞船需要在尽可能短的时间内从A点到达B点。但是程序不知道B点在哪里。
  • 您可以将开放区域想象成一个网格,就像一个棋盘,但更大 (100X100)。
  • 开阔的 field 可以有障碍物。飞船应该尽量避开。
  • 该程序必须执行一些功能,例如选择飞船模型和加气。
  • 然后飞船可以执行前后左右等功能。
  • 宇宙飞船还可以使用超高速,就像运输工具一样可以到达网格中的任何一点。
  • 可选函数可以被调用多次,但如果它像一种突变一样工作,那就太好了,它只工作 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)]
...

所以我在这里寻求帮助。解决我的问题的最佳方法是什么? 我发现的所有示例都在讨论固定大小的染色体,但在我的问题中,我有多种选择。使用 Heuristiclab 会很棒,因为我可以暂停并继续,因为看到操作正在发生。

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

抱歉发了这么长的帖子。 '哦'

最佳答案

这是一个非常好的教程,介绍了用 javascript 实现的机器学习,它可以引导火箭绕过障碍物。这几乎正​​是您要通过项目实现的目标 https://www.youtube.com/watch?v=bGz7mv2vD6g

详细解释了如何根据适应度设置火箭路径的演化。该算法将值添加到数组中,这些值是火箭为避开障碍物所采取的步骤。

每一轮,每枚火箭的路径数组都会根据上一轮最成功的路径进行更新。随着时间的推移,路径会得到改善。

关于c# - .Net 中的遗传算法 - 可变染色体 - 外星飞船场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46719792/

相关文章:

c# - NLog MappedDiagnosticsLogicalContext 不工作在异步/等待与 ConfigureAwait(false)

c# - Data Contract Serializer - 如何省略集合的外部元素

machine-learning - 如何加载检查点文件并使用略有不同的图形结构继续训练

python - 训练后如何同时获得分数和准确率

c# - 使用 AForge Genetic 库来决定塔防游戏中波浪的生成组成

c# - 如何使用 C# 将带反斜杠的字符串插入到表中

c# - 如何用一定长度的空行初始化DataTable?

tensorflow - Tensorflow 是否可以进行增量学习?

list - 当您将相互链接的对象影响到此列表时如何维护不可变列表

android - 如何在android中应用Straight Skeleton Algorithm