lingo tutorial教学-菜鸟资源-相关培训课件_第1页
lingo tutorial教学-菜鸟资源-相关培训课件_第2页
lingo tutorial教学-菜鸟资源-相关培训课件_第3页
lingo tutorial教学-菜鸟资源-相关培训课件_第4页
lingo tutorial教学-菜鸟资源-相关培训课件_第5页
已阅读5页,还剩141页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

§一、LINGO入门LINGO介绍一、概况:Lingo是Lindo公司开发的求解数学规划系列

中的一个,是求解优化模型的最佳选择。二、主要功能特色:1、既能求解线性规划问题,也有较强的求解非线性规划问题的能力;2、输入模型简单直观;3、运行速度快、计算能力强;4、内置建模语言,提供几十个 函数,从而能以较少的语言,较直观的方式描述较大规模的优化模型;5、将集和的概念引入编程语言,很容易的将实际问题转化为LINGO模型;6能方便的与Excel、数据库等其他

交换数据。max

2x1+3x2x2≥0目标函数St.

4x1+3x2<=10

约束3x1+5x2<=12

条件x1≥0决策变量(举例)设有数学模型如下:第一步:启动lingoLINGO的界面•LINGO

的主窗口(用户界面),所有其他窗口都在这个窗口之内。

模型窗口(ModelWindow),用于输入LINGO优化模型(即LINGO程序)。

状态行(最左边显示“Ready”,表示“准备就绪”)当前时间当前光标的位置星期一11时8分59秒第二步:在模型窗口中输入模型model:max

=

2*x1+3*x2;4*x1+3*x2<10;3*x1+5*x2<12;endMax

2x1+3x2St.4x1+3x2<=103x1+5x2<=12x1≥0x2≥0第三步:求解模型1)选择菜单LINGO|Solve或者按

的星期一11时8分59秒2)LINGO开始编译模型,

语法错误将返回一个错误的消息并指明错误出现的位置;如果通过编译,LINGO将激活

Solver运算器

寻求模型的最优解;星期一11时8分59秒3)首先出现solver

status窗口(运行状态窗口),其作用是 solver的进展和显示模型的维数等信息;运行状态窗口Variables(变量数量):变量总数(Total)、非线性变量数(Nonlinear)、Constrain量ts(约束数量):约束总数(Total)、非线性约束个数(Nonlinear)Nonzeros(非零系数数量):总数(Total)、非线性项系数个数(Nonlinear)Generator

MemoryUsed(K)(内存使用量)Elapsed

Runtime

(hh:mm:ss)(求解花费的时间)运行状态窗口求解器(求解程序)状态框当前模型的类型:LP,QP,ILP,IQP,PILP,PIQP,NLP,INLP,PINLP

(以I开头表示IP,以PI开头表示PIP)当前解的状态

:

"GlobalOptimum",

"Local

Optimum","Feasible","Infeasible“(不可行),

"Unbounded“(

),"Interrupted“(中断),解的目标函数值"Undetermined“(未确定)当前约束不满足的总量(不是不满足的约束的个数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束)目前为止的迭代次数运行状态窗口扩展的求解器(求解程序)状态框使用的特殊求解程序:B-and-B(分枝定界算法)Global(全局最优求解程序)Multistart(用多个初始点求解的程序)目前为止找到的可行解的最佳目标函数值目标函数值的界特殊求解程序当前运行步数:分枝数(对B-and-B程序);

子问题数(对Global程序);初始点数(对Multistart程序)有效步数Solution

Report

窗口Global

optimal

solution

found

at

iteration:

2Objective

value:Variable

Value1.2727271.6363647.454545Reduced

Cost0.0000000.000000x1x2Row Slack

orSurplus Dual

Price17.4545451.00000020.0000000.9090909E-0130.0000000.5454545星期一11时8分59秒Reduced

Cost:在max模型中:相应变量的

reduced

cost值表示当该变量每增加一个单位时目标函数增减少的量。本例中此值均为0星期一11时8分59秒Reduced

Cost:Reduced

Cost值列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时,目标函数的变化率。其中基变量的reduced

cost值应为0,对于非基变量Xj,相应的reduced

cost值表示当某个变量Xj增加一个单位时目标函数减少的量(max型问题)。本例中此值均为0。星期一11时8分59秒SLACK

OR

SURPLUS:给出约束条件的松驰变量或剩余变量的值;小于等于约束为松驰变量(SLACK);+大于等于约束为剩余变量(SURPLUS);

-星期一11时8分59秒DUAL

PRICES:对偶价格或

价格DUAL

PRICES表示当对应约束有微小变动时,目标函数的变化率,即约束条件右端的常数项每增加一个单位,目标函数相应获得的改变量。显然,如果在最优解处约束正好取等号(紧约束),该值才可能不是0;对于非紧约束对该值必为0,表示对应约束中不等式右端项的微小扰动不影响目标函数。星期一11时8分59秒§二、Lingo的基本用法注意事项星期一11时8分59秒1)每一个模型都以model:开始,又以end结束,也可省略此结构;星期一11时8分59秒2)目标函数必须由min

=或max

=开头。星期一11时8分59秒3)可以用<表示<=;用>表示>=;Lingo无严格小于,欲使a<b,可以适当选取小的正常数e表示成a+e<b,星期一11时8分59秒4)LINGO的每一语句以;结束;5)注释以!开始,以;结束;星期一11时8分59秒6)变量名:.不区分大小写.由字母数字下划线组成.第一个字符必须是字母.变量名最长为32个字符星期一11时8分59秒7)LINGO编辑器用蓝色显示LINGO关键字绿色显示注释其他文本用黑色匹配的括号用红色高亮度显示星期一11时8分59秒8)变量和数字放在约束条件的左、右端均可;但最好变量在左,数字在右。9)Lingo变量默认域为非负实数,可以改变默认域.星期一11时8分59秒10)行名[name]例:

[Objective]max=2*x+3*y;[Con1]

4*x+3*y<10;[Con2]

3*x+5*y<12;默认为[1],[2],[3]星期一11时8分59秒Global

optimal

solution

found.Objective

value:Total

solver

iterations:7.4545452VariableValueReduced

CostX1.2727270.000000Y1.6363640.000000RowSlack

or

SurplusDual

PriceOBJECTIVE

7.4545451.000000CON10.0000000.9090909E-01CON20.0000000.5454545星期一11时8分59秒例1

加工奶制品的生产计划3公斤A11桶牛奶12小时或4公斤A2获利24元/公斤获利16元/公斤8小时每天:

50桶牛奶

时间480小时

至多加工100公斤A1制订生产计划,使每天获利最大35元可买到1桶牛奶,买吗?若买,每天最多买多少?可聘用临时工人,付出的工资最多是每小时几元?A1的获利增加到

30元/公斤,应否改变生产计划?3公斤A11桶牛奶12小时或4公斤A2获利24元/公斤获利16元/公斤8小时每天

50桶牛奶

时间480小时

至多加工100公斤A1x1桶牛奶生产A1

x2桶牛奶生产A2获利

24×3x1

获利

16×4

x2原料供应劳动时间加工能力非负约束Max z

72x1

64x2x1

x2

5012x1

8x2

4803x1

100x1

,

x2

0决策变量目标函数每天获利约束条件线性规划模型(LP)模型求解max

72x1+64x2st2)x1+x2<503)12x1+8x2<4804)3x1<100endOBJECTIVE

FUNCTION

VALUE1)

3360.000VARIABLE

VALUEX1

20.000000X2

30.000000REDUCED

COST0.0000000.000000ROW SLACK

OR

SURPLUS

DUAL

PRICES2)

0.00000048.0000003)

0.0000002.0000004)

40.0000000.000000NO.

ITERATIONS=2DORANGE(SENSITIVITY)YSIS?No20桶牛奶生产A1,30桶生产A2,利润3360元。模型求解reducedcost值表示当该非基变量增加一个单位时(其他非基变量max型问题)OBJECTIVE

FUNCTION

VALUE1)VARIABLE3360.000VALUEREDUCED

COSTX120.0000000.000000保持不变)目标X230.0000000.000000函数减少的量(对ROW SLACK

OR

SURPLUS

DUAL

PRICES2)

0.00000048.0000003)

0.0000002.0000004)

40.0000000.000000NO.

ITERATIONS=

2也可理解为:为了使该非基变量变成基变量,目标函数中对应系数应增加的量OBJECTIVE

FUNCTION

VALUE1)

3360.000VARIABLE

VALUEX1

20.000000X2

30.000000REDUCED

COST0.0000000.000000ROW SLACK

OR

SURPLUS

DUAL

PRICES2)

0.00000048.0000003)

0.0000002.0000004)

40.0000000.000000原料无剩余时间无剩余加工能力剩余40max72x1+64x2st2)x1+x2<503)12x1+8x2<4804)3x1<100end三种资源“资源”剩余为零的约束为紧约束(有效约束)结果解释OBJECTIVE

FUNCTION

VALUE1)

3360.000VARIABLEX1X2VALUE20.00000030.000000REDUCED

COST0.0000000.0000002)3)4)ROW SLACK

OR

SURPLUS0.0000000.00000040.000000DUAL

PRICES48.0000002.0000000.000000结果解释最优解下“资源”增加1单位时“效益”的增量原料增1单位,利润增48时间加1单位,利润增2能力增减不影响利润价格35元可买到1桶牛奶,要买吗?35<48,应该买!聘用临时工人付出的工资最多每小时几元?2元!RANGESIN

WHICH

THE

BASIS

IS

UNCHANGED:OBJ

COEFFICIENT

RANGESX172.00000024.0000008.000000X264.0000008.00000016.000000RIGHTHAND

SIDE

RANGESROW

CURRENTRHSALLOWABLEINCREASEALLOWABLEDECREASE最优解不变时目标系数允许变化范围DO

RANGE(SENSITIVITY)YSIS?

YesVARIABLE

CURRENT

ALLOWABLE

ALLOWABLECOEF

INCREASE

DECREASEx1系数范围(64,96)x2系数范围(48,72)x1系数由243=72增加为303=允许范250.00000010.0000006.666667

90,在3480.00000053.33333280.000000围内4100.000000INFINITY40.000000A1获利增加到30元/千克,应否改变生产计划不变!(约束条件不变)结果解释结果解释RANGESIN

WHICH

THE

BASIS

IS

UNCHANGED:OBJ

COEFFICIENT

RANGESVARIABLE

CURRENT

ALLOWABLE

ALLOWABLECOEF72.00000064.000000INCREASE24.0000008.000000DECREASE8.00000016.000000X1X2RIGHTHAND

SIDE

RANGESROWCURRENTRHSALLOWABLEINCREASEALLOWABLEDECREASE250.00000010.0000006.6666673480.00000053.33333280.0000004100.000000INFINITY40.000000价格有意义时约束右端的允许变化范围原料最多增加10时间最多增加5335元可买到1桶牛奶,每天最多买多少?最多买10桶?(目标函数不变)注意:充分但可能不必要§三、LINGO的建模语言星期一11时8分59秒以

实例逐步分析6个仓库向8个小贩供应同一种货物,如何运,总 费用最小?注:每个仓库可以向每个小贩供货,一共48个可能运货路线。仓库货存量、小贩需求量、每条路线的单位

费用三个表如下:星期一11时8分59秒仓库货存量:capacity仓库号货存量w160w255w351w443w541w652星期一11时8分59秒小贩需求量:demand小贩代号货物需求量v135v237v322v432v541v632v743v838星期一11时8分59秒每单位货物费用表:cost小仓贩库v1v2v3v4v5v6v7v8w162674259w249538582w352197433w476739271w523957265w655228143星期一11时8分59秒demand_j

表示第j个小贩的需求量capacity_i

表示第i个仓库的库存量cost_i_j

表示从第i个仓库到第j个小贩的单位

费用已知数量volume_i_j表示从第i个仓库到第j个小贩的

量星期一11时8分59秒数学模型可表示如下:st.

0(1,2,,6i,v1,o2i,l,j8u)me_(i1c,a2,p,6ia)city

j

ivoljum

e(

*_)

coivsotljuim_(1jd,2e,m,8j)aivnodlju6

8i

1

j

1min6i

18j

1星期一11时8分59秒当然目标函数可以如下输入:min

=6

*

volume_1_1

+2

*

volume_1_2

+6

*

volume_1_3

+...1

*

volume_6_6

+4

*

volume_6_7

+3

*

volume_6_8;星期一11时8分59秒但是较大模型如果像上面那样输入又费时,又容易出错!这就需要LINGO的建模语言星期一11时8分59秒LINGO的建模语言优点:可以用类似于标准数学符号的方式表示你的模型;可以用一个紧凑的语句表示一系列约束。数据可独立于模型:LINGO可以从文本文件、电子数据表、数据库中读取数据。星期一11时8分59秒LINGO模型的构成:5个段目标函数与约束条件段集合段(sets:数据段(data:初始段(init:计算段(calc:endsets)enddata)endinit)endcalc)Lingo建模语言的重点和难点是:对集合概念的理解和正确使用星期一11时8分59秒为什么使用集合集合是LINGO建模语言的基础,是LINGO程序设计最强有力的基本构件。借助于集合,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。星期一11时8分59秒集合集合是一群相联系的对象,比如仓库、小贩、路线,这些对象也称为集合的成员。每个集

员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,也可以是未知的,有待于LINGO求解。星期一11时8分59秒从的数学模型看需要三个集合:仓库-6个成员-货存量小贩-8个成员-需求量(3)路线-48个成员-单位运费和运货量星期一11时8分59秒LINGO有两种类型的集合原始集合(primitive

set):由一些最基本的对象组成的。派生集(derived

set):用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。星期一11时8分59秒**下面

学习集合定义部分**1.

以sets:开始,以endsets结束;sets:…endsets星期一11时8分59秒2.原始集合定义法:setname

[

/member_list/

][

:attribute_list

];。setname是集合的名字;。member_list是成员列表,各成员之间可用空格或逗号分隔;。attribute_list是集 员所具有的属性列表,多个属性之间用逗号分隔;。原始集合的member_list,

attribute_list是可选项;星期一11时8分59秒*仓库和小贩的集合可如下定义*sets:warehouses

/

w1

w2

w3w4

w5

w6

/:capacity;vendors

/

v1,v2,v3,v4,v5,v6,v7,v8 /

:

demand;endsets星期一11时8分59秒*成员较多时,可使用隐式成员列表setname/member1..memberN/[:attribute_list];星期一11时8分59秒数字型字符数字型星期型月份型年份-月份型*隐式成员列表类别*星期一11时8分59秒(1)数字型1..n例:1..5(1,2,3,4,5)(2)字符数字型stringM..stringN例:

truck3..truck34星期一11时8分59秒(3)星期型dayM..dayN例:mon..fri(Mon,

Tue,

Wed,

Thu,

Fri)(4)月份型MonthM..MonthN例:OCT..JAN(Oct,

Nov,

Dec,

Jan)星期一11时8分59秒(5)年份-月份型monthYearM..monthYearN例:OCT2001..JAN2002(2001.10

2001.112001.12

2002.1)星期一11时8分59秒*仓库和小贩的集合也可如下定义*sets:warehouses

/

w1..w6/:capacity;vendors

/

v1..v8

/:

demand;endsets星期一11时8分59秒3.派生集合定义法:setname

(parent_set_list)[/member_list/][:attribute_list];parent_set_list是父集合名列表星期一11时8分59秒*48条

路线集合定义*links(warehouses,vendors):

cost,

volume;星期一11时8分59秒*三个集合定义如下*sets:warehouses

/

wh1..wh6

/:capacity;vendors

/v1..v8

/:

demand;links(

warehouses,

vendors):cost,volume;endsets星期一11时8分59秒问题的三个集合说明:这段代码定义了4个属性值,在接下来的模型中就可以使用属性值capacity(1),capacity(2),…,capacity(6);demand(1),demand(2),…,demand(8);cost(1,1),

cost(1,2)

,…,

cost(1,8)

,cost(2,1),

cost(2,2)

,…,

cost(2,8)

,…,cost(6,1),

cost(6,2)

,…,cost(6,8);volume的

同cost。星期一11时8分59秒4.集 员过滤:trucks/1..100/:capacity;heavy_duty

(trucks)

|capacity(&1)

#gt#

50000

:

;&1是集合索引号放置器,如果有两个父集合,就是&1,&2星期一11时8分59秒**下面

学习数据定义**以data:开始,以enddata结束;data:..enddata星期一11时8分59秒例如:设有如下集合sets:set1/a,b,c/:x,y;endsets如果想赋值x(1)=1,

x(2)=2,

x(3)=3,y(1)=4,y(2)=5,

y(3)=6,则数据段可以为星期一11时8分59秒data:x=1,2,3;y=4

5

6;enddatadata:x,y=1

42

53

6;enddata多个数据之间可用逗号或空格分隔星期一11时8分59秒若成员属性值相同,数据段定义如下:data:x=3;!(所有成员的x=3);y=6;!(所有成员的y=6);enddata星期一11时8分59秒也可以在运行时输入属性值:data:x=?;!(运行时输入所有成员的x值);y=6;enddata星期一11时8分59秒*

问题的数据部分*data:capacity=60,55,51,43,41,52;demand=35

37

22

32

41

3243

38;星期一11时8分59秒cost

=6

2

6

7

4

2

5

94

9

53

8

58

25

22

7

12

3

9

5

7

2

6

55

5

2

2

8

1

4

3;enddata星期一11时8分59秒sets:sett

:

x,

y

;endsetsdata:sett,

x,

y

=

a

1

4b

2

5c3

6;enddatasets:sett/a,b,c/

:x,

y

;endsetsdata:x

=1

2

3;y=456;enddata集 员可以在数据段定义:星期一11时8分59秒实例:sets:warehouses:

capacity;endsetsdata:!可以写成warehouses=w1..w6;!也可以同时定义集

员列表和属性值;warehouses,

capacity=w1

60,w2

55,w3

51,w4

43,w5

41,w6

52;enddata星期一11时8分59秒**初始化定义**只在非线性规划中使用,指定初始值。init:..endinit星期一11时8分59秒例:init:x=0.999;y=0.002;endinity<=@log(x);x^2+y^2<=1;给了恰当的初始值,会减少运算时间。星期一11时8分59秒**计算段定义**calc:.

.

.endcalc计算段的作用:在模型输入后,LINGO开始正式求解模型之前对原始数据进行一定的计算,得到模型中要使用的部分数据。星期一11时8分59秒一个简单的计算段例子:model:data:x,y,z

=

1,

2,

3;enddatacalc:avg

=

(

x

+

y

+

z)

/

3;endcalcend星期一11时8分59秒**目标函数和约束条件段**LINGO提供了集合循环函数和集合操作函数使得目标函数和约束条件的书写如同数学公式那样简单。四个集合循环函数FOR、SUM

、MAX、MIN星期一11时8分59秒@sum(setname

[(set_index_list)[|

condition

]

]:

expression);求和星期一11时8分59秒*

问题的目标函数*6

8i

1

j

1min

cost

(i,

j)*

volume(i,

j)min

=

@sum(

links

(

i,

j)

:cost(

i,

j)*

volume(

i,

j)

);min

=

@sum(

links

:cost*

volume

);星期一11时8分59秒*

问题实例中的求和*!从6个仓库发到第j个小贩的货物量总和;@sum(

warehouses(i)

:volume(i,

j)

);6volume(i,

j)i

1星期一11时8分59秒从第i个仓库发出到8个小贩的货物量总和;@sum(

vendors(j)

:volume(

i

,

j

)

)8j

1volume(i,

j)星期一11时8分59秒生成约束@for@for(

setname

[

(

set_index_list)[

|

condition

]

]:

expression_list

);对集合setname中的每个成员独立地生成约束,约束由约束表达式列表

expression_list描述;多个表达式之间用分号相隔。星期一11时8分59秒*每个小贩的需求约束*!(要求6个仓库发给每个小贩的货物总量=小贩的需求量);@for(

vendors(j)

:@sum(

warehouses(

i):volume(

i,

j)

)=demand(

j)

);6volume(i,

j)

demand

(

j),

j

1,2,,8i

1星期一11时8分59秒*每个仓库的供货约束*@for(

warehouses(

i)

:@sum(

vendors(j)

:volume(

i,

j)

)< capacity(

i));!(要求每个仓库发给8个小贩的货物总量<仓库的货存量);8volume(i,

j)

capacity

(i),

i

1,2,,6j

1星期一11时8分59秒@max(

setname

[

(set_index_list)[

|

condition

]

]:expression

);返回集合setname上的表达式expression的最大值星期一11时8分59秒@min(setname

[

(set_index_list)[

|

condition

]

]:

expression);返回集合setname上的表达式expression的最小值星期一11时8分59秒返回数据集setname中成员element的位置号

(下标)*集合操作函数*@index

(

[

setname,

]

element

)星期一11时8分59秒model:sets:girls/debbie,sue,alice/:;boys/bob,joe,sue,fred/:;endsetscalc:x=@index(boys,sue);y=@index(sue);endcalcend星期一11时8分59秒@in(

set_name,primitive_index_1[,primitive_index_2…]

)如果数据集set_name中包含成员primitive_index_1则返回1,否则返回0。星期一11时8分59秒例:model:sets:plants

/

a,b,c,d/:

;closed(plants)

/

b/:

;open(plants)

|#not#@in(closed,&1)

:x;endsetsdata:x=1,2,3;enddataend星期一11时8分59秒例2:model:sets:s1/a

b

c/:;s2/x

yz/:;s3(s1,s2)/a,x

a,z

b,y

c,z/:

;endsetscalc:x=@in(s3,@index(s1,b),@index(s2,y)

);endcalcend本例要判断集合s3中是否包含元素(b,y),运行LINGO|SOLVE得到x=1,说明包含。星期一11时8分59秒@wrap(index,limit)当index位于区间[1,limit]时返回index,否则返回j=index-k*limit,其中j位于区间[1,limit]星期一11时8分59秒职员时序安排模型一项工作一周7

天都需要有人(比如护士工作),每天(周一至周日)所需的最少职员数为20、16、13、16、19、14

和12,并要求每个职员一周连续工作5天,试求每周所需最少职员数,并给出安排。注意这里

考虑稳定后的情况。星期一11时8分59秒sets:days/mon..sun/:

required,start;endsetsdata:required

=

20

16

1316

19

14

12;enddatamin=@sum(days:start);!最小化每周所需职员数;@for(days(j):@sum(

days(i)

|

i

#le#

5:start( @wrap(j+i+2,7

)

)

)>=required(j)

);星期一11时8分59秒@size(setname)返回集合setname中所包含的成员个数。星期一11时8分59秒§二、LINGO与其它交换数据星期一11时8分59秒拷贝、粘贴From

ExelPastefromexel.lg4星期一11时8分59秒输入输出函数用来与外部数据源连接@text()、@ole()、@file()、@odbc()、@dual()星期一11时8分59秒@file(

‘filename’

)在模型的集合和数据部分使用,从文本文件输入数据.星期一11时8分59秒sets:warehouses/

@file(

‘1.txt’)

/

:

capacity;vendors/

@file(

‘1.txt

’)

/

:

demand;links(

warehouses,

vendors):

cost,volume;endsets实例的数据可以从文本文件输入:星期一11时8分59秒data:capacity

=

@file(

'1.txt

');demand

=

@file(

'1.txt

');cost

=

@file(

'1.txt

');enddata1.txt文件内容1.txt星期一11时8分59秒@text(‘

filename’)在模型的数据部分使用,向文本文件输出数据.Outputtotext.lg4星期一11时8分59秒@ole(

‘spreadsheet_file’[,range_name_list])在模型的数据和集合部分使用,与excel交换数据星期一11时8分59秒实例的数据可以从Excel输入:sets:warehouses:

capacity;vendors :demand;links(warehouses,

vendors):

cost,

volume;endsets星期一11时8分59秒data:warehouses,

vendors,

capacity,

demand,cost=

@ole

(

‘2.xls’,‘warehouses’,‘vendors’,‘capacity’,‘demand’,‘cost’

);enddata星期一11时8分59秒在Excel中定义单元格范围名称的方法:①按鼠标左键拖曳选择单元格范围,②

鼠标按钮,③

选择“

|名称|定义”,④输入希望的名字,⑤点击“确定”按钮。星期一11时8分59秒@odbc(['data_source'[,

'table_name'[,

col_1'[,'col_2'

...]]]]

)在模型的数据部分使用,与数据库进行数据传输星期一11时8分59秒实例的数据可以从数据库输入:sets:warehouses:

capacity;vendors :demand;links(warehouses,

vendors):

cost,

volume;endsets星期一11时8分59秒data:warehouses,

capacity=

@odbc();vendors,

demand=

@odbc();links,cost

=@odbc();@odbc()=volume;enddata星期一11时8分59秒§四、LINGO的函数星期一11时8分59秒1.标准运算符算术运算符:^

*

/

+-逻辑运算符:#EQ##GE##LE##NOT##NE##GT##LT##AND##OR#星期一11时8分59秒关系运算符:=

<=

>=可以用<表示<=或<星期一11时8分59秒运算符的优先级优先级运算符最高#NOT#

—(负号)^*

/+

—(减法)#EQ#

#NE#

#GT#

#GE#

#LT#

#LE##AND#

#OR#最低<(=)

=

>(=)星期一11时8分59秒@free(variable)取消默认域,使变量可以取任意实数限制变量取整数值@gin(variable)@bin(variable)限制变量取值为0,1限制变量于@bnd(low,variable,up)一个有限的范围3.变量界定函数lingo变量默认域为非负实数星期一11时8分59秒练mi

x1

411

2

x1

,x2

0且全为整

x5

x

6

x

x1=2,x2

=3,Z*=-17练星期一11时8分59秒练习2max

Z

32334

x

x

63

2

(1)

4

(2)

x1

x2

3

(3)

(4)33

0或1练习2X1=1X2=0X3=1Z=8星期一11时8分59秒@abs(x)、@cos(x)、@sin(x)

、@tan(x)、@exp(x)

、@sign(x)@floor(x)(返回x的整数部分)@smax(x1,x2,…,xn)(返回x1,x2,…,xn的最大值)@smin(x1,x2,…,xn)4.数学函数星期一11时8分59秒5.条件控制@if

(

logical_condition,true_result,false_result

)计算logical_condition,若真返回true_result否则返回false_result.星期一11时8分59秒7个选项卡(可设置80-90个控制参数)星期一11时8分59秒范例星期一11时8分59秒xi

I,整数规划整数规划.lg4max

z

5x1

8x2s.t.

x1

x2

65x1

9

x2

45xi

0,i

1,

2星期一11时8分59秒二次规划的例子(lingo).lg42221.31.21.0,,0.xyz08zyx1.12

75

s.t.xyzfyxz

0.28y2z

1星期一11时8分59秒递规调用.lg4已知,求a[7]1]2,[i[][]1,2,a

i

a

a

[1[]12;]a

i

a

i星期一11时8分59秒方法建议:每个有数据的规划模型上机用lingo语言实践,实践能更快的体会程序并能更好的掌握知识;LINGO的help下有一项Additional

Examples

of

LINGOModeling,可以仔细研究每个例子的模型。星期一11时8分59秒练习3某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?星期一11时8分59秒练习3车床类型单位工件所需加工台时数单位工件的加工费用可用台时数工件1工件2工件3工件1工件2工件3甲0.41.11.013910800乙0.51.21.311128900星期一11时8分59秒解1

设在甲车 加工工件1、2、3的数量为x1、x2、x3,在乙车 加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型:min

13

943211211108

x

0,

i

1,2,,6

i0.50.46

900

80032

x

x

600x1

x4

4005

x

x

500s.t.

3

6星期一11时8分59秒解2设在甲车

加工工件i的数量为x(i),单位工件所需加工台时数为timex(i),单位工件的加工费用为costx(i),在乙车加工工件i的数量为y(i),单位工件所需加工台时数为timey(i)单位工件的加工费用为costy(i)工件i的加工数量为demand(i)星期一11时8分59秒数学模型3timey(i)

*

y(i)

900i1x(i)

y(i)

demand(i),

i

1,2,3x(i),y(i)均取整数,i

1,2,33st.

timex(i)

*

x(i)

800i13min

(costx(i)

*

x(i)

costy(i)

*

y(i))i1星期一11时8分59秒Lingo建模sets:Chechuang/1..3/

:costx,costy,timex,timey,x,y,demand;endsets星期一11时8分59秒Lingo建模min=@sum(

chechuang

:costx*x+costy*y

)@sum(chechuang:timex*x)<800;@sum(chechuang:timey*y)<900;@for(chechuang:x+y=demand);@for(chechuang:@gin(x);@gin(y));星期一11时8分59秒data:costx=13,9,10;costy=11,12,8;timex=0.4,1.1,1;timey=0.5,1.2,1.3;demand=400,600,500;enddata练习3星期一11时8分59秒Lingo-Generate-Display

modelMODEL:[_1]

MIN=

13

*

X_1

+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论