1. 问题示例
$ \min \limits_{x\ge0}{F(x,y)=-x_1^2-3*x_2-4*y_1+y_2^2} $
$ s.t. \quad x_1^2+2*x_2\le4 $
$ \min \limits_{y\ge0}{f(x,y)=2*x_1^2+y_1^2-5*y_2} $
$s.t. \quad x_1^2-2*x_1+x_2^2-2*y_1+y_2\ge-3 $
$\quad \quad x_2^2+3*y_1-4*y_2\ge4 $
2. 约束处理
对约束条件的处理主要是用了罚函数的方法。
3. 符号说明
fbest: 上层函数的最优值(最小值);
xbest: 最优的x;
ybest: 最优的y;
4. 算法步骤
- step1. 根据上层规划问题的约束条件产生上层决策变量 x 的初始解 x0,初始化 fbest = INF;
- step2. 置 k=1,给定迭代次数M;
- step3. 将 x0 代入到二层规划的下层,利用粒子群算法求解下层问题得到最优解 y0;
- step4. 将得到的 y0 值返回上层,利用粒子群算法对上层问题进行求解得到最优解 x 及相应的最优值 f;
- step5. 如果 f<fbest,那么更新 fbest = f,xbest = x,ybest=y0,否则直接进入到step6;
- step6. 如果满足结束条件(误差足够好或者达到最大迭代次数)退出,否则令 x0 = xbest,k=k+1,然后进入到step3;
- step7. 输出最优的x,y的值 xbest, ybest;
5. 源码(matlab)
上层问题 f1.m
1 | function f = f1(x,y) |
上层问题的约束 h.m
1 | function f = h(x) |
下层问题 f2.m
1 | function f = f2(x,y) |
下层问题的约束 g1.m
1 | function f = g1(x,y) |
下层问题的约束 g2.m
1 | function f = g2(x,y) |
罚函数法处理上层问题 minf1.m
1 | function f = minf1(x,y,M) |
罚函数法处理下层问题 minf2.m
1 | function f = minf2(x,y,M) |
粒子群算法 PSO.m
1 | function xm=PSO(choose,value,N,c1,c2,w,M,D,s) |
主函数求解 main.m
1 | clc;clear; |