遗传算法01背包问题作业


文章目录

  • 前言
  • 一、关于遗传算法
  • 二、问题综述
    • 1.解决步骤
    • 2.循环迭代
    • (1)原理:
    • (2)步骤:
    • 3.交叉
    • 4.变异
    • 5.重新计算
    • 6.求出群体中最大得适应值及其个体
  • 源码地址


前言

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


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

一、关于遗传算法

具体概念就不解释了。

二、问题综述

现有物品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背包问题

你可能感兴趣的:(杂项,算法)