优化算法—解决约束问题

1.种群优化算法

种群优化算法是一种基于生物生长、进化等理论抽象出来的数学优化问题的求解方法,这类方法现在很多,主要还是基于三大优化算法而改进、变化、发展的。本文基于粒子群算法为例,介绍如果使用此类算法求解有约束问题的优化问题,主要原因是很多博客、论坛都只是在介绍或展示此类算法,但对于约束问题的求解介绍的很少,但是这个在具体的实际问题中却是很关键的问题。

对于粒子群算法(PSO)大家可以我的写的Java、Python、C的程序,有编程语言基础的人应该很容易看懂。具体原理可以看书上的介绍,我相信比我说的清楚。

2.约束问题的处理

我们遇到的约束问题有等式约束和不等式约束这两类,其中的不等式约束统一转化为大约或小于这样的式子。

我们先看一个问题的表述:

OF=min[10*(1-x(1))^{2}+20*(2-x(2))^{^{2}}+30*(3-x(3))^{^{2}}]

subjected to:

x(1)+x(2)+x(3)<=5 

x(1)^2+2*x(2)<=x(3) 

 

% 优化问题建立的函数
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;

 

 

 

你可能感兴趣的:(种群算法)