遗传算法会以极低的最优值很快收敛,并且非常缓慢

时间:2018-09-03 09:19:54

标签: python machine-learning mathematical-optimization genetic-algorithm nonlinear-optimization

我已经开始了一项崇高的努力,那就是让我所从事的公司的(某种)更高的发展至少考虑ML。我从事汽车行业工作,因此我们的大部分“问题”都与找到汽车重心与其前后轮之间的理想距离,理想重量等有关。

因此,可以将整个交易公式化为适合优化的适应度函数。

实际功能是这样的:我们得到了许多测试用例,比如说10-15,代表以100 kph转弯,以150 kph进行车道切换的测试用例,等等。我们有一个通用的测试函数,给定集合或参数(如上所述)返回错误百分比。例如:

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%以下。

我整理了一个遗传算法(如果重要的话,我使用DEAP库在python中完成了该算法),并使用Rastrigin函数进行了测试,一切都很棒。对于实际模拟的适应度函数,我使用了所有测试用例的平方误差平均值。

在纸面上,这看起来很简单。首先,我需要优化一个更通用的模拟,该模拟只有4个参数,因此需要一个4变量函数,对于遗传算法来说,这应该足够简单,在Rastrigin的100个维度上效果很好,因此应该将4维函数小菜一碟。

这个特殊的模型已经在几周前手工完成,所有测试用例的误差都可能低于10%。

问题是算法,尽管它确实提高了均方误差,但它的执行速度非常慢。对于11个测试用例,初始误差大约为10-30%,初始MSE大约为800,该算法似乎正处于收敛的最后阶段,缓慢地从800左右降低(每代降低1-3 MSE)达到约725-750并收敛于此。

我没有对算法进行任何优化,因为我认为在完成概念验证后我会这样做。

我当前的实施细节是:

  1. 我说过的4个维度,每个维度都有自己的上下边界。

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

  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

我对算法的精确执行方式感到困惑……从一开始就多次陷入特定的局部最优状态,这是我什至没有想到的事情,也不知道如何实现修理。任何建议将不胜感激。预先感谢!

0 个答案:

没有答案