总述
-
1.线性规划的短处
-
2.求解目标规划的思路
a.加权系数法- 为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
b.优先等级法
- 将各目标按其重要程度不同的优先等级,转化为单目标模型。
目标规划的数学模型
目标规划的相关概念
-
正、负偏差变量
-
绝对(刚性)约束和目标约束
-
优先因子与权系数
-
目标规划的目标函数
例子
题目:
解:
目标规划的一般数学模型
注意:建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它们具有一定的主观性和模糊性,可以用专家评定法给以量化。
求解目标规划的序贯算法
- 核心:根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
- 对于k=1,2,…,q,求解单目标规划
例子
解:
lingo求解
- 求第一级目标
medel:
sets: !定义集合;
variable/1..2/:x;
S_Con_Num/1..4/:g,dplus,dminus;
S_con(S_Con_Num,Variable):c; !类似二维数组;
endsets
data: !所需的数据;
g=1500 0 16 15;
c=200 300 2 -1 4 0 0 5;
enddata
min=dminus(1); !要求dminus最小,满足题意;
2*x(1)+2*x(2)<12;
@for(S_Con_Num(i): @sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i));
end
- 求第二级目标
model:
sets:
variable/1..2/:x;
S_Con_Num/1..4/:g,dplus,dminus;
S_con(S_Con_Num,Variable):c;
endsets
data:
g=1500 0 16 15;
c=200 300 2 -1 4 0 0 5;
enddata
min=dminus(2)+dplus(2);
2*x(1)+2*x(2)<12;
@for(S_Con_Num(i): @sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i));
dminus(1)=0; ! 一级目标约束,为了不影响这级的计算 ;
@ for(variable:@ gin(x));
end
3. 求第三级目标
model:
sets:
variable/1..2/:x;
S_Con_Num/1..4/:g,dplus,dminus;
S_con(S_Con_Num,Variable):c;
endsets
data:
g=1500 0 16 15;
c=200 300 2 -1 4 0 0 5;
enddata
min=3*dplus(3)+3*dminus(3)+dplus(4);!三级目标函数;
2*x(1)+2*x(2)<12;
@for(S_Con_Num(i): @sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i));
dminus(1)=0; ! 一级目标约束,为了不影响这级的计算 ;
dplus(2)+dminus(2)=0;!二级目标约束;
@ for(variable:@ gin(x));
end
多目标规划的Matlab解法
fgoalattain()函数
例题1
代码:
a=[ -1 -1 0 0;
0 0 -1 -1;
3 0 2 0;
0 3 0 3;];
b=[-30 -30 120 48]';
c1=[-100 -90 -80 -70]; %用于求解单个函数的目标值
c2=[0 3 0 2];
fun = @ (x) [c1;c2]*x %用匿名函数定义目标向量
[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1)) % 用于求解第一个目标函数的额目标值
[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1)) % 用于求解第二个目标函数的额目标值
g3=[g1;g2]; %目标goal的值
[x,fval]=fgoalattain(fun,rand(4,1),g3,abs(g3),a,b,[],[],zeros(4,1)) %这里权重weight=目标goal的绝对值