遗传算法01背包问题作业



前言

最近学习遗传算法,遇到一个经典背包问题,由于初学,可能有些问题未发现,还请大家批评指正 邮箱 313947881@qq.com


提示:以下是本篇文章正文内容

一、关于遗传算法

具体概念就不解释了。

二、问题综述

现有物品10个,
质量分别为 15 18 17 9 7 11 6 8 2 4
价值分别为 11 12 9 8 12 14 8 12 7 8
背包限重60,求最大价值

1.解决步骤

现设计染色体(个体)数量为50,基因长度为10
故随机生成50*10的仅有0 ,1元素的矩阵

种群初始化代码(matlab):

pop=round(rand(popsize,chromlength)); 

2.循环迭代

1.计算种群价值,并将超重个体替换为最优个体
2.采用轮盘赌法选择个体
轮盘法原理:
选择算法 — 轮盘赌法选择

(1)原理:

出现概率越大,其在所占区域的范围越大被选中的概率越大

(2)步骤:

①计算适应度比例,即每个个体的选择概率
②计算每个个体的累积概率,相当于转盘上的“跨度”,“跨度”越大越容易选中,即每个个体之前所有个体的选择概率之和。
③随机生成0到1之间的小数x,若x>qi,则选择个体i
代码如下(matlab):

	function i=RouletteWheelSelection(P)    
	r=rand;        
	C=cumsum(P);        
	i=find(r<=C,1,'first');end

3.交叉

交叉(crossover),群体中的每个个体之间都以一定的概率 pc 交叉,即两个个体从各自字符串的某一位置(一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。例如,假设2个父代个体x1,x2为:
x1=0100110
x2=1010001
从每个个体的第3位开始交叉,交又后得到2个新的子代个体y1,y2分别为:
y1=0100001
y2=1010110
这样2个子代个体就分别具有了2个父代个体的某些特征。利用交又我们有可能由父代个体在子代组合成具有更高适合度的个体。

4.变异

变异(mutation),基因的突变普遍存在于生物的进化过程中。变异是指父代中的每个个体的每一位都以概率 pm 翻转,即由“1”变为“0”,或由“0”变为“1”。遗传算法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以 在一定程度上 求得全局最优解。

5.重新计算

重新计算种群价值,并将超重个体替换为最优个体

6.求出群体中最大得适应值及其个体


源码地址

遗传算法求解0-1背包问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值