前言
在很多问题上是没有标准解的,我们要找到最优解。
这就用到了遗传算法。
遗传算法是一种通过模拟自然进化过程来解决问题的优化算法。
它在许多领域和场景中都有广泛应用。以下是一些常见的使用遗传算法的场景:
优化问题:遗传算法可以应用于各种优化问题,如工程设计、物流优化、路径规划、参数调优等。
它可以帮助找到最优或接近最优解,解决复杂的多目标优化问题。
机器学习:遗传算法可以用于机器学习的特征选择和参数调优。
例如,使用遗传算法来选择最佳特征组合,或者通过遗传算法搜索最佳参数配置以提高机器学习算法的性能。
调度和排程问题:遗传算法可以应用于解决调度和排程问题,如作业车间调度、员工排班、交通信号优化等。
它可以找到最佳的任务分配和调度策略,从而提高效率和降低成本。
约束满足问题:遗传算法可以用于解决约束满足问题,如布尔满足问题(SAT)、旅行商问题(TSP)等。
它可以搜索解空间,寻找满足所有约束条件的最优解或近似最优解。
数据挖掘和模式识别:遗传算法可以应用于数据挖掘和模式识别任务,如聚类、分类、回归等。
它可以通过优化模型参数或搜索特征组合,提高模型的性能和泛化能力。
概要
基因 ( Gene ) :一个遗传因子。
染色体 ( Chromosome ) :包含一组的基因。
遗传与变异:新个体会遗传父母双方各一部分的基因,同时有一定的概率发生基因变异。
简单说来就是:
繁殖过程,会发生基因交叉( Crossover ) ,基因突变 ( Mutation ) ,适应度( Fitness )低的个体会被逐步淘汰,而适应度高的个体会越来越多。那么经过N代的自然选择后,保存下来的个体都是适应度很高的,其中很可能包含史上产生的适应度最高的那个个体。
我们首先要生成N个祖先染色体,N大于1。
从中选择X个染色体,进行繁殖下一代,繁殖过程有两种:交叉和变异。
- 交叉:选择的染色体和另一个替换基因。
- 变异:选择的染色体自己发生变异。
从中选择最优的N个染色体继续繁殖,达到设置的繁殖代数后,获取适应度最高的个体。
需要注意的是
繁殖次数内不一定找到最优的解,繁殖的次数越多找到最优解的可能越高。
示例
假如我们的原始数组是[1, 9, 2, 6, 7, 5]
,我们想要数组和目标数组更类似[1, 9, 2, 6, 7, 5]
。
所以数组的适应度可以用数组的每一项想减的绝对值相加,值越小适应度越高。
首先产生祖先数组
最后一列是计算的适应度。
这里生成了10个祖先染色体。
每次繁殖的时候,新的染色体添加到祖先数组后,按适应度排序,再保留前10个最优的。
这里加了个退出条件,当适应度一直不变达到一定数量的时候,就退出。
代码示例:
1 | <template> |