1.种群优化算法
种群优化算法是一种基于生物生长、进化等理论抽象出来的数学优化问题的求解方法,这类方法现在很多,主要还是基于三大优化算法而改进、变化、发展的。本文基于粒子群算法为例,介绍如果使用此类算法求解有约束问题的优化问题,主要原因是很多博客、论坛都只是在介绍或展示此类算法,但对于约束问题的求解介绍的很少,但是这个在具体的实际问题中却是很关键的问题。
对于粒子群算法(PSO)大家可以我的写的Java、Python、C的程序,有编程语言基础的人应该很容易看懂。具体原理可以看书上的介绍,我相信比我说的清楚。
2.约束问题的处理
我们遇到的约束问题有等式约束和不等式约束这两类,其中的不等式约束统一转化为大约或小于这样的式子。
我们先看一个问题的表述:
subjected to:
% 优化问题建立的函数
function result=fitness(x)
c0=[];
of=10*(x(1)-1)^2+20*(x(2)-2)^2+30*(x(3)-3)^2;
% 约束问题统一转化为<=0的类型
c0(1)=x(1)+x(2)+x(3)-5;
c0(2)=x(1)^2+2*x(2)-x(3);
for i=1:length(c0)
if c0(i)>0
c(i)=1;
else
c(i)=0;
end
end
penalty=10000; % 惩罚因子
result=of+penalty*sum(c);
% return result
end
我们可以看到,将不等式的约束问题进行了转化,变成了<= 的约束,如果每个约束的式子不满足约束,将其记1,否则记0;
每个约束式子的如果违约和惩罚因子相乘加入到优化函数当中,上述是最小化优化问题,适应值函数将变大,如果满足约束则变小。
这类问题是通过惩罚函数的方式解决约束问题。上述问题的最优解为x(1)=0.4377,x(2)=1.4569,x(3)=3.1054;