0_1背包问题的遗传算法求解及其改进

合集下载

遗传算法解决01背包问题

遗传算法解决01背包问题

遗传算法解决01背包问题2015 ~2016 学年第二学期学生姓名专业学号2016年 6 月目录一:问题描述 (3)二:遗传算法原理及特点 (3)三:背包问题的遗传算法求解 (3)1.文字描述 (3)2.遗传算法中的抽象概念在背包问题的具体化 (3)3.算法求解的基本步骤 (4)四:算法实现 (4)1.数据结构 (4)2.部分代码 (5)五:结论 (8)六:参考文献 (8)一、问题描述0-1背包问题属于组合优化问题的一个例子,求解0-1背包问题的过程可以被视作在很多可行解当中求解一个最优解。

01背包问题的一般描述如下:给定n个物品和一个背包,物品i的重量为Wi,其价值为Vi,背包的容量为C。

问应如何选择合适的物品装入背包,使得背包中装入的物品的总价值最大。

注意的一点是,背包内的物品的重量之和不能大于背包的容量C。

在选择装入背包的物品时,对每种物品i只有两种选择:即装入背包或者不装入背包,不能讲物品i装入背包多次,也不能只装入部分的物品,称此类问题为0/1背包问题。

二、遗传算法原理及特点遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

遗传算法有着鲜明的优点:(1)遗传算法的操作对象是一组可行解,而非单个可行解;搜索轨道有多条,而非单条,因而具有良好的并行性.(2)遗传算法只需利用目标的取值信息,而无需递度等高价值信息,因而适用于任何规模,高度非线形的不连续多峰函数的优化以及无解析表达式的目标函数的优化,具有很强的通用性.(3)遗传算法择优机制是一种“软”选择,加上良好的并行性,使它具有良好的全局优化性和稳健性.(4)遗传算法操作的可行解集是经过编码化的(通常采用二进制编码),目标函数解释为编码化个体(可行解)的适应值,因而具有良好的可操作性与简单性.三、背包问题的遗传算法求解1、文字描述0-1背包问题传统的解决方法有动态规划法、分支界限法、回溯法等等。

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

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

遗传算法求解0-1背包问题一、问题描述给定n种物品和容量为C的背包。

物品i的重量是wi,其价值为vi。

问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?二、知识表示1、状态表示(1)个体或染色体:问题的一个解,表示为n个比特的字符串,比特值为0表示不选该物品,比特值为1表示选择该物品。

(2)基因:染色体的每一个比特。

(3)种群:解的集合。

(4)适应度:衡量个体优劣的函数值。

2、控制参数(1)种群规模:解的个数。

(2)最大遗传的代数(3)交叉率:参加交叉运算的染色体个数占全体染色体的比例,取值范围一般为0.4~0.99。

(4)变异率:发生变异的基因位数所占全体染色体的基因总位数的比例,取值范围一般为0.0001~0.1。

3、算法描述(1)在搜索空间U上定义一个适应度函数f(x),给定种群规模N,交叉率Pc和变异率Pm,代数T;(2)随机产生U中的N个个体s1, s2, …, sN,组成初始种群S={s1, s2, …, sN},置代数计数器t=1;(3)计算S中每个个体的适应度f() ;(4)若终止条件满足,则取S中适应度最大的个体作为所求结果,算法结束。

(5)按选择概率P(xi)所决定的选中机会,每次从S中随机选定1个个体并将其染色体复制,共做N次,然后将复制所得的N个染色体组成群体S1;(6)按交叉率Pc所决定的参加交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,并用产生的新染色体代替原染色体,得群体S2;(7)按变异率P m所决定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,并用产生的新染色体代替原染色体,得群体S3;(8)将群体S3作为新一代种群,即用S3代替S,t = t+1,转步3。

三、算法实现1、主要的数据结构染色体:用一维数组表示,数组中下标为i的元素表示第(i+1)个物品的选中状态,元素值为1,表示物品被选中,元素值为0表示物品不被选中。

种群:用二维数组表示,每一行表示一个染色体。

基于贪心遗传算法求解0-1背包问题

基于贪心遗传算法求解0-1背包问题

S o l u t i o n t o 0 - I Kna p s a c k Pr o bl e m Ba s e d o n t he Gr e e dy - g e ne t i c Al g o r i t h m
Y A 0 We n j u a n ,WU F e i ,X I A Q i a n ,S HA O B i a o ,Z H A N G L o n g z h o n g ,L I U J i a n
( 兰 州 交 通 大 学 交 通 运 输 学 院 ,甘 肃 兰州 7 3 0 0 7 0 )


在 解决 0—1背 包问题 中,将贪心算法和 遗传算 法相 结合 ,提 出 了贪心遗 传算 法。通过 算法构 造 出更优
的新 算子 ,与 原有 算子相 比 ,既加 快 了算法的收敛速度 ,又克服 了传统方法容 易陷入局 部最优 的特点 ,提 高 了搜 索效
a l s o a v o i d s t h e l o c a l o p t i mu m t r a p o f t h e t r a d i t i o n l a me t h o d, t h u s i mp r o v i n g s e a r c h e ic f i e n c y . Th e c o mp u t e r s i mu l a -
实际 工作 中 , 越 来越 多 的领域运 用 到 了背 包 问题 。
m a x f ( x 2 , …)=∑P
目标 函数
求解 背包 问题 的方 法 可分 为 启 发 式算 法 , 如 贪 心 算法 、 模 拟退 火算 法 、 蚁群算 法 ; 最优 化算 法 , 如 动态 规 划算 法 、 回溯法 、 分支 定界 法等 J 。这 些算 法均 能找 到 相应 的最优 解 , 但 也 均有各 自的局 限性及 缺 陷 。 本文 介 绍 了贪 心 算法 和遗 传算 法 求 解 0—1背 包 问题 , 并在其基础上提出基 于贪心算法的遗传算法来 解决 背包 问题 。 最后 , 运用 计算 机 仿 真 技 术来 验 证 混 合 遗 传 算 法 的设计 。这 样 , 即克 服 了传 统算 法 的缺 陷 , 又 加快 了算

解决0-1背包问题的遗传分布估计算法

解决0-1背包问题的遗传分布估计算法

解决0-1背包问题的遗传分布估计算法余娟;贺昱曜【期刊名称】《计算机工程与应用》【年(卷),期】2014(000)009【摘要】0-1背包问题是典型的NP难问题,针对0-1背包问题提出分布估计算法(EDA)与遗传算法(GA)相结合的算法(E-GA)。

该算法在每一次迭代中由二者共同产生种群,并行搜索,两种方法产生的个体数目动态变化,将EDA的全局搜索与GA的局部搜索能力、EDA的快速收敛性与GA的种群多样性结合,实现优势互补。

通过三个背包问题算例进行算法验证,与以往文献相比,结果显示该算法所获最优值优于文献最优值,运行时间短且收敛速度快。

%0-1 knapsack problem is a classic NP-hard problem. For the 0-1 knapsack problem, a combined parallel search algorithm(E-GA)is proposed. The population is generated by Genetic Algorithm(GA)and Estimation of Distribution Algorithm(EDA)together. The population proportion caused by two algorithms is changed dynamically, which combines the global statical information and location information and overcomes the shortcoming of GA and EDA. The algorithm is applied to three widely used knapsack samples, and the results show that proposed E-GA algorithm has better search ability and convergence speed than the other algorithms.【总页数】6页(P12-16,31)【作者】余娟;贺昱曜【作者单位】西北工业大学航海学院,西安 710072;西北工业大学航海学院,西安 710072【正文语种】中文【中图分类】TP18【相关文献】1.用基本遗传算法解决0-1背包问题 [J], 闫丽2.一种结合贪婪因子求解0-1背包问题的分布估计算法 [J], 谭阳;周虹3.基于佳点集遗传算法的0-1背包问题解决方法 [J], 徐宗杨;唐耀庚;王晓霞4.求解折扣{0-1}背包问题的新遗传算法 [J], 吴聪聪; 贺毅朝; 赵建立5.求解0-1背包问题的混合贪婪遗传算法 [J], 陈桢;钟一文;林娟因版权原因,仅展示原文概要,查看原文内容请购买。

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

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

一、实例一:1.问题描述假设:背包最大重量为300,物品的数量为10,物品的价值:[95 75 23 73 50 22 6 57 89 98],物品的重量:[89 59 19 43 100 72 44 16 7 64]2.Matlab代码(1)参数初始化,导入本问题的物品的价值和重量数据,并设定背包最大重量。

wei=[9575 23 73 50 22 6 57 89 98];val=[89 59 19 43 100 72 44 16 7 64];w=300; %总重量约束值(2)随机产生数量为30的种群。

生成30*10的0-1矩阵。

So =round(rand(30,10));So=hardlim(So); %So为随机产生的矩阵,值为0或1[ZQ,Y] = size(So);(3)迭代次数为50代,交叉概率为90%,变异概率为5%.ds = 50; pc = 0.9; pm = 0.05;(4)设置适应度函数,利用惩罚函数降低不合格解的适应度,惩罚因子设为1.5.pu=1.5;syd =So*val'-pu*So*val'./(So*wei').*((So*wei'-w)>0).*(So*wei'-w);figure(1);hold on;(5)用轮盘赌进行选择操作,用选择出的个体构成的种群替代旧的种群better1=1; ip = 1; updatef=-10; %betterl为当前算出的总价值,ip为代数whileip<= dsfori=1:ZQfi(i)=syd(i)-min(syd)+1;endfori=1:ZQsp(i)=fi(i)/sum(fi);endfori=2:ZQsp(i)=sp(i-1)+sp(i);endfori=1:ZQp=rand(1); sindex=1;while p >sp(sindex)sindex=sindex+1;endnewSo(i,:)=So(sindex,:);endfori=1:ZQSo(i,:)=newSo(i,:);end(6)设置的交叉概率pc为90%,产生要配对的父代的序号,经过50次顺序调换,将原有顺序打乱,使相邻两个个体作为交叉的父代fori=1:ZQweiindex(i)=i;endfori=1:ZQpoint=unidrnd(ZQ-i+1);temp=weiindex(i);weiindex(i)=weiindex(i+point-1);weiindex(i+point-1)=temp;endfori=1:2:ZQp=rand(1);if(p<pc)point=unidrnd(Y-1)+1;for j=point:(Y-1)ch=So(weiindex(i),j);So(weiindex(i),j)=So(weiindex(i+1),j);So(weiindex(i+1),j)=ch;endendend(7)设置变异的概率为5%,产生50*10的0-1矩阵,对1的位置进行变异M=rand(ZQ,Y)<=pm;So=So-2.*(So.*M)+M;(8)产生精英染色体,you1是适应度最大的染色体,you2为适应度最小的染色体,最优解为不超过背包容量的适应度最大的syd2数组,better3即为每代的最优值,并用粉色星号画出来。

遗传算法求解0-1背包问题(步骤)(精)

遗传算法求解0-1背包问题(步骤)(精)

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

(步骤)#include "iostream.h"#include "iomanip.h"#include "stdlib.h"#include "math.h"#include "time.h"//定义问题的最大规模#define max 100//问题规模,即共有多少个包int packageNum;//每个包的重量int packageWeight[max];//每个包的价值int packageValue[max];//约束,背包的最大容量int limitWeight;//群体的规模int colonySize;//colonyState[i][k] 表示一个染色体//colonyState[1...colonySize][ 0|1 ] 表示一代群体int colonyState[max][2][max];// currAge 表示当前代的编号// (currAge+1)%2 表示下一代的编号int currAge = 0;//个体评价信息表typedef struct tagIndividualMsg{int index;int value;} IndividualMsg;IndividualMsg individualMsg[max];//////////////////////////////////////////////////////////// // 函数声明void printColonyState( int nextAge );//////////////////////////////////////////////////////////// //初始化群体void colonyInit(){int i , j;int w;for( i = 0 ; i < colonySize ; i++ ){//保证找到一个符合约束的染色体w = limitWeight + 1;while( w > limitWeight ){w = 0;for( j = 0 ; j < packageNum && w <= limitWeight ; j++ ){colonyState[i][currAge][j] = rand() % 2;w += packageWeight[j] * colonyState[i][currAge][j];}}}}//对个体进行评价int cmp( const void *a , const void *b ){IndividualMsg *x = (IndividualMsg *)a;IndividualMsg *y = (IndividualMsg *)b;return y->value - x->value;}void individualEstimate(){int i , j;for( i = 0 ; i < colonySize ; i++ ){individualMsg[i].index = i;individualMsg[i].value = 0;for( j = 0 ; j < packageNum ; j++ )individualMsg[i].value += packageValue[j] * colonyState[i][currAge][j]; }qsort( individualMsg , colonySize , sizeof(IndividualMsg) , cmp );}//终止循环的条件bool stopFlag(){//进行n 代进行后停止static int n = 50;if( n-- <= 0 )return true;elsereturn false;}//赌轮选择int gambleChoose(){int wheel[max] = { 0 };int i = colonySize - 1;int choose;wheel[i] = individualMsg[i].value;for( i-- ; i >= 0 ; i-- )wheel[i] = ( individualMsg[i].value + wheel[i+1] ) + colonySize * ( colonySize - i ); int seed = abs( wheel[0] - ( rand() % ( 2 * wheel[0] ) + 1 ) );choose = colonySize - 1;while( seed > wheel[choose] )choose--;// cout<<"----------------------------------------"<<endl;// cout<<"wheel :"<<endl;// for( i = 0 ; i < colonySize ; i++ )// cout<<setw(5)<<wheel[i];// cout<<endl;// cout<<"seed = "<<seed<<endl;// cout<<"choose "<<choose<<endl;return choose;}//交叉void across( int male , int female , int index ){int nextAge = (currAge+1)%2;int i , j , t;int acrossBit = rand() % (packageNum-1) + 1;for( j = 0 ; j < packageNum ; j++ ){colonyState[index][nextAge][j] =colonyState[individualMsg[male].index][currAge][j];colonyState[index+1][nextAge][j] =colonyState[individualMsg[female].index][currAge][j];}for( i = 0 ; i < acrossBit ; i++ ){t = colonyState[index][nextAge][i];colonyState[index][nextAge][i] = colonyState[index+1][nextAge][i];colonyState[index+1][nextAge][j] = t;}}//变异void aberrance( int index ){int seed , nextAge;nextAge = (currAge+1)%2;//只有1/3 的概率发生异变seed = rand() % ( packageNum * 3 );if( seed < packageNum )colonyState[index][nextAge][seed] = ( colonyState[index][nextAge][seed] + 1 ) % 2;}//处理死亡个体void dealDeath(){int i , j;int weight , w;int nextAge = (currAge+1)%2;for( i = 0 ; i < colonySize ; i++ ){weight = 0;for( j = 0 ; j < packageNum ; j++ )weight += packageWeight[j] * colonyState[i][nextAge][j];if( weight > limitWeight ){//随机生成新的个体w = limitWeight + 1;while( w > limitWeight ){w = 0;for( j = 0 ; j < packageNum && w <= limitWeight ; j++ ){colonyState[i][nextAge][j] = rand() % 2;w += packageWeight[j] * colonyState[i][nextAge][j];}}}}printColonyState( nextAge );}//最优个体保护void saveBest(){int i , j;int min , minp , value;int nextAge = ( currAge+1)%2;min = individualMsg[0].value;minp = -1;for( i = 0 ; i < colonySize ; i++ ){value = 0;for( j = 0 ; j < packageNum ; j++ )value += packageValue[j] * colonyState[i][nextAge][j]; if( value <= min ){min = value;minp = i;}}if( minp >= 0 ){for( j = 0 ; j < packageNum ; j++ ){colonyState[minp][nextAge][j] =colonyState[individualMsg[0].index][currAge][j];}}}//////////////////////////////////////////////////////////// void setProblem(){int i;packageNum = 5;int w[] = { 5 , 4 , 3 , 2 , 1 };int v[] = { 8 , 9 , 3 , 1 , 2 };for( i = 0 ; i < packageNum ; i++ ){packageWeight[i] = w[i];packageValue[i] = v[i];}limitWeight = 13;colonySize = 5;}void printProblem(){int i;cout<<"----------------------------------------"<<endl;cout<<"problem state:"<<endl;cout<<"packageNum = "<<packageNum<<endl;cout<<"limitWeight = "<<limitWeight<<endl;cout<<"Weight: ";for( i = 0 ; i < packageNum ; i++ )cout<<setw(3)<<packageWeight[i];cout<<endl;cout<<"Value: ";for( i = 0 ; i < packageNum ; i++ )cout<<setw(3)<<packageValue[i];cout<<endl;}void printColonyState( int k ){cout<<"----------------------------------------"<<endl;cout<<"colonyState-->";if( k == currAge )cout<<"currAge:"<<endl;elsecout<<"next age:"<<endl;int i , j;for( i = 0 ; i < colonySize ; i++ ){for( j = 0 ; j < packageNum ; j++ )cout<<setw(2)<<colonyState[i][k][j];cout<<endl;}}void printIndividualMsg(){int i;cout<<"----------------------------------------"<<endl;cout<<"Individual Msg:"<<endl;for( i = 0 ; i < colonySize ; i++ ){cout<<individualMsg[i].index<<"\t"<<individualMsg[i].value<<endl; }}////////////////////////////////////////////////////////////void main(){srand( (unsigned int)time(NULL) );setProblem();printProblem();//初始群体colonyInit();printColonyState( currAge );while( !stopFlag() ){//评价当前群体individualEstimate();//生成下一代for( int i = 0 ; i < colonySize ; i += 2 ){int male = gambleChoose();int female = gambleChoose();across( male , female , i );aberrance( i );aberrance( i + 1 );}//处理死亡个体dealDeath();//最优个体保护saveBest();//现在的下一代变成下一轮的当前代currAge = ( currAge + 1 ) % 2;//printColonyState( currAge );}//输出问题解individualEstimate();cout<<"近似解:"<<endl;int j , w = 0;cout<<setw(10)<<"Value:";for( j = 0 ; j < packageNum ; j++ )cout<<setw(5)<<packageValue[j];cout<<endl;cout<<setw(10)<<"Weight:";for( j = 0 ; j < packageNum ; j++ ){w += packageWeight[j] * colonyState[individualMsg[0].index][currAge][j]; cout<<setw(5)<<packageWeight[j];}cout<<endl;cout<<setw(10)<<"Choose:";for( j = 0 ; j < packageNum ; j++ )cout<<setw(5)<<colonyState[individualMsg[0].index][currAge][j];cout<<endl;cout<<"limitWeight: "<<limitWeight<<endl;cout<<"总重量: "<<w<<endl;cout<<"总价值: "<<individualMsg[0].value<<endl; }////////////////////////////////////////////////////////////。

格雷码混合遗传算法求解0-1背包问题

格雷码混合遗传算法求解0-1背包问题
王则林 ,吴 志健
4002 307 )

(. 1 南通大 学 计算机科 学与技 术学院,江 苏 南通 26 0 ;2 武汉 大学 软件工程 国家重点 实验 室, 汉 200 . 武

要 :给 出 01背 包问题 的数 学模 型 , 改传 统二 进 制编码 为格 雷码 混 合遗 传 算法 , 用 贪心 算 法来 解 决约 - 修 使
近些年 , 背包 问题 吸引了很多理论和实际工作者对此问题 进行深入 的研究 。主要是 由于在工业上很多的实际应 用 , 如资
品的重量和价值分别记为 W 、 i 1 … , ) 背包能 承受 的最 p( = , n ,
大重量是 C 当物品 i , 被选择进入 背包时 , =1否则 , :0 背 , ;
m a i ie xm z
般仅能获得 问题 的近似最优解 。近年来 , 不少学者将稳健 的
s 3 a t l ≤c uj to∑ x ] c i
中图分类 号 :T 1 P8 文献标 志码 :A 文章 编号 :10 -6 5 2 1 ) 8 2 0 - 3 0 13 9 ( 0 2 0 -9 6 0
d i1 . 9 9 ji n 10 -6 5 2 1 . 8 0 7 o :0 3 6 / .s . 0 139 . 0 2 0 .2 s
v re e rc s. en e g n e p o e s Th ume c le p rm e o e h fe t iy o h lo t m . i r a x e i ntprv s te a ci t ft e ag r h v i
K yw r s eei a o tm( A) npakpolm;G r cd ;ged grh e od :gnt l rh G ;ka sc rbe c gi a oe reya o tm;eis c ai y l i li mehns tm m

基于遗传算法求解折扣{0-1}背包问题的研究

基于遗传算法求解折扣{0-1}背包问题的研究

Re s e a r c h o n G e n e t i c A l g o r i t h ms f o r t h e D i s c o u n t e d{ 0 - 1 )Kn a p s a c k P r o b l e m
HE Yi — Ch a o W ANG Xi — Zh a o 。 LI We n _ Bi n 。 ZHANG Xi n — Lu CHEN Yi — Yi ng
贺毅朝” 王熙照 李文斌。 张新禄 陈嶷瑛”
( 石 家 庄 经 济 学 院信 息工 程 学 院 石 家 庄
’ ( 深 圳 大 学计 算 机 与 软 件 学 院
0 5 0 0 3 1 ) 0 5 0 0 3 1 )
0 5 0 0 2 4 )
广 东 深 圳 5 1 8 0 6 0 )
( C o l l e g e o f I n f o r m a t i o n E n g i n e e r i n g,S h i j i a z h u a n g U n i v e r s i t y o f Ec o n o mi c s , S h i j i a z h u a n g 0 5 0 0 3 1 ) ( C o l l e g e o f C o mp u t e r S c i e n c e a n d S o f t w a r e E n g i n e e r i n g,S h e n z h e n Un i v e r s i t y, S h e n z h e n , G u a n g d o n g 5 1 8 0 6 0 ) 3 ( L a b o r a t o r y o f Ne t wo r k a n d I n f o r ma t i o n S e c u r i t y。S h i j i a z h u a n g Un i v e r s i t y o f E c o n o mi c s , S h i j i a z h u a n g 0 5 0 0 3 1 ) ( C o l l e g e o f Ma t h e ma t i c s a n d I n f o r ma t i o n S c i e n c e , He b e i No r ma l U n i v e r s i t y,S h i j i a z h u a n g 0 5 0 0 2 4 )

遗传算法的0-1背包问题(c语言)

遗传算法的0-1背包问题(c语言)

基于遗传算法得0—1背包问题得求解摘要:一、前言组合优化问题得求解方法研究已经成为了当前众多科学关注得焦点,这不仅在于其内在得复杂性有着重要得理论价值,同时也在于它们能在现实生活中广泛得应用。

比如资源分配、投资决策、装载设计、公交车调度等一系列得问题都可以归结到组合优化问题中来、但就是,往往由于问题得计算量远远超出了计算机在有效时间内得计算能力,使问题得求解变为异常得困难。

尤其对于NP完全问题,如何求解其最优解或就是近似最优解便成为科学得焦点之一、遗传算法已经成为组合优化问题得近似最优解得一把钥匙。

它就是一种模拟生物进化过程得计算模型,作为一种新得全局优化搜索算法,它以其简单、鲁棒性强、适应并行处理以及应用范围广等特点,奠定了作为21世纪关键智能计算得地位。

背包问题就是一个典型得组合优化问题,在计算理论中属于NP-完全问题,其计算复杂度为,传统上采用动态规划来求解。

设w[i]就是经营活动i 所需要得资源消耗,M就是所能提供得资源总量,p[i]就是人们经营活动i得到得利润或收益,则背包问题就就是在资源有限得条件下,追求总得最大收益得资源有效分配问题。

二、问题描述背包问题( Knapsack Problem)得一般提法就是:已知n个物品得重量(wei ght)及其价值(或收益profit)分别为与,背包得容量(contain)假设设为,如何选择哪些物品装入背包可以使得在背包得容量约束限制之内所装物品得价值最大?该问题得模型可以表示为下述0/1整数规划模型:目标函数:(*)式中为0-1决策变量,时表示将物品装入背包中,时则表示不将其装入背包中。

三、求解背包问题得一般方法解决背包问题一般就是采取动态规划、递归回溯法与贪心方法、动态规划可以把困难得多阶段决策变换为一系列相互联系比较容易得单阶段问题、对于背包问题可以对子过程用枚举法求解,而且约束条件越多,决策得搜索范围越小,求解也越容易。

它得主要缺点就是用数值方法求解时会随着状态变量得个数呈指数级得增长,往往对于求解背包问题得实际问题就是不现实得。

2006-0_1背包问题的遗传算法求解

2006-0_1背包问题的遗传算法求解

0-1背包问题的遗传算法求解鄂州大学图书馆 曾国清[摘 要]0-1背包问题是计算机算法研究中N P 完备类的一个困难问题,对这个问题国内外很多学者己经研究出了不少经典的方法,但是这些传统的优化法存在一些缺点。

本文介绍了近年来兴起的一种演化算法—遗传算法解决背包问题的基本思路,井通过实例计算证明了此方法的可行性和有效性。

[关键词]背包问题 遗传算法 背包问题是著名的N P -hard 问题,对这个问题的求解前人己经研究出了不少的经典的方法,对该问题确实能得到很好的结果。

但是这些传统的优化方法存在一些缺点:例如解析法是通过求解使目标函数梯度为零的一组非线性方程来进行搜索的。

一般而言,若目标函数连续可微,解的空间方程比较简单,解析法还是可以用的。

但是,若方程的变量有几十个或几百个就无能为力了;另一种典型的搜索方法是穷举法,该方法简单易行,即在一个连续的有限空间或离散无限搜索空间中,计算空间中每个点的目标函数值,且每次计算一个。

显然,这种方法效率太低。

许多实际问题所对应的搜索空间很大,不允许一点点地慢慢求解。

近年来蓬勃发展起来的遗传算法己被广泛地应用组合优化领域,其全局最优性、可并行性、高效性在函数优化中得到了广泛地应用。

遗传算法克服了传统优化方法的缺点,借助了大自然的演化过程,是多线索而非单线索的全局优化方法,采用的是种群和随机搜索机制。

本文将遗传算法应用于背包问题,并通过算例证明了该算法在解决该问题是比较有效的。

1.问题的描述背包问题(knap sack P rob lem )的一般提法是:有一个“背包”,它能提供m 种资源(如空间容积、载量等),各种资源的最大提供数量是b i ,i =1,2,+,m ,现要将n 种“物资”放入“背包”中,单位第j 项物资占用第i 种资源的数量是Αij ,j =1,2,+,n ,而装入第j 项物资的受益为c j ,j =1,2,+,n 。

问:“背包”中应装入哪些“物资”,才能使受益最大?该问题的模型可表示为以下整数规划模型:式中,x j 为0-1决策变量,x j =1表示将物资j 放入背包中,x j =0表示不将物资j 放入背包中。

0_1背包问题算法分析与研究

0_1背包问题算法分析与研究
3 结语
背包问题的研究在理论研究及应用领域都具有 十分重要的意义。 自 20 世纪 50 年代起就有人提出了 该问题的解决方法,之后便有更多更好的算法层出不 穷。 通过以上的分析,我们可以总结:
●分支界限法:适合于问题规模很小,但协同系 数改变,问题显得更困难的情况,不足是如果在最差 情况下,时间复杂度增大;
(2)动态规划法(Dynamic Programming)
动 态 规 划 法 在 背 包 问 题 的 应 用 是 由 Gilmore 和
Gomony 提出。
动态规划的基本思想:将一个比较大的问题逐层
分解成相对比较小的问题,这些较小的问题一般都可
以解决, 并且利用了最优子结构, 由下向上的方法从
子问题的最优解一步一步地构造出整个问题的最优
种群进化越来越接近某一目标。 如果视种群为超空间
的一组点,选择、杂交和变异的过程即是在超空间中
进行点集之间的某种变换,通过信息交换使种群不断

研究与开发
变化。 它最初由美国的 J.H Holland 提出。 遗传算法求
解问题的过程为: ①首先生成一组初群体 (假设为 M 个候选解个
体),称为第 0 代; ②计算群体中各个候选解的适应值; ③如果有候选解满足算法终止条件, 算法终止;
行之有效的决策方法是至关重要的,能够分解成比较
容易解决的子问题, 是决策设计的最佳标准。
(3)近似算法(Approximate Algorithms)
第一个近似算法是基于动态规划法定义的。 其思
想是:如果价值用其他方法衡量,可能减少运行时间,
但它是以解的准确性为代价的。 具体做法:用 Pi/2k 代 替 Pi(i=1,…,n)。 实际上是将 Pi 的最后 k 位删除,如 果我们期望相对误差最大值为 e>0,整数 k 即为满足

遗传算法求解01背包问题

遗传算法求解01背包问题

遗传算法求解01背包问题一、问题描述01背包问题属于组合优化问题的一个例子,求解01背包问题的过程可以被视作在很多可行解当中求解一个最优解。

01背包问题的一般描述如下:给定n个物品和一个背包,物品i的重量为W i,其价值为V i,背包的容量为C。

选择合适的物品装入背包,使得背包中装入的物品的总价值最大。

注意的一点是,背包内的物品的重量之和不能大于背包的容量C。

在选择装入背包的物品时,对每种物品i只有两种选择:装入背包或者不装入背包,即只能将物品i装入背包一次。

称此类问题为0/1背包问题。

01背包问题是NP问题,传统的解决方法有动态规划法、分支界限法、回溯法等等。

传统的方法不能有效地解决01背包问题。

遗传算法(Genetic Algorithms)则是一种适合于在大量的可行解中搜索最优(或次优)解的有效算法。

二、遗传算法1、遗传算法的基本思想遗传算法的搜索从一个被称作种群的候选解集开始,新的种群由旧的种群中产生以期得到更好的种群。

从旧种群中按照解的适应度来选择解以产生新的解;适应度越大,解被选择生成后代的机率也越大。

这个从已有种群中选择双亲并产生后代的迭代过程持续到遗传算法的停止条件满足为止。

2、遗传算法的基本元素。

遗传算法由以下几个原素组成:由染色体组成的种群,根据适应度进行选择以及交叉产生后代。

三、用遗传算法求解01背包问题1、01背包问题中染色体的表示。

用向量X来表示染色体,X = {x1,x2,……,x n}。

,x i∈{0,1},x i=1表示物品i装入了背包,x i =0表示物品i未装入背包。

每个染色体对应其当前装入背包的物品的总价值和总重量。

背包中物品的中价值代表了该物品的适应度。

程序中定义了这样的一个结构来表示染色体:typedef struct{int Weight; //染色体代表的物品的总重量int Fitness; //染色体代表的物品的价值(适应度)int Gene[NUMG]; //用元素取值于定义域{0,1}的数组表示染色体。

0-1背包问题的算法决策分析

0-1背包问题的算法决策分析

0-1背包问题的算法决策分析0-1背包问题是一个经典的组合优化问题,也是计算机科学和数学领域中的一个重要问题。

在实际应用中,0-1背包问题通常用于优化问题的求解,比如资源分配、货物装载等方面。

在这篇文章中,我们将对0-1背包问题的算法决策进行分析,并探讨不同算法的优缺点。

0-1背包问题的描述很简单,假设有n件物品和一个容量为W的背包。

每件物品的重量为w[i],价值为v[i]。

现在需要选择一些物品装入背包,使得背包中的物品价值最大,同时不能超过背包的容量。

这个问题可以用一个0-1的决策变量来表示,即选择物品装入背包或者不选择。

这个问题被称为0-1背包问题。

对于0-1背包问题,有多种解法和算法可以求解。

常见的算法包括贪心算法、动态规划算法、回溯算法等。

在下面的内容中,我们将对这些算法进行具体的分析和比较。

贪心算法贪心算法是一种简单而有效的算法,它通过每一步的局部最优选择来构建全局最优解。

在0-1背包问题中,可以使用贪心算法按物品的单位价值(即每单位重量所能获得的价值)从大到小的顺序选择物品放入背包。

贪心算法的优点是简单、高效,时间复杂度低。

贪心算法并不一定能够得到最优解。

因为贪心算法只关注当前的局部最优解,而忽略了全局最优解的可能性。

在某些情况下,贪心算法无法得到最优解。

动态规划算法动态规划算法是求解0-1背包问题的经典算法之一。

动态规划算法将问题分解为子问题,并使用递推的方式求解子问题,最终得到全局最优解。

在0-1背包问题中,可以使用动态规划算法构建一个二维数组dp[i][j],表示前i件物品在背包容量为j时所能获得的最大价值。

动态规划算法的优点是能够得到最优解,并且在一定程度上能够减小时间复杂度。

动态规划算法的空间复杂度较高,且在某些情况下需要额外的优化。

动态规划算法需要注意状态转移方程和边界条件的设计,需要一定的技巧和功底。

回溯算法回溯算法是一种穷举搜索算法,它通过遍历所有可能的解空间来求解问题。

一种改进的混合遗传算法求解0_1背包问题

一种改进的混合遗传算法求解0_1背包问题

白 东玲 ,郭绍 永
( 1 . 新 乡I t学 院 计 算 机 中心 ,河 南 新 乡 4 5 3 0 0 3 ; 2 . 新 乡 医 学院 现 代教 育技 术 中心 , 河南 新乡 4 5 3 0 0 3 ) 摘 要 :背 包 1 " - 3 题是 组合优化 中的 N P ( N o n — D e t e r m i n i s t i c P o l y n o m i a 1 ) 难题之 一 , 论 文 将 贪 婪 算 法 与 遗 传 算 法相 结 合 提 出 一种 改进 的 混 合 遗 传 算 法 来 求 解 0 _ 1背 包 问题 。 改进 的 混合 遗 传 算 法 通 过 遗 传 算 法 的择 优 , 重复执行选择、 交 叉和
g e n e t i c a l g o it r h m r e p e a t s he t p oc r e s s ,w h i c h i s d o n e b y s e l e c t i o n ,c os r s o v e r ,mu t i o n a n d g r e e d y lg a o i r hm , t u n t i l t h e o p t i ma l
e x p e r i me n t l r e s u l t s s h o w t h a t t h e i mp ov r e d GA e f e c t i v e l y o v e  ̄o me t h e p r e ma t u r e p h e n o me n o n a n d i s ls a o s u i t a b l e f o r o t h e r
第 2 1 卷 第 l 4期
Vo 1 . 2 1
No . 1 4

0-1背包问题的算法决策分析

0-1背包问题的算法决策分析

0-1背包问题的算法决策分析1. 引言1.1 背包问题简介背包问题是一个经典的组合优化问题,通常用于描述在给定一定容量的背包和一组物品的情况下,如何选择装入背包中的物品,使得背包内物品的总价值最大或总重量最小。

这种问题在实际生活中有着广泛的应用,比如在物流配送、资源分配等领域都能见到类似的问题。

背包问题通常包括01背包、完全背包、多重背包等不同变种,其中最为经典和常见的是01背包问题。

在01背包问题中,每种物品只能选择装入或不装入背包,不能将物品进行切割。

为了解决背包问题,通常采用动态规划算法或贪心算法。

动态规划算法通过递推的方式计算出最优解,具有较高的时间复杂度但能够保证全局最优解;贪心算法则通过选择局部最优解的方式逐步构建全局最优解,具有较低的时间复杂度但不能保证一定得到最优解。

在实际应用中,对于不同规模和要求的背包问题,需要根据具体情况选择适用的算法来求解。

背包问题的解决思路可以帮助我们更好地理解和应用算法解决实际问题。

1.2 算法决策的重要性在解决0-1背包问题时,算法决策的重要性不可忽视。

背包问题是一个经典的组合优化问题,其在实际生活中有着广泛的应用。

在面对不同的背包问题时,选择合适的算法决策可以大大提高问题的解决效率和准确性。

通过精心选择算法,可以避免不必要的计算和浪费,节省时间和资源。

在动态规划和贪心算法两种经典算法中,不同的问题可能更适合不同的解决方案。

算法决策的重要性体现在如何根据问题的性质和约束条件选择最合适的算法,以达到最优的解决方案。

在实际应用中,算法决策的重要性更加凸显。

对于大规模背包问题,合理选择算法可以极大地提高问题的求解效率,节约资源和时间成本。

而对于特定场景下的背包问题,例如物流配送、资源分配等,算法决策的准确性直接影响到问题的实际应用效果和经济效益。

因此,对于0-1背包问题的解决来说,算法决策的重要性不言而喻。

只有通过深入理解不同算法的特点和适用条件,才能更好地选择合适的解决方案,从而达到最优解并取得较好的求解效果。

解0-1背包问题的遗传算法及其改进

解0-1背包问题的遗传算法及其改进

解0-1背包问题的遗传算法及其改进
刘洋
【期刊名称】《天津师范大学学报(自然科学版)》
【年(卷),期】2003(023)003
【摘要】遗传算法是一种基于自然选择和遗传机制的搜索算法. 讨论了用其解决著名的0-1背包问题,尝试混合使用一点杂交与多点杂交以及将传统的算法与遗传算法相结合的方法,对经典遗传算法进行改进,并在实验中获得了对于问题的更佳近似解.
【总页数】4页(P69-72)
【作者】刘洋
【作者单位】天津师范大学,计算机与信息工程学院,天津,300074
【正文语种】中文
【中图分类】TP301.6
【相关文献】
1.求解0-1背包问题的改进混合遗传算法 [J], 刘寒冰;张亚娟
2.求解多约束0-1背包问题的遗传算法的改进 [J], 吕聪颖;胡平;刘炯
3.一种改进的免疫遗传算法求解0-1背包问题 [J], 杜彦华;靳宗信
4.具有多父代重组的遗传算法解0-1背包问题 [J], 刘志华;周绍梅
5.改进修复策略遗传算法求解折扣{0-1}背包问题 [J], 杨洋;潘大志;贺毅朝
因版权原因,仅展示原文概要,查看原文内容请购买。

求解0-1背包问题的改进排挤遗传算法

求解0-1背包问题的改进排挤遗传算法
25 2 1, o.2 N . 计 算 机 工 程 与 设 计 C mpt E g er gadD s n 10 01 V 1 , o 3 6 o ue ni en r n i n ei g
求解 O1 . 背包问题的改进排挤遗传算法
刘 文涛 胡 家宝 ,
(.武汉 工 业 学院 计 算机 与信 息. 程 系,湖 北 武 汉 4 0 2 ; 1 3 2 303 2 .武汉理 工 大学 计 算机 学 院 ,湖 北 武汉 4 0 7 ) 3 0 0
并 行 性 等 特 征 , 用 遗 传 算 法 求 解 O1 包 问题 是 一 个 有 效 解 使 .背 决 途 径 。遗 传 算 法 基 于 生 物 进 化 中 的 适 者 生 存 、 胜 劣 汰 、 优 物 种 进 化 的 自然 选 择 机 制 ,其 广 泛 应 用 于 函数 优 化 、模 式 识 别 、 像 处 理 、 化 控 制 、 经 网 络 、 器 学 习 、 据 挖 掘 等 领 图 优 神 机 数
32变 异 操 作 : .
2 1,V 1 2 N . 1 1 0 1 o. , o6 5 3 2
包 问题 , 解 精 度 也 很 高 。 求
mu t nN w ) t i ( wX ) t i ( e X1; a o Ne 2 ao mu t n
1 基 于 惩 罚 函数 的 排挤 遗 传 算 法 P C F GA
O 引 言
O1 包 问题 是 组 合 优 化 中 的 典 型 例 子 , 很 多 场 合 都有 .背 在
应 用 , 如 资 源 优 化 、 料 切 割 、 物 装 载 、 目分 配 、 算 计 例 材 货 项 预
分 支 界 法 、 态 规 划 等 , 当 输 入 量 非 常 大 的 时候 , 计 算 限 动 但 其 量 呈 指 数 上 升 … 由于 遗 传 算 法 具 有 鲁棒 性 强 、 。 随机 性 、 含 隐

智能控制作业遗传算法求解背包问题

智能控制作业遗传算法求解背包问题

智能控制作业遗传算法求解背包问题智能控制遗传算法求解背包问题——16组遗传算法求解背包问题摘要:遗传算法是在分析遗传个体进化机制基础上提出的一种新型优化算法。

本论文根据0-1 背包问题的特点,提出用于求该问题的遗传算法及相关的解决方案,阐明算法的具体实现过程。

通过对其他文献中仿真实例的计算和结果比较,表明应用该算法求解背包问题取得了良好的效果。

该算法同样可以应用于其他组合优化题。

关键词:背包问题;遗传算法一.概述背包问题(knapsack problem) 是运筹学中一个典型的优化难题,有着广泛的实际应用背景,如管理中的资源分配、投资决策、预算控制等问题,并且经常作为其他问题的子问题被研究。

研究背包问题的求解算法在理论上和实践中都具有一定的意义。

从计算复杂性理论来看,背包问题是个NP 完全问题,该问题的求解方法主要有启发式算法,如贪心算法、遗传算法、粒子群算法。

以遗传算法为代表的生物进化算法建立在达尔文自然选择学说的基础上,是对生物进化过程的模拟,是人们对从自然演化过程中抽象出的概念、原则和机制的类比应用,被广泛用于解决复杂的计算问题。

其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。

遗传算法的这些性质,已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。

它是现代有关智能计算中的关键技术。

本文在分析遗传算法的基础上,提出了将贪婪修复方法与遗传算法相结合,构成混和遗传算法,并应用于求解经典背包问题。

它是可以解决复杂问题的新方法。

本论文系统的介绍背包问题的遗传算法解决方案。

二.背包问题的数学模型背包问题的定义:我们有n 种物品,物品j 的重量为wj ,价格为pj 。

我们假定所有物品的重量和价格都是非负的。

背包所能承受的最大重量为W 。

求解0-1背包问题的改进混合遗传算法

求解0-1背包问题的改进混合遗传算法

求解0-1背包问题的改进混合遗传算法刘寒冰;张亚娟【期刊名称】《计算机系统应用》【年(卷),期】2015(000)006【摘要】针对一种混合遗传算法所采用的贪心变换法的不足,给出了一种改进的贪心修正法;并基于稳态复制的策略,对遗传算法的选择操作进行改进,给出了随机选择操作。

在此基础上,提出了一种改进的混合遗传算法,并将新算法用于解决大规模的0-1背包问题,通过实例将新算法与 HGA 算法进行实验对比分析,并研究了变异概率对新算法性能的影响。

实验结果表明新算法收敛速度快,寻优能力强。

%An improved greedy correction method is advanced for overcome the flaw of greedy transform method adopted by hybrid genetic algorithm (HGA). And based on steady state reproduction strategy, the choice method of random selection is advanced. These new methods are combined with genetic algorithm to propose a high-efficient hybrid genetic algorithm (IHGA), and new algorithm was used to solve large-scale 0-1 knapsack problem. By many simulation experiments, IHGA algorithm is compared with HGA algorithm, and how the mutation probability affect the performance of the new algorithm has been studied. The experimental results show that the new algorithm has higher convergent speed and better optimization capability.【总页数】5页(P197-201)【作者】刘寒冰;张亚娟【作者单位】黄河科技学院信息工程学院,郑州 450063;黄河科技学院信息工程学院,郑州 450063【正文语种】中文【相关文献】1.求解多限制0-1背包问题的混合遗传算法 [J], 宋海生;宋海洲;傅仁毅;徐瑞松2.格雷码混合遗传算法求解0-1背包问题 [J], 王则林;吴志健3.对求解0-1背包问题的混合遗传算法的改进 [J], 刘茜;马杰良4.求解0-1背包问题的混合遗传算法 [J], 宋海洲;魏旭真5.求解0-1背包问题的混合贪婪遗传算法 [J], 陈桢;钟一文;林娟因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

- 13 -
引言
0 近年来,背包问题吸引了许多理论研究人员和实际工作者对此问题做深入的研究,在理论上尽管该问题结构简单,但它却具有组合爆炸的性质,在实际应用中,许多工业问题可以用背包问题来描述,如资本预算、货物装载、资源分配和存储分配等都是典型的应用例子.所谓背包问题,是指从件不同价值,不同重n 量物品中,选择装入背包的物品,要求在不超过背包承载重量的前提下,使装入背包的物品总价值最大.
解决背包问题的方法可分为优化算法和启发式算法.优化算法包括穷举法,动态规划法,解析法等,0-1这些方法可以找到最优解,但是只适用于小规模问题,不过在一定的条件下,将它们混合使用也能取得非常好的效果;启发式算法包括贪心算法,遗传算法等,一般用于求解更为复杂的问题.解决背包问题的关键在于约束条件的处理,目前一般采用惩罚函数的方法处理约束条件,该方法当问题规模较大时,尽管可行,但搜索效率很低,有时甚至得到的结果比一般的启发式算法还要差.因此,本文提出了一种基于贪心算法的混合遗传算法来求解背包问题.
0-1背包问题的数学模型
1 背包问题是一个典型的组合优化问题,且为完全问题,它实际上是一个规划问题.该问题可以描
NP 0-1述为:假设有个重量为,价值为,的物品要装入最大容纳重量为的背包中,要求在
不超过背包承载重量的前提下使背包的物品总价值最大.如果物品装入背包,则令,若物品不装入
背包,则令.其数学模型表示如下:
遗传算法
2 遗传算法是模拟自然界的生物演化过程而发展起来的问题求解策略和方法.它拥有多种编码技术来表示复杂的结构,并通过一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索方向.遗传算法的一般步骤为:
背包问题的遗传算法求解及其改进
0-1黄娟
(兰州交通大学数理与软件工程学院,甘肃兰州)
730070摘要: 背包问题是一个典型的组合优化问题,且为完全问题.目前常用的方法有贪心算法,动态
0-1NP 规划,回溯法等.本文探讨了一种基于贪心算法的混合遗传算法求解背包问题的方法,并在实验中获得了更0-1佳近似解.
关键词:背包问题;贪心算法;遗传算法
0-1中图分类号:文献标识码:文章编号:-()--O245 A 16720520201002001303
———————————————
收稿日期:2009-10-13
作者简介:黄娟(—),女,甘肃陇西人,兰州交通大学硕士研究生,研究方向:算法分析与软件设计.1983第卷第期()河西学院学报()
2622010 Vol.26 No.22010n i w i p (1,2,,)i n =…C i 1i x =i 0i x =1max ,
n i i i p x =∑..s t 1,n
i i i w x C =≤∑{}0,1,(1,2,,).
i x i n ∈=…
- 14 -
①模型参数取值范围内的编码;
②初始化过程,即随机产生个染色体作为初始种群;n ③构造适应度函数.背包问题的适应度函数通常就是目标函数;
④选择操作.根据某种算法从种群中挑选个体作为遗传操作的父个体;
⑤交叉操作.按一定的概率对父个体实施交叉操作产生新一代子个体;
⑥变异操作.按一定的概率对父个体的一个或一些基因实施变异操作,产生新个体;
⑦经过选择、交叉和变异操作,得到一代新的种群.重复④,⑤,⑥,直到规定的遗传代数终止.
在众多的近似算法中,遗传算法是解决背包问题的一个较好算法:
①在求解背包问题时,由于遗传算法的进化特性,它在解的搜索中不需要了解背包问题的内在性质,遗传算法可以处理任意形式的目标函数和约束,无论是线性的还是非线性的,离散的还是连续的,甚至是混合的搜索空间.
②遗传算法在选择、交叉和变异的过程中,都存在对每一个体进行处理的可能.若遗传算法每一代对群
体规模为的个体进行操作,实际上处理了大约个模式,具有很高的并行性,因而具有显著的搜索效率.
③遗传算法对于各种特殊问题可以提供极大的灵活性来混合构造领域独立的启发式,从而保证算法的有效性.
④遗传算法的基本思想简单,运行和实现步骤规范,便于具体使用.
混合遗传算法
3 传统算法在求解背包问题中存在的问题
3.1 解决背包问题的传统方法主要有:解析法、穷举法、贪心算法.
解析法通常是通过求解目标函数梯度为零的一组非线性方程来进行搜索的.一般而言,若目标函数连续可微,解的空间方程比较简单,解析法还是可用的.但是,若方程的变量有几十或几百个时,它就为能为力了.
穷举法,即在一个连续有限搜索空间或离散无限搜索空间中,计算空间中每个点的目标函数值,且每次计算一个.显然,这种方法效率太低而鲁棒性不强.许多实际问题中所对应的搜索空间很大,不允许一点一点地慢慢求解.
贪心算法是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法.贪心算法总是做出在当前时刻看起来最优的策略,即希望通过局部最优决策导致问题的全局最优解.这种启发式策略并不总是产生问题的最优解,比如在求背包问题时可获得最优解,而在求背包问题时只能求0-1得近似解,但难以求得最优解.
混合遗传算法
3.2 对于背包问题,可以用贪心算法求解,先将物件价值密度的值按降序排列,然后依次将物件放入背
包内,直至超出背包最大容纳重量为止.这种算法的时间复杂度要比递归回溯法小得多,但用这种方法只能得到近似最优解.可以将贪心算法与遗传算法结合起来得到混合遗传算法:先用贪心算法生成问题的贪心解,然后在遗传算法的变异过程中,让每一代中最差适应度的个体无条件的变为此贪心解.实验证明,使用混合遗传算法要比单纯使用遗传算法或单纯使用贪心算法所得的平均最优解好的多.其算法描述如下:
⑴使用贪心算法求得贪心解作为第代中的个个体;
01⑵随机产生个~(m 02n
~)间的整数其中为物件个数,为种群规模,将其变为二进制表示其 1( )(中第位为表示第件物件被选择,若为,则表示第件物件未被选择;
1 0 )⑶计算群体中各个个体的适应值,其计算方法为:计算每个个体的价值,计算每个个体的重量; (背包所能容纳的重量)if
此个体的适应度所有物品的重量;
else 此个体的适应度背包所能容纳的重量所有物品的重量(其中为惩罚系数).
⑷将以上个体作为第代,记录此代最高适应值的个体为当前最高适应度个体;
0⑸当此代适应值不满足最高要求并且当前代数小于初始化设定最大值时,进行①~⑥循环,否则,程序黄娟:背包问题的遗传算法求解及其改进
0-1n 3()O n i i p s n m i i i i p i w i w ≤i p =+(i p k =+∗i w −)+k
- 15 -进入⑹;
①选择:按照每个个体的适应值得到它的选择概率这里假设这个种群的适应值范围为~,利用(12000)轮盘赌方法,即随机产生个~之间的整数,看此数落在那个个体的适应度范围内,则将那个个体选112000择到下一代,从而产生下一代被选择的个体群;
②杂交:以概率随机每次选择个个体进行杂交,即随机产生个~之间的整数,(假定
221 ),将个个体从第位到位进行杂交;
2 ③变异:以概率每次选择一个当前个体群中的适应值最差的个体进行变异,即首先在当前个体群中找
出适应值最差的个体,然后,随机产生个~之间的整数,在此个体的第位上进行变异,最后,将新11n 产生的个体的适应值与原个体的适应值相比较,若有提高则此次个体变异成功,原个体被变异,否则,重新随机选择变异位,如试次,若始终不能高于原个体的适应值,则保留原个体;
4④计算此代的适应值,方法同⑶;
⑤找适应值最差的个体,将其无条件改成贪心解;
⑥用此代最高适应度的个体适应值与上次所记录的最高适应度的适应值比较,若比上一次好,则将此个体记录为当前最高适应度个体.
⑹结束后,打印最佳解的选择个数及所选物品的总价格数和总重量数.
结果分析
4 结合实例,将贪心算法和混合遗传算法进行比较(见表一),结果表明利用混合遗传算法求解背包问0-1题,其所得解跟最优解之间的平均误差在~之间,最大误差为,所以混合遗传算法优于单纯的贪2%3%3%心算法和标准遗传算法.
表一实验误差
改进的混合遗传算法增强了种群的进化能力,并在一定程度上克服了早熟现象.由于遗传算法其自身的并行性,若在并行机上运行遗传算法将可增大群体的规模,大大提高算法的效率并得到更优解,并行遗传算法也将是今后遗传算法研究的主要方向之一.
参考文献:
张文修,梁怡.遗传算法的数学基础.西安:西安交通大学出版社,:.
[1][M]200020-54张国良,王煦法,庄镇泉,王东生.遗传算法及其应用.北京:人民邮电出版社,:.
[2][M]1996130-136霍红卫.算法设计与分析.西安:西安电子科技大学出版社,:.
[3][M]200598-101张洁,朱莉娟.贪心算法与动态规划的比较.新乡师范高等专科学校学报,,():.
[4][J]200519518-20黄波,蔡之华.背包问题及其解法研究.电脑知识与技术(学术交流),,():.
[5]0/1[J]200727229-231河西学院学报年第期 20102
c p 1k n 2k 21k k >1k 2k m p k k 物件数贪心算法%混合遗传算法%
40 13.75 4.75
6013.75 4.01
708.62 3.25
80 2.56 1.37
95 1.800.72
110 1.530.56
115 1.490.47
130 1.43
0.41责任编辑:张飞羽[]。

相关文档
最新文档