当前位置:文档之家› LINDO使用手册

LINDO使用手册

LINDO使用手册
LINDO使用手册

LINDO使用手册

LINDO Users Manual

第一章 LINDO初步

LINDO 是Linear INteractive Discrete Optimizer的缩写,是一个线性和整数规划的软件系统。这里介绍的LINDO/386 5.3版本,最大规模的模型的非零系数可以达到1,000,000个,最大变量个数可以达到100,000个,最大目标函数和约束条件个数可以达到32000个,最大整数变量个数可以达到100,000个。它的特点是采用交互方式操作,而且命令简单明了,很容易掌握。用户在输入初步的数学模型后,可以一边运行,一边修改调试,直至获得满意的结果。LINDO既是一个实用的求解大规模线性和整数规划系统,也很适用于训练的目的,用来培养学生面对较复杂的实际问题,构造线性及整数规划模型以及求解这些问题的能力。限于本教材的内容,本手册只介绍有关线性规划和整数规划的基本内容,省略了有关二次规划、参数规划以及有关线性规划算法的比较专门的内容。

§1.1 LINDO 命令一览表

LINDO 命令纳成十一类,每一类的名称及所属命令如下:

1、查询类(Information)

HELP 求助

COM ( Command ) 命令列表

LOCAL 当前版本信息

CAT ( Categories ) 命令分类

TIME 显示当前时间

DATE 显示当前日期

2、文件输入类( Input )

MAX 键盘输入极大化模型

MIN 键盘输入极小化模型

RETR ( Retrieve ) 从磁盘读入模型文件

RMPS ( Read MPS ) 从磁盘读入MPS文件

TAKE 从磁盘读入模型或命令文件

LEAV ( LEAVE ) TAKE命令的终止

RDBC* 读取用SBDC命令保存的基列作为初始基FBR * 读取用FBS命令保存的基

FINS* 读取用MPS格式保存的基

3、显示类(Display)

PIC ( Picture ) 显示矩阵中非零元素的分布及数量级TABL ( Tableau ) 显示当前单纯形表

LOOK 显示模型的数学形式

NONZ ( Nonzeros ) 显示解中的非零变量

SHOC ( Show Column ) 显示模型中的一列

SOLU ( Solution ) 显示当前得到的解

RANGE 显示灵敏度分析的结果

BPIC* 显示三角化的当前基逆矩阵

CPRI* 显示所选择列的有关信息

RPRI* 显示所选择行的有关信息

DMPS* 显示以MPS格式表示的解

PPIC* 显示行列重新排列的矩阵,使非零元素最

靠近对角线

4、文件输出类( File Output )

SAVE 模型存盘

DIVE ( Divert ) 将屏幕输出转向磁盘文件

RVRT ( Revert ) 重新回到屏幕输出状态

SMPS ( Save MPS ) 模型以 MPS 格式存盘

SDBC* 将当前基的列向量以文件形式保存

FBS* 将当前基以文件形式保存

FPUN* 将当前基以MPS形式保存

SMPN* 将当前模型用非标准的MPS格式保存5、求解类(Solution)

GO 求解一个模型

PIV(Pivot) 进行一次单纯形叠代

GLEX* 用字典序方法优化

6、问题编辑类( Problem Editing )

ALT(Alter) 修改模型中的系数

EXT(Extension) 增加一个约束

DEL(Delete) 删除一个约束

SUB(Simple Upper Bound) 给出一个变量的上界

APPC(Append Column) 增加一列

SLB(Simple Lower Bound) 给出一个变量的下界

FREE 取消一个变量的上下界

EDIT 用全屏幕编辑建立或修改模型

7、退出( Quit )

QUIT 退出 LINDO 系统

8、整数规划、二次规划和参数规划( Integer, Quadratic and Parametric Programs )

INT 定义一个0-1变量

QCP*(Quadratic Programming) 定义二次规划

PARA*(Parametric Programming)求解参数规划

POSD*(Positive Definiteness) 检查二次规划矩阵的正定性

TITAN* 紧缩连续变量的上界以及0-1变量的系数BIP* 在整数规划中给出一个剪枝的界

GIN (General Integer)定义一个整数变量

IPTOL* 设定整数规划最优解的宽容度

9、对话参数( Conversational Parameters )

WIDTH 设置打印机宽度

TERS ( Terse ) 简洁输出信息

VERB ( Verbose ) 冗长输出信息

BAT ( Batch ) 成批输出信息

PAGE 设定屏幕页的大小

PAUSE 暂停

10、用户子程序

USER 执行用户提供的子程序

11、杂项

INV* (INVERT)求当前基的逆矩阵,以减少叠代误差

STAT (STATISTICS)统计模型矩阵的系数

BUG 如发现系统缺陷,提供有关信息

SET 设置LINDO的内部参数

TITL (TITLE)给出模型的标题

§1.2 LINDO 初步操作

以下命令,可以完成模型输入,模型显示,模型运行,退出LINDO等操作,这些命令是:

? MAX 开始输入一个极大化模型

? MIN 开始输入一个极小化模型

? TITL 输入模型标题

? EDIT 全屏幕输入或全屏幕编辑一个模型

? LOOK 在屏幕上显示已输入的模型

? GO 模型运行

? QUIT 退出LINDO,返回操作系统

在这一章中,先对这几个命令的用法作详细解说。

1、进入LINDO

和调用其他任何应用程序一样,调用LINDO之前,用户先要完成登录、引导操作系统。在系统提示符(在这里,用C>表示系统提示符)出现以后,就可以启动LINDO,即

C>LINDO

执行此命令后,屏幕上出现":"。

":"是 LINDO 接受命令的状态,在":"后面,可以键入各种合法的LINDO的命令。每执行一个命令( 除QUIT 外), LINDO 仍返回这一命令状态,等待下一个命令,如果是QUIT命令,则返回操作系统。

2、输入模型命令MAX / MIN

用MAX / MIN命令可以直接从键盘上输入一个模型到内存。MAX / MIN命令对规模较小的问题比较适用,对大规模问题的建立和输入,将在TAKE命令描述。

设我们要输入的模型的数学形式为:

MAX 5.24X1+7.3X2+8.34X3+4.18X4

SUBJECT TO

1.5X

1+X

2

+2.4X

3

+X

4

≤2000

X 1+5X

2

+X

3

+3.5X

4

≤8000

1.5X

1+3X

2

+3.5X

3

+X

4

≤5000

X

1

,X2,X3,X4≥0

输入模型的操作作如下:

: MAX 5.24X1+7.3X2+8.34X3+4.18X4 ! "MAX"后面必须空一格

?ST !"ST"也可以写"SUBJECT TO"

?1.5X1+1.0X2+2.4X3+1.0X4<2000 !用"<"或">"而不能用"<=",">="

?1.0X1+5.0X2+1.0X3+3.5X4<8000 !?表示当前处于MAX命令状态

?1.5X1+3.0X2+3.5X3+1.0X4<5000 !END结束MAX命令状态。变量非负约束X1,X2,?END !X3,X4>=0是隐含的,不必也不能输入MAX/MIN命令对模型的输入格式有一些限制,这些限制是:

(1)模型中出现的关键词只能是 MAX (或 MIN ), ST (或 SUBJECT TO )和END。关键词中不能含有空格。MAX ( 或 MIN ), ST (或 SUBJECT TO )的右面至少要有一个空格,关键词中字符大写和小写都合法的。

(2)变量名不超过8个字符,其中第一个字符必须定字母,其余的可以是字母或数字。这样就可以藉助变量表示变量的实际含义。例如有10种燃料,可以分别记为FUEL01,…,FUEL10等。

(3)不等号用"<"表示"≤",用">"表示"≥"。要注意的是当模型(用 LOOK 命令)输出(到屏幕或打印机)时,不等号分别写成"<="和">="。

(4)目标函数中不能出现常数项,也不能出现等式,例如:

MAX 2X1+3X2+5 和MAX Z=2X1+3X2都是非法的。

(5)无论连目标函数(第一行)或约束条件中,都不能出现括号、乘号。例如:

MAX 2(X1+X2) 和 MIN 2*X1+3*X2都是非法的。

(6)在约束条件中,变量必须在关系符左面,常数必须在关系符右边,例如:

3X1+4X2-3<0 和3X1<3-4X2 都是非法的。

(7)模型中系数必须写成整数或小数形式而不能写成指数形式,例如:下列系数的记法是非法的: .258E+5。

如系数是小数形式,输入的位数限制定整数最大6位,小数最大5位。

(8)除关键字中间,系数中间,变量名中间不能嵌入空格外,模型的其他地方都允许出现空格和回车。在模型输入时,空格和回车是等效的。例如,以下的模型输入格式是有效的:

max z=3x1+4x2+6x3-5x4

s.t. x1+2x2-x3+2x4≤10

3x1+x2-3x3+6x4≤25

x1x2x3x4≥0

:MAX 3X1 + 4 X2+6x3- 5x4

?ST X1 +2x2-x3

? +2 X4 <10 3x1+x2-3x3+6x4<25 END

:

在用MAX/MIN命令输入模型时,如果模型的一行超过屏幕宽度,只要回车就可以在下一行继续输入。

(9)变量的非负约束是隐含的,不需要在模型中加以意义。

3、输入模型标题命令TITL

为了识别模型相应的问题,LINDO设置了TITL命令,可以对模型作简要的说明,TITL放在模型的第一行,内容放在两个引号之间。同时,为了说明约束的性质,也可以在每个约束的前面加上不超过8个字符的说明。例如

:TITLE "This is a maximum profit problem"

:MAX 4 X1 + X2 - X3 + 2 X4

?ST

?RESOURCE) X1 - X2 + X3 - X4 < 30

?SALE) 3 X1 + X2 - X3 + 2 X4 < 36

?STORAGE) X1 + 2 X2 + X3 - 2 X4 < 20

?END

用MAX/MIN命令输入一个模型后,该模型存放在内存中,可以对该模型施加其他命令。内存中只能存放一个模型。如果再次MAX/MIN命令输入另一个模型。内存中的第一个模型将被第二模型代替。如果退出LINDO,内存中有模型也被清除。因此,要保存一个已输入的模型,必须将它存放到磁盘中去,作为磁盘文件保存,模型存盘的命令将在SAVE,SMPS和DIVE命令中讲解。

3.全屏幕编辑命令EDIT

EDIT命令可以用来输入一个新模型。例如

:EDIT

出现以下编辑窗口,可以在窗口输入、编辑一个模型。输入、编辑完毕以后,按ESC结束编辑,最后一次修改有效;ALT+ESC放弃修改,结束编辑。例如先用EDIT 输入以下模型:

LINDO/PC 5.3 ? 1995 LINDO SYSTEMS INC.

1 MAX 4 X1 + X

2 - X

3 + 2 X4

2 ST

3 X1 – X2 + X3 - X

4 <= 30

4 3 X1 + X2 - X3 + 2 X4 <= 36

5 X1 + 2 X2 + X3 – 2 X4 <= 20

6 END

...

23

- Exit with compile - Exit without compile 用ESC退出编辑并确认修改。

EDIT也可以编辑一个已经输入的模型。例如,如果想把上一个已经输入的模型加上标题,约束加上说明,可以用EDIT进入编辑窗口,将模型编辑修改成:

LINDO/PC 5.3 (C) 1995 LINDO SYSTEMS INC.

1 TITL "This is a maximum profit problem"

2 MAX 4 X1 + X2 - X

3 + 2 X4

3 ST

4 RESOURCE) X1 - X2 + X3 - X4 < 30

5 SALES) 3 X1 + X2 - X3 + 2 X4 < 36

6 STORAGE) X1 + 2 X2 + X3 - 2 X4 < 20

7 END

...

23

- Exit with compile - Exit without compile 用EDIT命令编辑的模型规模由一定限制,最多只能编辑包含65998个字符的模型。规模更大的模型只能用下面介绍的其他命令来编辑,如ALT、EXT、APPC等。

4.模型屏幕显示LOOK

LOOK命令是将内存中的模型的一部分或全部在屏幕上显示。该命令的格式是: LOOK [行标识]

其中行标识可以是某一特定的行号,是一个正整数。1表示第1行即目标函数,2表示第一约束等等,行标识也可以是所要显示的符的范围,如2-5表示显示从第二行到第五行止的模型,行标识也可以是"ALL",即显示整个模型,如果行号n省略,则隐含第一行,即LOOK和LOOK 1等效。

例如,对上面输入的模型,以下都是合法的LOOK命令:

: LOOK 1

这时,屏幕显示为:

MAX 5.24 X1 + 7.3 X2 + 8.34 X3 + 4.18 X4

如 LOOK 命令为:

: LOOK 1-3

则屏幕显示为:

MAX 5.24 X1 + 7.3 X2 + 8.34 X3 + 4.18X4

SUBJECT TO

2) 1.5X1+ X2+2.4X3+ X4<=2000

3) X1+5X2+ X3+3.5X4<=8000

END

如 LOOK 命令为:

: LOOK ALL

则屏幕显示为:

MAX 5.24X1 +7.3X2 + 8.34X3 + 4.18X4

SUBJECT TO

2)1.5X1+ X2 +2.4X3 + X4 <=2000 !不等号的显示与输入形式不同

3) X1+5X2 + X3 +3.5X4 <=8000 !屏幕输出中约束带有行号

4)1.5X1+3X2 +3.5X3 + X4 <=5000

END

5.运行模型命令GO

GO命令的格式为:

: GO [n]

其中n为用户指定的最大叠代次数,如果n省略,则隐含值为LINDO指定的最大叠代次数。以上述模型为例,运行操作以及得到的屏幕显示如下: : GO

LP OPTIMUM FOUND AT STEP4

OBJECTIVE FUNCTION VALUE

1)12737.0600

COST VARIABLE VALUE REDUCED

294.117600 .000000 X1

X2 1500.000000 .000000

X3 0.000000 1.414647

X4 58.823530 .000000

PRICES ROW SLACK DUAL

1.953529

2) .000000

.242353

3) .000000

1.378236

4) .000000

DO SENSITIVE ANALYSIS? ( Y/N ) !如果回答"N",则出现以下信息NO. ITERATIONS = 4 !终止运算,并给出叠代次数

LP OPTIMUM FOUND AT STEP 4

: !返回LINDO命令状态如果回答"Y",则给出目标函数系数和右边常数的灵敏度分析结果,并返回LINDO命令状态。

RANGES IN WHICH THE BASIS IS UNCHANGED

COST

RANGES

COEFFICIENT

VARIABLE CURRENT ALLOWABLE ALLOWABLE

INCREASE

DECREASE COEF

1.029999

.730973 X1 5.240000

2.572086

3.907058

X2 7.300000

INFINITY X3 8.340000

1.414647

.686666

1.343520

X4 4.180000

RIGHT HAND SIDE RANGES

ALLOWABLE ROW CURRENT

ALLOWABLE

DECREASE

INCREASE

RHS

3000.00000

111.111100

2 2000.0000

166.666700

1250.00000

3 8000.0000

4 5000.0000 76.92308 1666.667000

:

5.退出LINDO

命令是QUIT,该命令的功能是退出LINDO,返回操作系统。执行QUIT命令后,未存盘的模型将从内存中清除。用法:

:QUIT

C>

下面是一段输入和输出记录,包括以上四个命令以及相应的屏幕输出。"!"右面

的是本手册的注释,其他是LINDO的屏幕输出。

: MAX 3X1+2X2-X3

?SUBJECT TO

?X1+X2+X3<12

?2X1+4X2-X3<15

?3X1-X2+4X3<18

?END

: LOOK ALL

MAX 3 X1 + 2 X2 - X3

SUBJECT TO

2) X1 + X2 + X3 <= 12

3) 2X1 + 4X2 - X3 <= 15

4) 3X1 - X2 + 4X3 <= 18

END

: GO

LP OPTIMUM FOUND AT STEP 2

OBJECTIVE FUNCTION VALUE

1) 19.9285700

VARIABLE VALUE REDUCED

COST

.000000

X1 6.214286

.000000

X2 .642857

X3 .000000

2.642857

PRICES

ROW SLACK DUAL

.000000

2) 5.142857

.642857

3) .000000

.571429

4) .000000

NO. ITERATIONS = 2

GO>DO SENSITIVE ANALYSIS?(Y/N) Y

RANGES IN WHICH THE BASIS IS UNCHANGED

RANGES

COEFFICIENT

COST

VARIABLE CURRENT ALLOWABLE ALLOWABLE

INCREASE

DECREASE COEF

2.000000

INFINITY

X1 3.000000

3.000000

3.363636

X2 2.000000

INFINITY

2.642857

X3 -1.000000

RIGHT HAND SIDE RANGES

ALLOWABLE

ALLOWABLE

ROW CURRENT

DECREASE

INCREASE

RHS

INFINITY

5.142857 2 12.000000

18.000000

3.000000 3 15.000000

21.750000 4 18.000000

4.500000

第二章模型文件的存取

以上介绍的四个命令─MAX/MIN,LOOK,GO,QUIT已经可以实现求解一个模型的最基本的操作,但很容易发现,以上操作虽然建立了模型并求得了模型的解,但模型和解都没有生成磁盘文件,因而都无法保存。本节的目的是了解与LINDO模型及求解结果存盘及读取有关的命令,这些命令是

模型文件存盘命令 SAVE

模型文件读取命令 RETR、TAKE

输出转向读取命令 DIVE

恢复屏幕显示命令 RVRT

§2.1 模型存盘命令SAVE

1.命令功能:把已输入内存的模型以磁盘文件的形式存盘

2.命令格式:

:SAVE [文件名.扩展名]

其中文件名由至多六个字符组成,第一个必须是字母。扩展名由至多三个符组成。

显然,SAVE命令只有当内存中已输入一个模型时才有效,并且执行SAVE命令后,对内存中的模型没有任何影响。

3.命令使用:设当前内存中已输入一个模型,如键入以下命令:

:SAVE MODEL.LIN

则该模型将以MODEL.LIN为名的文件存在磁盘中。如果用户键入的文件名为MODEL,则生成的磁盘文件名为MODEL,扩展名缺省。

这时模型运行的结果还是仅仅在屏幕上显示而没有生成的磁盘文件。关于如何把运行结果生成磁盘文件,将在命令DIVE中讲解。

至于模型磁盘文件是否确实已经生成,可以用操作系统文件目录列表命令DIR 来确认。但如果试图用操作系统文件显示命令TYPE来显示该文件的内容,屏幕上将

显示一些无法读认的码,这是因为SAVE命令生成的文件是二进制码的文件,因而无法显示读认,更无法对它进行编辑。

§2.2 模型文件读取命令 RETR (RETRIEVE)

1.命令功能:从磁盘中读取一个用SAVE命令存盘的模型文件到内存中

2.命令格式:

:RETR[文件名·扩展名]

其中文件名(扩展名)必须是用SAVE命令生成的磁盘文件名(扩展名)。

3.命令使用:假定当前磁盘中已生成一个名为MODEL.LIN的文件,则可以进行以下操作:

:RETR MODEL.LIN

该命令执行后,相应的模型将被读到内存中,如果在此之前内存中已有一个模型的话,内存中原有的模型将被清除。对新的模型可以执行显示,运行等操作。

上面提到的SAVE命令只能将模型文件存盘,而不能将运行后的结果存盘。如果要把运行命令GO执行后,显示在屏幕上的运行结果生成磁盘文件,就必须转向命令DIVE。

§2.3 输出转向命令 DIVE (DIVERT)

1.命令功能:将屏幕输出的信息转到指定的磁盘文件中去。

2.命令格式:

:DIVE[文件名.扩展名]

其中文件名(扩展名)是用户给定的用来存放屏幕输出信息的磁盘文件名。

3.命令使用:

DIVE命令执行以后,一切屏幕输出信息都将转到指定的磁盘文件中去,大多数输出信息都将不再在屏幕上显示,但一些重要的揭示信息仍将在屏幕上显示,请看下面的操作:

:MAX 2X1+3X2

MAX>ST

MAX>X1+2X2<12

MAX>2X1+4X2<18

END

:DIVE SOLU.DAT

:LOOK ALL

:GO

LP OPTIMUM FOUND AT STEP 2

OBJECTIVE FUNCTION VALUE

1)18.0000000

DO RANGE(SENSITIVITY) ANALYSIS ?

GO>N

:QUIT

C>

如果继续操作,由于这些操作在DIVE命令执行之后实施,原来应该在屏幕上显示的信息都将转到磁盘文件SOLU.DAT中去。

现在,如果我们在操作系统下用操作系统文件显示命令TYPE来显示磁盘文件SOLU.DAT的内容,将会看到:

C>TYPE SOLU.DAT

MAX 2 X1 + 3 X2

SUBJECT TO

2) X1 + 2 X2 <= 12

3) 2 X1 + 4 X2 <= 18

END

LP OPTIMUM FOUND AT STEP 2

OBJECTIVE FUNCTION VALUE

1)18.0000000

VARIABLE VALUE REDUCED COST

.000000 X1 9.000000

1.000000

.000000

X2

ROW SLACK DUAL PRICES

2) 3.000000

.000000

1.000000

3)

.000000

NO.ITERATIONS= 2

由于命令DIVE生成的磁盘文件是以ASCⅡ码存放的,因此所生成的文件是可以显示的,可以用各种文本编辑程序(如DOS编辑命令EDIT,Windows中的Notepat等)编辑修改。

这样,我们已经可以对一个模型进行输入(包括键盘输入和读取磁盘文件)、显示、运行、模型存盘、运行结果存盘等基本操作了。

§2.4 恢复屏幕显示命令 RVRT (Revert)

1.命令功能:清除输出转向命令DIVE,恢复屏幕输出。

2.命令格式:

:RVRT

3.命令使用:从上一节可以知道,命令DIVE执行以后,随后的各种命令,如GO,LOOK等产生的屏幕输出信息都将不再在屏幕上显示而是转到用户指定的磁盘文件中去。如果执行一个RVRT,就可以终止DIVE命令的转向功能,恢复信息的屏幕输出。因RVRT命令的这一功能可以知道,RVRT命令一定要与DIVE配合使用,而且RVRT命令一定要在DIVE后面执行。恰当地使用DIVE和RVRT命令,就可以根据用户的要求,把所需要的输出结果存放到磁盘文件中去。

§2.5 读取命令文件命令 TAKE

1.命令功能:从磁盘读取一个由LINDO命令组成的文件到内存并逐条执行这些命令。

2.命令格式:

:TAKE[文件名.扩展名]

其中文件名和扩展名都由用户定义。

3.命令使用:

本手册前面所讲的所有命令,都是由用户从键盘输入的,TAKE命令实际上是把一个命令文件定义为虚拟终端(键盘),LINDO从该文件读取并执行命令。由此可知,TAKE命令使LINDO命令成批执行。

所谓"命令文件"是一个由若干条合法的LINDO命令组成的文件,它应当用编辑程序(如DOS中的EDIT,WINDOWS中的NOTEPAD等)事先编辑好并存放在磁盘中。命令文件的最后一个命令必须是LEAVE。

例如,先建立如下一个文件名为STREAM.BAT的命令文件:

RETR MODEL.LIN

DIVE SOLU.DAT

LOOK ALL

PAUS

GO

N

LEAVE

先进入LINDO,然后执行以上批命令STREAM .BAT,则LINDO将依次执行其中的每一条命令,执行到暂停命令PAUS,则暂停执行。键入回车,继续执行。直至遇到批命令终止命令LEAVE,退出批命令,返回LINDO命令状态。

TAKE命令除了可以实现命令的批处理以外,还可以用来把一个由ASCⅡ码写成的模型文件输入LINDO。例如,先用编辑程序写成以下磁盘文件,文件名为MODEL.DAT:

MAX 3X1+4X2+X3-X4

ST X1-2X2+X3+3X4<8 !注意,命令文件中模型格式必须

2X1+X2-2X3-2X4<13 !与键盘输入时完全一样,即不带

X1+3X3+X4<21 !行号,不等号为"<"或">"。

END

!最后一个命令必须是LEAVE

LEAVE

先进入LINDO,然后用TAKE命令读取这个文件,就可以将这个模型装入内存。:TAKE MODEL.DAT !将文件中的模型读入内存

用TAKE命令读取模型文件的方法对大规模模型特别适用。大规模的模型文件可以用其他编辑系统(如DOS的EDIT,Windows的Notepad等)生成,经过编辑,校正,可以减少错误,保证输入正确。有些大型的模型,也可以用用户编制的程序生

成符合LINDO模型格式的模型文件,然后由TAKE命令读入,用LINDO求解。因此,TAKE命令也可以作为LINDO和其他应用程序之间的接口。

当然,我们也可以把模型以及准备对该模型实施的LINDO命令组成一个命令文件。这样当TAKE命令读取这一命令文件后,不仅将模型读入内存,而且将逐打执行文件中的命令,实现模型输入,执行批命令一次完成。例如,命令文件:

MAX 3X1+4X2+X3-X4

ST X1-2X2+X3+3X4<8

2X1+X2-2X3-2X4<13

X1+3X3+X4<21

END

LOOK ALL

GO

N

LEAVE

用TAKE命令读入后,首先将模型装入内存(MAX命令),然后在屏幕上显示这个模型(LOOK ALL命令),运行这个模型(GO命令,在执行中对屏幕提示的回答是N),最后退出命令文件(LEAVE命令),返回LINDO命令状态。

§2.6 退出命令文件命令 LEAVE

这个命令的功能及格式已在TAKE中讲了。

第三章线性规划模型的求解

学习了第一章的内容之后,我们已经能够初步利用LINDO来求解一个线性规划模型,得到模型的最优解,亦即在正确输入模型的基础上,用GO命令运行模型。但是仅仅掌握这些基本的操作技术还无法满足多种多样的实际需要。例如有时需要了解进行一次迭代运算的基变化情况,有时不但要求得最优解,而且还要进行灵敏度分析等等。诸如此类线性规划模型求解中在更深层次的问题,便是本章讨论的内容。

§3.1 GO命令的进一步介绍

GO命令除了第一章中介绍的求解模型的最常见功能之外,还有如下几种形式的用途:

(1).对当前内存中的模型进行有限迭代。在用GO命令求解模型时,如果省略迭代次数n,一般情况下计算机只会显示出最后一次运行的结果,这也就是第一章中已提到过的情形。如果欲要了解当前内存中模型进行指定迭代次数时的中间结果,可以使用命令中参数n来达到。例如对于下述问题:

max 2x1+8x2+6x3

st. 8x1+3x2+2x3≤250

2x1+ x2≤50

4x1+3x3≤150

x1,x2,x3≥0

当取GO命令中的n为整数2时,计算机显示的内容为:

:MAX 2x1+8x2+6x3

? ST

? 8x1+3x2+2x3<250

? 2x1+x2<50

? 4x1+3x3<150

? END

2 !运行,最大叠代次数为2次

:GO

PIVOT LIMIT OF 2 EXCEEDED. HOW MANY MORE ALLOWED?

GO> !叠代次数2次已超过,允许再叠代多少次?

此时尚未求得最优解,如要了解内存中模型第二次迭代的有关数据,可用TABL 等显示命令来实现(见第五章的介绍)。

2.追加迭代次数。对于一些规模较大的模型(包括某些尽管空间占有不大,但迭代时间较长的模型),在使用缺省n的GO命令以后,LINDO可以在经过若干次数的迭代之后,暂时中断,给出类似上一节的提示信息,例如对某一模型有如下求解过程:

:MAX 2x1+8x2+6x3

? st

? 8x1+3x2+2x3<250

? 2x1+x2<50

? 4x1+3x3<150

? END

2 !运行,最大叠代次数为2次

:GO

PIVOT LIMIT OF 2 EXCEEDED. HOW MANY MORE ALLOWED?

GO>3 !此时尚未求出最优解,将追加的迭代次数输入

LP OPTIMUM FOUND AT STEP 2

OBJECTIVE FUNCTION VALUE

1)700.000000

VARIABLE VALUE REDUCED

COST

X1 .000000 22.000000

X2 50.000000 .000000

X3 50.000000 .000000

RICES

DUALP

ROW SLACK

.000000

2) .000000

8.000000

3) .000000

2.000000

4) .000000

NO.ITERATIONS=2

DO RANGE(SENSITIVITY) ANALYSIS?

GO>N

§3.2 迭代计算命令 PIV (Pivot)

1.命令功能:对当前基进行一次旋转运算.

2.命令格式:

:PIV [变量名或变量序号]

3.命令使用:PIV命令执行以后,指定的变量就调入当前基中(即成为进基变量),离基变量按单纯形算法规则确定。如变量名缺省,则按进基规则依次选择进基变量。例如对于上一节的模型,其操作结果有:

:PIV

X2 ENTERS AT VALUE 50.000 IN ROW 3 OBJ. VALUE = 400.00

:PIV

X3 ENTERS AT VALUE 50.000 IN ROW 4 OBJ. VALUE = 700.00

:PIV

LP OPTIMUM FOUND AT STEP 2

OBJECTIVE FUNCTION VALUE

1)700.000000

COST

VARIABLE VALUE REDUCED

X1 .000000 22.000000

X2 50.000000 .000000

X3 50.000000 .000000

PRICES

DUAL

ROW SLACK

.000000

2) .000000

8.000000

3) .000000

2.000000

4) .000000

NO.ITERATIONS = 2

DO RANGE(SENSITIVITY) ANALYSIS ?

PIV>

此时得到了问题的最优解。如果继续计算,让X1进基,有:

:PIV X1

X1 ENTERS AT VALUE 25.000 IN ROW 3 OBJ. VALUE = 150.00

由于松弛变量是LINDO自动添加的,没有变量名,例如在上一节的模型max 2x1+8x2+6x3

s.t. 8x1+3x2+2x3≤250

2x1+x2≤50

4x1 +3x3≤150

x1x2x3≥0

中,如果要选第一个松弛变量进基,则需要用这个变量的序号,即第4个变量进基:MAX 2 X1 + 8 X2 + 6 X3

SUBJECT TO

2) 8 X1 + 3 X2 + 2 X3 <= 250

3) 2 X1 + X2 <= 50

4) 4 X1 + 3 X3 <= 150

END

LINDO软件使用指导

一、软件简介 LINDO是一种专门用于求解数学规划问题的软件包。由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。因此在数学、科研和工业界得到广泛应用。LINDO主要用于解线性规划、非线性规划、二次规划和整数规划等问题。也可以用于一些非线性和线性方程组的求解以及代数方程求根等。LINDO 中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。 一般用LINDO(Linear Interactive and Discrete Optimizer)解决线性规划(LP—Linear Programming)。整数规划(IP—Integer Programming)问题。其中LINDO 6 .1 学生版至多可求解多达300个变量和150个约束的规划问题。其正式版(标准版)则可求解的变量和约束在1量级以上。 LINDO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP —QUARATIC PROGRAMING)其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦再10^4量级以上。虽然LINDO 和LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。 要学好用这个软件最好的办法就是学习他们自带的HELP文件。 下面拟举数例以说明这个软件的最基本用法。 目标函数:max z=2x1+3x2 约束条件: x1+2x2<=8 4x1x6<=16 4x2 <=12 xj>=0(j=1,2 (8) 下面我们就用LINDO来解这一优化问题。 输入语句: max(不区分大小写) 2x1+3x2 ST(不区分大小写或写subject to) x1+2x2<=8 4x1x6<=16

数学建模:运用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使用手册翻译

§2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。 2.1 为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。 2.2 什么是集 集是一群相联系的对象,这些对象也称为集的成员。一个集可能是一系列产品、卡车或雇员。每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,也可以是未知的,有待于LINGO求解。例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。 LINGO有两种类型的集:原始集(primitive set)和派生集(derived set)。一个原始集是由一些最基本的对象组成的。一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。 2.3 模型的集部分 集部分是LINGO模型的一个可选部分。在LINGO模型中使用集之前,必须在集部分事先定义。集部分以关键字“sets:”开始,以“endsets”结束。一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须定义了它们。 2.3.1 定义原始集 为了定义一个原始集,必须详细声明: 1、集的名字 2、可选集的成员

常见Lingo指令介绍

常见Lingo指令介绍 一、控制Sprite的常见指令 1.指令名称:sprite member 指令语法:the member of sprite 指令说明:sprite所代表的cast member。 例:精灵替换 set the member of sprite 1 to "yuan" 可改为:Sprite(1).member=”yuan” 点句表示法: ObjectName.[Property|function|Chunk that you want to specity] 2.指令名称:sprite memberNum 指令语法:the memberNum of sprite 指令说明:sprite所代表的cast member所在的位置。 例:循环播放 on exitFrame me if sprite (1). memberNum =10 then sprite (1). memberNum = 1 else sprite (1) .memberNum=sprite(1).memberNum+1 end if go to the frame end 3.旋转、倾斜、翻转精灵 指令说明:这些变换可以应用于位图、文本、矢量图形、GIF及Flash,但不能用于域,以及工具面板上的椭圆和矩形。 (1)旋转:正值代表顺时针,负值代表逆时针 sprite(1).rotation=30 set the rotation of sprite 1 to 30 例:指针调节 sprite(1).rotation=sprite(1).rotation+5 (2)倾斜:正值向右倾斜,负值向左倾斜,正常状态为0 sprite(1).skew=10 set the skew of sprite 1 to 10 例:图形变形 sprite(1).skew=sprite(1).skew+10 (3)翻转:左右(水平)翻转flipH,上下(垂直)翻转flipV,设置值为TRUE或FALSE (1或0) sprite(1).flipH=TURE sprite(1).flipV=1 例:翻转与恢复

LINGO使用说明比较简单

Lingo介绍 Lingo是美国LINDO系统公司(Lindo Symtem Inc)开发的求解数学规划系列软件中的一个(其他软件为LINGDO,GINO,What’s Best等),它的主要功能是求解大型线性、非线性和整数规划问题,目前的版本是lingo11.0。 lingo分为Demo、solve suite、hyper、industrial、extended等六类不同版本,只有Demo版本是免费的,其他版本需要向LINDO系统公司(在中国的代理商)购买,Lingo的不同版本对模型的变量总数、非线性变量个数、整型变量个数和约束条件的数量做出不同的限制(其中extended版本无限制)。 Lingo的主要功能特色为: (1)既能求解线性规划,也有较强的求解非线性规划的能力; (2)输入模型简练直观; (3)运行速度快、计算能力强; (4)内置建模语言,提供几十种内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型; (5)将集合的概念引入编程语言,很容易将实际问题转换为Lingo语言; (6)能方便地与excel、数据库等其他软件交换数据。 学校图书馆40本《lingo和excel在数学建模中的应用》,袁新生、邵大宏、郁时炼主编,科学出版社

Lingo 程序设计简要说明 在数学建模中会遇到如规划类的题型,在这种模型中总存在着一个目标,并希望这个目标的取值尽可能的大或小,同时与这个目标有关的一系列变量之间存在一些约束。在构造出目标函数和约束条件的表达式后,我们需要对求出这个最值和各变量的取值。一般我们用LINGO 来对模型进行求解,本文将通过举一个简单的例子,围绕这个例子逐步学习LINGO 的使用。LINGO 只是一个求解工具,我们主要的任务还是模型的建立! 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。 示例:求解线性规划问题: max z=x1+x2+x3+x4+x5+x6+x7+x8 ???????????????≤≤≤≤≤≤269 + x88 + x72 + x66 + x55 + x47 + x38 + x28 + x1 6 15 6 + x8 7 + x7+ x65 + x54 + x44 + x34 + x25 + x15 444 + x86 + x77 + x68 + x58 + x45 + x32 + x27 + x14278 + x85 + x74 + x64 + x55 + x49 + x36 + x25 + x13389 + x84 + x75 + x62 + x57 + x46 + x35 + x28 + x1 2 154 + x8 3 + x79 + x66 + x55 + x45 + x3 4 + x27 + x1 求解这个模型的相应LINGO 程序代码如下: 程序一: max= x1+x2+x3+x4+x5+x6+x7+x8; x1 + 7*x2 + 4*x3 + 5*x4 + 5*x5 + 6*x6 + 9*x7 + 3*x8 + 415<=; 2*x1 + 8*x2 + 5*x3 + 6*x4 + 7*x5 + 2*x6 + 5*x7 + 4*x8 + 938<=; 3*x1 + 5*x2 + 6*x3 + 9*x4 + 5*x5 + 4*x6 + 4*x7 + 5*x8 + 827<=; 4*x1 + 7*x2 + 2*x3 + 5*x4 + 8*x5 + 8*x6 + 7*x7 + 6*x8 + 444<=; 5*x1 + 5*x2 + 4*x3 + 4*x4 + 4*x5 + 5*x6 + x7 + 7*x8 + 6 15<=; 6*x1 + 8*x2 + 8*x3 + 7*x4 + 5*x5 + 6*x6 + 2*x7 + 8*x8 + 926<=; 注:然后点击工具条上的按钮 即可。本模型的最优解为2.636364

lingo教程

LINGO是Linear Interactive and General Optimizer的缩写,中文名称为“交互式的线性和通用优化求解器”,是由美国LINDO系统公司(Lindo System Inc.)开发的一套专门用于求解最优化问题的软件包,用于求解线性规划和二次规划问题,LINGO可以求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解等。此外,LINGO还允许优化模型中的决策变量为整数(即整数规划),其执行速度很快,是求解优化模型的最佳选择。 1软件介绍 其特色在于内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括0-1整数规划),方便灵活,而且执行速度非常快。能方便与EXCEL,数据库等其他软件交换数据。最新版本LINGO14.0已经发布。 2操作步骤 一般地,使用LINGO求解运筹学问题可以分为以下两个步骤来完成:1)根据实际问题,建立数学模型,即使用数学建模的方法建立优化模型; 2)根据优化模型,利用LINGO来求解模型。主要是根据LINGO软件,把数学模型转译成计算机语言,借助于计算机来求解。 例题:在线性规划中的应用maxZ=5X1+3X2+6X3, s.t.X1+2X2+X3≤18 2X1+X2+3X3=16 X1+X2+X3=10

X1,X2≥0,X3为自由变量 应用LINGO来求解该模型,只需要在lingo窗口中输入以下信息即可: max=5*x1+3*x2+6*x3; x1+2*x2+x3<=18; 2*x1+x2+3*x3=16; x1+x2+x3=10; @free(x3); 然后按运行按钮,得到模型最优解,具体如下:Objectivevalue:46.00000 VariableValueReducedCost x114.000000.000000 x20.0000001.000000 x3-4.0000000.000000 由此可知,当x1=14,x2=0,x3=-4时,模型得到最优值,且最优值为46。 说明:在利用LINGO求解线性规划时,如自变量都为非负的话,在LINGO中输入的信息和模型基本相同;如自变量为自由变量,可以使用函数@free来把系统默认的非负变量定义自由变量,如实例一中的x3。 3软件详述 LINGO全称是LinearINteractiveandGeneralOptimizer的缩写---

lindoapi数学软件介绍

lindoapi数学软件介绍 LINDO是一种专门用于求解数学 规划问题的软件包。由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。因此在数学、科研和工业界得到广泛应用。LINDO主要用于解线 性规划、非线性规划、二次规划和整数规划等问题。也可以用于一些非线性和线性方程组的求解以及代数方程求根等。LINDO中包含了一种建模语言和许多常用 的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。 LINDO 6.1是求解线性、整数和二个规划问题的多功能工具。LINDO 6.1互动的环境可以让你容易得建立和求解最佳化问题,或者你可以将LINDO的最佳化引擎挂在您己开发的程序内。而另一方面,LINDO也可以用来解决 一些复杂的二次线性整数规划方面的实际问题。如在大型的机器上,LINDO被用来解决一些拥有超过50,000各约束条件和200,000万个变量的大规 模复杂问题 LINGO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP—QUARATIC

PROGRAMING)其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦再10^4量级以上。虽然LINDO 和LINGO不能直接求解目 标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。 什么是LINDO 在这里有必要先让大家知道什么是运筹学。运筹学是近四十年来发展起来的一门新兴学科。它的目的是为行政管理人员在作决策时提供科学的依据。因此,它是实 现管理现代化的有力工具。运筹学在生产管理、工程技术、军事作战、科学试验、财政经济以及社会科学中都得到了极为广泛的应用。讲到这里,你已经被运筹学深 深吸引了吧,至于你会怎么去学不是我们讨论的问题,在这里我们只说学运筹学要用到的工具。应用运筹学去处理问题有两个重要特征:一是从全局的观点出发;二 是通过建立模型如数学模型或模拟模型,对于要求解的问题得到最合理的决策。好了,说到这里,LINDO该出场了,它的作用就是负责把问题的最优决策求出来,省去大量难以想象的人工计算。如果你是运筹学的学习者,你就必须拥有

lingo使用手册

LINGO快速入门 LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 (2) §2 LINGO中的集 (3) 2.1 为什么使用集 (3) 2.2 什么是集 (4) 2.3 模型的集部分 (4) 2.3.1 定义原始集 (4) 2.3.2 定义派生集 (5) §3 模型的数据部分和初始部分 (7) 3.1 模型的数据部分 (7) 3.1.1 数据部分入门 (7) 3.1.2 参数 (8) 3.1.3 实时数据处理 (8) 3.1.4 指定属性为一个值 (9) 3.1.5 数据部分的未知数值 (9) 3.2 模型的初始部分 (10) §4 LINGO函数 (10) 4.1 基本运算符 (10) 4.1.1 算术运算符 (11) 4.1.2 逻辑运算符 (11) 4.1.3 关系运算符 (11) 4.2 数学函数 (12) 4.3 金融函数 (13) 4.4 概率函数 (13) 4.5 变量界定函数 (15) 4.6 集操作函数 (15) 4.7 集循环函数 (16) 4.8 输入和输出函数 (18) 4.9 辅助函数 (21) §5 LINGO WINDOWS命令 (22) 5.1 文件菜单(File Menu) (22) 5.2 编辑菜单(Edit Menu) (23) 5.3 LINGO菜单 (23) 5.4 窗口菜单(Windows Menu) (35) 5.5 帮助菜单(Help Menu) (37) §6 LINGO的命令行命令 (37) §7 综合举例 (41)

LindoLingo软件基本知识

Lindo /Lingo 软件基本知识 Lindo/Lingo 软件是美国Lindo 系统公司开发的一套专门用于求解优化模型的软件。 一.Lingo 入门 1.编写简单的Lingo 程序 Lingo 程序:在“模型窗口”中,按Lingo 语法格式,输入一个完整的优化模型。 (注意:一个程序就是一个优化模型) 例1 要求解线性规划问题 . 0,, 1253,1034.., 32max ≥≤+≤++=y x y x y x t s y x z 输入程序: max=2*x+3*y; 4*x+3*y<=10; 3*x+5*y<=12; 例2 求解 .,0,, 2, 100.., 23.027798max 21212122212121且都是整数≥≤≤+---+x x x x x x t s x x x x x x 输入程序: max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; x1<=2*x2;x1+x2<=100; @gin(x1); @gin(x2); 2.语法格式 (1)目标函数 max= 或 min= (2)每个语句的结尾要有“;” (3)程序中,各个语句的先后次序无关 (4)自动默认各个变量均为大于等于零的实数 (5)不区分大写、小写 (6)程序中的“<=”、“<”等同于原模型中的“≤” 程序中的“>=”、“>”等同于原模型中的“≥” (7)对一个特定的变量 x ,进行限制: @free(x) :把x 放宽为任意实数

@gin(x) :限制x 为整数 @bin(x) :限制x 只能取0或1 @bnd(-6,x,18) :限制x 为闭区间[-6,18]上的任意实数 例3:某学校游泳队要从5名队员中选4名参加4乘100米混合泳接力赛。 5名队员4种泳姿的百米成绩(单位:秒) ----------------------------------------------------------------------------------- 李 王 张 刘 赵 蝶泳 66.8 57.2 78 70 67.4 仰泳 75.6 66 67.8 74.2 71 蛙泳 87 66.4 84.6 69.6 83.8 自由泳 58.6 53 59.4 57.2 62.4 ----------------------------------------------------------------------------------- 如何选拔? (1)请建立“0----1规划”模型; (2)用Lingo 求解。 解:若第i 名队员参加第j 种泳姿比赛,则令1=ij x ;否则令0=ij x ;共有20个决策变量ij x 。第i 名队员的第j 种泳姿成绩记为ij c ,则 目标函数为:∑∑==5141min i j ij ij x c 约束条件有:每名队员顶多能参加一种泳姿比赛 5,4,3,2,1,14 1=≤∑=i x j ij ; 每种泳姿有且仅有一人参加 .4,3,2,1,151==∑=j x i ij 这样就能建立如下“0----1规划”模型: ∑∑==5141min i j ij ij x c s.t. 5,4,3,2,1,141=≤∑=i x j ij .4,3,2,1,151==∑=j x i ij

lingo用户手册

为什么要使用集合? 集是LINGO的建模语言的基本构建方案的最强大的功能块的基础。随着对集的理解,你可以写一系列类似的限制在一个单独的语句,并表示长期,复杂的公式。这使您可以非常快速,轻松地表达你的最大的模型。在较大的模型,你会遇到来表达一组几个非常类似的计算或约束的需要。幸运的是,LINGO的能力,处理信息集,可以有效地执行这样的操作。 例如,准备一个仓库发货型号为100的仓库,如果你有明确写入每个约束(例如,“仓库1必须装运不超过其目前的库存较多,仓库2必须装运不超过其目前的库存,仓库更是繁琐3必须运输不超过其本库存......“,等等)。LINGO让您表达最简单的形式公式你阅读和理解(例如,“每个仓库出货必须不超过其目前的库存比较”)。 什么是集? 集是简单地相关对象的组。一组可能是产品,卡车,或员工列表。在该组的每个成员可以有一个或多个与之相关联的特性。我们称这些特征属性。属性值可以提前或未知的LINGO解决该已知。例如,在一组产品的每个产品可能有一个价格属性;在一组的卡车可能有运力属性的每个卡车;并在一组雇员的每个员工可能具有一个工资属性,以及出生日期属性。 集类型 LINGO认可两种套:原始的和衍生的。 原语集是一组唯一的对象不能被进一步减小构成。在无线小工具的例子(第27页),设置仓库,这是由六个仓库,是一种原始的集合。同样,集合八家厂商组成是一种原始的集合。派生集合是使用一个或多个其他组中定义。换句话说,一个来自集源自其他预先存在的集的成员。此外,使用无线小工具例如,集合六个仓库和八家厂商(LINKS)之间的联系组成一个派生集。它源于它的成员来自独特的对仓库的成员和供应商集。虽然链接组被从原始集仅衍生,但也可以从其他来源的集建立来自集为好。请参阅下面的部分,定义导集,以了解更多信息 模型的集科 套在一个LINGO模型的可选部分称为集部分定义。在您的LINGO模型中使用集,你必须在模型组部分定义它们。套节与关键字集开始:(包括结肠),并与关键字ENDSETS结束。模型可以具有没有套部中,单个集合部,或多组部分。一个集部分可能会出现在任何地方的模型。唯一的限制是你必须定义一组及其属性之前,他们在模型的约束引用。 定义原始集 要定义基本设置在台部分,指定: 该组的名称, 任选,其成员(包含在一组对象),并 任选,任何属性集的成员可以具有。 原语集定义的语法如下: setname可以[/ member_list/] [:ATTRIBUTE_LIST];注:使用方括号表示一个项目是可选的。在这种特殊情况下,原始设定的ATTRIBUTE_LIST和member_list都是可选的。 该setname可以是你选择指定设置一个名称。这应该是一个描述性的名称,很容易记住。集名称必须符合标准LINGO命名约定。换句话说,该名称必须以字母字符,这可能是随后长达31个字母数字字符或下划线(_)。LINGO不大写和小写字符之间的名称区分开。 一个member_list是构成一组成员名单,如果该组成员包括在集定义,它们可以被显式地或隐式地列出。如果集成员不包括在set.definition,那么他们可以随后在模型的一个数据部分定义。有关定义组成员在数据部分的详细信息,请参阅简介部分数据。 当明确列出成员,为每个成员输入唯一的名称,可选用逗号隔开。与集名称,成员名称也必须符合标准命名约定。在无线小部件模型,我们可以用一个明确的成员名单在集合部分定义

LINGO的使用方法说明大全

LINGO的使用简介 LINGO软件是美国的LINGO系统公司开发的一套专门用于求解最优化问题的软件包.LINGO除了能够用于求解线性规划和二次规划外,还可以用于非线性规划求解、以及一些线性和非线性方程(组)的求解等.LINGO软件的最大特色在于它允许优化模型中的决策变量为整数,即可以求解整数规划,而且执行速度快.LINGO是用来求解线性和非线性优化问题的简易工具.LINGO置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果.在这里仅简单介绍LINGO的使用方法. LINGO(Linear INteractive and General Optimizer )的基本含义是交互式的线性和通过优化求解器.它是美国芝加哥大学的 Linus Schrage 教授于1980年开发了一套用于求解最优化问题的工具包,后来经过完善成何扩充,并成立了LINDO系统公司.这套软件主要产品有:LINDO,LINGO,LINDO API和What’sBest.它们在求解最优化问题上,与同类软件相比有着绝对的优势.软件有演示版和正式版.正式版包括:求解包(solver suite)、高级版(super)、超级版(hyper)、工业版(industrial)、扩展版(extended).不同版本的LINGO对求解问题的规模有限制,如附表3-1所示. 附表3-1 不同版本LINGO对求解规模的限制 版本类型总变量数整数变量数非线性变量数约束数 演示版 300 30 30 150 求解包 500 50 50 250 高级版 2000 200 200 1000 超级版 8000 800 800 4000 工业版 32000 3200 32000 16000 扩展版无限无限无限无限 3.1 LINGO程序框架 LINGO可以求解线性规划、二次规划、非线性规划、整数规划、图论及网络最优化问题和最大最小求解问题,以及排队论模型中最优化等问题. 一个LINGO程序一般会包括以下几个部分: (1) 集合段:集部分是LINGO模型的一个可选部分.在LINGO模型中使用集之前,必须在集部分事先定义.集部分以关键字“sets:”开始,以“endsets”结束.一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分.一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须先定义. (2) 数据段:在处理模型的数据时,需要为集部分定义的某些元素在LINGO求解模型之前为其指定

lindo详细使用说明

LINDO软件包使用手册 目录 第一节简介与安装 第二节用LINDO求解线性规划(LP) 问题 第三节用LINDO求解整数规划(IP) 和二次规划(QP) 问题第四节GINO简介 第五节LINGO简介

第一节简介与安装 1·1简介 本文主要面向大中专学生, 研究生, 及掌握一定的高等代数知识的读者,介绍LINDO软件包(学生版)的基本使用方法。该软件包(学生版)主要功能在于帮助使用者较快地输入一个优化问题的式子, 求解并分析该优化问题, 然后可做些较小的改动, 并重复上述的过程. 该软件包(学生版)在微机上DOS环境下运行。其使用界面不是图形式的,而是字符式的;不是菜单式的, 而是面向具体的命令(Command). 它有许多的命令, 每一个命令都可随时执行, 由系统检查该命令是否在上下文中起作用. 它采用一种对用户友好的交互使用方式, 包括了所有的使用过程指导. 基于使用的具体情况, 它会向使用者询问下一步将做什么, 或等待使用者输入下一个命令. LINDO软件包(学生版)包括LINDO,GINO,LINGO和LINGO NL(LINGO2)等优化软件的学生版以及相应的例子文件。由于LINDO程序执行速度很快,易于方便地输入、求解和分析优化问题,LINDO在教学、科研和工业界得到广泛应用。这里用LINDO软件包作为LINDO,GINO,LINGO和LINGO NL等的统称,包含五种组件,下面分别介绍如下: (1)LINDO是Linear INteractive and Discrete Optimizer字首的缩写形式,是由Linus Schrage 于1986年开发的优化计算软件包, 可以用来求解线性规划(LP----Linear Programming), 整数规划(IP----Integer Programming) 和二次规划(QP----Quadratic Programming) 问题. LINDO易于规划问题的输入、求解和分析,程序执行速度很快。LINDO学生版最多可求解多达200个变量和100个约束的规划问题。 (2)GINO可用于求解非线性规划(NLP----Nonlinear Linear Programming) 问题,求解线性和非线性方程组和不等式组,以及代数方程求根。GINO中包含了有关财务、概率等方面的函数和三角函数,以及各种一般的数学函数,可供使用者建立问题模型时调用。GINO 学生版最多可求解多达50个变量和30个约束的问题。 (3)LINGO 可用于求解线性规划和整数规划问题。 (4)LINGO NL(LINGO2)可用于求解线性、非线性和整数规划问题。 与LINDO和GINO不同的是,LINGO和LINGO NL(LINGO2)包含了内置的建模语言,允许以简练、直观的方式描述所需求解的问题,模型中所需的数据可以以一定格式保存在列表(List)和表格(Table)中,也可以保存在独立的文件中。LINGO和LINGO NL(LINGO2)学生版最多可求解多达200个变量和100个约束的问题。 (5)例子文件:在软件包中还含有例子文件,其中有些例子文件与各软件在一起,但大多数例子文件一般安装在例子目录。例子目录下的例子文件是以LUTOS 1-2-3的WK1格式存储的(也可用MS-OFFICE工具的EXCEL软件读写)。

lingo-lindo简介

Lingo、lindo简介 一、软件概述 (1) 二、快速入门 (4) 三、Mathematica函数大全--运算符及特殊符号 (11) 参见网址: https://www.doczj.com/doc/6313195302.html,/ 一、软件概述 (一)简介 LINGO软件是由美国LINDO系统公司研发的主要产品。LINGO是Linear Interactive and General Optimizer的缩写,即交互式的线性和通用优化求解器。LINGO可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。其特色在于 内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。能方便与EXCEL,数据库等其他软件交换数据。 LINGO实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel 电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。 (二)LINGO的主要特点: Lingo 是使建立和求解线性、非线性和整数最佳化模型更快更简单更 有效率的综合工具。Lingo 提供强大的语言和快速的求解引擎来阐述和求 解最佳化模型。

1 简单的模型表示 LINGO 可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。LINGO的建模语言允许您使用汇总和下标变量以一种易懂的直观的方式来表达模型,非常类似您在使用纸和笔。模型更加容易构建,更容易理解,因此也更容易维护。 2 方便的数据输入和输出选择 LINGO 建立的模型可以直接从数据库或工作表获 取资料。同样地,LINGO 可以将求解结果直接输出到数据库或工作表。使得您能够在您选择的应用程序中生成报告。 3 强大的求解器 LINGO拥有一整套快速的,内建的求解器用来求解线性的,非线性的(球面&非球面的),二次的,二次约束的,和整数优化问题。您甚至不需要指定或启动特定的求解器,因为LINGO会读取您的方程式并自动选择合适的求解器。 4交互式模型或创建Turn-key应用程序 您能够在LINGO内创建和求解模型,或您能够从您自己编写的应用程序中直接调用LINGO。对于开发交互式模型,LINGO提供了一整套建模环境来构建,求解和分析您的模型。对于构建turn-key解决方案,LINGO提供的可调用的DLL 和OLE界面能够从用户自己写的程序中被调用。LINGO也能够从Excel宏或数据库应用程序中被直接调用。 5 广泛的文件和HELP功能

LINDO使用手册

LINDO使用手册 LINDO Users Manual 第一章 LINDO初步 LINDO 是Linear INteractive Discrete Optimizer的缩写,是一个线性和整数规划的软件系统。这里介绍的LINDO/386 5.3版本,最大规模的模型的非零系数可以达到1,000,000个,最大变量个数可以达到100,000个,最大目标函数和约束条件个数可以达到32000个,最大整数变量个数可以达到100,000个。它的特点是采用交互方式操作,而且命令简单明了,很容易掌握。用户在输入初步的数学模型后,可以一边运行,一边修改调试,直至获得满意的结果。LINDO既是一个实用的求解大规模线性和整数规划系统,也很适用于训练的目的,用来培养学生面对较复杂的实际问题,构造线性及整数规划模型以及求解这些问题的能力。限于本教材的内容,本手册只介绍有关线性规划和整数规划的基本内容,省略了有关二次规划、参数规划以及有关线性规划算法的比较专门的内容。 §1.1 LINDO 命令一览表 LINDO 命令纳成十一类,每一类的名称及所属命令如下: 1、查询类(Information) HELP 求助 COM ( Command ) 命令列表 LOCAL 当前版本信息 CAT ( Categories ) 命令分类 TIME 显示当前时间 DATE 显示当前日期 2、文件输入类( Input ) MAX 键盘输入极大化模型

MIN 键盘输入极小化模型 RETR ( Retrieve ) 从磁盘读入模型文件 RMPS ( Read MPS ) 从磁盘读入MPS文件 TAKE 从磁盘读入模型或命令文件 LEAV ( LEAVE ) TAKE命令的终止 RDBC* 读取用SBDC命令保存的基列作为初始基FBR * 读取用FBS命令保存的基 FINS* 读取用MPS格式保存的基 3、显示类(Display) PIC ( Picture ) 显示矩阵中非零元素的分布及数量级TABL ( Tableau ) 显示当前单纯形表 LOOK 显示模型的数学形式 NONZ ( Nonzeros ) 显示解中的非零变量 SHOC ( Show Column ) 显示模型中的一列 SOLU ( Solution ) 显示当前得到的解 RANGE 显示灵敏度分析的结果 BPIC* 显示三角化的当前基逆矩阵 CPRI* 显示所选择列的有关信息 RPRI* 显示所选择行的有关信息 DMPS* 显示以MPS格式表示的解 PPIC* 显示行列重新排列的矩阵,使非零元素最 靠近对角线 4、文件输出类( File Output ) SAVE 模型存盘 DIVE ( Divert ) 将屏幕输出转向磁盘文件 RVRT ( Revert ) 重新回到屏幕输出状态 SMPS ( Save MPS ) 模型以 MPS 格式存盘 SDBC* 将当前基的列向量以文件形式保存 FBS* 将当前基以文件形式保存 FPUN* 将当前基以MPS形式保存 SMPN* 将当前模型用非标准的MPS格式保存5、求解类(Solution)

lingo教程(word文档)

LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: 0,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的强大功能,接着第二节的学习吧。 灵敏性分析(Range,Ctrl+R) 用该命令产生当前模型的灵敏性分析报告:研究当目标函数的费用系数和约束右端项在什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析是在求解模型时作出的,因此在求解模型时灵敏性分析是激活状态,但是默认是不激活的。为了激活灵敏性分析,运行LINGO|Options…,选择General Solver Tab,在Dual Computations列表框中,选择Prices and Ranges选项。灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它。 下面我们看一个简单的具体例子。 例5.1某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。生产数据如下表所示:

Lindo的简单使用方法(终结版)

LINDO的简单使用方法 一、LINDO软件的基本特性 LINDO是一种专门用于求解数学规划问题的软件包。由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。因此在数学、科研和工业界得到广泛应用。LINDO主要用于解线性规划、非线性规划、二次规划和整数规划等问题。也可以用于一些非线性和线性方程组的求解以及代数方程求根等。LINDO中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。一般用LINDO(Linear Interactive and Discrete Optimizer)解决线性规划(LP—Linear Programming)、整数规划(IP—Integer Programming)问题。它的最新版本——LINDO6.1版可求解最多含有4000个约束、8000个变量、800个整型变量的问题。 二、LINDO使用的一般说明 (一)软件的基本指令 点击进入LINDO 操作界面后,系统在屏幕的下方打开一个编辑窗口,其默认标题是”untitled”。屏幕的上方有【File】、【Edit】、【Solve】、【Reports】、【Window】、【Help】六个菜单,除【Solve】和【Reports】菜单外,其他功能与一般Windows 菜单大致相同。而【Solve】和【Reports】菜单的功能很丰富,这里只对其最简单常用的命令作一简单的解释。 1【Solve】菜单 〖Solve〗子菜单,用于求解在当前编辑窗口中的模型,该命令也可以改用快捷键Ctrl+S 或用快捷按钮来执行。 〖Compile Model〗子菜单,用于编译在当前编辑窗口中的模型,该命令也可以改用快捷键Ctrl+E 或用快捷按钮来执行。LINDO 求解一个模型时,总是要将其编译成LINDO 所能处理的程序而进行,这一般由LINDO 自动进行,但有时用户需要先将模型编译一下查对是否有错,则用到此命令。 〖Debug〗子菜单,如果当前模型有无界解或无可行解时,该命令可用来调试当前编辑窗口中的模型。该命令也可以改用快捷键Ctrl+D 来执行。 〖Pivot〗子菜单,对当前编辑窗口中的模型执行单纯形法的一次迭代,该命令也可以改用快捷键Ctrl+N 来执行。利用该命令,可以对模型一步步求解,以

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