遗传算法
一直觉得遗传算法高大上,然后都不明觉厉,决定还是要学习下这个优化算法。
遗传算法主要是模拟我们高中学的染色体变异、染色体交叉等过程,然后通过优胜劣汰获得最优解。
遗传算法中,一个基本单位为“个体”,一个种群(系统)中拥有好多个体。每个个体携带两个内容:染色体与适应度。以羊群举例
整个牧场 -> 一个种群
一头羊->一个个体
某头羊决定肥瘦程度的染色体->该个体的染色体(模型中所有变量构成一条染色体,每个变量就是染色体上一个基因)
肥瘦程度->适应度(每个个体的适应度就相当于这个模型在“这个染色体的变量的值下的解”,评价模型的最优解)
目标->养出最肥的羊(寻找最优解,从中挑出来最大的适应度,它就是在当前情况下的最优解)
遗传算法流程:
一次迭代包括以下几个过程:
- 染色体变异。即改变某个染色体的值;适应度越优的个体染色体变化范围越小,通过一个随机数让染色体值变化
- 染色体交叉。任意选择两个染色体交换部分基因;随机选择一对节点,相互交换对应的值即可
- 计算适应度。计算每个染色体在当前迭代下对应的适应度。
- 优胜劣汰。杀死排名最后的那个个体。杀死之后种群数量就变少了,所以就必须要让比较优良的个体多生点来把种群数量补回来。
GA的目标函数和限制条件都要人为根据业务场景调整
视频参考:https://morvanzhou.github.io/tutorials/machine-learning/evolutionary-algorithm/2-01-genetic-algorithm/