当前位置:文档之家› Lingo-中各项的含义

Lingo-中各项的含义

Lingo-中各项的含义
Lingo-中各项的含义

Lingo solution report中各项的含义

(一)优化模型的组成

优化模型包括以下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另行说明)。

(三)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 实际上是与最优单纯形表中的检验数相差一个负号的一个数。注意下面的A'y = z

Reduced Cost指为了使某个变量在解中的数值增加一个单位,目标函数值必须付出的代价。如果一个变量的Reduced Cost值为8,为了使该变量增加一个单位,在最大化(最小化)问题中,目标函数值将减少(增大)8个单位。在一个最大值的模型中,Reduced Cost 对应的非基变量增加一个单位,目标值会有减少Reduced Cost;在一个最小值模型中,Reduced Cost对应的非基变量增加一个单位,目标值会增大Reduced Cost。

Reduced Cost它也可以认为是:在最优化问题中,要使某个变量进入基,该变量在目标函数中的系数应该改变的数量。(在Min问题中要选单纯形表最后一行中最大的正的判别数对应的列为主列[此列对应的变量是进基变量],其目标是使所有的判别数都非正;在Max问题中要选单纯形表最后一行最小的负数对应的变量作为进基变量,其目标是使所有的判别数都非负)

例如:在一个最大化(最小化)问题中,如果一个变量的Reduced Cost值为8,则为了使该变量进基,目标函数中该变量的系数就必须增加(减少)8个单位。非基向量要进入基必须将它对应的检验数消为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。

对偶价格补充一例:

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

2 40.00000 0.000000

3 0.000000 100.0000

4 0.000000 50.00000

对偶变量值也叫影子价格,这是由于它们表示可以用多大的价格去购买(租用)单位资源。上面的模型显示,某人最多愿意花100元购买(租用)一个Y。

例2 某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆

每个书桌每个餐桌每个椅子

现有资源总数

木料8单位6单位1单位48单位

漆工4单位2单位 1.5单位20单位

木工2单位 1.5单位0.5单位8单位

成品

单价

60单位30单位20单位

若要求桌子的生产量不超过5件,如何安排三种产品的生产可使利润最大?

用DESKS、TABLES和CHAIRS分别表示三种产品的生产量,建立LP模型。

max=60*desks+30*tables+20*chairs;

8*desks+6*tables+chairs<=48;

4*desks+2*tables+1.5*chairs<=20;

2*desks+1.5*tables+.5*chairs<=8;

tables<=5;

求解这个模型,查看报告窗口(Reports Window):

Global optimal solution found.

Objective value: 280.0000

Infeasibilities: 0.000000

Total solver iterations: 2

Model Class: LP

Total variables: 3

Nonlinear variables: 0

Integer variables: 0

Total constraints: 5

Nonlinear constraints: 0

Total nonzeros: 13

Nonlinear nonzeros: 0

Variable Value Reduced Cost

DESKS 2.000000 0.000000

TABLES 0.000000 5.000000

CHAIRS 8.000000 0.000000

Row Slack or Surplus Dual Price

1 280.0000 1.000000

2 24.00000 0.000000

3 0.000000 10.00000

4 0.000000 10.00000

5 5.000000 0.000000

“Objective value:280.0000”表示最优目标值为280。“Value”给出最优解中各变量的值:造2个书桌(desks), 0个餐桌(tables), 8个椅子(chairs)。所以desks、chairs是基变量(非0),tables是非基变量(0)。观察单纯性表的最后一行(f行),当所有的检验数都非负,单纯形表左侧的行基向量对应的主列确实是非零的。还要注意最优解的基变量中无松弛变量(松弛变量的引入将不等式变为等式约束)

“Slack or Surplus”给出松驰变量的值:

第1行松驰变量 =280(模型第一行表示目标函数,所以第二行对应第一个约束)

第2行松驰变量 =24

第3行松驰变量 =0

第4行松驰变量 =0

第5行松驰变量 =5

“Reduced Cost”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时, 目标函数的变化率。其中基变量的reduced cost值应为0,对于非基变量 Xj, 相应的 reduced cost值表示当某个变量Xj 增加一个单位时目标函数减少的量( max型问题)。本例中:变量tables对应的reduced cost 值为5,表示当非基变量tables的值从0变为 1时(此时假定其他非基变量保持不变,但为了满足约束条件,基变量显然会发生变化),最优的目标函数值 = 280 - 5 = 275。

“DUAL PRICE”(对偶价格)表示当对应约束有微小变动时, 目标函数的变

化率。输出结果中对应于每一个约束有一个对偶价格。若其数值为p,表示对应约束中不等式右端项若增加1 个单位,目标函数将增加p个单位(max型问题)。显然,如果在最优解处约束正好取等号(也就是“紧约束”,也称为有效约束或起作用约束),对偶价格值才可能不是0。本例中:第3、4行是紧约束,对应的对偶价格值为10,表示当紧约束 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 20 变为 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 21 时,目标函数值 = 280 +10 = 290。对第4行也类似。

对于非紧约束(如本例中第2、5行是非紧约束),DUAL PRICE 的值为0, 表示对应约束中不等式右端项的微小扰动不影响目标函数。有时, 通过分析DUAL PRICE, 也可对产生不可行问题的原因有所了解。

灵敏度分析操作流程:菜单lingo-->options-->general solver-->dual computations:prices & ranges-->ok. 菜单lingo-->range

灵敏度分析的结果是

Ranges in which the basis is unchanged:

Objective Coefficient Ranges:

Current Allowable Allowable

Variable Coefficient Increase Decrease

DESKS 60.00000 20.00000 4.000000

TABLES 30.00000 5.000000 INFINITY

CHAIRS 20.00000 2.500000 5.000000

Righthand Side Ranges:

Current Allowable Allowable

Row RHS Increase Decrease

2 48.00000 INFINITY 24.00000

3 20.00000 4.000000 4.000000

4 8.000000 2.000000 1.333333

5 5.000000 INFINITY 5.000000

目标函数中DESKS变量原来的费用系数为60,允许增加(Allowable Increase)=20、允许减少(Allowable Decrease)=4,说明当它在[60-4,60+20] = [56,80]范围变化时,最优基保持不变。对TABLES、CHAIRS变量,可以类似解释。由于此时约束没有变化(只是目标函数中某个费用系数发生变化),所以最优基保持不变的意思也就是最优解不变(当然,由于目标函数中费用系数发生了变化,所以最优值会变化)。

第2行约束中右端项(Right Hand Side,简写为RHS)原来为48,当它在[48-24,48+∞] = [24,∞]范围变化时,最优基保持不变。第3、4、5行可以类似解释。不过由于此时约束发生变化,最优基即使不变,最优解、最优值也会发生变化。

灵敏性分析结果表示的是最优基保持不变的系数范围。由此,也可以进一步确定当目标函数的费用系数和约束右端项发生小的变化时,最优基和最优解、最优值如何变化。下面我们通过求解一个实际问题来进行说明。

例3:一奶制品加工厂用牛奶生产A1,A2两种奶制品,1桶牛奶可以在甲车间用

12小时加工成3公斤A1,或者在乙车间用8小时加工成4公斤A2。根据市场需求,生产的A1,A2全部能售出,且每公斤A1获利24元,每公斤A2获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间480小时,并且甲车间每天至多能加工100公斤A1,乙车间的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下3个附加问题:

1)若用35元可以买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶?

2)若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元?

3)由于市场需求变化,每公斤A1的获利增加到30元,应否改变生产计划?

解:模型代码如下

max=72*x1+64*x2;

x1+x2<=50;

12*x1+8*x2<=480;

3*x1<=100;

求解这个模型并做灵敏性分析,结果如下。

Global optimal solution found at iteration: 0

Objective value: 3360.000

Variable Value Reduced Cost

X1 20.00000 0.000000

X2 30.00000 0.000000

Row Slack or Surplus Dual Price

1 3360.000 1.000000

2 0.000000 48.00000

3 0.000000 2.000000

4 40.00000 0.000000

Ranges in which the basis is unchanged:

Objective Coefficient Ranges

Current Allowable Allowable

Variable Coefficient Increase Decrease

X1 72.00000 24.00000 8.000000

X2 64.00000 8.000000 16.00000

Righthand Side Ranges

Row Current Allowable Allowable

RHS Increase Decrease

2 50.00000 10.00000 6.666667

3 480.0000 53.33333 80.00000

4 100.0000 INFINITY 40.00000

结果告诉我们:这个线性规划的最优解为x1=20,x2=30,最优值为z=3360,即用20桶牛奶生产A1, 30桶牛奶生产A2,可获最大利润3360元。输出中除了告诉我们问题的最优解和最优值以外,还有许多对分析结果有用的信息,下面结合题目中提出的3个附加问题给予说明。 3个约束条件的右端不妨看作3种“资源”:原料、劳动时间、车间甲的加工能力。输出中Slack or Surplus给出这3种资源在最优解下是否有剩余:原料、劳动时间的剩余均为零,车间甲尚余40(公斤)加工能力。

目标函数可以看作“效益”,成为紧约束的“资源”一旦增加,“效益”必然跟着增长。输出中DUAL PRICES 给出这3种资源在最优解下“资源”增加1个单位时“效益”的增量:原料增加1个单位(1桶牛奶)时利润增长48(元),劳动时间增加1个单位(1小时)时利润增长2(元),而增加非紧约束车间甲的能力显然不会使利润增长。这里,“效益”的增量可以看作“资源”的潜在价值,经济学上称为影子价格,即1桶牛奶的影子价格为48元,1小时劳动的影子价格为2元,车间甲的影子价格为零。读者可以用直接求解的办法验证上面的结论,即将输入文件中原料约束milk)右端的50改为51,看看得到的最优值(利润)是否恰好增长48(元)。用影子价格的概念很容易回答附加问题1):用35元可以买到1桶牛奶,低于1桶牛奶的影子价格48,当然应该作这项投资。回答附加问题2):聘用临时工人以增加劳动时间,付给的工资低于劳动时间的影子价格才可以增加利润,所以工资最多是每小时2元。

目标函数的系数发生变化时(假定约束条件不变),最优解和最优值会改变吗?这个问题不能简单地回答。上面输出给出了最优基不变条件下目标函数系数的允许变化范围:x1的系数为(72-8,72+24)=(64,96);x2的系数为(64-16,64+8)=(48,72)。注意:x1系数的允许范围需要x2系数64不变,反之亦然。由于目标函数的费用系数变化并不影响约束条件,因此此时最优基不变可以保证最优解也不变,但最优值变化。用这个结果很容易回答附加问题3):若每公斤A1的获利增加到30元,则x1系数变为30×3=90,在允许范围内,所以不应改变生产计划,但最优值变为90×20+64×30=3720。

下面对“资源”的影子价格作进一步的分析。影子价格的作用(即在最优解下“资源”增加1个单位时“效益”的增量)是有限制的。每增加1桶牛奶利润增长48元(影子价格),但是,上面输出的CURRENT RHS 的ALLOWABLE INCREASE 和 ALLOWABLE DECREASE 给出了影子价格有意义条件下约束右端的限制范围:milk)原料最多增加10(桶牛奶),time)劳动时间最多增加53(小时)。现在可以回答附加问题1)的第2问:虽然应该批准用35元买1桶牛奶的投资,但每天最多购买10桶牛奶。顺便地说,可以用低于每小时2元的工资聘用临时工人以增加劳动时间,但最多增加53.3333小时。

需要注意的是:灵敏性分析给出的只是最优基保持不变的充分条件,而不一定是必要条件。比如对于上面的问题,“原料最多增加10(桶牛奶)”的含义

只能是“原料增加10(桶牛奶)”时最优基保持不变,所以影子价格有意义,即利润的增加大于牛奶的投资。反过来,原料增加超过10(桶牛奶),影子价格是否一定没有意义?最优基是否一定改变?一般来说,这是不能从灵敏性分析报告中直接得到的。此时,应该重新用新数据求解规划模型,才能做出判断。所以,从正常理解的角度来看,我们上面回答“原料最多增加10(桶牛奶)”并不是完全科学的。

lingo基本用法(精华版)20分钟学会ling↘.pdf

Lingo基本用法总结(除集函数部分)LINGO是用来求解线性和非线性优化问题的简易工具。Lingo免费版可以支持30个未知数,lingo破解版可以支持几万个未知数、几万个约束条件。 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO中求解如下的LP问题: 在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮即可。 得到如下结果:

所以当x1为250,x2为100时目标函数得到最大值。 ?算术运算符 Lingo中变量不区分大小写,以字母开头不超过32个字符 算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符: ^乘方﹡乘/除﹢加﹣减 LINGO唯一的一元算术运算符是取反函数“﹣”。 这些运算符的优先级由高到底为: 高﹣(取反) ^ ﹡/ 低﹢﹣ 运算符的运算次序为从左到右按优先级高低来执行。运算的次序可以用圆括号“()” 来改变。

例:在x1+x2>=350,x1>=100,2*x1+x2<=600的条件下求2*x1+3*x2的最小值 在代码窗口中编写 min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后单击上面菜单lingo菜单下solve键即可。 ?数学函数 标准数学函数: @abs(x) 返回x的绝对值 @sin(x) 返回x的正弦值,x采用弧度制 @cos(x) 返回x的余弦值 @tan(x) 返回x的正切值 @exp(x) 返回常数e的x次方 @log(x) 返回x的自然对数 @lgm(x) 返回x的gamma函数的自然对数 @sign(x) 如果x<0返回-1;否则,返回1 @floor(x) 返回x的整数部分。当x>=0时,返回不超过x的最大整数;当 x<0时,返回不低于x的最大整数。 最大最小函数: @smax(x1,x2,…,xn) 返回x1,x2,…,xn中的最大值 @smin(x1,x2,…,xn) 返回x1,x2,…,xn中的最小值 边界限定函数: @bin(x) 限制x为0或1 @bnd(L,x,U) 限制L≤x≤U @free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数@gin(x) 限制x为整数 辅助函数 1.@if(logical_condition,true_result,false_result) @if函数将评价一个逻辑表达式logical_condition,如果为真,返回true_ result,否则返回false_result 在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+∞。@free取消了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。 例:求x1^2+3*x2-x1*x2+e^x3在 x1+x2>=350;x1+x3<50;2*x1+x2+x3<=600;x1只能取0或1;x2为整数的条件下的最小值。 在代码窗口中编写 min=x1^2+3*x2-x1*x2+@exp(x3); x1+x2>=350; x1+x3<50; 2*x1+x2+x3<=600; @bin(x1);@gin(x2);

lingo用法总结

ji例程1、 model: sets: quarters/1..4/:dem,rp,op,inv; endsets min=@sum(quarters:400*rp+450*op+20*inv); @for(quarters(i):rp<=40); @for(quarters(i)|i#gt#1: inv(i)=inv(i-1)+rp(i)+op(i)-dem(i);); inv(1)=10+rp(1)+op(1)-dem(1); data: dem=40 60 75 25; enddata end 例程2、 model: sets: quarters/1..4/:dem,rp,op,inv; endsets min=@sum(quarters:400*rp+450*op+20*inv); @for(quarters(i):rp<=40); @for(quarters(i)|i#gt#1: inv(i)=inv(i-1)+rp(i)+op(i)-dem(i);); inv(1)=a+rp(1)+op(1)-dem(1); data: dem=40 60 75 25; a=? enddata end ?LINGO总是根据“MAX=”或“MIN=”寻找目标函数,而除注释语句和TITLE语句外的其他语句都是约束条件,因此语句的顺序并不重要。 ?LINGO中函数一律需要以“@”开头 ?Lingo中的每个语句都以分号结尾 ?用LINGO解优化模型时已假定所有变量非负(除非用限定变量取值范围的函数@free或@sub或@slb另行说明)。 ?以感叹号开始的是说明语句(说明语句也需要以分号结束)) ?理解LINGO建模语言最重要的是理解集合(Set)及其属性(Attribute)的概念。 ?一般来说,LINGO中建立的优化模型可以由5个部分组成,或称为5“段” (SECTION): (1)集合段(SETS):以“ SETS:” 开始,“ENDSETS”结束,定义

lingo灵敏度分析实例

一个实例理解Lingo的灵敏性分析 线性规划问题的三个重要概念: 最优解就是反应取得最优值的决策变量所对应的向量。 最优基就是最优单纯形表的基本变量所对应的系数矩阵如果其行列式是非奇异的,则该系数矩阵为最优基。 最优值就是最优的目标函数值。 Lingo的灵敏性分析是研究当目标函数的系数和约束右端项在什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析给出的只是最优基保持不变的充分条件,而不一定是必要条件。下面是一道典型的例题。 一奶制品加工厂用牛奶生产A1,A2两种奶制品,1桶牛奶可以在甲车间用12小时加工成3公斤A1,或者在乙车间用8小时加工成4公斤A2。根据市场需求,生产的A1,A2全部能售出,且每公斤A1获利24元,每公斤A2获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间480小时,并且甲车间每天至多能加工100公斤A1,乙车间的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下3个附加问题: 1)若用35元可以买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶?2)若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元? 3)由于市场需求变化,每公斤A1的获利增加到30元,应否改变生产计划? 模型代码: max=72*x1+64*x2; x1+x2<=50; 12*x1+8*x2<=480; 3*x1<=100; 运行求解结果: Objective value: 3360.000 Variable Value Reduced Cost X1 20.00000 0.000000 X2 30.00000 0.000000 Row Slack or Surplus Dual Price 1 3360.000 1.000000 2 0.000000 48.00000 3 0.000000 2.000000 4 40.00000 0.000000 这个线性规划的最优解为x1=20,x2=30,最优值为z=3360,即用20桶牛奶生产A1, 30桶牛奶生产A2,可获最大利润3360元。输出中除了告诉我们问题的最优解和最优值以外,还有许多对分析结果有用的信息。 其中,“Reduced Cost”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时, 目标函数的变化率。其中基变量的reduced cost值应为0,对于非基变量Xj, 相应的reduced cost值表示当某个变量Xj 增加一个单位时目标函数减少的量( max型问题)。本例中X1,X2均为基变量。 “Slack or Surplus”给出松驰变量的值,模型第一行表示目标函数,所以第二行对应第一个约束。3个约束条件的右端不妨看作3种“资源”:原料、劳动时间、车间甲的加工能力。输出中Slack or Surplus给出这3种资源在最优解下是否有剩余:原料、劳动时间的剩余均为

LINGO大规模规划求解

lingo 大规模规划求解 首先,让我们先看看一个非常简单的规划例子在LINGO软件中实现过程: 目标函数: 约束条件: 求解上面目标函数的最小值,我们在lingo中可编写如下代码:model: MIN=2*X1+X2-3*X3+5; X1+X2-3*X3<=10; X1-2*X2>=5 @GIN(X1);!整数约束; @GIN(X2); @GIN(X3); END 可以看出,LINGO语言和数学专业语言很接近,很容易表示约束条件和目标函数。可是对于规模很大的约束条件,难道我们也必须这样一条一条的输入吗,显然这样做是一件非常困难和繁琐的事,lingo语言又是如何表示约束条件规模巨大的规划问题呢,带着这样的疑问,让我们一步一步得看下面的内容: 一、集合域 在数学中集合的定义如下: 集合:具有某种相同属性的对象放在一起,就形成了一个集合, 集合中的每一个对象称作该集合的元素。 在大规模的优化问题中,集合是必然存在的,比如在平板车建模中,各种规格集装箱就可以看成一个集合,在货物配送问题中154个城市可以看成一个集合。在lingo语言中,将某些对象看成一个集合便可以很方便地对集合中的每一个元素进行统一处理。 集合域必须在模型的约束引用集合之前定义。

集合域用关键字“sets”开始,“endsets”结束。 集合分类: 基本集合定义统一语法格式: setname[/member-list/][:attribute-list]; 集合名/对象名1 对象名2 …对象名n/:对象属性; 集合定义的几种方法: sets row/1..20/:d1,d2,…dn; !集合名/对象名/:对象属性; end sets 派生集合定义方法: sets row/1..20/; col/1..100/; page/1..50/; link(row.col):k1,k2…kn; trd/(,t2,…tn; end sets K1可以表示某个省的某个城市的人口。 t1可以表示某个省的某个城市某个人的收入。 二、数据域: 数据域是优化问题中已知得对象的属性值,例如:人的身高,体重;车辆的载重,行驶速度。 数据域以关键字“data”开头,“enddata”结束。 数据域可以出现在模型中的任何地方。 data: d1=…; k1=…; t1=…; enddata 数据域的未知数值 有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以便让LINGO去求出它们的最优值。在数据声明中输入两个相连的逗号表示该位置对应的集成员的属性值未知。两个逗号间可以有空格。 例3.8 sets:

数学中的灵敏度分析

假设条件成为了建模过程中一个影响模型好坏的影响因素,灵敏度分析就是在模型建立后,对假设条件变化,检验模型的优劣性 一般来说Lingo做出来的灵敏度分析能够达到一个比较理想的程度,不过还是要根据模型本身来研究,建议你在开始之前先学习一下《数值分析》,对建模的灵敏度分析很有用哈,再根据《数值分析》的方法,对M-C(蒙特卡罗)方法进行灵敏度分析,你会很快掌握~~~ 随着现代工业的迅速发展,对工业设备的精度提出了更高的要求。但是,由于制造误差、轴承间隙、弹性变形等因素的影响,不可避免地会对设备的精度产生一定的影响。因此我们就有必要建立起一个数学模型并且应用恰当的分析方法来研究上述的各种误差对精度的影响关系,找出影响最大的因素,作为我们在实际的制造和装配过程中进行误差分配,降低生产成本,提高传动精度的理论依据。这里就可以采用灵敏度分析的方法。它主要包括局部灵敏度分析方法和全局灵敏度分析方法。 一、局部灵敏度分析方法 局部法主要分析因素对模型的局部影响(如某点)。局部法可以得到参数对输出的梯度,这一数值是许多领域研究中所需要的重要数据。局部法主要应用于数学表达式比较简单,灵敏度微分方程较易推出,不确定因素较少的系统模型中。主要包括直接求导法、有限差分法、格林函数法。 1.直接求导法 对于输入因素个数少、结构不复杂、灵敏度微分方程较易推导的系统或模型,直接法是一种简单快速的灵敏度分析方法。时变(非静止)系统可以用微分或微分-代数方程进行描述。假设要考虑的初值问题是 ,(1) 同样,代表n维输出变量,代表m维输入因素。代表初值数组。 式(1)对输入因素微分得到下述的灵敏度微分方程

(2) 或以矩阵形式表示为(3) 式中,是系统代数-微分方程右边对系统输出变量的导数(可称为雅可比矩阵),是对输入因素的导数,也可称为参数雅可比。微分方程(2)的初始条件为零向量。 上述的直接法建立在微分方程(2)的基础上,要得到其灵敏度矩阵S的解,需要先求得矩阵J和F的值。而矩阵的值又是由系统变量的真实值确定,因此,需同时或预先求得(1)方程的解。 对于非时变(静止)系统,将其代数方程,式中,Y是n维输出变量,X是m维输入因素。令表示隐性代数方程式的解。对输入因素求导数,得到下面的灵敏度公式: (4) 式中,称为静态灵敏度矩阵,和由静态点的变量值计算。对于变量少、结构不复杂、灵敏度微分方程较易推出的系统,直接法是一个简单快速的灵敏度分析方法。 2.有限差分法 局部灵敏度最简单的计算方法是有限差分法,其基本做法是使设计变量有一个微小的摄动,用差分格式来计算输出对设计变量的近似导数。其中比较简单的是采用向前差分格式 (5) 式中,截断误差与同阶。有时采用更为精确的中心差分公式 (6) 而,

Lingo与线性规划

Lingo 与线性规划 线性规划的标准形式是 Min z c 1 x 1 c n x n a 11 x 1 a 1n x n b 1 s..t a m1 x 1 a mn x n (1) b m x i 0, i 1,2, , n 其中 z c 1 x 1 c n x n 称为目标函数, 自变量 x i 称为决策变量 ,不等式组 (1)称为约 束条件 . 满足不等式组 (1)的所有 ( x 1, , x n ) 的集合称为可行域,在可行域里面使得z 取最小值的 ( x 1* , , x n * ) 称为最优解,最优解对应的函数值称为最优值。 求解优化模型的主要软件有 Lingo 、Matlab 、Excel 等。其中 Lingo 是一款专 业求解优化模型的软件, 有其他软件不可替代的方便功能。 本文将简要介绍其在线性规划领域的应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者 min= 函数解析式; 2、约束条件输入格式 利用: >、<、>=、<=等符号。但是 >与 >=没有区别。 Lingo 软件默认所以自变量都大于等于 0. 3、运算 加 (+), 减(-), 乘(*), 除(/), 乘方 (x^a) ,要注意乘号 (*) 不能省略。 4、变量名 不区分大小写字母,不超过 32 个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“ ; ”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata , end 尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL 语句 一般程序必须先输入 MODEL :表示开始输入模型,以“ END ”结束。对简单的模型,这两个语句也可以省略。 8、改变变量的取值范围 @bin(变量名 ) ; @bnd(a, 变量名 ,b ) ; @free( 变量名 ) ; @gin(变量名 ) ; 例 1 求目标函数 z 2x 1 限制该变量为 0 或 1. 限制该变量介于 a,b 之间 . 允许该变量为负数 . 限制该变量为整数 . 3x 2 的最小值,约束条件为

如何在lingo中使用集合1

例题1. 在lingo 中输入下列线性规划模型,并求解 ∑∈?=A j i j i x j i d z ),(),(),( min s.t. 1),1(≥∑∈V j j x , , },10,,2,1{,0),(x ,),(, 1,1),(V V A V V i i i j i x j j i x V i ?==∈=>=∑∈ 为非负实数 所有 的数值如下表:d d=0 8 5 9 12 14 12 16 17 22 8 0 9 15 16 8 11 18 14 22 5 9 0 7 9 11 7 12 12 17 9 15 7 0 3 17 10 7 15 15 12 16 9 3 0 8 10 6 15 15 14 8 11 17 8 0 9 14 8 16 12 11 7 10 10 9 0 8 6 11 16 18 12 7 6 14 8 0 11 11 17 14 12 15 15 8 6 11 0 10 22 22 17 15 15 16 11 11 10 0; 分析:这个模型输入的难点,在于变量的数量太多,足足有100个。约束条件也比较多,有没有什么方便的输入方法?下面介绍lingo 中集合的建立 新建lingo 文件 输入下面内容 model : sets : V/1..10/;!创建集合V; A(V,V):d,x;!创建集合A 是V 乘V.而d,x 是与A 同结构的,即d ,x 分别是10*10矩阵; endsets min =@sum (A(i,j):d(i,j)*x(i,j));!创建目标函数; @sum (V(j):x(1,j))>=1; !第一个约束条件; @for (V(j)|j#gt#1: !i#gt#1为逻辑判断语句表示i>1是返回真值,但这里不能直接写i>1,因为">"是关系运算符不是逻辑运算符; @sum (V(i):x(i,j))=1;); !利用循环函数表达:当i>1(即i 从2到10)时, {x(i,j):j=1..10}的和等于1;

matlab、lingo程序代码23-线性规划问题及灵敏度分析

线性规划问题及灵敏度分析在LINGO软件中的实现 (龙少波李东阳罗添元) 一、问题的提出: 某公司饲养实验用的动物以出售给动物研究所,已知这些动物的生长对饲 料中3种营养成分(蛋白质、矿物质和维生素)特别敏感,每个动物每周至少需 要蛋白质60g,矿物质3g,维生素8mg,该公司能买到5种不同的饲料,每种饲 料1kg所含各种营养成分和成本如下表所示,如果每个小动物每周食用饲料不超 过52kg,才能满足动物生长需要。 A1 A2 A3 A4 A5 营养最 低 要求蛋白质(g) 0.3 2 1 0.6 1.8 60 矿物质(g) 0.1 0.05 0.02 0.2 0.05 3 维生素(mg) 0.05 0.1 0.02 0.2 0.08 8 成本(元/ kg)0.2 0.7 0.4 0.3 0.5 问题: 1.求使得总成本最低的饲料配方? 2.如果另一个动物研究对蛋白质的营养要求变为59单位, 但是要求动物的价格比现在的价格便宜0.3元,问该养殖所 值不值得接受? 3.由于市场因素的影响,X2的价格降为0.6元每千克, 问是否要改变饲料配方? 二、建立线性规划数学模型 解答: (1)设需要饲料A1, A2, A3, A4分别为X1, X2, X3, X4kg,则建立线 性规划数学模型如下: 目标函数:MinS=0.2X1+0.7X2+0.4X3+0.3X4+0.5X5 约束条件:0.3X1+2X2+X3+0.6X4+1.8X5>=60 0.1X1+0.05X2+0.02X3+0.2X4+0.05X5>=3 005X1+0.1X2+0.02X3+0.2X4+0.08X5>=8

数学建模:运用Lindolingo软件求解线性规划

数学建模:运用Lindolingo软件求解线性规划 1、实验内容: 对下面是实际问题建立相应的数学模型,并用数学软件包Lindo/lingo对模型进行求解。 某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.名今工厂共有原料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资. 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划. 数学建模论文 运用lindo/lingo软件求解线性规划 运用lindo/lingo软件求解线性规划 一、摘要 本文要解决的问题是如何安排生产计划,即两种饮料各生产多少使获利最大。 首先,对问题进行重述明确题目的中心思想,做出合理的假设,对符号做简要的说明。 然后,对问题进行分析,根据题目的要求,建立合适的数学模型。 最后,运用lindo/lingo软件求出题目的解。 【关键词】最优解 lindo/lingo软件 第二、问题的重述 某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.今工厂共有原

料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资。 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划。 第三、模型的基本假设 1、每一箱饮料消耗的人力、物力相同。 2、每个人的能力相等。 3、生产设备对生产没有影响。 第四、符号说明 1、x.....甲饮料 2、y.....乙饮料 3、z.....增加的原材料 第五、问题分析 根据题目要求:如何安排生产计划,即两种饮料各生产多少使获利最大,可知本题所求的是利润的最大值。我们可以先建立数学模型,然后用lindo/lingo软件包求解模型的最大值。 第六、模型的建立及求解根据题目建立如下3个模型: 模型1: max=0.1*x+0.09*y; 0.06*x+0.05*y<=60; 0.1*x+0.2*y<=150; x+y<=800; 结果:x=800;y=0;max=80 模型2:

灵敏性分析

LINGO灵敏性分析(Range,Ctrl+R) 用该命令产生当前模型的灵敏性分析报告:研究当目标函数的费用系数和约束右端项在 什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析是在求解模型时作出的,因此在求解模型时灵敏性分析是激活状态,但是默认是不激活的。为了激活灵敏性分析,运行 LINGO|Options…,选择 General Solver Tab,在 Dual Computations 列表框中,选择 Prices and Ranges 选项。灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它。 下面我们看一个简单的具体例子。 例 5.1某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。生产数据如下表所示: 若要求桌子的生产量不超过 5 件,如何安排三种产品的生产可使利润最大? 用 DESKS、TABLES 和 CHAIRS 分别表示三种产品的生产量,建立 LP 模型。 max=60*desks+30*tables+20*chairs; 8*desks+6*tables+chairs<=48; 4*desks+2*tables+1.5*chairs<=20; 2*desks+1.5*tables+.5*chairs<=8; tables<=5; 求解这个模型,并激活灵敏性分析。这时,查看报告窗口(Reports Window),可以看 到如下结果。

“Global optimal solution found at iteration: 3”表示 3 次迭代后得到全局最优解。“Objective value:280.0000”表示最优目标值为 280。“Value”给出最优解中各变量的值:造 2 个书桌(desks), 0 个餐桌(tables), 8 个椅子(chairs)。所以 desks、chairs 是基变量(非 0), tables 是非基变量(0)。 “Slack or Surplus”给出松驰变量的值: 第 1 行松驰变量 =280(模型第一行表示目标函数,所以第二行对应第一个约束) 第 2 行松驰变量 =24 第 3 行松驰变量 =0 第 4 行松驰变量 =0 第 5 行松驰变量 =5 “Reduced Cost”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时, 目标函数的变化率。其中基变量的 reduced cost 值应为 0,对于非基变量 Xj, 相应的 reduced cost 值表示当某个变量 Xj 增加一个单位时目标函数减少的量( max 型问题)。本例中:变量 tables 对应的 reduced cost 值为 5,表示当非基变量 tables 的值从 0变为 1 时(此时假定其他非基变量保持不变,但为了满足约束条件,基变量显然会发生变化),最优的目标函数值 = 280 - 5 = 275。 “DUAL PRICE”(对偶价格)表示当对应约束有微小变动时, 目标函数的变化率。输 出结果中对应于每一个约束有一个对偶价格。若其数值为 p,表示对应约束中不等式右端项若增加 1 个单位,目标函数将增加 p 个单位(max 型问题)。显然,如果在最优解处约束正好取等号(也就是“紧约束”,也称为有效约束或起作用约束),对偶价格值才可能不是0。本例中:第 3、4 行是紧约束,对应的对偶价格值为 10,表示当紧约束 3) 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 20 变为 3) 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 21 时,目标函数值 = 280 +10 = 290。对第 4 行也类似。 对于非紧约束(如本例中第 2、5 行是非紧约束),DUAL PRICE 的值为 0, 表示对应约束中不等式右端项的微小扰动不影响目标函数。有时, 通过分析 DUAL PRICE, 也可对产生不可行问题的原因有所了解。 灵敏度分析的结果是 目标函数中 DESKS 变量原来的费用系数为 60,允许增加(Allowable Increase)=4、允许减少(Allowable Decrease)=2,说明当它在[60-4,60+20] = [56,80]范围变化时,

Lingo的基本用法

LINGO的基本用法 一.集合的基本用法 集合(set)及其属性(attribute)的概念 基本集合与派生集合 集合名[/元素列表/][:属性列表]; 集合名(父集合列表)[/元素列表/][:属性列表]; 稠密集合与稀疏集合 元素过滤法 基本集合的隐式列举法: 数字型 1..n 字符数字型Car101..Car208 日期型MON..FRI 月份型OCT..JAN 年月型OCT2007..JAN2008 二.模型结构 (1)集合段从“sets:”到“endsets” (2)数据输入段从“data:”到“enddata” 属性=常数列表 (3)目标和约束段 MIN=表达式 (4)计算段从“calc:”到“endcalc”,对原始数据的计算处理 (5)初始段从“init:”到“endinit”,定义迭代初值用 属性=常数列表 (6)注释从感叹号到分号 三.函数 基本数学函数 @ABS(X) @COS(X) @EXP(X) @FLOOR(X) @LGM(X) @LOG(X) @MOD(X,Y) @POW(X,Y) @SIGN(X) @SIN(X) @SMAX(list) @SMIN(list) @SQR(X) @SQRT(X) @TAN(X) 其中@LGM(X) =ln(X-1)! 集合循环函数 @FOR @MIX @MIN @PROD @SUM 用法:集合函数名(集合名(集合索引列表)|条件:表达式组) 集合操作函数 @IN @IN(集合名,集合元素名,…集合元素名) @INDEX @INDEX(集合名,集合元素名)

@WRAP @WRAP(i,N),循环计数 @SIZE @SIZE(集合名) 变量定界函数 @BND(L,X,U) @BIN(X) @FREE(X) @GIN(X) 分别对变量取值限制:上下界,0-1值,取消非负限制,整数 概率分布函数 @PNS(X) 标准正态分布@PSL(X) 正态线性损失 @PBN(P,N,X) 二项分布@PHG 超几何分布 @PTD(N,X) t分布@PFD(N,D,X) F分布 @PPS(A,X) 泊松分布@PPL(A,X) 泊松线性损失 @PCX(N,X) X平方分布@RAND(seed) 随机数 服务系统函数 @PEL(A,X) @PFS(A,X,C) @PEB(A,X) 文件输入输出函数 @FILE(fn) @TEXT(…fn?) @OLE 结果报告函数 @ITERS() 返回迭代次数 @NEWLINE(n) 输出n个新行 @STRLEN(string) 返回字符串的长度 @NAME(reference) 返回变量名或行名 @WRITE 用于数据段,输出变量,字符串或换行 @WRITEFOR 是@WRITE在循环情况下的推广 @FORMAT 以格式描述符方式输出数值 @DUAL(varname) 返回解答中变量的判别数或结束行的影子价格@STATUS() 返回求解后的最后状态 其他函数 @IF @IF(条件,true结果,false结果) @WARN @WARN(‘text’,条件) @USER @USER(用户编写的函数dll或obj文件) 四.文件传输 通过文本文件传输数据 @FILE和@TEXT 通过Excel文件传输数据 @OLE

Lingo与线性规划

Lingo 与线性规划 线性规划的标准形式是 1111111..0,1,2,,n n m mn n m i a x a x b s t a x a x b x i n +≤??? ? +≤??≥=?L M L L (1) 其中11n n z c x c x =++L 称为目标函数,自变量i x 称为决策变量,不等式组(1)称为约束条件. 满足不等式组(1)的所有1(,,)n x x L 的集合称为可行域,在可行域里面使得z 取最小值的** 1(,,)n x x L 称为最优解,最优解对应的函数值称为最优值。 求解优化模型的主要软件有Lingo 、Matlab 、Excel 等。其中Lingo 是一款专业求解优化模型的软件,有其他软件不可替代的方便功能。本文将简要介绍其在线性规划领域的应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者 min=函数解析式; 2、约束条件输入格式 利用:>、<、>=、<=等符号。但是>与>=没有区别。Lingo 软件默认所以自变量都大于等于0. 3、运算 加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“;”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata ,end 尾部不加任何符号。

6、命令不考虑先后次序 7、MODEL 语句 一般程序必须先输入MODEL :表示开始输入模型,以“END”结束。对简单的模型,这两个语句也可以省略。 8、改变变量的取值范围 @bin(变量名); 限制该变量为0或1. @bnd(a,变量名,b ); 限制该变量介于a,b 之间. @free(变量名); 允许该变量为负数. @gin(变量名); 限制该变量为整数. 例1 求目标函数1223z x x =+的最小值,约束条件为 输入Lingo 程序: min = 2*x1 + 3*x2; x1 + x2 >= 350; x1 >= 100; 2*x1 + x2 <= 600; 有两种运行方式: 1、点击工具条上的按钮 即可。 2、点击菜单:LINGO →Solve 运行结果如下: 下面对其各个部分进行说明: Global optimal solution found :表示已找到全局最优解。 Objective value :表示最优值的大小。可见本题函数最小值min z =800。 Infeasibilities :矛盾约束的数目。 Total solver iterations:迭代次数。 Variable :变量。本题有两个变量。

lingo中灵敏度分析

Row Slack or Surplus Dual Price 1 280.0000 1.000000 2 24.00000 0.000000 3 0.000000 10.00000 4 0.000000 10.00000 5 5.000000 0.000000 “Global optimal solution found at iteration: 3”表示3次迭代后得到全局最优解。“Objective value:280.0000”表示最优目标值为280。“Value”给出最优解中各变量的值:造2个书桌(desks), 0个餐桌(tables), 8个椅子(chairs)。所以desks、chairs是基变量(非0),tables是非基变量(0)。 “Slack or Surplus”给出松驰变量的值: 第1行松驰变量=280(模型第一行表示目标函数,所以第二行对应第一个约束) 第2行松驰变量=24 第3行松驰变量=0 第4行松驰变量=0 第5行松驰变量=5 标签:Lingo灵敏度分析中的 ?“Reduced Cost”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时, 目标函数的变化率。其中基变量的reduced cost值应为0,对于非基变量Xj, 相应的reduced cost 值表示当某个变量Xj增加一个单位时目标函数减少的量( max型问题)。本例中:变量tables对应的reduced cost值为5,表示当非基变量tables的值从0变为1时(此时假定其他非基变量保持不变,但为了满足约束条件,基变量显然会发生变化),最优的目标函数值= 280 - 5 = 275。 ?“DUAL PRICE”(对偶价格)表示当对应约束有微小变动时, 目标函数的变化率。输出结果中对应于每一个约束有一个对偶价格。若其数值为p,表示对应约束中不等式右端项若增加1 个单位,目标函数将增加p个单位(max型问题)。显然,如果在最优解处约束正好取等 号(也就是“紧约束”,也称为有效约束或起作用约束),对偶价格值才可能不是0。本例中:第3、4行是紧约束,对应的对偶价格值为10,表示当紧约束 3) 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 20 变为3) 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 21 时,目标函数值= 280 +10 = 290。对第4行也类似。 对于非紧约束(如本例中第2、5行是非紧约束),DUAL PRICE 的值为0, 表示对应约束中不等式右端项的微小扰动不影响目标函数。有时, 通过分析DUAL PRICE, 也可对产生不可行问题的原因有所了解。

lingo解决线性规划问题的程序

Lingo12软件培训教案 Lingo 主要用于求解线性规划,整数规划,非线性规划,V10以上版本可编程。 例1 一个简单的线性规划问题 0 , 600 2 100 350 st. 3 2max >=<=+=<<=++=y x y x x y x y x z ! 源程序 max = 2*x+3*y; [st_1] x+y<350; [st_2] x<100; 2*x+y<600; !决策变量黙认为非负; <相当于<=; 大小写不区分 当规划问题的规模很大时,需要定义数组(或称为矩阵),以及下标集(set) 下面定义下标集和对应数组的三种方法,效果相同::r1 = r2 = r3, a = b = c. sets : r1/1..3/:a; r2 : b; r3 : c; link2(r1,r2): x; link3(r1,r2,r3): y; endsets data : ALPHA = ; a=11 12 13 ; r2 = 1..3; b = 11 12 13; c = 11 12 13; enddata

例2 运输问题 解: 设决策变量ij x = 第i 个发点到第j 个售点的运货量,i =1,2,…m; j =1,2,…n; 记为ij c =第i 个发点到第j 个售点的运输单价,i =1,2,…m; j =1,2,…n 记i s =第i 个发点的产量, i =1,2,…m; 记j d =第j 个售点的需求量, j =1,2,…n. 其中,m = 6; n = 8. 设目标函数为总成本,约束条件为(1)产量约束;(2)需求约束。 于是形成如下规划问题: n j m i x n j d x m i s x x c ij j n i ij i m j ij m i n j ij ij ,...,2,1,,...,2,1,0 ,...,2,1, ,...,2,1, st. z min 11 11==>=<==<==∑∑∑∑==== 把上述程序翻译成LINGO 语言,编制程序如下: ! 源程序

线性规划lingo实现示例

加工奶制品的生产计划 问题 品加工厂用牛奶生产1A ,2A 两种奶制品,1桶牛奶可以在设备甲用12小时加工成3公斤1A ,或者在设备乙上用8小时加工成4公斤2A 。根据市场需求,生产的1A ,2A 全部能售出,且每公斤1A 获利24元,每公斤2A 获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间魏480小时,并且设备甲每天至多能加工100公斤1A ,设备乙的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下三个附加问题: 1) 若用35元可以买到1桶牛奶,应否作这项投资? 若投资,每天最多购买多少桶 牛奶? 2) 若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元? 3) 由于市场需求变化,每公斤1A 的获利增加到30元,应否改变生产计划? 问题分析 这个优化问题的目标是使每天的获利最大,要作的决策是生产计划,即每天用多少桶牛奶生产1A ,用多少桶牛奶生产2A ,决策受到3个条件的限制:原料(牛奶)供应、劳动时间、设备甲的工作能力。按照题目所给,将决策变量、目标函数和约束条件用数学符号及式子表示出来,就得到下面的模型。 基本模型 决策变量:设每天用1x 桶牛奶生产1A ,用2x 桶牛奶生产2A 。 目标函数:设每天获利Z 元。1x 桶牛奶可生产31x 公斤1A ,获利1324x ?,2x 桶牛奶可生产42x 公斤2A ,获利2416x ?,故Z=216472x x +. 约束条件 原料供应:生产1A ,2A 的原料(牛奶)总量不得超过每天的供应,即1x +2x ≤50桶; 劳动时间:生产1A ,2A 的总加工时间不得超过每天正式工人总的劳动时间,即121x +82x ≤480小时; 设备能力:1A 的产量不得超过设备甲每天的加工能力,即31x ≤100; 非负:1x ,2x 均不能为负值,即1x ≥0,2x ≥0。 综上可得 Max Z=216472x x + (1) s.t. 1x +2x ≤50 (2)

最优化方法(线性规划)——用Lingo对线性规划进行灵敏度分析

lingo 软件求解线性规划及灵敏度分析 注:以目标函数最大化为例进行讨论,对求最小的问题,有类似的分析方法!所有程序运行环境为lingo10。 一、用lingo 软件求解线性规划 例1: m a x 23..4310 3512,0 z x y s t x y x y x y =++≤+≤≥ 在模型窗口输入: model: max=2*x+3*y; 4*x+3*y<=10; 3*x+5*y<12; ! the optimal value is :7.454545 ; End 如图所示: 运行结果如下(点击 工具栏上的‘solve ’或点击菜单‘lingo ’下的‘solve ’即可): Global optimal solution found. Objective value: 7.454545(最优解函数值) Infeasibilities: 0.000000 Total solver iterations: 2(迭代次数)

Variable (最优解) Value Reduced Cost X 1.272727 0.000000 Y 1.636364 0.000000 Row Slack or Surplus Dual Price 1 7.454545 1.000000 2 0.000000 0.9090909E-01 3 0.000000 0.5454545 例2: 12123124125m a x 54.. 390280450 z x x s t x x x x x x x x x x =+++=++=++=≥ 在模型窗口输入: model: max=5*x1+4*x2; x1+3*x2+x3=90; 2*x1+x2+x4=80; x1+x2+x5=45; end 运行(solve )结果如下: Global optimal solution found. Objective value: 215.0000 Infeasibilities: 0.000000 Total solver iterations: 3 Variable Value Reduced Cost X1 35.00000 0.000000 X2 10.00000 0.000000 X3 25.00000 0.000000 X4 0.000000 1.000000 X5 0.000000 3.000000 Row Slack or Surplus Dual Price 1 215.0000 1.000000 2 0.000000 0.000000 3 0.000000 1.000000 4 0.000000 3.000000 例3

Lingo与线性规划

Lingo与线性规划 线性规划得标准形式就是 (1) 其中称为目标函数,自变量称为决策变量,不等式组(1)称为约束条件、 满足不等式组(1)得所有得集合称为可行域,在可行域里面使得z取最小值得称为最优解,最优解对应得函数值称为最优值。 求解优化模型得主要软件有Lingo、Matlab、Excel等。其中Lingo 就是一款专业求解优化模型得软件,有其她软件不可替代得方便功能。本文将简要介绍其在线性规划领域得应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者min=函数解析式; 2、约束条件输入格式 利用:>、<、>=、<=等符号。但就是>与>=没有区别。Lingo软件默认所以自变量都大于等于0、 3、运算 加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始得就是说明语句(说明语句也需要以分号“;”结束)。但就是,model,sets,data以“:”结尾。endsets,e nddata,end尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL语句 一般程序必须先输入MODEL:表示开始输入模型,以“END”结束。对简单

得模型,这两个语句也可以省略。 8、改变变量得取值范围 bin(变量名); 限制该变量为0或1、 bnd(a,变量名,b);限制该变量介于a,b之间、free(变量名);允许该变量为负数、 gin(变量名);限制该变量为整数、 例1 求目标函数得最小值,约束条件为 输入Lingo程序: min=2*x1 +3*x2; x1+ x2 >=350;?x1 >=100;?2*x1 +x2 <=600; 有两种运行方式: 1、点击工具条上得按钮即可。 2、点击菜单:LINGO→Solve 运行结果如下: 下面对其各个部分进行说明: Global optimalsolution found:表示已找到全局最优解。 Objective value:表示最优值得大小。可见本题函数最小值800。 Infeasibilities:矛盾约束得数目。

相关主题
文本预览
相关文档 最新文档