关于遗传算法,一般使用它做优化类的问题。
参考视频:
【数之道14】六分钟时间,带你走近遗传算法_哔哩哔哩_bilibili
下面我们说下什么是遗传算法,遗传算法是模仿生物学中生物进化的一种算法。
就是说,适者生存
所以,在实际模拟中就可以生成多个群体-染色体;
然后这些染色体可以交叉 变异 不断产生新的个体,每次迭代中记录下最优的个体,然后不断的进行迭代,最后找到多轮迭代中搜索到的最佳个体,作为求解的结果。
an对于标准遗传算法来讲步骤都是规定好的,所以按照下面流程操做即可
对于不同类型的问题最重要的是解决编码问题:
如:
- 确定编码方式
- 如何设计编码
- 确定约束条件
- 如何实现约束
1、编码方式可以按照规格选择如下方式:
十进制 格雷码 二进制
0 0000 0000
1 0001 0001
2 0011 0010
3 0010 0011
4 0110 0100
5 0111 0101
6 0101 0110
7 0100 0111
8 1100 1000
9 1101 1001
10 1111 1010
2、如何设计编码
如排班问题中,有M个班次需要排人,然后需要排班的人员个数是N
可以使用一种简单的排班方式为:编码使用二进制编码,长度为 N*M
每N个编码作为一组(一班次)
每个bit 代表N个人员中哪些参与了排班,参与为1,不参与为0.
3、确定约束条件
对于编码来讲一般都是存在约束的,所以这个时候需要在每次产生群体后,再执行一遍约束条件
如:排班问题中每个班次最多有多少人,这个需要约束
不能多也不能少;
所以这个时候加个 stList 进行相对的约束
stList=[ 2 3 4 5...];
以确保每个班次数与之一致,但是约束时可以灵活处理,这个位主不做赘述。