一种非常缓慢收敛的遗传算法

2024-06-10 23:28:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经开始了崇高的努力,让我工作的公司(有点)的高层至少考虑一下ML。我在汽车行业工作,所以我们的大部分“问题”都与寻找汽车重心和前后轮之间的完美距离、理想重量等有关

因此,整个交易可以表述为一个成熟的优化适应度函数。在

实际的功能是这样的:我们有很多测试用例,比如10-15个,测试用例代表100公里/小时的转弯,150公里/小时的车道切换等等。我们有一个通用的测试函数,给定一组或多个参数(如上所述)返回错误百分比。例如:

get_error(test_case = lane_switch_100kph, 
    weight = 2000, // kg
    front_axle_dist = 1.3, // meters
    back_axle_dist = 1.4  // meters
)

这个函数返回一个间隔为[0,100]的浮点值,指定“误差”,当使用这些特定参数时,汽车偏离理想路径的程度。这个误差必须控制在10%以下。在

我构建了一个遗传算法(如果重要的话,我用python语言,使用DEAP库)并用Rastrigin函数进行了测试,一切都很好。对于实际模拟的适应度函数,我使用了所有测试用例的均方误差。在

从理论上讲,这看起来很简单。首先,我需要优化一个只有4个参数的更通用的模拟,所以一个4变量的函数,应该足够简单,遗传算法可以解决,它在100维的Rastrigin表现得很好,所以一个4维函数应该是小菜一碟。在

在这之前的10%的测试是可能的。在

问题在于算法,虽然它确实改善了均方误差,但速度非常慢。对于11个测试用例,初始误差约为10-30%,初始均方误差约为800,算法似乎正处于收敛的最后阶段,从~800缓慢(每代减少1-3毫秒)到大约725-750并在那里收敛。在

我没有对算法做任何优化,因为我认为我会在完成概念证明之后再做。在

我目前的实施细节是:

  1. 正如我所说的4个维度,每个维度都有自己的上限和下限。

  2. 变异是随机选择4个维度中的一个并将其值随机化。

  3. 突变概率为0.3。

  4. 交叉是模拟二进制有界的。

  5. 交叉概率为0.6。

  6. 我做了交叉,然后对人群的随机样本进行突变。

  7. 人口规模约为50人。

  8. 我使用的是锦标赛选择,比赛规模是人口的1/4。

  9. 每3/4代人被选中,1/4代人被新的个体取代。

我计划使用但尚未实现的优化。在

  1. 精英主义。

  2. 使用基于聚类的方法自适应变异参数如下所述:https://matlab1.com/wp-content/uploads/2015/09/Clustering-Based-Adaptive-Crossover-and-Mutation-Probabilities-for-Genetic-Algorithms-matlab1.com_.pdf

我有点困惑,我到底该怎么做,因为算法有点。。。在多次运行中从一开始就陷入一个特定的局部最优,这是我甚至认为不可能发生的事情,也不知道如何修复。任何建议都将不胜感激。提前谢谢!在


Tags: 函数算法参数dist测试用例汽车交叉误差