软时间约束的TSP问题

一、问题简化

       l: 城市数

       软时间约束的TSP问题 :从城市i到城市j的运输成本

       软时间约束的TSP问题 :0-1变量,0代表路线中没有i->j,1代表有

      软时间约束的TSP问题 : 从i->j花费时间

      软时间约束的TSP问题 : 到达j的时间

     软时间约束的TSP问题 : 规定允许到达j的最早时间

       软时间约束的TSP问题 :规定允许离开j的最晚时间

      软时间约束的TSP问题  : 早到,等待时间惩罚值

       软时间约束的TSP问题  : 晚到,推迟时间惩罚值

目标函数:
软时间约束的TSP问题

注:软时间约束的TSP问题 中第一部分:不考虑约束的成本;第二部分:早到的惩罚项;第三部分:晚到惩罚项

二、算法介绍

1. Memetic算法

       与遗传算法类似,但在交叉和变异步骤增加了局部搜索。加速了迭代速度,每次求出较优解,优化种群结构,可以避免早熟现象,但有可能陷入局部最优。可以通过调整变异操作进行优化。

                                         软时间约束的TSP问题

2. 编码方式

       采取排列编码,如{3,1,4,5,2,(3)}代表5个城市的经历顺序。

 

3. 适应度函数设计

       目标函数软时间约束的TSP问题 要取的是最小值。那么我们的适应度函数可以设计为:软时间约束的TSP问题

 
软时间约束的TSP问题

 

用第一种设计时maxvalue不方便设置,因为根据不同单位有可能软时间约束的TSP问题 本身就有很大的值出现;推荐使用第二种设计,因为实际的TSP问题中权值都是正值,所以软时间约束的TSP问题 都是正值,此时c可以随意取。

4. 交叉变异策略

  1. 单点交叉:选择一个交叉点,子代的从初始位置出发的部分从一个基因复制,然后在另一个基因中扫描,如果某个位点在子代中没有,就把它添加进去。如:软时间约束的TSP问题
  2. 部分匹配交叉: 先随机产生两个交叉点,定义这两点间的区域为匹配区域,并用交换两个父代的匹配区域。软时间约束的TSP问题
  3. 顺序交叉: 从父代A随机选一个编码子串,放到子代A的对应位置;子代A空余的位置从父代B中按B的顺序选取(与己有编码不重复),同理可得子代B。即单点交叉→两点交叉软时间约束的TSP问题
  4. 循环交叉:CX同OX交叉都是从一个亲代中取一些城市,而其它城市来自另外一个亲代,但是二者不同之处在于:OX中来自第一个亲代的编码子串是随机产生的,而CX却不是,它是根据两个双亲相应位置的编码而确定的。软时间约束的TSP问题

由于顺序交叉可以有效得保留父代一部分序列并且融合不同序列得有序结构,推荐使用顺序交叉法。

变异操作:以概率软时间约束的TSP问题 任取两个节点进行交换。

软时间约束的TSP问题

5. 局部搜索策略

       Step1: 设置参数P,生成随机数p=random(0,1)

       Step2: 若p < P , 使用贪婪法(可以使用贪婪倒位算子)进行局部搜索优化;否则,使用递归弧插入算子进行局部优化。

       Step3:改变参数P来调节两种算子权重,回到第一步

 

 

注:贪婪倒位算子:如一个体I={65,3,7,2,4,19,8,(6)}

           

  1. 随机选择一个城市,如选取了3,与3相邻的是5和7,取二者中距离3较远者比如是5.
  2. 从与3不相邻的城市中选择与之最接近的城市,比如是1
  3. 对所选取的两个城市节点相邻(不含3)的编码进行倒位,得到新的个体I’={91,3,7,2,4,56,8,(6)}

       递归弧插入算子:同样假设个体为{6,5,3,7,2,4,1,9,8,(6)}

  1. i(这里是6)为初始节点,选取另一节点j满足j i.next,比如选择了2;设置count=0
  2. 调整顺序使ij相连,删去6->5,7->2即删去i的下个节点aj的上个节点b,并使i成为j的下个节点. 计算软时间约束的TSP问题 ,并设置count=count+1.
  3. 再从j~i之间的节点上选择两个节点(m,n)≠(i,j),比如这里选择了(1,8),满足软时间约束的TSP问题,其中软时间约束的TSP问题.如果成功找到了(m,n),就进入步骤d否则进入步骤e.
  4. 连接(i,j),(m,a),(b,n),删除(i,a),(b,j),(m,n),此时个体变为{i,j,…,m,a,..,b,n,…,(i)}. 比如如果上述假设步骤的各个节点满足,此时个体变为{6,2,4,1,5,3,7,8,(6)}
  5. 若count=2,则终止调整,返回个体(认为是最优);否则返回步骤b重新调整

相关文章: