问题描述:
n个重量不同的物体放入k个有重量限制的箱子。
**
数学公式表达:
编码方式:
①基于箱子的编码表示。用基因的位置表示物品,基因的值表示该物品所放入的箱子;
②基于物品的编码表示。只对物品的排列进行编码,然后应用解码器得到其对应的解。
染色体结构:基因的位置代表箱子,基因的值代表所要放入的所有物品。
种群初始化类似贪心,装到装不下为止。
双亲双子交叉算子,
步骤:
步骤 1 从两个父代中各随机选择两个交叉位置,从而对 每个父代选定交叉部分。
步骤 2 将第 1 个父代交叉部分的内容插入到第 2 个父 代第 1 个交叉位置之前。由于交叉对染色体的部分群体进行 操作,这就意味着从第 1 个父代插入一些群体(箱子)到第 2 个 父代中。
步骤 3 从产生的后代中,去掉所有装有重复出现的物品 的箱子,并使得这些物品原先的从属关系让位于“新”插入的 箱子。如果有消失的箱子,则用优先配合启发式方法 (first-fit heuristic,FFH)将物品放入箱子中。
FFH 是指将每个物品放入 其能够放入的最小下标的已初始化箱子中,如果当前物品无 法放入任何已初始化的箱子,则放入一个新箱子。
步骤 4 改变两个父代的角色并重新应用第 2 步到第 3 步生成第 2 个子代。
本来我也没看懂这个交叉,但是这是双亲,应该就能理解了。
变异算子:
变异的基本策略为随机消除一个已经使用的箱子。消除的箱子中的物品用上述 FFH 启发式方法插入染色体中。
适应值函数
式中: N——染色体中使用的箱子数量, Fi——第 个箱子中所有物品的重量之和(箱子的填充程度),C是箱子的重量限制, k是常数( k>1)。常数k表示了对装得满的箱子的重视程度。 箱子填的越满,k越大。根据计算经验,k = 2 得到的结果较好。 N越小 (使用的箱子数量越少),Fi越大 (箱子填的越满), fbpp就越大。