system: [SYSTEM]

user: 4. 多层编码遗传算法解决VRP问题的实现 遗传算法本身有较强的问题求解能力，能够解决非线性优化问题。对于简单的问题来说，染色体可以方便地表达问题的潜在解，然而，对于较为复杂的优化问题，一个染色体难以准确的表达问题的解 [ 16 ] 。本文在传统遗传编码的基础上，结合车辆调度的实际情况，应用多层编码遗传算法，把个体分为多层，定义每层编码均表示不同的含义，通过多层编码完整表达了问题的多项参数，以及最终的解。多层编码遗传算法扩展了遗传算法的使用领域，使得遗传算法可以方便用于复杂问题求解 [ 11 ] [ 17 ] [ 18 ] [ 19 ] 。 4.1. 模型构建 车辆路径问题是根据供应商和需求商相互之间的供求关系，从而达到合理利用资源，提高经济效益的目的。在多层编码中，车辆路径可以描述为m个供应商要配送物品到n个需求点，其中运输批次的不同表示每批次运输的货物种类的等有区别，该数学模型可以描述为 1) 供应集 M = { m 1 ， m 2 ， ⋯ ， m m } ，m j 表示第j个需求点， j = 1 ， 2 ， ⋯ ， m 。 2) 需求集 P = { p 1 ， p 2 ， ⋯ ， p n } ，m j 表示第i个供应点， i = 1 ， 2 ， ⋯ ， n 。 3) 路径序列集 O P = { o p 1 ， o p 2 ， ⋯ ， o p n } ， o p i = { o p i 1 ， o p i 2 ， ⋯ ， o p i k } ，表示供应商车辆所运送对应物资op i 的运输批次。 4) 可提供相关所需物资的供应商的集合表示为 O P M = { o p i 1 ， o p i 2 ， ⋯ ， o p i k } 其中 o p i k = { o p i j 1 ， o p i j 2 ， ⋯ ， o p i j k } ，表示物资op i 的运输批次j可选择的供应商。 5) 时间矩阵T， t i j ∈ T ，表示第i个供应商p i 第j批次到达目的地的时间。 6) 代价矩阵C， c i j ∈ C ，表示第i个供应商p i 第j批次到到达目的地的各方面代价总和。 4.2. 算法实现 1) 个体编码 采用整数排列编码方法。每个染色体表示全部供应商的运输顺序，当需求点的总数量为n，送达需求商n i 所需物资的供应商为m j 时，则个体表示长度为 2 ∑ i = 1 k n i m j 的整数串。其中，染色体的前半部分表示需求商在选择供应商编号的运输序列，后半部分表示每次运输的对应的供应商的序号。如个体： [2 4 3 1 1 2 3 4 2 1 3 3 2 2 1 3] 该个体表达了4个运输序列都是2次，由3个供应商配送的运输顺序，其中，前8位表示车辆的运输顺序，为需求商2 → 需求商4 → 需求商3 → 需求商1 → 需求商1 → 需求商2 → 需求商3 → 需求商4；9到16为表示所提供对应物资的供应商点，依次为供应商2 → 供应商1 → 供应商3 → 供应商3 → 供应商2 → 供应商2 → 供应商1 → 供应商3。 2) 适应度值 设染色体的适应度值为全部供应完成时间，适应度值计算公式为 (11) 其中，time指全部任务完成时间，全部任务完成时间越短，该染色体越好。 3) 选择操作 选择操作采用轮盘赌法选择适应度较好的染色体，个体选择概率为 p i ( i ) = Fitness ( i ) / ∑ i − 1 n Fitness (i) (12) 其中，pi(i)表示染色体i在每次选择中被选择的概率。 4) 交叉操作 种群通过交叉操作获得心染色体，从而推动整个种群向前进化，交叉操作首先从种群中随机选取两个染色体，并取出每个染色体的前 ∑ i = 1 k n i m j 位，然后随机选择交叉位置进行交叉。 如： 个体- [ 112   3   2   2   3   31112121222 ] → 交 叉 [ 221322331112121222 ] 极值- [ 22133121311221   211   1 ] → 交 叉 [ 11233121311221   211   1 ] 5) 变异操作 种群通过变异操作获得新的个体，从而推动整个种群向前进化。变异算子首先从种群中随机选取变异个体，然后选择变异位置pos1和pos2，最后把个体中pos1和pos2位的运输序列以及对应的需求点序号对换，如交叉位置为2和4时： 个体- [ 221322331112121222 ] → 交 叉 [ 231222331112121222 ] 6) 计算交叉以及编译操作后适应度(即时间代价)值。 4.3. 算例 4.3.1. 配送案例 构建某地区，有6个需求商，根据需求需要6种不同的物资。供应商的数量为10个，能提供的车辆数为10辆(每个供应商对应1辆车)。分别按照一定要求为6个需求点送货。假设每个供应商的车辆均符合统一标准，即车辆载重能满足运输需求；车辆的最大行驶距离能够满足一次完整的OD行程。根据实际需求，每个供应商所提供的物资运到不同所需需求商的路径代价不同，本文路径代价的计算，就基于上一章对各影响因素的层次分析所得出的不同权重比，其中本文算例的供需对应关系随机生成，运输距离随机生成，货物数量(重量)随机生成，货物的在途时间只考虑与运输距离的线性关系，线路状态假设为同等条件，应用式(10)，进行综合计算。每个供应商可提供的需求商需求物资如表3所示。具体的路径代价向权图如表4所示。两个表是结合对应的，如可以把物资运到需求商1的供应商选择为3号车辆运送时，最终的代价函数为3，选择10号供应商的车辆运送的代价为5。目标需求就是规划出一次整体代价最小的路径系统。 供应商不同批次的供应需求表如下。 Table 3 Supply and demand materials supply and demand correspondence tabl 供应集 物资原料1 物资原料2 物资原料3 物资原料4 物资原料5 物资原料6 需求商1 [3， 10] 2 [3， 9] 4 5 2 需求商2 1 3 [4， 7] [1， 9] [2， 7] [4， 7] 需求商3 2 [5， 8] [6， 8] [3， 7] [3， 10] [6， 9] 需求商4 [4， 7] [6， 7] 1 [2， 8] [6， 9] 1 需求商5 [6， 8] 1 [2， 10] 5 1 [5， 8] 需求商6 5 [4， 10] 5 6 [6， 8] 3 表3. 供需商物资供需对应表 Table 4 Transport final cost lis 供应集 物资原料1 物资原料2 物资原料3 物资原料4 物资原料5 物资原料6 需求商1 [15， 25] 30 [5， 20] 35 30 10 需求商2 50 40 [25， 35] [20， 15] [50， 60] [20， 35] 需求商3 45 [5， 20] [25， 30] [20， 30] [35， 45] [30， 45] 需求商4 [25， 20] [25， 30] 25 [15， 25] [40， 40] 5 需求商5 [15， 15] 15 [45， 55] 25 25 [25， 40] 需求商6 50 [15， 15] 5 15 [20， 35] 15 表4. 运输最终代价表 结合点到点之间一对一的影响因素综合分析，应用层次分析法综合得到评价矩阵系数如下：例供应商3号车辆运送原料1给需求商1，其路径长度为30 km，载重量10 kg，运输时间3小时，道路破损顿规定为1。 C i j = 30 × 0.4154 + 10 × 0.1703 + 3 × 0.3159 + 1 × 0.098 计算后的最终代价为15。 4.3.2. 配送方案验证 通过matlab软件，应用所提出的算法对某一案例进行仿真验证。 试验结果得出完成该地这次运输任务的最短评价标准，以及最优调度方案图如图4所示。同时在最大迭代次数为50的条件下，通过多层编码遗传算法需要迭代10次得到最优结果，有一个较好的收敛结果，如图3所示。 图3. 迭代次数图 基于多层编码遗传算法得到的左右规划调度图如图4所示，其中纵坐标表示供应商编号车辆；横坐标表示代价。例如供应商1号车辆中，601表示把第1种物资运送到6号需求商。横坐标对应于改长度的绝对值是该次运输的代价。 图4. 车辆调度图 针对于本案例中小型规模的实际运输问题，我们以一个最直观的角度去计算。即优先选择代价表中的最小值进行配送，如优先选在1号车辆，为需求商4运输物资原料6；5号车辆为需求上6运输物资原料3。通过直观的认为判断，最终得出的总体代价值(315)要大于本论文所提出的方法得到的最终结果(260)。对于更大规模的该类问题，往往也无法通过直观的判断得出结论。而本文中可以通过改变改进遗传算法的种群规模M和迭代次数GEN来适应不同规模的问题，验证改进算法同时具有一个优于传统算法的收敛精度和速度。