function apso
%变量
Lb = [0 0 0 0 0 0 0 0 0 0 0 0];
Ub = [1 1 1 1 1 1 1 1 1 1 1 1];
% 默认参数
para = [100 2000 0.95];
%APSO 优化求解函数
[gbest,fmax]=pso_mincon(@cost,@constraint,Lb,Ub,para);
%输出结果
Bestsolution = gbest;% 全局最优个体
fmax
%%目标函数
function f = cost(x)
syms z1 z2 z3 z4 z5 z6 z7 z8 z9 z10 z11 z12 z13 z14 z15 z16 z17 z18 z19 z20 z21 z22 z23 z24 z25
z1 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z2 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(7) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(8) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(9) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z3 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(10) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(11) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(12) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z4 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(7) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * x(10) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(8) * x(11) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(9) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * x(12) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z5 = ((-0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + ((-0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((-0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12)));
z6 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(7) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(8) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(9) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z7 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * (x(7)^2) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * (x(7)^2) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * (x(8)^2) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * (x(8)^2) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * (x(9)^2) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * (x(9)^2) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z8 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(7)* x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * x(10) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(8) * x(11) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(9) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * x(12) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z9 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * (x(7)^2) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * (x(7)^2) * x(10) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * (x(8)^2) * x(11) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * (x(8)^2) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * (x(9)^2) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * (x(9)^2) * x(12) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z10 = ((-0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + ((-0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((-0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12)));
z11 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(10) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(11) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(12) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z12 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(7) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * x(10) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(8) * x(11) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(9) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * x(12) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z13 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * (x(10)^2) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * (x(10)^2) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * (x(11)^2) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * (x(11)^2) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * (x(12)^2) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * (x(12)^2) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z14 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(7) * (x(10)^2) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * (x(10)^2) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(8) * (x(11)^2) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * (x(11)^2) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(9) * (x(12)^2) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * (x(12)^2) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z15 = ((-0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + ((-0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((-0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12)));
z16 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(7) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * x(10) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(8) * x(11) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(22.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(9) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * x(12) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z17 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * (x(7)^2) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * (x(7)^2) * x(10) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * (x(8)^2) * x(11) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * (x(8)^2) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * (x(9)^2) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * (x(9)^2) * x(12) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z18 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * x(7) * (x(10)^2) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * (x(10)^2) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * x(8) * (x(11)^2) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * (x(11)^2) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * x(9) * (x(12)^2) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * (x(12)^2) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z19 = ((0.5 * x(1) * x(4)) /((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095) * (x(7)^2) * (x(10)^2) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) - ((0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * (x(7)^2) * (x(10)^2) * exp(2 * 2.19 + 2 * 1.476 * x(7) - 2 * 4.086 * x(10) + 2 * 0.01 * x(7) * x(10))) + ((0.5 * x(2) * x(5)) /((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095) * (x(8)^2) * (x(11)^2) * exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) - ((0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * (x(8)^2) * (x(11)^2) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((0.5 * x(3) * x(6)) /((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095) * (x(9)^2) * (x(12)^2) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) - ((0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * (x(9)^2) * (x(12)^2) * exp(2 * 2.19 + 2 * 1.476 * x(9) - 2 * 4.086 * x(12) + 2 * 0.01 * x(9) * x(12)));
z20 = ((-0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(9) * x(10))) + 0.0095)^2) * x(7) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + ((-0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((-0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12)));
z21 = ((-0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + ((-0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((-0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12)));
z22 = ((-0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + ((-0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((-0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12)));
z23 = ((-0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + ((-0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((-0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12)));
z24 = ((-0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2) * x(7) * x(10) * exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + ((-0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2) * x(8) * x(11) * exp(2 * 2.19 + 2 * 1.476 * x(8) - 2 * 4.086 * x(11) + 2 * 0.01 * x(8) * x(11))) + ((-0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2) * x(9) * x(12) * exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12)));
z25 = ((-0.5 * x(1) * x(4)) / (((exp(2.19 + 1.476 * x(7) - 4.086 * x(10) + 0.01 * x(7) * x(10))) + 0.0095)^2)) + ((-0.5 * x(2) * x(5)) / (((exp(2.19 + 1.476 * x(8) - 4.086 * x(11) + 0.01 * x(8) * x(11))) + 0.0095)^2)) + ((-0.5 * x(3) * x(6)) / (((exp(2.19 + 1.476 * x(9) - 4.086 * x(12) + 0.01 * x(9) * x(12))) + 0.0095)^2));
f = det([z1 z2 z3 z4 z5; z6 z7 z8 z9 z10; z11 z12 z13 z14 z15; z16 z17 z18 z19 z20; z21 z22 z23 z24 z25]);
%非线性约束
function [g,geq] = constraint(x)
g(1) = x(5) - x(4);
g(2) = x(6) - x(5);
g(3) = x(7) - x(8);
g(4) = x(8) - x(9);
g(5) = x(10) - x(11);
g(6) = x(11) - x(12);
geq(1) = x(1) + x(2) + x(3) - 1;
geq(2) = x(4) + x(5) + x(6) - 1;
%% APSO Solver
function [gbest,fbest]=pso_mincon(fhandle,fnonlin,Lb,Ub,para)
if nargin <= 12
para = [100 2000 0.95];
end
n = para(1);
time = para(2);
gama = para(3);
scale = abs(Ub - Lb);
% 战争约束条件是否合乎条件
if abs(length(Lb) - length(Ub))>0
disp('Constraints must have equal size');
return
end
alpha = 0.2;
beta = 0.5;
% 初始化粒子群
best=init_pso(n,Lb,Ub);
fbest = 1.0e+100;
% 迭代开始
for t = 1:time
% 全局寻优
for i = 1:n
fval = Fun(fhandle,fnonlin,best(i,:));
% 更新最优个体
if fval >= fbest
gbest = best(i,:);
fbest = fval;
end
end
% 随机性衰减因子
alpha = newPara(alpha,gama);
% 更新粒子位置
best = pso_move(best,gbest,alpha,beta,Lb,Ub);
% 结果显示
str = strcat('Best estimates: gbest=',num2str(gbest));
str = strcat(str,'iteration=');
str = strcat(str,num2str(t));
disp(str);
fitness1(t) = fbest;
plot(fitness1,'r','Linewidth',2)
grid on
hold on
title('适应度')
end
% 初始化粒子函数
function [guess]=init_pso(n,Lb,Ub)
ndim=length(Lb);
for i=1:n
guess(i,1:ndim)=Lb+rand(1,ndim).*(Ub-Lb);
end
%更新所有的粒子
function ns=pso_move(best,gbest,alpha,beta,Lb,Ub)
% 增加粒子在上下边界区间内的随机性
n=size(best,1);
ndim=size(best,2);
scale=(Ub-Lb);
for i=1:n
ns(i,:)=best(i,:)+beta*(gbest-best(i,:))+alpha.*randn(1,ndim).*scale;
end
ns=findrange(ns,Lb,Ub);
% 边界函数
function ns=findrange(ns,Lb,Ub)
n=length(ns);
for i=1:n
% 下边界约束
ns_tmp=ns(i,:);
I=ns_tmp<Lb;
ns_tmp(I)=Lb(I);
% 上边界约束
J=ns_tmp>Ub;
ns_tmp(J)=Ub(J);
%更新粒子
ns(i,:)=ns_tmp;
end
% 随机性衰减因子
function alpha=newPara(alpha,gamma)
alpha=alpha*gamma;
% 带约束的d维目标函数的求解
function z=Fun(fhandle,fnonlin,u)
% 目标
z=fhandle(u);
z=z+getconstraints(fnonlin,u); % 非线性约束
function Z=getconstraints(fnonlin,u)
% 罚常数 >> 1
PEN=10^15;
lam=PEN; lameq=PEN;
Z=0;
% 非线性约束
[g,geq]=fnonlin(u);
%通过不等式约束建立罚函数
for k=1:length(g)
Z=Z+ lam*g(k)^2*getH(g(k));
end
% 等式条件约束
for k=1:length(geq)
Z=Z+lameq*geq(k)^2*geteqH(geq(k));
end
% Test if inequalities
function H=getH(g)
if g<=0
H=0;
else
H=1;
end
% Test if equalities hold
function H=geteqH(g)
if g==0
H=0;
else
H=1;
end