混沌映射可行性恢复粒子群优化算法
原始PSO框架的局限性:原始PSO算法容易出现早熟收敛、初始阶段多样性不足、容易陷入局部最优等问题,这些缺点限制了其有效性,特别是应用于像两阶段NFCTP这样的复杂、大规模优化问题时。
1.粒子群优化
粒子群优化(PSO)[30] 是一种广泛认可的进化算法,用于解决各种工程和现实生活中的优化问题。受鸟类和鱼类的社会行为启发,特别是鸟类的群体行为和鱼类的集群现象,Kennedy 和 Eberhart 引入了粒子群优化。在PSO中,每个个体(代表一只鸟或一条鱼)的速度和位置根据全局最佳位置( g best g_{\text{best}} gbest)和个体的个人最佳位置( p best p_{\text{best}} pbest)进行更新,如下所示:
{ v i , k ( t + 1 ) = ω ⋅ v i , k ( t ) + c 1 r 1 ⋅ ( x p best , i ( t ) − x i , k ( t ) ) + c 2 r 2 ⋅ ( x g best ( t ) − x i , k ( t ) ) , x i , k ( t + 1 ) = x i , k ( t ) + v i , k ( t + 1 ) , \begin{cases} v_{i,k}(t + 1) \\ = \omega \cdot v_{i,k}(t) + c_1 r_1 \cdot (x_{p_{\text{best},i}}(t) - x_{i,k}(t)) + c_2 r_2 \cdot (x_{g_{\text{best}}}(t) - x_{i,k}(t)), \\ x_{i,k}(t + 1) = x_{i,k}(t) + v_{i,k}(t + 1), \end{cases} ⎩ ⎨ ⎧vi,k(t+1)=ω⋅vi,k(t)+c1r1⋅(xpbest,i(t)−xi,k(t))+c2r2⋅(xgbest(t)−xi,k(t)),xi,k(t+1)=xi,k(t)+vi,k(t+1),
其中
v
i
,
k
v_{i,k}
vi,k 和
x
i
,
k
x_{i,k}
xi,k 分别表示第
i
i
i 个个体在第
k
k
k 个搜索空间中的速度和位置。参数
c
1
c_1
c1、
c
2
c_2
c2 和
ω
\omega
ω 在影响PSO的性能方面起着至关重要的作用,只有通过仔细调整才能获得最佳结果。文献[18]、[66]、[67]、[68]中的许多研究集中在通过各种机制微调这些控制参数来增强PSO性能。以下小节探讨了有效调整这些参数的最新机制和进展。PSO的工作过程在算法1中详细说明。
2. 混沌理论与混沌映射
混沌理论研究混沌系统的动力学,其特征是非线性和对初始条件的极端敏感性。即使在这些条件下的微小变化也可能导致系统结果的显著变化。尽管看起来是随机的,混沌系统可以在不依赖随机性的情况下表现出不规则的行为,因为确定性系统也可以表现出混沌行为。最近,这些独特的特性被用来增强元启发式算法的性能。
此外,混沌映射具有遍历性、非线性和发散性特性,类似于非线性动态系统中常见的随机过程。这些映射高度敏感,严重依赖于它们的初始化条件和参数[70]。混沌映射的数学表示通常在公式(4.2)中表达,其中 c h ( t ) ch(t) ch(t) 表示一个混沌序列,该序列结合了从0到1或-1到1的随机数。
c h ( t + 3 ) = f ( c h ( t ) ) ; 0 < c h ( t ) < 1 或 − 1 < c h ( t ) < 1 ; ∀ t = 1 , 2 , … , t max . (4.2) ch(t + 3) = f(ch(t)); \quad 0 < ch(t) < 1 \quad \text{或} \quad -1 < ch(t) < 1; \quad \forall t = 1, 2, \ldots, t_{\max}. \tag{4.2} ch(t+3)=f(ch(t));0<ch(t)<1或−1<ch(t)<1;∀t=1,2,…,tmax.(4.2)
由于它们的高敏感性,混沌映射的初始参数值显著影响它们的行为。即使这些参数的微小变化也可能导致剧烈的输出变化,这可能并不总是理想的。因此,为混沌映射选择合适的初始值[71]是至关重要的,需要仔细考虑。
此外,混沌映射在增强元启发式优化能力方面提供了几个优势[72],[73],如下所述:
(i) 这些映射的混沌特性增强了搜索算法的探索和开发能力。
(ii) 它们向算法引入了增加的随机性,可能改善全局性能。
(iii) 混沌映射有助于防止算法收敛到局部最优解。
(iv) 它们增加了初始种群的多样性,提高了全局搜索精度和收敛速度。
(v) 混沌映射具有简单的公式,与元启发式算法一起实现时不增加额外的计算成本,从而保持一致的时间和空间复杂度水平。
表4列出了用于CEPSO的十个选定的混沌映射,在区间(0, 1)或(-1, 1)内生成混沌数。这些混沌映射的图形所示。
对应代码:
function O=chaos(index,curr_iter,max_iter,Value)
x(1)=0.7;
switch index
%Chebyshev map
case 1
for i=1:max_iter
x(i+1)=cos(i*acos(x(i)));
y(i)=((x(i)+1)*Value)/2;
end
case 2
%Circle map
a=0.5;
b=0.2;
for i=1:max_iter
x(i+1)=mod(x(i)+b-(a/(2*pi))*sin(2*pi*x(i)),1);
y(i)=x(i)*Value;
end
case 3
%yauss/mouse map
for i=1:max_iter
if x(i)==0
x(i+1)=0;
else
x(i+1)=mod(1/x(i),1);
end
y(i)=x(i)*Value;
end
case 4
%Iterative map
a=0.7;
for i=1:max_iter
x(i+1)=sin((a*pi)/x(i));
y(i)=((x(i)+1)*Value)/2;
end
case 5
%Loyistic map
a=4;
for i=1:max_iter
x(i+1)=a*x(i)*(1-x(i));
y(i)=x(i)*Value;
end
case 6
%Piecewise map
P=0.4;
for i=1:max_iter
if x(i)>=0 && x(i)<P
x(i+1)=x(i)/P;
end
if x(i)>=P && x(i)<0.5
x(i+1)=(x(i)-P)/(0.5-P);
end
if x(i)>=0.5 && x(i)<1-P
x(i+1)=(1-P-x(i))/(0.5-P);
end
if x(i)>=1-P && x(i)<1
x(i+1)=(1-x(i))/P;
end
y(i)=x(i)*Value;
end
case 7
%Sine map
for i=1:max_iter
x(i+1) = sin(pi*x(i));
y(i)=(x(i))*Value;
end
case 8
%Sinyer map
u=1.07;
for i=1:max_iter
x(i+1) = u*(7.86*x(i)-23.31*(x(i)^2)+28.75*(x(i)^3)-13.302875*(x(i)^4));
y(i)=(x(i))*Value;
end
case 9
%Sinusoidal map
for i=1:max_iter
x(i+1) = 2.3*x(i)^2*sin(pi*x(i));
y(i)=(x(i))*Value;
end
case 10
%Tent map
x(1)=0.6;
for i=1:max_iter
if x(i)<0.7
x(i+1)=x(i)/0.7;
end
if x(i)>=0.7
x(i+1)=(10/3)*(1-x(i));
end
y(i)=(x(i))*Value;
end
end
O=y(curr_iter);
- 提出的可行性恢复PSO和混沌映射
在本节中,我们全面讨论了为解决两阶段NFCTP而提出的CEPSO的操作程序,这是对原始PSO的修改。为此,在原始PSO中实施了各种关键修改,以增强其在解决两阶段NFCTP中的有效性,例如:
(i) 建议一种新的初始化程序来解决两阶段NFCTP。这是必要的,因为随机生成的解决方案可能需要更多的可行性。
(ii) 将十个混沌映射引入原始PSO的加速系数中。这种结合在每次迭代中引入了粒子运动的随机扰动。利用这些参数,CEPSO的动态特性比传统的PSO变得更加复杂。
(iii) 提出了修复负值和分数值的创新机制,以纠正负值和分数解,确保整体可行性。这些机制在优化过程中维护解决方案的完整性方面起着至关重要的作用。
5.1 初始化程序
如我们所知,PSO在搜索空间的边界内随机初始化整个种群。然而,这种方法可能不适合两阶段NFCTP,因为随机初始化的种群可能不满足供需约束。为了解决这个问题,我们从我们之前关于单阶段运输问题的工作[57]中汲取灵感,并在本文中提出了一种新的两阶段运输初始化程序。详细的初始化程序在算法2和图3中解释,这满足了两阶段NFCTP的要求。
简而言之,我们首先生成一个由子矩阵
R
1
R_1
R1、
R
2
R_2
R2(对角矩阵)和
O
1
O_1
O1、
O
2
O_2
O2(反对角矩阵)组成的块矩阵
R
R
R。在
R
R
R 中,对角矩阵
R
1
R_1
R1 和
R
2
R_2
R2 是随机生成的,而反对角矩阵
O
1
O_1
O1 和
O
2
O_2
O2 是两个零矩阵。同样,我们用四个零子矩阵(
Y
Y
Y、
Z
Z
Z、
O
1
O_1
O1 和
O
2
O_2
O2)初始化一个块矩阵
X
X
X。然后,我们通过选择
R
1
R_1
R1 的最大元素及其位置并更新
Y
Y
Y 的相应元素来处理
R
1
R_1
R1 和
Y
Y
Y。我们对
R
2
R_2
R2 和
Z
Z
Z 遵循相同的程序。这个过程产生了满足两阶段NFCTP约束的初始种群。
5. 位置更新过程
在PSO框架的速度更新方程(公式(4.1))中,惯性权重( ω \omega ω)和加速系数( c 1 c_1 c1 和 c 2 c_2 c2)是引导PSO粒子朝向最优解的基本因素。在本研究中,这些关键PSO参数通过以下两个步骤进行修改:
步骤1:我们从[48]中汲取灵感,提出这些参数的非线性定义,这些参数根据迭代次数动态调整。这些新参数定义的数学表达式如下所示。
{ c 1 ( t ) = c max − ( c max − c min ) ⋅ ( t / t max ) ϕ 1 , c 2 ( t ) = c min + ( c max − c min ) ⋅ ( t / t max ) ϕ 2 , ω ( t ) = ω max − ( ω max − ω min ) ⋅ ( t / t max ) ϕ 3 , (5.1) \begin{cases} c_1(t) = c_{\max} - (c_{\max} - c_{\min}) \cdot (t / t_{\max})^{\phi_1}, \\ c_2(t) = c_{\min} + (c_{\max} - c_{\min}) \cdot (t / t_{\max})^{\phi_2}, \\ \omega(t) = \omega_{\max} - (\omega_{\max} - \omega_{\min}) \cdot (t / t_{\max})^{\phi_3}, \end{cases} \tag{5.1} ⎩ ⎨ ⎧c1(t)=cmax−(cmax−cmin)⋅(t/tmax)ϕ1,c2(t)=cmin+(cmax−cmin)⋅(t/tmax)ϕ2,ω(t)=ωmax−(ωmax−ωmin)⋅(t/tmax)ϕ3,(5.1)
其中变量 c max c_{\max} cmax、 c min c_{\min} cmin、 ω max \omega_{\max} ωmax 和 ω min \omega_{\min} ωmin 分别表示加速度和惯性权重的最大值和最小值,而 t t t 和 t max t_{\max} tmax 分别表示当前迭代次数和最大迭代次数。对于所提出的算法,我们选择了 ϕ 1 = ϕ 2 = ϕ 3 = 2 \phi_1 = \phi_2 = \phi_3 = 2 ϕ1=ϕ2=ϕ3=2(不同 ϕ 1 \phi_1 ϕ1 和 ϕ 2 \phi_2 ϕ2 值的实验结果在第6.1.2节中讨论)。惯性权重的影响: c 1 c_1 c1 和 c 2 c_2 c2 的结构旨在确保速度更新方程中 g best g_{\text{best}} gbest 组件的存在不会阻碍算法的探索能力。 c 1 c_1 c1 和 c 2 c_2 c2 之间的相互作用互补:随着一个增加,另一个减少,促进初始迭代中的探索和后期迭代中的开发。此外,惯性权重在迭代中是一个递减函数,有助于在整个搜索过程中保持适当的探索和开发平衡。
步骤2:在此步骤中,通过将混沌映射引入加速系数来进一步增强所提出算法的优化能力。这种结合为算法增加了曲折性。为了将混沌映射整合到加速系数中,评估了 c h m ( t ) ch_m(t) chm(t) 在区间 [ a , b ] [a, b] [a,b] 和 [ 0 , c h V a l u e ( t ) ] [0, chValue(t)] [0,chValue(t)] 内的归一化值,如下所示:
norm c h m ( t ) = ( c h m ( t ) − a ) × ( c h V a l u e ( t ) − 0 ) b − a + 0 , (5.2) \text{norm}_{ch_m}(t) = \frac{(ch_m(t) - a) \times (chValue(t) - 0)}{b - a} + 0, \tag{5.2} normchm(t)=b−a(chm(t)−a)×(chValue(t)−0)+0,(5.2)
其中 m m m 表示混沌映射的数量, c h V a l u e ( t ) chValue(t) chValue(t) 表示每次迭代的归一化值。 c h V a l u e ( t ) chValue(t) chValue(t) 按公式(5.3)成比例递减:
c h V a l u e ( t ) = c h M a x − ( c h M a x − c h M i n ) ⋅ ( t / t max ) c h M a x − c h M i n , (5.3) chValue(t) = \frac{chMax - (chMax - chMin) \cdot (t / t_{\max})}{chMax - chMin}, \tag{5.3} chValue(t)=chMax−chMinchMax−(chMax−chMin)⋅(t/tmax),(5.3)
其中 c h M a x chMax chMax 和 c h M i n chMin chMin 是 c h V a l u e chValue chValue 的范围。我们在所提出的算法中将 c h M a x chMax chMax 设置为 1, c h M i n chMin chMin 设置为 -10。自适应区间由 [ c h M i n , c h M a x ] [chMin, chMax] [chMin,chMax] 表示,范围 [ a , b ] [a, b] [a,b] 如公式(5.2)所示,映射到 [ 0 , c h V a l u e ( t ) ] [0, chValue(t)] [0,chValue(t)] 内,每次迭代。
接下来,我们将归一化值 norm c h m ( t ) \text{norm}_{ch_m}(t) normchm(t) 与所提出的加速系数( c 1 c_1 c1 和 c 2 c_2 c2)结合,以获得新的混沌加速系数( c 1 ′ ( t ) c'_1(t) c1′(t) 和 c 2 ′ ( t ) c'_2(t) c2′(t)),如下所示:
{ c 1 ′ ( t ) = norm c h m ( t ) + c 1 ( t ) , c 2 ′ ( t ) = norm c h m ( t ) + c 2 ( t ) . (5.4) \begin{cases} c'_1(t) = \text{norm}_{ch_m}(t) + c_1(t), \\ c'_2(t) = \text{norm}_{ch_m}(t) + c_2(t). \end{cases} \tag{5.4} {c1′(t)=normchm(t)+c1(t),c2′(t)=normchm(t)+c2(t).(5.4)
图4和图5详细说明了将混沌映射整合到加速系数中的过程。这些图展示了混沌映射的归一化(如公式(5.2)所定义),然后与加速系数结合。
图4 自适应归一化过程
图5 混沌嵌入加速度系数。
在将混沌映射整合到加速系数后,所提出的CEPSO中每个粒子的更新速度和位置方程如下:
v i , k ( t + 1 ) = ω ( t ) ⋅ v i , k ( t ) + c 1 ′ ( t ) ⋅ r 1 ⋅ ( x pbest , i ( t ) − x i , k ( t ) ) + c 2 ′ ( t ) ⋅ r 2 ⋅ ( x gbest ( t ) − x i , k ( t ) ) , (5.5) v_{i,k}(t + 1) = \omega(t) \cdot v_{i,k}(t) + c'_1(t) \cdot r_1 \cdot (x_{\text{pbest},i}(t) - x_{i,k}(t)) + c'_2(t) \cdot r_2 \cdot (x_{\text{gbest}}(t) - x_{i,k}(t)), \tag{5.5} vi,k(t+1)=ω(t)⋅vi,k(t)+c1′(t)⋅r1⋅(xpbest,i(t)−xi,k(t))+c2′(t)⋅r2⋅(xgbest(t)−xi,k(t)),(5.5)
x i , k ( t + 1 ) = x i , k ( t ) + v i , k ( t + 1 ) , (5.6) x_{i,k}(t + 1) = x_{i,k}(t) + v_{i,k}(t + 1), \tag{5.6} xi,k(t+1)=xi,k(t)+vi,k(t+1),(5.6)
其中 v i , k ( t ) v_{i,k}(t) vi,k(t) 和 c 1 , k ′ ( t ) c'_{1,k}(t) c1,k′(t) 表示从公式(5.4)和 ω ( t ) \omega(t) ω(t) 计算出的混沌嵌入的加速度系数, ω ( t ) \omega(t) ω(t) 表示如公式(5.1)所定义的线性递减惯性权重。