遗传算法学习笔记

遗传算法是一种模拟生物进化过程的优化算法,通过适者生存原则生成并迭代多个群体。在每个迭代过程中,染色体经过交叉变异产生新个体,并保留最优个体。编码方式包括十进制、格雷码和二进制等,如排班问题中,可使用二进制编码表示人员分配。约束条件在每次迭代后检查,确保满足问题限制,如排班问题中班次人数的上限。遗传算法通过不断迭代最终找到最佳解决方案。
摘要由CSDN通过智能技术生成

关于遗传算法,一般使用它做优化类的问题。

参考视频:

【数之道14】六分钟时间,带你走近遗传算法_哔哩哔哩_bilibili

下面我们说下什么是遗传算法,遗传算法是模仿生物学中生物进化的一种算法。

就是说,适者生存

所以,在实际模拟中就可以生成多个群体-染色体;

然后这些染色体可以交叉 变异 不断产生新的个体,每次迭代中记录下最优的个体,然后不断的进行迭代,最后找到多轮迭代中搜索到的最佳个体,作为求解的结果。

an对于标准遗传算法来讲步骤都是规定好的,所以按照下面流程操做即可 

对于不同类型的问题最重要的是解决编码问题:

如:

  1. 确定编码方式
  2. 如何设计编码
  3. 确定约束条件
  4. 如何实现约束

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...];

以确保每个班次数与之一致,但是约束时可以灵活处理,这个位主不做赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值