遗传算法(genetic algorithm,GA)是计算数学中用于解决最优化问题的搜索算法,是进化算法的一种。进化算法最初是借鉴了达尔文进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。
遗传算法通常实现方式为一种计算机模拟。对于一个最优化问题,一定数量的候选解(称为个体)可抽象表示为染色体,使种群向更好的解进化。传统上,解用二进制表示(即0和1的串),但也可以用其他表示方法。进化从完全随机个体的种群开始,之后一代一代发生。在每一代中评价整个种群的适应度,从当前种群中随机地选择多个个体(基于它们的适应度),通过自然选择和突变产生新的生命种群,该种群在算法的下一次迭代中成为当前种群。
基本的遗传算法以初始种群为起点,经过自然选择、交叉和突变操作生成新的种群,经过反复更新种群直到寻找到最优解。其计算步骤如下:
- 编码:将问题空间转换为遗传空间;
- 生成初始种群:随机生成P个染色体;
- 种群适应度计算:按照确定的适应度函数,计算各个染色体的适应度;
- 选择:根据染色体适应度,按照选择算子进行染色体的选择;
- 交叉:按照交叉概率对被选择的染色体进行交叉操作,形成下一代种群;
- 突变:按照突变概率对下一代种群中的个体进行突变操作;
- 返回第3步继续迭代,直到满足终止条件。
背包问题(Knapsack Problem)是一个典型的组合优化问题,在计算理论中属于NP-完全问题, 其计算复杂度为 O(2n) ,传统上采用动态规划来求解。设 s[i] 是经营活动 i 所需要的资源消耗,
0/1背包问题的一般提法是:已知n个物品的体积为
size={
s1,s2,...,sn},si>0
其价值(或收益)是
value={
v1,v2,...,vn},vi>0
背包的容量(contain)假设设为 C ,如何选择哪些物品装入背包可以使得在背包的容量约束限制之内所装物品的价值最大?
更形式地,求解一个有
f(x1,x2,.