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

遗传算法(genetic algorithm,GA)是计算数学中用于解决最优化问题的搜索算法,是进化算法的一种。进化算法最初是借鉴了达尔文进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。

遗传算法通常实现方式为一种计算机模拟。对于一个最优化问题,一定数量的候选解(称为个体)可抽象表示为染色体,使种群向更好的解进化。传统上,解用二进制表示(即0和1的串),但也可以用其他表示方法。进化从完全随机个体的种群开始,之后一代一代发生。在每一代中评价整个种群的适应度,从当前种群中随机地选择多个个体(基于它们的适应度),通过自然选择突变产生新的生命种群,该种群在算法的下一次迭代中成为当前种群。

基本的遗传算法以初始种群为起点,经过自然选择交叉突变操作生成新的种群,经过反复更新种群直到寻找到最优解。其计算步骤如下:

  1. 编码:将问题空间转换为遗传空间;
  2. 生成初始种群:随机生成P个染色体;
  3. 种群适应度计算:按照确定的适应度函数,计算各个染色体的适应度;
  4. 选择:根据染色体适应度,按照选择算子进行染色体的选择;
  5. 交叉:按照交叉概率对被选择的染色体进行交叉操作,形成下一代种群;
  6. 突变:按照突变概率对下一代种群中的个体进行突变操作;
  7. 返回第3步继续迭代,直到满足终止条件。

背包问题(Knapsack Problem)是一个典型的组合优化问题,在计算理论中属于NP-完全问题, 其计算复杂度为 O(2n) ,传统上采用动态规划来求解。设 s[i] 是经营活动 i 所需要的资源消耗, C 是所能提供的资源总量, v[i] 是人们经营活动i得到的利润或收益,则背包问题就是在资源有限的条件下, 追求总的最大收益的资源有效分配问题。

0/1背包问题的一般提法是:已知n个物品的体积为

size={ s1,s2,...,sn},si>0

其价值(或收益)是
value={ v1,v2,...,vn},vi>0

背包的容量(contain)假设设为 C ,如何选择哪些物品装入背包可以使得在背包的容量约束限制之内所装物品的价值最大?
更形式地,求解一个有 n 个元素的集合 { x1,x2,...,xn},xi0,1 ,使得目标函数
f(x1,x2,.
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值