遗传算法的理论基础
遗传算法是受自然进化理论启发的一系列搜索算法。通过模仿自然选择和繁殖的过程,遗传算法可以为涉及搜索,优化和学习的各种问题提供高质量的解决方案。本章会介绍遗传算法的理论基础
一、遗传算法相比其他启发式算法的优劣
1.使用问题
遗传算法可以有效解决一些非线性、多模型、多目标的NP-Hard问题函数优化问题
不依赖于问题的背景领域,使用方便,连续/离散、单峰/多峰等等各种形式均可
2.模型对比
(1)相比模拟退火,相比良好的全局搜索能力,不易陷入局部最优
(2)相比粒子群算法,常规的遗传算法可直接求解离散问题;而常规的粒子群算法无法求解离散问题
(3)缺点:由于变异是随机的,局部搜索能力差;相对其他算法更耗时、思路复杂抽象;
二、0-1背包问题
1.问题提出
• 将一堆物品尽量塞进一个背包里,使得包内物品总价值最高
• 假设背包容量足够大,但有载重上限,物品太重会被撑破
• 物品无法切割,每个物品只能“放”与“不放”
2.贪心算法求解
(1)方案一:优先装价值大的
• 既然目标是“包内总价值最大”,那优先装价值高的物品?
• 但实际价值高的物品可能重量也很大,背包剩余容重量不足以再放其他物品
• 反而不如多塞几个的低重量低价值物品
(2)方案二:优先装“价值/重量”(性价比)高的?
• 基于上一种方法失效,有人会进一步想到,先装“价值/重量”的来最大化利用承重
• 五个物品的价值/重量:酒(0.5)=表(0.5)=书(0.5)>相机(0.47)>衣服(0.4)
• 该方案仍无法确保求得最优解
• 注意:如果物品可分割(随意切比例来装),那么该方法可求得最优解
(3)方案三:穷举法罗列出所有可能的结果
三、遗传算法求解0-1背包问题
1.模型建立
• 用“0”和“1”表示物品的装包状态
• 一个物品装包状态为0代表没有被装进包中,1代表被装进包中
• 例如“100111001001”代表第1,4,5,6,9,12个物品被装进背包
(1)问题与数学语言的转换
• 每一个物品的装包状态(0或1)作为一个基因
• 问题的一个解:一组12个数构成的数组为一个个体(染色体)
2.算法思路
(1)步骤一:种群初始化
•有N个物品,则随机生成N个数(0或1)构成一个数组,作为一个个体,及可能的解
•重复上一步,生成多个个体,构成种群(解集)
•群体规模太小容易陷入局部最优,太大又会使计算复杂度高费时间,一般设置20到200
(2)选择个体进行运算
• 求每个个体的适应度:把解𝑥带入目标函数求函数值𝑓(𝑥)
• 目的是从第𝑡代群体𝑃(𝑡)中挑选出优良个体,把基因遗传到下一代群体𝑃(𝑡+1)
选择个体的准则
• 1、适应度越高的个体被选中的概率越大
• 2、适应度较低的个体仍有被选中的可能
为什么不直接选适应度最高的几个个体进行后续操作?
• 适应度最高的几个个体,也意味着适应度高度相似
• 往往其基因(解分量)也很相似
• 如果每次都只选适应度最高的个体,意味着每轮迭代所选的个体相似度很高
• 那么后代的相似度也会很高,进化陷入停滞,意味着陷入局部最优解
3.选择个体的方法--轮盘赌法
(1)每个个体被选中概率𝑃(xi)
概率值与其适应度值成正比
(2)计算每个个体对应的累积概率Q(xi)
其为从第1个个体到当前个体的选中概率之和
(3)随机生成一个从0-1的数组bet
随机生成一个数组bet,其中的元素取值在0到1之间,并将元素从小到大排序
(4)选择个体的判断准则
若第𝑖个个体的累积概率𝑞𝑖大于𝑏𝑒𝑡(𝑖),则第𝑖个个体被选中,并更新𝑏𝑒𝑡(𝑖)为𝑏𝑒𝑡(𝑖+1)否则选择第(𝑖+1)个个体与𝑏𝑒𝑡(𝑖)比较,直至选出一个个体为止
重复上述步骤,直至选出与种群数量相等的个体数
用这种方法,可以保证个体适应度值越大,被选中的概率越大
(5)轮盘赌法如何保证判断准则
• 基因好、适应度大使得其对累积概率带来的“增幅”更大
• 类似在轮盘上该个体所占的面积越大,被选中的概率也越大
• 被选择的个体中会有重复
• 因为适应度高的个体被选中概率大而可能被选中多次
• 对应于生物界中基因优良生存能力强的个体可能具有多次交配权
4.交叉运算
• 在被选择的所有个体中,两个个体之间进行交叉操作,即发生基因传递
• 先根据交叉概率判断是否执行交叉操作,一般设置为80%到95%(即较大概率)
• 随机选择进行交叉的位置,例如随机选中第1、3、4、7、8位基因进行交叉:
5.变异运算
• 变异操作是为了利用“不确定性”来赌一把,或许更好,或许更差
• 先判断每个个体的每个基因是否进行变异运算,一般变异概率设为0.5%到5%即可
• 变异运算就是对变异的基因取反,0变1,1变0
6.迭代循环
• 选择交叉变异后得到新一代群体(解集),记录本轮迭代的最优个体和最优适应度
• 重复步骤上述步骤,直至满足终止条件(比如迭代满100次)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!