当前位置:文档之家› Lingo题目解答

Lingo题目解答

Lingo题目解答
Lingo题目解答

Lingo软件在求解数学优化问题的使用技巧

LINGO是一种专门用于求解数学规划问题的软件包。由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。LINGO 主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。

LINGO的最新版本为LINGO7.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。

1.LINGO编写格式

LINGO模型以MODEL开始,以END结束。中间为语句,分为四大部分(SECTION):(1)集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS”结束。这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(ATTRIBUTE,类似于数组)。

LINGO中的集合有两类:一类是原始集合(PRIMITIVE SETS),其定义的格式为:SETNAME/member list(or 1..n)/:attribute,attribute,etc。

另一类是是导出集合(DERIVED SETS),即引用其它集合定义的集合,其定义的格式为:

SETNAME(set1,set2,etc。):attribute,attribute,etc。

如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。(2)目标与约束:这部分定义了目标函数、约束条件等。一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。求解优化问题时,该部分是必须的。(3)数据部分(DATA):这部分以“DATA:”开始,以“END DA TA”结束。其作用在于对集合的属性(数组)输入必要的数值。格式为:attribut=value_list。该部分主要是方便数据的输入。

(4)初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。

编写LINGO程序要注意的几点:

1.所有的语句除SETS、ENDSETS、DA TA、ENDDATA、INIT、ENDINIT和MODEL,END 之外必须以一个分号“;”结尾。

2.L INGO求解非线性规划时已约定各变量非负。

LINGO内部函数使用详解。

LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。

(1)常用数学函数

@ABS(X) 返回变量X的绝对数值。

@COS( X)

返回X的余弦值,X的单位为弧度

@EXP( X)

返回x

e 的值,其中e 为自然对数的底,即 71828.2

@FLOOR( X)

向0靠近返回X 的整数部分。如@FLOOR(3.7),则返回3;@FLOOR(-3.7),则返回-3。 @LGM( X)

返回Γ函数的自然对数值。 @LOG( X)

返回变量X 的自然对数值。 @SIGN( X)

返回变量X 的符号值,当X<0时为-1;当X>0时为1。 @SIN( X)

返回X 的正弦值,X 的单位为弧度 @SMAX( X1, X2,..., XN)

返回一列值X1, X2,..., XN 的最大值。 @SMIN( X1, X2,..., XN)

返回一列值X1, X2,..., XN 的最小值。 @TAN( X)

返回X 的正切值,X 的单位为弧度

(2)集合函数

集合函数的用法如下:

set_operator (set_name|condition:expression) 其中set_oprator 部分是集合函数名(见下),set_name 是数据集合名,expression 部分是表达式,|condition 部分是条件,用逻辑表达式描述(无条件时可省略)。逻辑表达式中可以三种逻辑算符(#AND#(与),#OR#(或),#NOT#(非))和六种关系酸符(#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于))。

常见的集合函数如下:

@FOR (set_name :constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions )描述。

@MAX (set_name :expression )返回集合上的表达式(expression )的最大值。 @MIN (set_name :expression )返回集合上的表达式(expression )的最小值。 @SUM (set_name :expression )返回集合上的表达式(expression )的和。 @SIZE (set_name )返回数据集set_name 中包含元素的个数。

@IN (set_name ,set_element )如果数据集set_name 中包含元素set_element 则返回1,否则返回0。

(3)变量界定函数

变量函数对变量的取值范围附加限制,共有四种。 @BND (L,X,U )限制U X L ≤≤ @BIN (X )限制X 为0或1。

@FREE (X )取消对X 的符号限制(即可取任意实数值)。 @GIN (X )限制X 为整数值。 (4)财务函数

),(@N I FPA 返回如下情形下的净现值:单位时段利率为I ,连续N 个时段支付,每个

时段支付费用,即:

),(@N I FPA =I I I N

N

n n

/))11(1()

1(11+-=+∑

= ),(@N I FPL 返回如下情形下的净现值:单位时段利率为I ,第N 个时段支付单位费用,

即:

),(@N I FPL =N

I

)11(

+

(5)概率函数

@PSN(X)标准正态分布的分布函数。

@PSL(X)单位正态线性损失函数(即返回),0(X Z MAX -的期望值,其中Z 为标准正态随机变量)

@PPS(A ,X)均值为A 的Possion 分布的分布函数(当X 不是整数时,采用线性插值进行计算)。 @PPL(X)Possion 分布的线性损失函数(即返回),0(X Z MAX -的期望值,其中Z 为Possion 分布随机变量)

@PBN(P ,N ,X)二项分布的分布函数当N 或X 不是整数时,采用线性插值进行计算)。 @PHG(POP ,G ,N ,X)超几何分布的分布函数(当POP ,G ,N 或X 不是整数时,采用线性插值进行计算)。

@PFD(N,D,X)自由度为N 和D 的F 分布的分布函数。 @PCX(N,X) 自由度为N 的2

χ分布的分布函数。

@PTD(N,X) 自由度为N 的t 分布的分布函数。

@RAND(X)返回0与1之间的伪随机数(X 为种子数,典型用法为U(I)=@RAND(U(I+1)))。

1.某昼夜服务的公交路线每天各时间区段内需司机和乘务人员如下:

设司机和乘务人员分别在各时间区段一开始上班,并连续工作八小时,问该公交线路至少配

备多少名司机和乘务人员?从第一班开始排,试建立线性模型。 分析与求解:

注意在每一时间段里上班的司机和乘务人员中,既包括在该时间段内开始时报到的人员,还包括在上一时间段工作的人员。因为每一时间段只有四个小时,而每个司乘人员却要连续工作八个小时。因此每班的人员应理解为该班次相应时间段开始时报到的人员。

设i x 为第i 班应报到的人员(6,,2,1 =i ),则应配备人员总数为:

∑==6

1

i i x Z

按所需人数最少的要求,可得到线性模型如下:

∑==6

1

min i i x Z

1612

233445

56112

660706050

..203060,,,0

x x x x x x x x s t

x x x x x x x x +≥??+≥??+≥?

+≥??

+≥??+≥?

≥?

?≥? LINGO 程序如下:

MODEL:

min=x1+x2+x3+x4+x5+x6; x1+x6>=60; x1+x2>=70; x2+x3>=60; x3+x4>=50; x4+x5>=20; x5+x6>=30; x1>=60; END

得到的解为:

x1=60,x2=10,x3=50,x4=0,x5=30,x6=0;

配备的司机和乘务人员最少为150人。

2 某地区有三个农场共用一条灌渠,每个农场的可灌溉地及分配到的最大用水量如下表:

各农场均可种植甜菜、棉花和高粱三种作物,各种作物的用水量、净收益及国家规定

三个农场达成协议,他们的播种面积与其可灌溉面积相等,而各种农场种何种作物并无限制。问如何制定各农场种植计划才能在上述限制条件下,使本地区的三个农场的总净收益最大。

分析与求解:

设农场1种植的甜菜、棉花和高粱分别为131211,,x x x 亩,农场2种植的甜菜、棉花和高粱分别为232221,,x x x 亩,农场3种植的甜菜、棉花和高粱分别为333231,,x x x 亩。

设农场可耕地为300,600,400321===a a a ,最大用水量为,6001=b ,8002=b

3753=b ,甜菜、棉花和高粱的种植限额为325,500,600321===c c c ,耗水量为31=d ,22=d ,13=d ,净收益为100,300,400321===e e e ,根据题目条件,可建立如

下线性模型:

∑∑===31

3

1

)(max j i ij j x e Z

?????????=≤=≤=≤∑∑∑===3

1

3

13

13

,2,13,2,13,2,1.

.j i ij j j i ij i j ij i b x d i a x j c x t s

LINGO 编程如下: MODEL: SETS:

place/1..3/:a,b; kind/1..3/:c,d,e; plan(place,kind):x; ENDSETS DATA:

a=400,600,300; b=600,800,375; c=600,500,325;

d=3,2,1; e=400,300,100; ENDDATA

max=@sum(kind(j):e(j)*@sum(place(i):x(i,j))); @for(kind(j):@sum(place(i):x(i,j))<=c(j)); @for(place(i):@sum(kind(j):x(i,j))<=a(i)); @for(place(i):@sum(kind(j):d(j)*x(i,j))<=b(i)); END

得到结果如下:

X(1,1)=0,X(1,2)=300,X(1,3)=0 X(2,1)=258.3333,X(2,2)=12.5,X(2,3)=0 X(3,1)=0,X(3,2)=187.5,X(3,3)=0 最大总净收益为253333.3元。

对本题来说,由于数据少,可以不采用数组形式,可直接采用变量,则建立模型如下:

设农场1种植的甜菜、棉花和高粱分别为111,,z y x 亩,农场2种植的甜菜、棉花和高粱分别为222,,z y x 亩,农场3种植的甜菜、棉花和高粱分别为333,,z y x 亩。

根据题目条件,可建立如下线性模型:

)(100)(300)(400max 321321321z z z y y y x x x Z ++++++++=

?

??

???

??

?

?

????

?

≥≤++≤++≤++≤++≤++≤++≤++≤++≤++0

,,,,,,,,375238002360023300600400325500600.

.321321321333222111333222111321321321z z z y y y x x x z y x z y x z y x z y x z y x z y x z z z y y y x x x t s

LINGO 程序如下:

MODEL:

max=400*(x1+x2+x3)+300*(y1+y2+y3)+100*(z1+z2+z3); x1+x2+x3<=600; y1+y2+y3<=500; z1+z2+z3<=325; x1+y1+z1<=400; x2+y2+z2<=600; x3+y3+z3<=300;

3*x1+2*y1+z1<=600; 3*x2+2*y2+z2<=800; 3*x3+2*y3+z3<=375; END

得到的解如下:

X1=200,Y1=0,Z1=0;

X2=58.33333, Y2=312.5,Z2=0; X3=0,Y3=187.5,Z3=0; 最大总净收益为253333.3元。

3. 公司在各地有4项业务,选定了4位业务员去处理。由于业务能力、经验和其它情况不同,4业务员去处理4项业务的费用(单位:元)各不相同,见下表:

应当怎样分派任务,才能使总的费用最小?

问题分析与求解:

这是一个最优指派问题。引入如下变量: ??

?=项业务

个人做第若不分派第项业务个人做第若分派第j i j i x ij 0

1

设矩阵a(4,4)为指派矩阵,其中a(i,j)为第i 个业务员做第j 项业务的业务费。 则可以建立如下模型:

∑∑===414

1

min i j ij ij x a Z

????

?

????======∑∑==4

,3,2,1,104,3,2,114,3,2,11.

.41

4

1j i x i x j x t s ij j ij i ij 或 LINGO 程序如下:

MODEL: SETS:

person/1..4/;

task/1..4/;

assign(person,task):a,x;

ENDSETS

DATA:

a=1100,800,1000,700,

600,500,300,800,

400,800,1000,900,

1100,1000,500,700;

ENDDATA

min=@sum(assign:a*x);

@for(person(i):@sum(task(j):x(i,j))=1);

@for(task(j):@sum(person(i):x(i,j))=1);

@for(assign(i,j):@bin(x(i,j)));

END

得到的结果如下:

x(1,1)=0,x(1,2)=0,x(1,3)=0,x(1,4)=1;

x(2,1)=0,x(2,2)=1,x(2,3)=0,x(2,4)=0;

x(3,1)=1,x(3,2)=0,x(3,3)=0,x(3,4)=0;

x(4,1)=0,x(4,2)=0,x(4,3)=1,x(4,4)=0;

最小费用为2100元。

即第1个业余员做第4项业务,第2个业余员做第2项业务,即第3个业余员做第1项业务,第4业余员做第3项业务。总费用达到最小,为2100元。

4 篮球对选队员问题

篮球队要选择5名队员上场组成出场阵容参加比赛。8名篮球队员的身高及擅长位置如下表:

出场阵容满足如下条件:

(1)只能有一名中锋上场;

(2)至少有一名后卫上场;

(3)如1号和4号均上场,则6号不出场;

(4)2号和8号至少有1个不出场;

问应当选择哪5名队员上场,才能使出场队员平均身高最高。

分析与求解:

这是一个0-1整数规划问题。

x如下:

设0-1变量

i

??

?=名队员被选上

第名队员未选上

第i i x i 1

设各队员的身高分别为常数i a )8,,2,1( =i 来表示,则目标函数很容易给出:

∑==

8

1

5

1

max i i

i x

a Z 。

问题较为复杂的是如何根据题目给出的条件给出线性约束条件,下面对每一个条件给出约束条件:

所选队员为5人,则

∑==8

1

5i i

x

只能有一名中锋上场,则121=+x x ,这样保证两名中锋恰好有一名上场。 至少有一名后卫,则1876≥++x x x 。

如1号和4号均上场,则6号不出场。则可用如下一个约束来表达:2641≤++x x x 。当

1,121==x x 时,则06=x ,满足条件;当0,121==x x 或1,021==x x ,6x 可为0或1,也满

足条件;当0,021==x x ,6x 可为0或1,满足条件。因此用该约束条件完全可代表该条件。

2号和8号至少有1个不出场,即2号和8号至多出场1个。用约束条件来表达就是:

182≤+x x 。

因此对该问题建立的数学模型如下:

∑==

8

1

5

1

max i i

i x

a Z

??????

??

?

??

=≤+≤++≥++=+=∑

=1

0,,,12

115.

.821826

41

876218

1或x x x x x x x x x x x x x x t s i i 用LINGO 编程如下:

MODEL: SETS:

team/1..8/:a,x; ENDSETS DATA:

a=1.92,1.90,1.88,1.86,1.85,1.83,1.80,1.78;!给出身高数据;

ENDDATA

max=@sum(team(i):a(i)*x(i))/5.0; !目标函数; @SUM(team(i):x(i))=5; !所选队员为5人; x(1)+x(2)=1; !只能有一名中锋上场; x(6)+x(7)+x(8)>=1; !至少有一名后卫上场;

x(1)+x(4)+x(6)<=2; !如果1号和4号上场,则6号不上场;

x(2)+x(8)<=1; !2号和8号至少有一个不出场.即出场人数至多为1个; @FOR(team(i):@bin(x(i))); !所有变量为0-1变量; END

所得到的解为:

x(1)=0,x(2)=1,x(3)=1,x(4)=1,x(5)=1,x(6)=1,x(7)=0,x(8)=0 即第2,3,4,5,6名队员被选上。 最大平均身高为Z=1.864米

5.有五项设计任务可供选择。各项设计任务的预期完成时间分别为3,8,5,4,10(周)设计报酬分别为7,17,11,9,21(万元)。设计任务只能一项一项地进行,总的期限为20周。选择任务时必须满足下面要求: (1) 至少完成3项设计任务。

(2) 若选择任务1,必须同时选择任务2。 (3) 任务3和任务4不能同时选择。

应当选择哪些任务,才能使总的设计报酬最大? 分析与求解:

这是一个0-1整数规划问题。 设0-1变量i x 如下:

??

?=项设计任务被选上

第项设计任务未选上

第i i x i 1

设各项设计任务的完成时间为i t (5,,2,1 =i )表示,设计报酬为i m (5,,2,1 =i )表示。则容易得到目标函数:∑==

5

1

max i i

i x

m Z

根据题目要求分别列出约束条件如下: 总期限为避免20周,则约束条件为

∑=≤5

1

20i i

i x

t

至少完成3项设计任务,则

∑=≥5

1

3i i

x

若选择任务1,必须同时选择任务2,则12x x ≥。

任务3和任务4不能同时选择,则143≤+x x ,该约束表达式表明任务3和任务4至多只

能选择1个。

因此对该问题建立的数学模型如下:

∑==

5

1

max i i

i x

m Z

??

?

???

?

?

?

??

=≤+≥≥≤∑

==10,,,1320.

.4

32143125

1

5

1或x x x x x x x x x x t t s i i i i i LINGO 程序如下:

MODEL: SETS:

mat/1..5/:m,t,x; ENDSETS DATA:

m=7,17,11,9,21; !定义报酬数组; t=3,8,5,4,10; !定义完成时间; ENDDATA

max=@SUM(mat(i):m(i)*x(i)); !定义目标函数; @SUM(mat(i):t(i)*x(i))<=20; !期限约束 ; @SUM(mat(i):x(i))>=3; !至少完成3项任务;

x(2)>=x(1); !若选择任务1,必须同时选择任务2。; x(3)+x(4)<=1; !任务3和任务4不能同时选择。; @FOR(mat(i):@BIN(x(i))); !使各变量为0-1变量; END

得到的解为x(1)=1,x(2)=1,x(3)=1,x(4)=0,x(5)=0。最大报酬为35万元。 即在满足各种约束条件下,选择设计任务1,2,3,可使总报酬达到最大为35万元。

6 固定费用

有四种资源被用于生产三种产品,资源量、产品单件可变费用、单件售价、资源单耗量及组织三种商品生产的固定费用见下表。现要求制定一个生产计划,使总收益最大。

分析与求解:

总收益等于销售收入减去生产产品的固定费用与可变费用之和。问题的困难之处在于事先不知道某种产品是否生产,因而不能确定是否有相应的固定费用。可引入用0-1变量来解决是否需要固定费用问题。

设j x 是第j 种产品的产量,3,2,1=j ;再设

??

??

?=>=)0(0)

0(1j j j x j x j y 种产品若不生产第种产品若生产第 3,2,1=j 第I 种产品销售一件可收入7-4=3元,第II 种产品销售一件可收入10-6=4元,第III

种产品销售一件可收入20-12=8元。

则问题的整数规划模型为:

321321200150100843max y y y x x x Z ---++=

??

??

???

?????

???===≥≤≤≤≤++≤++≤++≤++3,2,1,103,2,1,0700

75310032300

432500842.

.3332221113

21321321321j y j x y M x y M x y M x x x x x x x x x x x x x t s j j 或且为整数

其中j M 为j x 的某个上界。如根据第2个约束条件,可取100,15021==M M ,

753=M 。也可统一取其最大值150=M 。

如果生产第j 种产品,则起产量0>j x 。由约束条件j j j y M x ≤知1=j y ,此时相应的生产第j 种产品的固定费用在目标函数被考虑。如果不生产第j 种产品,则起产量0=j x 。由约束条件j j j y M x ≤知j y 可为0也可为1。但显然只有0=j y 有利于目标函数最大,从而相应的生产第j 种产品的固定费用在目标函数将不被考虑。因此引入j y 是合理的。

下面是LINGO 程序。

MODEL: DATA: M=150; ENDDATA

max=3*x1+4*x2+8*x3-100*y1-150*y2-200*y3;!目标函数; 2*x1+4*x2+8*x3<=500; 2*x1+3*x2+4*x3<=300; x1+2*x2+3*x3<=100; 3*x1+5*x2+7*x3<=700; x1<=M*y1; x2<=M*y2; x3<=M*y3;

@GIN(x1);@GIN(x2);@GIN(x3); !指定产品件数为整数; @BIN(y1);@BIN(y2);@BIN(y3); !指定0-1变量; end

得到的解为x1=100,x2=0,x3=0,y1=1,y2=0,y3=0。最大值为Z=200元。

7 某公司生产A ,B 和C3种产品,售价分别是12元、7元和6元。生产每件A 产品需要1小时

技术服务、10小时直接劳动、3千克材料;生产每件B 产品需要2小时技术服务、4小时直接劳动、2千克材料;生产每件C 产品需要1小时技术服务、5小时直接劳动、1千克材料。现在最多能提供100小时技术服务、700小时直接劳动、400千克材料。生产成本是非线性函数,如下表。要求建立一个总利润最大的数学模型。

分析与求解:

设生产产品A 1x 件,生产产品B 2x 件,生产产品C 3x 件。问题的难点是产品的成本是一个分段函数,难以用线性函数表达,因此可采用动态库编写一个专门的函数来计算成本。

设产品A 每件的成本为a 元,产品B 每件的成本为b 元,产品C 每件的成本为c 元,a 、b 、c 随1x 、2x 、3x 而改变。

目标函数为:)(6712max 321321cx bx ax x x x Z ++-++=

??????

?≥≤++≤++≤++且为整数

0,,4002370054101002.

.3213213

21321x x x x x x x x x x x x t s 其中???????≤≤≤≤≤≤=以上1507

150101810041940

01021

1x x x a ,?????≤≤≤≤=以上

1003

100514

50

0622x x b ,??

?≤≤=以上

1004100

05

3x c

由于目标函数是非线性的,且难以用一个式子表达,因此采用自己编写用户函数的方式来实现。这里先介绍@USER 函数

该函数允许用户自己编写函数,该函数应当用C 或FORTRAN 语言编写,返回值为用户计算的结果。从编程角度来看,@USER 函数包含两个参数:第一个用于指定参数的个数,第二个用于指定参数向量(类似于C 语言中的main(argc,argv)的编写格式)。在LINGO 中调用@USER 时则直接指定对应的参数(类似C 语言中的main(argc,argv)的执行格式)。该函数采用动态库编写。这里的例子采用VC 编写动态库。注意动态库中该函数名固定为MYUSER ,在LINGO 中调用时则固定外部函数名为USER 。

下面是VC 中该动态库的编写过程:

1.启动VC6.0,选择File->New 。启动New 属性单,选择Projects 页面。再选择WIN32 Dynamic-Link Library 。在右边Project name 标签下的编辑框中任意输入一个工程名。如CALC 。点击OK 命令按钮后就建立了一个新的空的工程。

2.选择Project->Add to Project->New 。在New 属性单中选择File 页面。在下面空白框中选择C++ Source File 。在右边File 标签下的编辑框中输入一个文件名。如CB 。 3.编辑C++程序CB.CPP 如下: #include #include #include #include #include #define N 3

#define DllExport extern "C" __declspec(dllexport)

//该函数计算成本

DllExport void MYUSER(int* NumArgs,double *x,double *dResult) {

double sum;

if(*NumArgs

{ MessageBox(NULL,"输入变量不足","输入错误",MB_OK);

*dResult=-1;

exit(0);

}

sum=0;

//产品A的成本计算

if(x[0]>=0&&x[0]<=40) sum+=10*x[0];

else if(x[0]>=41&&x[1]<=100) sum+=9*x[0];

else if(x[0]>=101&&x[1]<=150) sum+=8*x[0];

else sum+=7*x[0];

//产品B的成本计算

if(x[1]>=0&&x[1]<=50) sum+=6*x[1];

else if(x[1]>=51&&x[1]<=100) sum+=4*x[1];

else sum+=3*x[1];

//产品C的成本计算

if(x[2]>=0&&x[2]<=100) sum+=5*x[2];

else sum+=4*x[2];

*dResult=sum; //返回成本总值

}

注意在程序中MYUSER函数的第一个整型变量NumArgs代表输入的变量个数。根据LINGO调用时输入的变量个数,可以在C++程序内部得到输入变量的总数。第二个输入为向量x,就是外部输入的变量。第三个变量dResult用于返回最后的计算结果。用LINGO调用时只需要输入各变量就行了,自然会返回C++程序计算的结果dResult。

变好程序后,按F7运行后生成动态库CALC.DLL。将其拷贝到LINGO目录下,并将文件名改名为MYUSER.DLL。启动LINGO,就可以通过外部函数@USER调用动态库中自己编写的函数。

LINGO程序:

!采用动态库编写自己的函数;

MODEL:

max=12*x1+7*x2+6*x3-@USER(x1,x2,x3);!目标函数;

x1+2*x2+x3<=100; !技术服务的约束;

10*x1+4*x2+5*x3<=700; !直接劳动的约束;

3*x1+2*x2+x3<=400; !材料的约束;

@GIN(x1);

@GIN(x2);

@GIN(x3);

end

迭代6步得到局部最优解为x1=70,x2=0,x3=0。总利润最大为210元。容易验证,该局部最优解也是全局最优解。

8.某企业和用户签定了设备交货合同,已知该企业各季度的生产能力、每台设备的生产

成本和每季度末的交货量见下表,若生产出的设备当季度不交货,每台设备每季度需要支付保管费0.1万元,试问在遵守合同的条件下,企业应如何安排生产计划,才能使年消耗费用最低?

分析与求解: 方法1:

设第i 季度生产i x 台,库存i y 台,4,3,2,1=i 。第i 季度生产能力用i p 表示,交货量用i

d 表示,每台设备生产成本用i c 表示。则建立目标函数为:

∑=+=

4

1

)1.0(min i i i

i y x

c Z

???????≥≥-==-+==≤-0

,04

,3,24,3,2,1..1111i i i i i i

i

i y x d x y i d x y y i p x t s

LINGO 程序如下:

MODEL: SETS:

QUART/1..4/:x,y,p,d,c; ENDSETS

DATA:!指定数据;

p=25,35,30,20; d=15,20,25,20;

c=12.0,11.0,11.5,12.5; ENDDATA

min=@sum(QUART(i):c(i)*x(i)+0.1*y(i));!目标函数; @FOR(QUART(i):x(i)<=p(i)); !生产能力限制;

@FOR(QUART(i)|i#GT#1:y(i)=y(i-1)+x(i)-d(i)); y(1)=x(1)-d(1); end

得到的结果如下:

x1=15,x2=35,x3=30,x4=0;y1=0,y2=15,y3=20,y4=0。 年消耗最小费用为913.5万元。 方法1:

设ij x 第i 季度生产第j 季度交货的台数,第i 季度生产能力用i p 表示,交货量用i d 表示,

每台设备生产成本用i c 表示。由于生产能力的限制,需要满足下面条件:

∑=≤4

i

j i ij

p x

4,3,2,1=i

根据交货量的规定,应满足如下条件:

j j

i ij

d x

=∑=1

4,3,2,1=j

第i 季度生产第j 季度交货的每台设备所消耗的费用ij c ,应等于生产成本加上保管维护费用之和,其值如下表:

则该模型表示如下:

∑∑===

414

min i i

j xj

ij x c

Z

???

???

?????≥===≤∑

==04,3,2,14,3,2,1.

.14

ij

j j i ij i

j i ij x j d x i p x t s

LINGO 程序如下:

MODEL: SETS:

QUART/1..4/:p,d;

LINK(QUART,QUART)|&1#LE#&2:x,c; !只取上三角阵; ENDSETS

DATA:!指定数据; p=25,35,30,20; d=15,20,25,20;

c=12.0 12.1 12.2 12.3 11.0 11.1 11.2 11.5 11.6 12.5;

ENDDATA

MIN=@SUM(LINK:c*x);!目标函数;

@FOR(QUART(i):@SUM(QUART(j)|j#GE#i:x(i,j))<=p(i)); !生产能力限制; @FOR(QUART(j):@SUM(QUART(i)|i#LE#j:x(i,j))=d(j)); !交货合同限制; end

得到的结果如下:

X(1,1)=15,X(1,2)=0,X(1,3)=0,X(1,4)=0;X(2,2)=20,X(2,3)=0,X(2,4)=15。 X(3,3)=25, X(3,4)=5;X(4,4)=0。 年消耗最小费用为913.5万元。

可以看出,第1季度生产量为15台,第2季度生产量为35台,第3季度生产量为30台,第4季度生产量为0台,与前面方法得到的结果一样。其最小费用也一样。 9 (TSP 问题)

设有一个售货员从10个城市中的某一个城市出发,去其它9个城市推销产品。10个城市相互距离如下表。要求每个城市到达一次仅一次后,回到原出发城市。问他应如何选择旅行路线,使总路程最短。

问题分析与建模:

设城市之间距离用矩阵d 来表示,其中d 为下三角矩阵,ij d 表示城市i 与城市j 之间的距离。设0--1矩阵s 用来表示经过的各城市之间的路线。设

??

?=j

i j

i s ij 到城市若从城市到城市若不从城市1

则该TSP 问题转化为如下线性模型:

∑∑=-==

n i i j ij

ij d s

Z 21

1

min

112..2

2,3,,01j j ik ji k i

j i ij

s s t s s i n s ><>?=??+==???=?∑∑∑ 或

LINGO程序如下:

!TSP quesion;

MODEL:

SETS:

city/1..10/;

link(city,city)|&1#GT#&2:d,s;

ENDSETS

DATA:

d= 7

4 3

5 10 5

8 9 9 14

6 14 10 9 7

12 5 21 10 8 13

13 14 8 9 7 5 23

11 17 27 23 20 25 21 18

18 17 12 16 19 13 18 12 16;

ENDDATA

MIN=@SUM(link:d*s);

@SUM(city(j)|j#GT#1:S(j,1))=2; !与第1个城市相连的有两个城市;

!与第i个城市相连有两个城市;

@FOR(city(i)|i#GT#1:@SUM(city(j)|j#GT#i:s(j,i))+

@SUM(city(k)|k#LT#i:s(i,k))=2);

@FOR(link:@BIN(s));

得到的结果如下:

S(3,2)=1,S(4,1)=1,S(4,3)=1,S(6,5)=1,S(7,2)=1,S(7,5)=1,S(8,6)=1,S(9,1)=1,S(10,8)=1,S(10,9)=1。其它全为0。

其最短路线为1—4—3—2—7—5—6—8—10—9—1,最短距离为77公里。

10. 某公司有资金4万元,可向A,B,C三个项目投资。已知各项目不同投资额的相应效益如下表。问如何分配资金可使总效益最大。

模型分析与建立:

设项目有m个,每个项目有n种投资方式。第i个项目的第j种投资方式效益为ij C万元。

则投资可有效益矩阵为n m C ?来表示。每个项目的投资方式的资金分配用向量A 来表示。本题)4,3,2,1,0(=A 。

设??

?=种投资方式

个项目采用第第种投资方式

个项目不采用第第j i j i S ij 1

则可建立如下模型: ∑∑===

m i n

j ij

ij C S

Z 11

max

????

?

?

???

?

?=≤=∑

∑∑===1014.

.111

或ij n j ij m i n

j j ij S S A S t s LINGO 程序如下:

MODEL: SETS: item/1..3/; kind/1..5/:A;

link(item,kind):S,C; ENDSETS DATA:

A=0,1,2,3,4; !投资钱的情况;

C=0,41,48,60,66, 0,42,50,60,66,

0,64,68,78,76; !投资矩阵; ENDDATA

MAX=@SUM(link:S*C);

@SUM(item(i):@SUM(kind(j):S(i,j)*A(j)))=4; !总共投资的钱为4万元; @FOR(item(i):@SUM(kind(j):S(i,j))<=1);!每个项目最多投资一次; @FOR(LINK:@BIN(S));!限制S(i,j)只能取0,1; END

结果如下:

S(1,2)=1,S(2,3)=1,S(3,2)=1。即项目A 投资1万元,项目B 投资2万元,项目C 投资1万元。总收益最大为Z=41+50+64=155万元。

优化模型讲解 附LINGO程序

数学建模培训讲义 ——优化模型与LINGO软件 二○一一年七 目录 1 静态优化模型 (1) 1.1 最优生产计划问题 (1) 1.2 存贮模型 (2) 2 线性规划模型 (2) 2.1 LINGO简介 (2) 2.2 配料问题 (3) 2.3 练习:运输问题 (4) 3 整数规划模型 (4) 3.1 电影院广告问题 (4) 3.2 练习:生产计划问题 (5) 4 0-1规划 (5) 4.1 背包问题 (5) 4.2 矿井选址问题 (6) 4.3 练习:混合泳接力队的选拔问题 (7) 5 LINGO应用 (8) 5.1 变量定界函数 (8) 5.2 集合 (8) 5.3 帆船生产问题 (9)

5.4 派生集合 (11) 5.5 通过电子表格(Excel)文件传递数据 (12) 5.6 旅游问题 (13)

优化模型与LINGO 软件 优化问题是计划管理工作中经常要碰到的问题,比如,出门旅行就要考虑选择什么样的路线和交通工具,才能使旅行费用最省或使所花费的时间最少。在工厂技术、经济管理和科学研究等领域中,最优化问题就更多,一个工厂要怎样安排产品的生产,才能获得最大利润?一个设计部门要考虑在满足结构强度的要求下怎样使得所用的材料的总重量最轻? 比较有效的求解优化问题的一个方法使数学规划,它包括:线性规划、非线性规划、整数规划、动态规划和多目标规划等等。 用数学建模的方法来处理一个优化问题的时候,首先要确定优化的目标是什么,寻求的决策是什么,决策受到哪些条件的限制(如果有限制的话),然后用数学工具(变量、函数等)表示它们。 1 静态优化模型 静态优化模型,归结为微积分中的函数极值问题,可以直接用微分法求解。 1.1 最优生产计划问题 一计算机公司引进A 、B 两种类型的芯片技术,总耗资400000元,准备生产这两种类型的芯片出售。生产一片A 芯片的成本为1950元,而市场售价为3390元,生产一片B 芯片的成本为2250元,而市场售价3990元。由于市场存在竞争,每售出一片A 芯片,A 芯片就会降价0.1元,并且令B 芯片降低0.04元,每售出一片B 芯片,B 芯片就会降价0.1元,并且令A 芯片降价0.03元。假设生产的芯片都能卖出,求一生产计划,以获得最大利润。 模型分析: 假设A 、B 两种芯片的数量分别是1x 和2x ,市场价格分别是1p 和2p ,用R 表示出售芯片的总收入,用C 表示生存芯片的总费用,用P 表示总利润。 根据题意,上述变量有如下关系: 11233900.10.03p x x =-- 21239900.040.1p x x =-- 1122R p x p x =+ 1240000019502250C x x =++ P R C =- 模型建立: 根据上述分析,可得优化模型

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教程 和MATLAB入门教程

LINGO 使用教程 LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 212 1≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。产销单位运价如

model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。

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

LINGO11教程

LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 212 1≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。产销单位运价如

model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。 2.1 为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个

最优化方法(线性规划)——用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软件

问题一:LP 问题在lindo 和lingo 中不同的输入形式 (1)将目标函数的表示方式从“MAX ”变成了“MAX=” (2)“ST ”在LINGO 模型中不再需要,所以被删除了 (3)每个系数与变量间增加了运算符“*”(即乘号不能省略) (4)每行(目标、约束和说明语句)后面均增加了一个分号“;”(英文状态下) (5)模型结束标志“END ”也被删除了(LINGO 中只有当模型以“MODEL :”开始时才能以“END ”结束)。 (6)英文状态下!后面的文字为说明文字,不参与模型的求解。 问题二:状态窗口的参数解释 variable adj 异变的,变量的 n 变量

问题三优化建模的实例: 1. 线性规划模型 2. 二次规划模型 3. 非线性规划模型 目标函数:()()∑∑--==+= 2161 22min j i bi yi ai xi cij f 约束条件:6,5,4,3,2,1,21 ∑===j i di cij ∑==<=6 1 2,1,i j ej cij 4. 整数规划模型(线性0-1规划模型是特殊的线性整数规划) 1) 目标函数:7654321min x x x x x x x z ++++++= 2) 约束条件: ???????????>=++++>=++++>=++++>=++++>=++++>=++++>=++++. 5076543,5065432,5054321,5074321,5076321,5076521,5076541x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x )7,,2,1(0 =>=i xi

【2017年整理】lingo灵敏度分析实例

【2017年整理】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种资源在最优解下是否有剩余:原料、劳动时间的剩余均为 零,车间甲尚余40(公斤)加工能力。

lingo软件使用教程

lingo软件使用教程 一般来说,一个优化模型将由以下三部分组成: 1. 目标函数(Objective Function):要达到的目标。 2. 决策变量(Decision variables):每组决策变量的值代表一种方案。在优化模型中需要确定决策变量的最优值,优化的目标就是找到决策变量的最优值使得目标函数取得最优。 3. 约束条件(Constraints):对于决策变量的一些约束,它限定决策变量可以取的值。 在写数学模型时,一般第一行是目标函数,接下来是约束条件,再接着是一些非负限制等。在模型窗口输入如下代码: Max = 2*x1+3*x2; X1+2*x2<=8; 4*x1<16; 4*x2<12; 注意:1.每一个lingo表达式最后要跟一个分号; 2.多数电脑中没有符号,lingo中<=代替;为了方便可以用<代替小于等于,用>代替大于等于。 3.我们可以添加一些注释,增加程序的可读性。注释以一个!(叹号必须在英文状态下输入,它会自动变为绿色)开始,以;(分号)结束。 4.Lingo中不区分变量名的大小写。变量名必须以字母(A-Z)开头,后面的字符可以是字母、数字、下划线。变量名不能超过32个字符。 Lingo程序的一些规则: 1. 在Lingo中最开始都是“MAX=”或者“MIN=”开始表示求目标函数的最大或者最小值。 2. 变量和它前面的系数之间要用“*”连接,中间可以有空格。 3. 变量名不区分大小写,但必须以字母开始,不超过32个字符。 4. 数学表达式结束时要用分号“;”表示结束。表达式可以写在多行上,但是表达式中间不能用分号。 5. 在电脑系统中一般没有“小于等于”符号,在Lingo采用“<=”来表示“小于等于”,用“>=”表示“大于等于”。小于等于也可以用更简单的“<”表示,大于等于用“>”表示。 集合段: 在我们已经得到的程序里有一些量没有定义,如WAREHOUSES( I),DEMAND( J), LINKS( I, J)。这些量将在Lingo中的集合段定义。 集合段以SETS:表示开始,以ENDSETS表示结束。 如果一个集合的元素都已经定义过,就可以用一些循环函数(如@for). 注:1. 集合的属性相当于以集合的元素为下标的数组。Lingo中没有数组的概念,只有定义在集合上的属性的概念。 2 集合的定义语法: set_name[/set_member/:][attribute_list]; 集合的名称在左边,右边是这个集合上的属性,他们之间用冒号“:”分割开,最后由分号表示结束。如果在同一个集合上有多个属性时,不同的属性之间用逗号“,”隔开,如本例的cost和volume属性。如果要特别列出集合的元素时,在集合的名称后把元素写在两条斜线之间,如本例中的仓库可以写为 WAREHOUSES/WH1, WH2, WH3, WH4, WH5, WH6/: CAPACITY;

lingo结果分析及灵敏性分析

lingo结果分析及灵敏性分析 问题描述 程序代码: max = 60*desks + 30*tables + 20*chairs; 8*desks + 6*tables + chairs <= 48; 2*desks + 1.5*tables + 0.5*chairs <= 8; 4*desks + 2*tables + 1.5*chairs <= 20; tables<= 5; 部分结果一: Variable Value Reduced Cost DESKS 2.000000 0.000000 TABLES 0.000000 5.000000 CHAIRS 8.000000 0.000000 ⑴Value:给出最优解中各变量的值,Value=0(非基变量),反之为基变量。

⑵Reduced Cost:表示当非基变量有微小变动时, 目标函数的变化率。本例中: 变量tables 对应的reduced cost 值为5,表示当非基变量tables 的值从0 变为1 时(此时假定其他非基变量保持不变,但为了满足约束条件,基变量显然会发生变化),最优的目标函数值= 280 - 5 = 275。 部分结果二: 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 ⑴“Slack or Surplus”――松驰变量。 ⑵“Dual Price”――对偶价格表示当对应约束有微小变动时, 目标函数的变化 率。若其数值为p,表示对应约束中不等式右端项若增加1个单位,目标函数将增加p个单位(max 型问题)。 ⑶如果在最优解处约束正好取等号(紧约束,也称为有效约束或起作用约束), 对偶价格值才可能不是0。本例中:第3、4 行是紧约束,对应的对偶价格值为10,表示当紧约束4) 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 20 变为4) 4 DESKS + 2 TABLES + 1. 5 CHAIRS <= 21 时,目标函数值= 280 +10 = 290。

Lingo软件的使用

第十八章LINGO软件的使用 18.1 LINGO入门 18.1.1 LINGO软件的安装过程 点击LINGO9.0 for Windows安装文件,出现 点击“Next”按钮,出现 此时需要接受安装协议。系统安装时默认的目录是C:\LINGO9。安装完成前,会出现下图所示的对话框:

这个对话框询问你希望采用的默认的建模(即编程)语言,系统推荐的是采用LINGO语法,也就是选项“LINGO(recommended)”;你也可以选择“LINDO”将LINDO语法作为默认的设置。当然,安装后你也可以通过“LINGO|Options|File Format命令来修改默认的建模(即编程)语言。在上图中按下“OK”按钮,系统就会完成LINGO的安装过程。 18.1.2 LINGO基础知识 LINGO有两种命令格式:一种是常用的Windows模式,通过下拉式菜单命令驱动LINGO 运行,界面是图形式的,使用起来也比较方便;另一种是命令行(Command-Line)模式,仅在命令窗口(Command Window)下操作,通过输入行命令驱动LINGO运行。由于其使用字符方式输入,初学者往往不太容易掌握。在这里,我们主要介绍在菜单驱动模式下LINGO的使用方法。 LINGO 9.0软件比以前的版本有了很大的改进,功能大大增强,性能更加稳定,计算的结果更加可靠。LINGO软件不仅可用于求解非线性规划问题,还可以用以求解非线性整数规划问题;LINGO包含了内置的建模语言,模型中所需的数据可以以一定格式保存在独立的文件中;LINGO允许以简练、直观的方式描述较大规模的优化问题。 注:LIGDO公司目前已将LINDO软件从其产品中删除了。事实上,LINDO软件的所有功能(包括LINDO语法格式)都在LINGO中得到了支持。 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。状态行最左边显示的是“Ready”表示“准备就绪”;右下角显示的是当前时间,时间前面是当前光标的位置“Ln1,Col1”(即1行1列)。将来,用户可以用选项命令(LINGO|Options菜单命令)决定是否需要显示工具栏和状态行。在LINGO 模型窗口中,选择菜单命令“File|Open(F3)”,可以看到下图所示的标准的“打开文件”对话框,我们看到有各种不同的“文件类型”:

熟悉LINGO软件的灵敏度分析功能

熟悉LINGO软件的灵敏度分析功能

2012——2013学年第一学期 合肥学院数理系 实验报告 课程名称:运筹学 实验项目:熟悉LINGO软件的灵敏度分析功能实验类别:综合性□设计性□√验证性□专业班级: 姓名:学号: 实验地点: 实验时间: 2012年11月22日 指导教师:管梅成绩:

一.实验目的 1、学会使用LINGO 软件求解线性规划问题的灵敏度分析。 2、学会分析LINGO 软件求解的结果。 二.实验内容 1、求解线性规划: 12 1212max 2251228Z x x x x x x =++≥?? +≤? 并对价值系数、右端常量进行灵敏度分析。 2、已知某工厂计划生产I ,II ,III 三种产品,各产品需要在A 、B 、C 设备上加 I II III 设备有效台时 (每月) A 8 2 10 300 B 10 5 8 400 C 2 13 10 420 单位产品利润 (千元) 3 2 2.9 (1)如何发挥生产能力,使生产盈利最大? (2)若为了增加产量,可租用别工厂设备B ,每月可租用60台时,租金1.8万元,租用B 设备是否合算? (3)若另有二种新产品IV 、V ,其中新产品IV 需用设备A 为12台时、B 为5台时、C 为10台时,单位产品盈利2.1千元;新产品V 需用设备A 为4台时、B 为4台时、C 为12台时,单位产品盈利1.87千元。如A 、B 、C 的设备台时不增加,这两种新产品投产在经济上是否划算? (3)对产品工艺重新进行设计,改进结构。改进后生产每件产品I 需用设备A 为9台时、设备B 为12台时、设备C 为4台时,单位产品盈利4.5千元,这时对原计划有何影响? 三. 模型建立 1、模型略

运用LINGO进行优化模型求解,并与EXCEL进行连接

实验报告(二) 课程名称数学实验 实验项目运用LINGO进行优化模型求解,并与EXCEL进行连接实验环境PC机、LINGO 班级/学号/姓名 指导教师 实验日期2013-11-5 成绩

一、实验名称:运用LINGO 进行优化模型求解,并与EXCEL 进行连接 二、实验目的: 1、掌握Lingo 求解线性规划模型的方法及回看求解结果报告; 2、掌握Lingo 进行灵敏度分析的方法; 3、掌握Lingo 求解整数规划和0-1规划的方法; 4、掌握Lingo 中集合的定义方法; 5、掌握Lingo 与Excel 之间的链接方法; 三、实验内容: 习题四: 1.用LINGO 求解下列线性规划问题 (1)?????? ?=≥≤++≤++≤++++=. 4,...,1,0x 103x x 2x -4x 258x 2x 3x -3x 204x -4x -6x 5x ..8x 10x 2x 6x z max i 4321432143214 321i t s 程序: model : max =6*x1+2*x2+10*x3+8*x4; 5*x1+6*x2-4*x3-4*x4<=20; 3*x1-3*x2+2*x3+8*x4<=25; 4*x1-2*x2+x3+3*x4<=10; end 结果:

(2) ??? ??≥≤++≤++++=0,,x 9010x 4x 12x 20 3x x x -s.t.13x 5x -5x z max 3 213213213 21x x 程序: model : max =-5*x1+5*x2+13*x3; -1*x1+x2+3*x3<=20; 12*x1+4*x2+10*x3<=90; end 结果: (3)?? ???>=++<=+<=+=010y 4x 011-7y x 0 23-5y -7x ..y 2x z min t s 程序: model : min =2*x+y; 7*x-5*y-23<=0; x+7*y-11<=0; 4*x+y+10>=0; @free (x); @free (y); end 结果:

用lingo编程解决运输问题大全

LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model –LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例如何在LINGO中求解如下的LP问题:

,6002100 350. .32min 21211 2121≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。产销单位运价如下表。 销地 产地 B 1 B 2 B 3 B 4 B 5 B 6 B 7 B 8 产量 A 1 6 2 6 7 4 2 5 9 60 A 2 4 9 5 3 8 5 8 2 55 A 3 5 2 1 9 7 4 3 3 51 A 4 7 6 7 3 9 2 7 1 43 A 5 2 3 9 5 7 2 6 5 41 A 6 5 5 2 2 8 1 4 3 52 销量 35 37 22 32 41 32 43 38

使用LINGO软件,编制程序如下: model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5

Lingo例子(学生版)

Lingo实验例子 (例子来源:《运筹学教程》(第三版)胡运权主编清华大学出版社2007年第三版) 一、线性规划及单纯形法、灵敏度分析 例1 P28页例5 Lingo程序: max=2*x1+x2; 5*x2<=15; 6*x1+2*x2<=24; x1+x2<=5; 例2 P44页习题1.7(1)Lingo程序:model: max=2*x1-x2+2*x3; x1+x2+x3>=6; -2*x1+x3>=2; 2*x2-x3>=0; end 其余课本上的例题和习题同学们自己动手编写程序并进行调试运行,分析运行结果。二、运输问题 例3 P82页例1 Lingo程序: model: sets: gy/g1..g3/:ai; xs/x1..x4/:dj; link(gy,xs):c,x; endsets data: ai=16,10,22; dj=8,14,12,14; c=4,12,4,11 2,10,3,9 8,5,11,6; enddata min=@sum(link(i,j):c(i,j)*x(i,j) ); @for(gy(i):@sum(xs(j):x(i,j))=ai (i)); @for(xs(j):@sum(gy(i):x(i,j))=dj (j)); end 例4 P98页例5(转运)Lingo程序:model: sets: plant/x1..x5/:produce; customer/y1..y5/:require; link(plant,customer):c,x; endsets data: produce=60,90,50,50,50; require=50,50,50,80,70; c=-4,5,3,2,100 5,-1,2,100,4 3,2-3,5,5 2,100,5-3,6 100,4,5,6,-5; enddata min=@sum(link:c*x); @for(plant(i):@sum(customer(j):x (i,j))=produce(i)); @for(customer(j):@sum(plant(i):x (i,j))=require(j)); end 三、目标规划 例5 P108页例2 Lingo程序: 第一种做法分三步来完成 第一步:考虑目标:min= 11 Pd- model: min=dminus1; 5*x1+10*x2<=60; x1-2*x2+dminus1-dplus1=0; 4*x1+4*x2+dminus2-dplus2=36; 6*x1+8*x2+dminus3-dplus3=48; end 第二步:考虑目标:min= 1122 Pd P d -+ + model: min=dminus1+dplus2; 5*x1+10*x2<=60; x1-2*x2+dminus1-dplus1=0; 4*x1+4*x2+dminus2-dplus2=36; 6*x1+8*x2+dminus3-dplus3=48; end 第三步:考虑目标:min= 112233 Pd P d Pd -+- ++ model: min=dminus1+dplus2+dminus3;

lingo教程_和matlab入门教程

lingo 使用教程 LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 212 1≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。

model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。 2.1 为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。

lingo灵敏度分析

灵敏度分析用于产生当前模型的灵敏性分析报告:研究当目标函数的费用系数和约束右端项在什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析是在求解模型时作出的,因此在求解模型时灵敏性分析是激活状态,但是默认是不激活的。为了激活灵敏性分析,运行LINGO|Options…,选择General Solver Tab,在Dual Computations列表框中,选择Prices and Ranges选项。灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它。 ·一个简单的具体例子 某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。生产数据 “Global optimal solution found at iteration: 表示3次迭代后得到全局最优解。“Objective value:表示最优目标值为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, 也可对产生不可行问题的原因有所了解。 灵敏度分析的结果是 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 Row Current Allowable Allowable 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)=4、允许减少(Allowable Decrease)=2,说明当它在[60-4,60+20] = [56,80]范围变化时,最优基保持不变。对TABLES、CHAIRS变量,可以类似解释。由于此时约束没有变化(只是目标函数中某个费用系数发生变化),所以最优基保持不变的意思也就是最优解不变(当然,由于目标函数中费用系数发生了变化,所以最优值会变化)。 第2行约束中右端项(Right Hand Side,简写为RHS)原来为48,当它在[48-24,48+∞] = [24,∞]范围变化时,最优基保持不变。第3、4、5行可以类似解释。不过由于此时约束发生变化,最优基即使不变,最优解、最优值也会发生变化。

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