我已经开始了一项崇高的努力,那就是让我所从事的公司的(某种)更高的发展至少考虑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并收敛于此。
我没有对算法进行任何优化,因为我认为在完成概念验证后我会这样做。
我当前的实施细节是:
我说过的4个维度,每个维度都有自己的上下边界。
变异是从四个维度中随机选择一个,并将其值随机化。
突变概率为0.3。
交叉点是模拟二进制有界的。
交叉概率为0.6。
我先进行交叉,然后对总体的随机样本进行突变。
人口规模约为50。
我正在使用锦标赛选择,比赛规模为人口的1/4。
每一代中的3/4都会被选中,其中1/4被新的个体替换。
我计划使用但尚未实现的优化。
精英主义。
使用基于聚类的方法的自适应突变参数,如下所述:https://matlab1.com/wp-content/uploads/2015/09/Clustering-Based-Adaptive-Crossover-and-Mutation-Probabilities-for-Genetic-Algorithms-matlab1.com_.pdf
我对算法的精确执行方式感到困惑……从一开始就多次陷入特定的局部最优状态,这是我什至没有想到的事情,也不知道如何实现修理。任何建议将不胜感激。预先感谢!