我是一名博士生,正在尝试将NEAT
算法用作机器人的 Controller ,但我遇到了一些准确性问题。我正在使用python 2.7并为此使用两个NEAT
python实现:
NEAT
:https://github.com/CodeReclaimers/neat-python在Google中进行搜索后,似乎已成功将其用于某些项目中。
multiNEAT
库:http://www.multineat.com/index.html。出现在
NEAT
软件目录的“官方”软件网页上。 在测试第一个时,我发现我的程序迅速收敛到一个解决方案,但是这种解决方案不够精确。由于缺乏精确度,我想说的是,在演化结束时,与“完美”解相关的中位数和平均值的最小偏差为3-5%(取决于问题的复杂性,误差约为10%对于我的解决方案来说是正常的。此外,我可以说,我从来没有看到
NEAT
给出的解决方案与正确的解决方案之间1%以下的错误值)。我必须说,我已经尝试了许多不同的参数组合和配置(这对我来说是个老问题)。因此,我测试了第二个库。
MultiNEAT
库比上一个库更快速,更容易收敛。 (我认为这是由于C++的实现,而不是纯Python造成的),我得到了相似的结果,但是我仍然遇到同样的问题。缺乏准确性。第二个库也具有不同的配置参数,并且我还没有找到它们的适当组合来提高问题的性能。我的问题是:
在
NEAT
结果中缺乏准确性是正常的吗?它实现了很好的解决方案,但不足以控制机器人 ARM ,这就是我要使用的目的。我会写我正在做的事情,以防有人在我解决问题时看到一些概念上或技术上的错误:
为了简化这个问题,我将展示一个非常简单的示例:我有一个非常简单的问题要解决,我想要一个可以计算以下函数的NN:
y = x^2
(使用y=x^3
或y = x^2 + x^3
或类似的函数可以找到类似的结果)我开发该程序所遵循的步骤是:
神经网络的激活函数是S型函数。
xmin = 0.0
和xmax = 10.0
和“X”值:
总量的百分比),验证 sample 和测试 sample
(每个15%)。
进化。人口中的每个人都在所有
训练样本。每个职位的评估为:
eval_pos = xmax-abs(xtarget-xobtained)
个人的适应度是所有列车位置的平均值(我也选择了最小值,但它却使我的表现更差)。
对测试 sample 。这是我获得那些东西的地方
“不精确的值”。此外,在评估过程中,
“abs(xtarget-xobtained)= 0”的最大值为从不
获得。
此外,我认为我处理数据的方式是正确的,因为我使用相同的数据集来训练
Keras
中的神经网络,并且得到的结果比NEAT更好(在1000个历元之后,误差小于1%)具有5个神经元的层)。在这一点上,我想知道发生的事情是否正常,因为我不应该使用数据集来开发 Controller ,所以必须“在线”学习它,并且
NEAT
看起来像是解决我的问题的合适方法。提前致谢。
编辑后:
首先,感谢您的评论尼克。
我将在下面回答您的问题::
NEAT
算法。 尽管本例中的人口规模不是很大,但我在增加个体数量或世代数量的实验中获得了相似的结果。例如,个人和500代中有500个人口。在该实验中,he算法快速收敛到一个解决方案,但是一旦到达该位置,最佳解决方案就会陷入困境,并且不再有任何改进。
正如我在上一篇文章中提到的那样,我已经尝试了使用许多不同参数配置的多个实验……并且图形与上一个显示的大致相同。
此外,我尝试的其他两个实验是:一旦进化达到最大值和中值收敛的点,我将根据具有新配置参数的基因组生成其他种群,其中:
mutation probability
”的权重“mutate weight
”在较低的范围内增加,以便进行稍微修改,以更好地调整权重。 (试图获得与反向传播类似的功能。在权重上进行一些细微的更改)这两个实验没有达到我的预期,并且该种群的最佳基因组也与先前的种群相同。
问候!
最佳答案
免责声明:我为这些库做出了贡献。
您是否尝试过增加人口规模以加快搜索速度并增加世代数?我将其用于交易任务,并且通过增加人口规模,我的拥护者很快就找到了。
要考虑的另一件事是在健身功能中应用您自己的加权罚分和奖赏,这样可以很快消除掉所有不很接近的事物,并更快地找到正确的基因组。应该注意的是,整洁的人使用适应性函数来学习而不是梯度下降,因此它不会以相同的方式收敛,并且可能需要训练更长的时间。
最后一个问题,您使用的是hyperneat algo
中的整洁代码还是multineat
?
关于python - NEAT算法结果精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53611858/