即以此功德,庄严佛净土。上报四重恩,下救三道苦。惟愿见闻者,悉发菩提心。在世富贵全,往生极乐国。
(一)优化模型的组成
优化模型包括以下3部分:
l Objective Function:目标函数是一个能准确表达所要优化问题的公式。 l Variables:Decision variables(决策变量),在模型中所使用的变量。 l Constraints:约束条件。
(二)Lingo软件使用的注意事项
(1)LINGO中不区分大小写字母,变量(和行名)可以使用不超过32个字符表示,且必须以字母开头。
(2)在命令方式下(Command Window中),必须先输入MODEL:表示开始输入模型。LINGO中模型以“MODEL:”开始,以“END”结束。对简单的模型,这两个语句也可以省略。
(3)LINGO中的语句的顺序是不重要的,因为LINGO总是根据“MAX=”或“MIN=”语句寻找目标函数,而其它语句都是约束条件(当然注释语句和TITLE除外)。
(4)LINGO模型是由一系列语句组成,每个语句以分号“;”结束。
(5)LINGO中以感叹号“!”开始的是说明语句(说明语句也需要以分号“;”结束)。 (6)LINGO中解优化模型时假定所有变量非负(除非用限定变量取值范围的函数@free或@sub或slb另行说明)。
(7)当您要判断表达式输入是否有错误时,也可以使用菜单“Lingo“的”Picture“选项。 (8) 用命令\下界, 变量名, 上界)\设置变量的上界和下界
(9) 用命令\取消变量x1的非负限制,x1可以取正实数和负实数
(10)一般整数变量可以用\变量名)\来标识,0-1型变量可以用\变量名)\来标识
(三)Solution Report各项的含义
例1 将以下模型粘贴到Lingo中求解,其中第一行MODEL和最后一行END在Lingo Model 窗口下可以不要。 MODEL:
min = 2*x1 + 3*x2; x1 + x2 >= 350; x1 >= 100; 2*x1 + x2 <= 600; END
得到如下的结果报告
Global optimal solution found.
Objective value: 800.0000
Infeasibilities: 0.000000 !指矛盾约束的数目; Total solver iterations: 2 Model Class: LP Total variables: 2 Nonlinear variables: 0 Integer variables: 0 Total constraints: 4 Nonlinear constraints: 0 Total nonzeros: 7 Nonlinear nonzeros: 0
Variable Value Reduced Cost X1 250.0000 0.000000 X2 100.0000 0.000000 Row Slack or Surplus Dual Price 1 800.0000 -1.000000
2 0.000000 -4.000000 ! 模型第一行表示目标函数,第二行对应第一个约束;
3 150.0000 0.000000 4 0.000000 1.000000
下面对Solution Report(LINGO的结果报告窗口)的各个部分进行说明: Global optimal solution found 表示全局最优解找到. Objective value: 800.0000 表示最优目标值为800.0000. Total solver iterations: 2 表示用单纯行法进行了两次迭代.
Variable 表示变量, 此问题中有两个变量X1, X2.
Value 给出最优解中各变量(Variable)的值: X1=250.0000, X2=100.0000.
Reduced Cost 实际上是与最优单纯形表中的检验数相差一个负号的一个数,以前没有注意到检验数就是非基变量前面的系数啊。我以前没有注意到最优单纯形表中的各个检验数就是与之对应的非基向量前的系数!
Reduced Cost指为了使某个变量在解中的数值增加一个单位,目标函数值必须付出的代价。如果一个变量的Reduced Cost值为8,为了使该变量增加一个单位,在最大化(最小化)问题中,目标函数值将减少(增大)8个单位。 The reduced cost of a variable may be interpreted as the amount of penalty you would have to pay to introduce one unit of that variable into the solution. Again, if you have a variable with a reduced cost of 10, you would have to pay a penalty of 10 units to introduce the variable into the solution. In other words, the objective value would fall by 10 units in a maximization model or increase by 10 units in a minimization model.
在一个最大值的模型中,Reduced Cost 对应的非基变量增加一个单位,目标值会有减少Reduced Cost;在一个最小值模型中,Reduced Cost对应的非基变量增加一个单位,目标值会增大Reduced Cost。
Reduced Cost它也可以认为是:在最优化问题中,要使某个变量进入基,该变量在目标函数中的该变量前的系数应该改变的数量。(在Min问题中要选单纯形表最后一行中最大的正的判别数对应的列为主列[此列对应的变量是进基变量],其目标是使所有的判别数都非正;在Max问题中要选单纯形表最后一行最小的负数对应的变量作为进基变量,其目标是使所有的判别数都非负)例如:在一个最大化(最小化)问题中,如果一个变量的Reduced Cost值为8,则为了使该变量进基,目标函数中该变量前的系数就必须减小(增加)8个单位 (已经经过试验验证,该变量进基后Reduced Cost = 0)。 For example, if a variable had a reduced cost of 10, the objective coefficient of that variable would have to decrease by 10 units in a maximization problem and/or increase by 10 units in a minimization problem for the variable to become an attractive alternative to enter into the solution. 非基向量要进入基必须将它对应的检验数消为0,直观的将该非基向量的检验数取个负号加到最后一行即可,对应在方程上实际上是此检验数乘以该非基变量后的结果加到最后一行,所以前边有了系数这一说。
Reduced Cost 给出最优的单纯形表中目标函数行中变量对应的系数. 其中基变量的Reduced Cost值一定为0;对于非基变量(非基变量本身的取值一定为0)和max问题,相应的Reduced Cost值表示当该非基变量增加一个单位(其它非基变量保持不变)时目标函数的减少的量。这估计也是Reduced Cost的reduced 所在,很直观。在这个例子中最优解中两个变量都是基向量, 因此对应的Reduced Cost的值都为0.
Slack or Surplus表示接近等于的程度。在约束条件是<=中,通常叫做松弛变
量,在约束条件是>=中,通常叫过剩变量。如果约束条件是=,则Slack or Surplus为0,该约束是个紧约束(或有效约束)。如果一个约束条件错误,作为一个不可行解,Slack or Surplus为负数。Slack or Surplus表示的是:约束离相等还差多少。如果一个约束是矛盾的(模型无可行解),则Slack or surplus的值是负数。知道这些,可以帮助我们发现在一个不可实行的模型(指没有存在同时满足所有约束条件的变量集合)中的错误的约束条件。第2和第4行松弛变量均为0,说明对
于最优解来讲,两个约束(第2和4行)均取等号,即都是紧约束.
Dual Price (Shadow price)给出对偶价格的值。表示每增加一个单位(约束右边的常数),
目标值改变的数量(在最大化问题中目标函数值是增加,在最小化问题中目标函数值是减少)。比如,在上一个Min模型中第四行的1,表示2*x1 + x2 <= 600增加一个单位到2*x1 + x2 <= 601,可以使目标值增加-1(因为第一行是目标函数的Dual Price是-1),即Objective value = 799; 增加-1个单位到599会使目标值增加到801。You can interpret the dual price as the amount that the objective would
improve as the right-hand side, or constant term, of the constraint is increased by one unit. Notice that \the objective value would increase. However, in a minimization problem, the objective value would decrease if you were to increase the right-hand side of a constraint with a positive dual price. 对偶价格补充一例: max=100*x+150*y; !约束条件; x<=80; y<=100; x*2+y<=180;
Global optimal solution found.
Objective value: 19000.00 Infeasibilities: 0.000000 Total solver iterations: 1 Model Class: LP
Total variables: 2 Nonlinear variables: 0 Integer variables: 0 Total constraints: 4 Nonlinear constraints: 0 Total nonzeros: 6 Nonlinear nonzeros: 0
Variable Value Reduced Cost X 40.00000 0.000000 Y 100.0000 0.000000 Row Slack or Surplus Dual Price
1 19000.00 1.000000 ! 注意第一行为目标函数,目标函数加1则目标值加1
2 40.00000 0.000000 3 0.000000 100.0000 4 0.000000 50.00000
对偶变量值也叫影子价格,这是由于它们表示可以用多大的价格去购买(租用)单位资源。上面的模型显示,某人最多愿意花100元购买(租用)一个Y。