system: [SYSTEM]

user: 3. 新型离散粒子群优化(NDPSO) 离散化粒子群优化算法的关键是如何定义PSO算法的基本运算规则 [ 7 ] ：位置的减法运算，即两个位置相减得到一个速度；速度的数乘运算，即一个数乘上一个速度后得到另一个速度；速度的加法运算，即两个速度相加得到另一个速度；粒子的移动，即位置与速度相加后得到一个新的位置。本节基于交叉算子、领域搜索算子和PSO算法信息更新的本质机理深入讨论该问题，提出一种新型的离散粒子群优化算法NDPSO。 3.1. 粒子位置与位置的减法及速度数乘的复合运算 在标准PSO算法的公式(1)中 c 1 ( p i d ( t ) − x i d ( t ) ) 与 c 2 ( p g d ( t ) − x i d ( t ) ) 分别表示粒子的历史最优位置和群体的最优位置对粒子新位置的影响。粒子位置与粒子位置的减法运算结果为粒子的速度，相当于遗传算法中的交叉算子；然后分别根据粒子的自学习系数 c 1 和社会学习系数 c 2 对速度 ( p i d ( t ) − x i d ( t ) ) 和速度 ( p g d ( t ) − x i d ( t ) ) 进行调节， ξ 与 η 相当于遗传算法中的交叉概率。 Murata等 [ 11 ] 提了置换流水车间调度问题最好的交叉算子(crossover for permutation flowshop scheduling， CPFS)：按交叉概率随机地从种群中选择两个个体作为父体，对于每个个体选取最先与最后回溯的工件位置作为交叉点，如果回溯工件个数小于(或等于) 1，则随机选择某两个(或一个)工件位置作为交叉点。首先将两个位置之前和之后的基因进行交叉复制，再按照父体中原来工件排列的顺序修补交叉部分中未包含的基因，该交叉操作既可以尽可能多地保留没有发生回溯的工件位置信息，又可以继承父染色体中工件之间的相对位置信息。如图1所示。 因此，定义粒子位置与位置的减法及速度数乘的复合运算 V = c × ( X a − X b ) 如下： 设速度 V = ( v 1 ， v 2 ， ⋯ v i ， ⋯ ， v n ) ，位置 X a = ( x 1 a ， x 2 a ， ⋯ x i a ， ⋯ ， x n a ) ，位置 X b = ( x 1 b ， x 2 b ， ⋯ x i b ， ⋯ ， x n b ) 均是 n 维的行向量，常数 c ∈ [ 0 ， 1 ] 。 V 的产生过程是生成 [ 0 ， 1 ] 之间的随机数 r a n d (   ) ，若 r a n d (   ) < c ，则以 X a 和 X b 为父体，随机选择某两个(或一个)工件位置作为交叉点，首先将两个位置之前和之后的部分进行交叉复制，然后按照父体中原来工件排列的顺序补齐交叉部分中没有包含的基因，再从两个子体中选取目标值较优的为 V ；否则， V = X b 。 3.2. 常数与速度的乘法 在标准PSO算法中，常数与粒子速度的乘法运算结果为粒子的速度，相当于遗传算法中的变异算子。如，公式(1)中 ω v i d ( t ) 表示粒子的历史速度对新速度的影响，即惯性权重 ω 对速度 ω v i d ( t ) 的调节。公式(1)中 ω 、 c 1 ξ 和 c 2 η 相当于遗传算法中的变异概率。 在遗传算法中变异的目的是保持种群的多样性，邻域搜索是一种有效的求解大规模组合优化问题的优化方法，能够以初始解为基础遍历解空间，即其满足种群多样性的需求；特别地，通过邻域函数产生新解仍然在组合优化问题的解空间。邻域搜索算子主要包括移动Swap(x， y)、插入Insert(x， y)和3-opt等方式 [ 12 ] [ 13 ] 。如图2和图3所示。 图1. CPFS过程示意图 图2. Insert(x， y)过程示意图 图3. Swap(x， y)过程示意图 对于3-opt，任选节点 i ， j ， k ( i < j < k ) ，删除边 ( i ， i + 1 ) ， ( j ， j + 1 ) ， ( k ， k + 1 ) ，为了避免将某部分路径反转(方向性变化使这部分路径的长度不可预计)，只能连接新边 ( i ， j + 1 ) ， ( j ， k + 1 ) ( k ， i + 1 ) 形成唯一的新路径，交换过程如图4所示，称这种3-opt为正方向3-opt (positive direction 3-opt， PD3opt)。 因此，定义常数与速度的乘法 V ′ = c ⋅ V 如下： 设速度 V ′ = ( v ′ 1 ， v ′ 2 ， ⋯ ， v ′ i ， ⋯ ， v ′ n ) ，速度 V = ( v 1 ， v 2 ， ⋯ ， v i ， ⋯ ， v n ) 均是 n 维的行向量，常数 c ∈ [ 0 ， 1 ] ， 1 ≤ i ≤ n 。 V ′ 的产生过程如下： Step 1：生成 [ 0 ， 1 ] 之间的随机数 r a n d (   ) ， [ 1 ， n ] 之间的随机整数 r a n d I n t (   ) ，令 t = 0 ， V ′ = V ； Step 2： t + + ; if t ≤ r a n d I n t (   ) ， then go to Step 3; otherwise， go to Step 4； Step 3：if r a n d (   ) ≤ c ， then以 V 为初始解，随机选取邻域搜索算子Swap(x， y)、Insert(x， y)和PD3opt进行邻域搜索，并根据目标函数值更新 V ′ ；otherwise， go to Step 4； Step 4：stop， output. 3.3. 速度与速度加法的复合运算 在标准PSO算法中，粒子速度与粒子速度加法的运算结果为粒子的速度。并依据进化算法中“优胜劣汰”的基本规律。因此，定义 V ′ = V + V p + V g 如下： 设某粒子的当前速度 V = ( v 1 ， v 2 ， ⋯ ， v i ， ⋯ ， v n ) ，粒子与自己的历史最优位置运算所得速度 V p = ( v 1 p ， v 2 p ， ⋯ ， v i p ， ⋯ ， v n p ) ，粒子与全局最优位置运算所得速度 V g = ( v 1 g ， v 2 g ， ⋯ ， v i g ， ⋯ ， v n g ) ，粒子的新速度 V ′ = ( v ′ 1 ， v ′ 2 ， ⋯ ， v ′ i ， ⋯ ， v ′ n ) ，则以 V 、 V p 和 V g 两两之间形成父体，选取CPFS算子以概率1进行优化，选择较优的子体为 V ′ 。 3.4. 速度与位置的加法运算 在标准PSO算法中，粒子速度与粒子位置加法的运算结果为粒子的位置。并依据进化算法中“优胜劣汰”的基本规律。因此，定义 X ′ = X ⊕ V 如下： 设某粒子的当前速度 V = ( v 1 ， v 2 ， ⋯ ， v i ， ⋯ ， v n ) ，粒子的新位置 X ′ = ( x ′ 1 ， x ′ 2 ， ⋯ ， x ′ i ， ⋯ ， x ′ n ) ，则以 V 与 X 形成父体，选取CPFS算子以概率1进行优化，选择较优的子体为 X ′ 。 3.5. NDPSO中粒子速度和位置的更新公式 重新定义粒子的基本运算后，粒子速度和位置的更新公式如下： 图4. PD3opt过程示意图 V t p = c 1 × ( X p − X t ) (4) V t g = c 2 × ( X g − X t ) (5) V t + 1 = ( ω ⋅ V t ) + V t p + V t g (6) X t + 1 = X t ⊕ V t + 1 (7) 其中，式(4)表示由粒子的第 t 代位置向量 X t ，粒子自己的历史最优位置向量 X p 和粒子对局部最优解的信任概率 c 1 ∈ [ 0 ， 1 ] ，计算第 t 代的局部速度向量 V t p ； 式(5)表示由粒子的第 t 代位置向量 X t ，全局最优位置向量 X g 和粒子对全局最优解的信任概率 c 2 ∈ [ 0 ， 1 ] ，计算第 t 代的全局速度向量 V t g ； 式(6)表示由粒子的第 t 代速度向量 V t ，惯性权重 ω ∈ [ 0 ， 1 ] ，局部速度向量 V t p ，全局速度向量 V t g ，计算第 t + 1 代的速度向量 V t + 1 ； 式(7)表示由粒子的第 t 代位置向量 X t ，速度向量 V t ，局部速度向量 V t p ，全局速度向量 V t g ，计算第 t + 1 代的位置向量 X t + 1 。