数学建模——lingo实现多目标规划
- 某单位领导在考虑本单位职工的升级调资方案时,要求相关部门遵守以下的规定:
(1)年工资总额不超过元;
(2)每级的人数不超过定编规定的人数;
(3)II、III级的升级面尽可能达到现有人数的20%;
lingo编程求解:
model: sets: variable/1..3/:x; S_Con_Num/1..6/:g,dplus,dminus; S_con(S_Con_Num,Variable):c; endsets data: g= 3 3 0 2 3; c=20000 10000 20000 1 0 0 -1 1 0 0 -1 1 1 0 0 1 0 0; enddata !min=dplus(1); !min=dplus(2) + dplus(3) + dplus(4); min=dminus(5)-dplus(5) + dminus(6)-dplus(6); @for(S_Con_Num(i):@sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); dplus(1)=0; dplus(2)+ dplus(3) + dplus(4)=0; !@for(variable:@gin(x)); end
具体操作如下
根据约束条件的优先级数依次求解
首先求解第一级规划:
model: sets: variable/1..3/:x; S_Con_Num/1..6/:g,dplus,dminus; S_con(S_Con_Num,Variable):c; endsets data: g= 3 3 0 2 3; c=20000 10000 20000 1 0 0 -1 1 0 0 -1 1 1 0 0 1 0 0; enddata !min=dplus(1); @for(S_Con_Num(i):@sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); end
S_Con_Num/1..6/:g,dplus,dminus; S_con(S_Con_Num,Variable):c; endsets data: g= 3 3 0 2 3; c=20000 10000 20000 1 0 0 -1 1 0 0 -1 1 1 0 0 1 0 0; enddata !min=dplus(1); min=dplus(2) + dplus(3) + dplus(4); @for(S_Con_Num(i):@sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); dplus(1)=0; @for(variable:@gin(x)); end
S_Con_Num/1..6/:g,dplus,dminus; S_con(S_Con_Num,Variable):c; endsets data: g= 3 3 0 2 3; c=20000 10000 20000 1 0 0 -1 1 0 0 -1 1 1 0 0 1 0 0; enddata !min=dplus(1); !min=dplus(2) + dplus(3) + dplus(4); min=dminus(5)-dplus(5) + dminus(6)-dplus(6); @for(S_Con_Num(i):@sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); dplus(1)=0; dplus(2) + dplus(3) + dplus(4)=0; !@for(variable:@gin(x)); end
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229260.html原文链接:https://javaforall.net
