一、概念
1.目标值:是指预先给定的某个目标的一个期望值
2.决策值(现实值):当决策变量选定以后,目标函数的对应值。
3.正偏差变量:现实值超过目标值的部分,记为
4.负偏差变量:现实值未达到目标值的部分,记为
5.目标约束(软约束):既可以对原目标函数起作用,也可以对原约束起作用。
6.目标函数
1.第i个目标要求恰好达到目标值,即正、负偏差变量都要尽可能地小,则
minZ=f(+)
2.第i个目标要求不超过目标值,即允许达不到目标值,就是正偏差变量要尽可能地小,则
minZ=f()
3.第i个目标要求超过目标值,即超过量不限,但必须是负偏差变量要尽可能地小,则
minZ=f()
7.优先因子与优先权系数
一个规划问题常常有若干个目标。但决策者在要求达到这些目标时,是有主次或轻重缓急的。
按重要程度排序,p1>>p2>>p3>>p4>>p5.......
若要区别具有相同优先因子的两个目标的差别,这时可分别赋于它们不同的权系数,这些都由决策者按具体情况而定。
8.目标规划模型的一般数学表达式为
二、例题
某企业生产甲、乙两种产品,需要用到A,B,C三种设备,关于产品的赢利与使用设备的工时及限制如表16.3所示。问该企业应如何安排生产,才能达到下列目标。
1.力求使利润指标不低于1500元
2.考虑到市场需求,甲、乙两种产品的产量比应尽量保持1:2
3.设备A为贵重设备,严格禁止超时使用
4.设备C可以适当加班,但要控制;设备B既要求充分利用,又尽可能不加班。在重要性上,设备B是设备C的3倍。
设备A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润,因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持1:2的比例,列为第二级;再次,设备C,B的工作时间要有所控制,列为第三级。在第三级中,设备B的重要性是设备C的三倍,因此,它们的权重不一样,设备B前的系数是设备C前系数的3倍。设生产甲乙两种产品的件数分别为x1,x2,相应的目标规划模型为
x=optimvar('x',2,'LowerBound',0);
dm=optimvar('dm',4,'LowerBound',0);
dp=optimvar('dp',4,'LowerBound',0);
p=optimproblem('ObjectiveSense','min');
p.Constraints.con1 = 2*sum(x)<=12;
con2=[200*x(1)+300*x(2)+dm(1)-dp(1)==1500
2*x(1)-x(2)+dm(2)-dp(2)==0
4*x(1)+dm(3)-dp(3)==16
5*x(2)+dm(4)-dp(4)==15];
p.Constraints.con2=con2;
p.Objective=dm(1)
[sx,fval]=solve(p)
结果:dm(1)=0
x=optimvar('x',2,'LowerBound',0);
dm=optimvar('dm',4,'LowerBound',0);
dp=optimvar('dp',4,'LowerBound',0);
p=optimproblem('ObjectiveSense','min');
p.Constraints.con1 = 2*sum(x)<=12;
con2=[200*x(1)+300*x(2)+dm(1)-dp(1)==1500
2*x(1)-x(2)+dm(2)-dp(2)==0
4*x(1)+dm(3)-dp(3)==16
5*x(2)+dm(4)-dp(4)==15];
p.Constraints.con2=con2;
p.Constraints.con3=dm(1)==0;
p.Objective=dm(2)+dp(2)
[sx,fval]=solve(p)
结果为0
x=optimvar('x',2,'LowerBound',0);
dm=optimvar('dm',4,'LowerBound',0);
dp=optimvar('dp',4,'LowerBound',0);
p=optimproblem('ObjectiveSense','min');
p.Constraints.con1 = 2*sum(x)<=12;
con2=[200*x(1)+300*x(2)+dm(1)-dp(1)==1500
2*x(1)-x(2)+dm(2)-dp(2)==0
4*x(1)+dm(3)-dp(3)==16
5*x(2)+dm(4)-dp(4)==15];
p.Constraints.con2=con2;
p.Constraints.con3=dm(1)==0;
p.Constraints.con3=dm(2)+dp(2)==0;
p.Objective=3*dm(3)+3*dp(3)+dp(4)
[sx,fval]=solve(p);
fval,xx=sx.x,sdm=sx.dm,sdp=sx.dp,
结果:
fval =
29
xx =2.0000
4.0000
sdm =0
0
8.0000
0
sdp =100.0000
0
0
5.0000利润:2*200+4*300=1600