lindo使用手册

lindo使用手册
lindo使用手册

LINDO软件包(学生版) 使用手册

目录

第一节简介与安装

第二节用LINDO求解线性规划(LP) 问题

第三节用LINDO求解整数规划(IP) 和二次规划(QP) 问题第四节GINO简介

第五节LINGO简介

1997年8月

第一节简介与安装

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软件读写)。

1·2安装过程:

LINDO软件包(学生版)在微机上DOS环境下通过安装后运行。安装盘为一片三英寸软盘,安装盘上有安装程序(install.exe) 和简要介绍文本(read.me),还带有多个压缩文件和一个解压缩程序(lha.exe).

安装时,将安装盘直接插入软驱,然后运行该软盘上的安装程序,即在该软驱的提示符(如A:> 或B:>)下键入“install”。按“回车”(ENTER键)后,只需遵照屏幕上的提示即可完成整个安装过程:

(1)用户首先必须选择所需安装的内容:用户可以任意选择所需安装的内容(从1·1节所介绍的五种组件中任意选取)。如果想安装五种组件中的某个组件,就在它前面键入“Y”;否则键入“N”,然后“回车”。如此反复,完成后屏幕将提示您确认您的选择。

(2)用户必须选择所需安装到的目的地(一般是硬盘上的某个目录)。屏幕将提示缺省的目录,您可以任意修改,如此反复,完成后屏幕将提示您确认您的选择。

(3)确认您的选择之后,安装程序就会自动完成全部后续安装过程。安装过程结束后,您就可以进入安装好的目录,运行相应的优化软件了。

第二节用LINDO求解线性规划(LP)问题

2.1初试LINDO

LINDO 的求解机制:LINDO 的求解过程采用单纯形法,一般是首先寻求一个可行解, 在有可行解情况下再寻求最优解. 用LINDO 求解一个LP问题会得到如下的几种结果: 不可行(No feasible solution) 或可行(Feasible)

可行时又可分为: 有最优解(Optimal Solution)和解无界(Unbounded Solution)两种情况. 由于在实际问题中, 不太可能出现最大利润无上限的情形, 所以使用者应检查是否少了一个约束或有其它印刷错误.

在LINDO子目录下执行LINDO.EXE文件即可进入LINDO工作环境,其屏幕显示如下:

LINDO/PC 5.02 (4 MAR 92)

STUDENT VERSION. FOR EDUCATIONAL USE ONLY.

SINGLE USER LICENSE FOR EDUCATIONAL USE ONLY

DISTRIBUTED WITH TEXTBOOKS BY WADSWORTH PUBLISHING

:

“:”为LINDO 提示符,在其之后, 使用者即可用具体的命令来输入并求解优化问题。让我们来解如下LP 问题:

Max z x y s t x y x y x y =++≤+≤≥23431035120

..

,

由于LINDO 中已假设所有的变量都是非负的, 所以非负约束可不必再输入到计算机中;LINDO 也不区分变量中的大小写字符(实际上任何小写字符将被转换为大写字符);约束条件中的“<=” 及“>=”可用“<” 及“>”代替。上面问题用键盘输入如下:

: MAX 2x + 3Y ? ST

? 4X + 3Y < 10 ? 3x + 5Y < 12 ? END :

LINDO 中一般称上面这种问题实例(INSTANCE )为模型(MODEL )。以后涉及该模型时,目标函数为第一行,两个约束条件分别为第二、三行。直接键入运行(GO )命令就可得到解答, 屏幕显示如下:

:GO

LP OPTIMUM FOUND AT STEP 2

OBJECTIVE FUNCTION VALUE

1) 7.4545450

VARIABLE VALUE REDUCED COST X 1.272727 .000000 Y 1.636364 .000000

ROW SLACK OR SURPLUS DUAL PRICES 2) .000000 .090909 3) .000000 .545455

NO. ITERATIONS= 2

DO RANGE(SENSITIVITY) ANALYSIS? ? N :

计算结果表明:

“LP OPTIMUM FOUND AT STEP2”表示单纯形法在两次迭代(旋转)后得到最优解。 “OBJECTIVE FUNCTION VALUE 1) 7.4545450 ”表示最优目标值为7.4545450. “VALUE ”给出最优解中各变量(VARIABLE )的值: X =1.272727, Y =1.636364.

“REDUCED COST ” 给出最优单纯形表中第0行中变量的系数 ( max 型问题). 其中基变量的reduced cost 值应为0,对于非基变量, 相应的 reduced cost 值表示当该非基变量增加一个单位时目标函数减少的量。本例中此值均为0。

“SLACK OR SURPLUS ” 给出松驰变量的值: 第2、3行松驰变量均为0, 说明对于最优解来讲,两个约束(第2、3行)均取等号。

“DUAL PRICES ” 给出对偶价格的值: 第2、3行对偶价格分别为 .090909,.545455。 “NO. ITERATIONS= 2” 表示用单纯形法进行了两次迭代(旋转)。

一个问题解答之后, LINDO 会询问是否需要做灵敏性分析(DO RANGE (SENSITIVITY) ANALYSIS? ) 如果你不需要,你应回答“N ”(NO ),回到提示符“:”之下.

如果想重新看到刚才的模型,可键入 LOOK 命令, LINDO 会询问具体的行号. 典型的应答可以是 3, 或1-2, 或ALL, 而结果, 相应地会显示出第 3行, 第1-2 行, 或所有问题行.

: LOOK ROW:

3

3) 3 X + 5 Y <= 12 : 或

: LOOK all

MAX 2x + 3Y SUBJECT TO

2) 4 X + 3 Y <= 10 3) 3 X + 5 Y <= 12 END :

如果想修改问题,可键入 ALTER 命令, LINDO 会询问行号, 变量名, 及新的系数. 例如:如果要将上面问题中约束条件4310x y +≤改为6310x y +≤,再全部看一下,并求解新问题,那么键入ALTER 命令后相应的应答为 2,X,和6, 以下是演示过程:

:ALTER

ROW:

2

VAR:

X

NEW COEFFICIENT:

6

:LOOK ALL

MAX 2 X + 3 Y

SUBJECT TO

2) 6 X + 3 Y <= 10

3) 3 X + 5 Y <= 12

END

:go

LP OPTIMUM FOUND AT STEP 0

OBJECTIVE FUNCTION VALUE

1) 7.3333330

VARIABLE VALUE REDUCED COST

X .666667 .000000

Y 2.000000 .000000

ROW SLACK OR SURPLUS DUAL PRICES

2) .000000 .047619

3) .000000 .571429

NO. ITERATIONS= 0

DO RANGE(SENSITIVITY) ANALYSIS?

? N

: QUIT

最后键入退出(QUIT)命令, 即可退出LINDO工作环境。

注:输入、查看和修改一个LP模型更方便的方法是采用全屏幕编辑器。在“:”提示符下键入编辑(EDIT)命令可以进入全屏幕编辑器,可以和其他文本编辑器一样方便使用。

2·2 求解LP问题的一般步骤及例子

步骤:

1)首先是输入一个LP问题。为了检查有无错误,可用LOOK命令来显示问题式中的一行,几行或全部。

例如:LOOK 3 ---》屏幕显示第3行

LOOK 1-3 ---》显示第1-3行

LOOK ALL ---》显示整个模型

2)修正模型。

如果需要对问题中某变量系数进行修正,可用ALTER命令。此时,在LINDO的提示下需输入相应的变量所在的行号,变量名,及新的系数值。

此外下面两种情况也可用ALTER命令:

改动约束条件的右端顶,可以将RHS(即right-hand side)做为变量名。

改变约束条件中的不等号方向(如< 或>),可以将DIR做为变量名。

修改问题还可用EXT命令(增加新的约束行), DEL命令(去掉一行), 和APPC命令(增加一个新的变量),也可用EDIT编辑器。

3)存储模型

如果输入的问题模型已经不再需要改动,可用SAVE命令将它存入文件中。(此时LINDO 会提示你输入一个文件名。)日后如需用到该问题可用RETR命令提取。

4)键入GO命令可得到LP问题的最优解。如果想将计算结果直接输出到某文件中,可在GO命令前先使用DIVERT命令,LINDO会提示你键入该输出文件的文件名,此后键入GO命令,屏幕上只会显示最优的目标函数值,其它结果都将存入输出文件。GO命令执行后,LINDO 会问你是否做敏感性分析,可看需要键入“Y”(YES)或“N”(NO). 如果没什么错误,求解就结束了。可键入QUIT退出。

LINDO 中有下面三种命令可帮助使用者对LINDO的命令有更多的了解:

HELP: 若HELP后面跟有具体命令, 则解释该命令. 若单只一个HELP, 将会给出一般性的信息.

CATEGORIES (可简写为CAT): 只列出所有命令的类型目录, 随后可允许使用者有选择地列出某个具体类型中的所有命令.

COMMANDS ( 简写为COM) COM: 按类型列出所有有效的命令, 例如输入(INPUT)型命令, 输出(OUTPUT)型命令, 等等.

下面即是一个具体应用的例子: (可参照上述使用步骤)

首先输入问题: (或用命令RETR读取LINDO目录下的例子文件DAKOTA)

MAX 60 DESKS + 30 TABLES + 20 CHAIRS

SUBJECT TO

2) 8 DESKS + 6 TABLES + CHAIRS <= 48

3) 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 20

4) 2 DESKS + 1.5 TABLES + 0.5 CHAIRS <= 8

5) TABLES <= 5

END

问题求解

:GO

LP OPTIMUM FOUND AT STEP 2

OBJECTIVE FUNCTION VALUE

1) 280.00000

VARIABLE VALUE REDUCED COST

DESKS 2.000000 .000000

TABLES .000000 5.000000

CHAIRS 8.000000 .000000

ROW SLACK OR SURPLUS DUAL PRICES

2) 24.000000 .000000

3) .000000 10.000000

4) .000000 10.000000

5) 5.000000 .000000

NO. ITERATIONS= 2

DO RANGE(SENSITIVITY) ANALYSIS?

?

随后键入"Y" 表示同意做敏感性分析:

RANGES IN WHICH THE BASIS IS UNCHANGED:

OBJ COEFFICIENT RANGES

VARIABLE CURRENT ALLOWABLE ALLOWABLE

COEF INCREASE DECREASE DESKS 60.000000 20.000000 4.000000

TABLES 30.000000 5.000000 INFINITY

CHAIRS 20.000000 2.500000 5.000000

RIGHT HAND SIDE RANGES

ROW CURRENT ALLOWABLE ALLOWABLE

RHS INCREASE DECREASE

2 48.000000 INFINITY 24.000000

3 20.000000 4.000000 4.000000

4 8.000000 2.000000 1.333333

5 5.000000 INFINITY 5.000000

2·3计算结果显示及敏感性分析

仍以上面的问题DAKOTA为例,下面给出其结果的一般注释:

“LP OPTIMUM FOUND AT STEP2”表示LINDO在(用单纯形法)两次迭代或旋转后得到最优解。

“OBJECTIVE FUNCTION VALUE 280.000000“表示最优目标值为280.

“VALUE”给出最优解中各变量的值。例. Dakota 问题中需造2个(书桌)desks, 0个(桌子)tables, 和8个(椅子)chairs.

“SLACK OR SURPLUS”给出松驰变量的值。上例中:

s1= 第2行松驰变量=24

s2= 第3行松驰变量=0

s3= 第4行松驰变量=0

s4= 第5行松驰变量=5

“REDUCED COST”出最优单纯形表中第0行中变量的系数( max型问题). 其中基变量的reduced cost值应为0,对于非基变量Xj, 相应的reduced cost值表示当Xj 增加一个单位时目标函数减少的量。

另外,当你执行TABLEAU命令后,LINDO会显示单纯形表。在下表中我们可看到,基向量为BV={s1, Chairs, DESKS, s4},注意,在此例中,SLK5对应的是s4. ART是人工变量(artificial variable)。ART就是相应的目标值z; 这样z+ 5TABLES +10s2+10s3=280。

:TABLEAU

THE TABLEAU

ROW (BASIS) DESKS TABLES CHAIRS SLK 2 SLK 3

1 ART .000 5.000 .000 .000 10.000

2 SLK 2 .000 -2.000 .000 1.000 2.000

3 CHAIRS .000 -2.000 1.000 .000 2.000

4 DESKS 1.000 1.250 .000 .000 -.500

5 SLK 5 .000 1.000 .000 .000 .000

ROW SLK 4 SLK 5

1 10.000 .000 280.000

2 -8.000 .000 24.000

3 -4.000 .000 8.000

4 1.500 .000 2.000

5 .000 1.000 5.000

敏感性分析

使用LINDO时, 结果输出中会提供敏感性分析. 这一信息一般包含于两个标题之下, 其一是REDUCED COSTS, 另一个是DUAL PRICES. 它们分别表示了当变量或约束条件有微小变动时, 目标函数的变化率.

在输出结果中对应于每个变量都有一个REDUCED COST, 若其数值为x, 表示对应的变量为零时, 若增加1 个单位, 目标函数将减少x 个单位.

输出结果中对应于每一个约束也都有一个DUAL PRICE. 若其数值为x, 表示对应约束中不等式右端项若减少1 个单位, 目标函数将增加x 个单位.

如果REDUCED COST或DUAL PRICE 的值为0, 表示微小扰动不影响目标函数.

有时, 通过分析DUAL PRICE, 也可对产生不可行问题的原因有所了解.

2·4 注意事项:

1).进入LINDO后, ":" 表示LINDO 已准备接受一个命令.

2). LINDO 中已假定所有变量非负. 变量名不能超过8个字符。

3)如要输入<= 或>= 型约束, 相应以< 或>代替即可.

4). LINDO不允许变量出现在一个约束条件的右端.

5)目标函数及各约束条件之间一定要有空格分开.

6)一般LINDO中不能接受括号( )和逗号"," ,例:400(X1+X2)需写为400X1+400X2;10,000需写为10000.

7). EDIT 命令调用一个全屏幕编辑器,可对当前模型进行全屏幕编辑. 编辑完成后用“Esc”键保存当前修改,退出全屏幕编辑器;此时若模型有错误,则要求改正错误后再退出。用“Ctrl + Break”键废弃当前修改,退出全屏幕编辑器。

8). LINDO 有DEL, EXT,及ALTER等其它编辑命令, 虽然全屏幕编辑器EDIT 使这些命令用处减少了, 但DEL 在大块地清除一个模型时是有用的, 而ALTER可允许做全局性的替换. 9). LOOK 命令会为你在屏幕上显示你的问题(EDIT 也可如此).

10).如想获得敏感性分析可用RANGE 命令.

11). SAVE 命令用来存储一个问题模型到文件中, RETR或TAKE 命令用来读取一个以文件存储的模型. TAKE命令还可用于解读一个以文本格式存储的LINGO 格式的问题模型.

12). DIVERT 会导致大多数信息被输送到文件中, 而只有少量信息被传送到屏幕. RVRT 用于结束DIVERET. 如果你divert 到一个名为PRN的文件, 结果将被直接传到打印机.

13)LINDO文件中常有注释间杂于各命令(COMMANDS)之中, 前面注有[!]符号. 例如: ! This is a comment.

14)LINDO将目标函数所在行作为第一行,从第二行起为约束条件。行号自动产生,也可以人为定义行号或行名。行名和变量名一样,不能超过8个字符。

15)数值均衡化及其它考虑

LINDO 不能将LP 中的矩阵进行数值均衡化. 为了避免数值问题, 使用者应自己对矩阵的行列进行均衡化. 一个原则是, 系数矩阵中非零元的绝对值不能大于100,000 或者小于.0001. 如果LINDO 觉得矩阵元素之间很不均衡, 将会给出警告.

16)量纲分析与一般错误的避免

当你将一个实际问题写成一个数学表达式时, 有可能式子中会带有某些错误. 这些错误主要有以下几类:

1.简单的印刷错误

2.表达式的原理错误

3.近似误差

第一类错误虽只是抄写一类问题造成的, 但当问题规模较大时, 要搜寻它们也是一个困难的问题; 第二类错误也往往是建模不当造成的.

如何避免这些错误?

对第一类错误, 主要任务在于如何找到它们. 在LINDO 中有一些可帮助寻找错误的功能. 其中之一就是PICTURE 命令, 它的功能是可以将表达式中的系数通过列表显示出来.

例:

MIN 5 A0 +6 A1 +2 A2 +4 B0 +3 B1 +7 B2 +2 C0 +9 C1 +8 C2

SUBJECT TO

2) A0 +A1 +A2<=8

3) B0 +B1 +B2<=9

4) A0 +A1 +A2<=6

5) A0 +B0 +CO =6

6) A1 +B1 +C1 =5

7) A2 +B2 +C2 =9

END

用PICTURE可得到

A A A

B B B

C C C C

0 1 2 0 1 2 0 1 2 O

1: 5 6 2 4 3 7 2 9 8 MIN

2: 1 1 1 <8

3: 1 1 1 <9

4: 1 1 1 <6

5: 1 1 1 =6

6: 1 1 1 =5

7: 1 1 1 =9

从上表可以发现, 最后一列中的1可能放错位置了. 其实原因只不过在表达式5) 行中C0与CO弄混了.

另外, 使用者有时从不合理的计算结果中也可发现第1 类的错误.

第二类的表达式错误有许多类. 这类常由新手造成的问题可通过量纲分析(dimensional analysis)暴露出来. 所谓量纲分析, 就是检查一下表达式中各量的单位是否一致.

2.5 LINDO命令

LINDO 中有下面三种命令可帮助使用者对LINDO的命令有更多的了解:

HELP CATEGORIES (可简写为CAT) COMMANDS ( 简写为COM)

功能如下:

HELP: 若HELP后面跟有具体命令, 则解释该命令. 若单只一个HELP, 将会给出一般性的信息.

CAT: 只列出所有命令的类型目录, 随后可允许使用者有选择地列出某个具体类型中的所有命令.

COM: 按类型列出所有有效的命令, 例如输入(INPUT)型命令, 输出(OUTPUT)型命令, 等等.

下面按类型列出所有LINDO命令及简单的英文注释如下(本文后附所有命令的详细的中文注释):

1. Information

HELP Gives help in various situations

COM Lists commands by category

LOCAL Give info specific to your local installation

CAT Lists categories of commands

2. Input

MAX Start natural input

MIN Start natural input

RETR Retrieve old problem from file

RMPS Retrieve an MPS format file

TAKE Take terminal input from a file

LEAVE Undo the previous TAKE

3. Display

LOOK Print (part of )problem in natural format

SOLUTION Print standard solution report

RANGE Print RANGE analysis report

PICTURE Print logical PICTURE of matrix SHOCOLUMN Display a column of the problem

TABLEAU Print current tableau

NONZEROES Print nonzero variables solution report BPICTURE Print logical PICTURE of basis

4. File output

SAVE Save current problem to file

DIVERT Divert output to file

RVRT Revert output to terminal

SMPS Save current problem in MPS format

5. Solution

GO Go to solve the problem

PIVOT Do the next simplex pivot

6. Problem editing

ALTER Alter some element of current problem

EXT Extend problem by adding constraints

DEL Delete a specified constraint

SUB Enter a simple upper bound for a var.

APPC Append a new column in the formulation

7. Integer programs

INT Identify integer variables

8. Conversational Parameters

WIDTH Set terminal width

TERSE Set conversational style to terse

VERBOSE Set conversational style to verbose (default) BATCH Tell LINDO that this is a batch run

9. User supplied subroutines

USER Call user written subroutine

10. Miscellaneous

INVERT Invert current basis to get more accurate answers STAT Print matrix summary statistics

BUG What to do if you find a bug

11. Quit

QUIT Quit

****************************************************************************** LINDO 常用命令注释表

****************************************************************************** LINDO 软件包可以用来求解以自然格式输入的线性规划, 整数规划及二次规划问题. 下面即是一个常见问题的有效输入格式:

MAX 2X + 3Y

ST

4X + 5Y < 9

7X + 6Y < 13

END

GO

进入LINDO后, 屏幕上出现":", 表示进入可接受命令的状态. 此时键入LINDO的有效命令即可执行.

需要时, 可键入"COMMANDS"即可得到LINDO的所有有效命令. 如需得到其中某个命令的帮助信息, 可键入"HELP name" , 其中"name"为该命令名. 例如,初学者通过键入"HELP MAX"可以了解怎样输入一个LP问题的数学表达式, .

如要结束一个临时的问题输入, 只需键入"END"或一个回车符, 即可回到命令状态模式":".欲知某命令的具体功效,执行该命令即可.

可求解的问题规模:

输入项最大规模

---------------------------------------------------------------------------

非零元4000

列201

行101

整型变量200

变量(行)名字符数8

****************************************************************************** LINDO 命令类型目录. 欲知某个具体命令的功能, 键入"HELP " + " 命令名".

1)信息类命令

HELP COM LOCAL CAT TIME

2)输入类命令

MAX MIN RETR RMPS TAKE LEAV RDBC FBR

3)演示类命令

PIC TABL LOOK NONZ SHOC SOLU RANGE BPIC CPRI RPRI

4)文件输出类命令

SAVE DIVE RVRT SMPS SDBC FBS

5)问题求解类命令

GO PIV

6)编辑类命令

ALT EXT DEL SUB APPC SLB FREE EDIT

7)退出命令

QUIT

8)与整数, 二次型, 及参数规划相关的命令

INT QCP PARA POSD TITAN BIP GIN IPTOL

9)交互式参数命令

WIDTH TERS VERB BAT PAGE PAUS

10)使用者应用程序

USER

11)其它

INV STAT BUG DEB SET TITL

******************************************************************************

LINDO命令中文注释如下(按分类序):

1)INFORMATION

HELP COM LOCAL CAT TIME

HELP命令:

键入"HELP"会显示出LINDO的一般信息. 通过键入"HELP command", LINDO可帮你了解某个具体的命令, 其中"command"是命令名.

COM MAND 命令:

给出LINDO 命令类型目录.

LOC AL 命令:

给出该程序的版本信息.

CAT EGORY 命令:

列出LINDO 命令类型,并可按提示有选择地给出某类型下的所有命令.

TIME命令:

显示执行LINDO后累计的CPU时间.

--------------------------------------------------------------------------------------------------------------------------------

2)INPUT

MAX MIN RETR RMPS TAKE LEAV RDBC FBR

MAX/MIN命令:

用于输入一个包含目标函数,约束条件在内的LP 模型.

输入程序如下: 输入"MAX" ( 或"MIN" ), 继之以自然格式的目标函数作为第一行;再输入"SUBJECT TO"(可简写为"ST"), 后面跟约束条件行. 最后, 输入"END" 回到命令状态模式. 以后只需给出"GO" 命令即可开始优化求解过程.

其中, 变量名可以由1—8个字母或数字型的字符构成, 且第一个字符必须是字母. 变量系数不能是指数型, 例如: .258E+29形式的系数是不允许的. 任一系数位数为6.5 DIGITS. 关键词("MAX","ST","END"...) 及各行之间必须用一个或多个空格分隔开. 空格可以出现在一行之中, 但不能出现在变量名中. 一个回车符等价于一个空格.

下面是同一问题的两种合法的输入方式:

1) MIN 2X+3Y SUBJECT TO -5X-2Z<=10

+10X - Y >5 END

2) MIN 2X + 3 Y

ST -5X-2Z

< 10

10X -Y>+5

END

另外, 任一约束可自由选择一个名称来代替行号, 例如::

DEMAND) 10X - Y > 5

RETR IEVE 命令:

执行该命令可直接从硬盘上获得一个问题模型. LINDO 会为你提示可供选择的具体的文件名或UNIT NUMBER. 能被RETRIEVE的模型文件必须是以前经"SAVE" 命令存入的.

RMPS 命令:

转化一个MPS 格式文件, 形成问题输入. 该MPS格式请见IBM MPSX 手册

TAKE 命令:

用该命令可执行由一系列LINDO命令组成的文件.该文件内容只能同终端输入一致, 例如: 文件中不能有行号. 且文件中最后一个命令应为"LEAVE".

LEAV E 命令:

该命令表示结束一个"TAKE" 文件的输入. 任一TAKE 文件中的最后一个命令必须是”LEAVE”.

RDBC命令:

给出当前模型的一个初始解. 该解是以前由"SDBC" 命令存入的.

FBR命令:

从一个由FBS命令建立的文件中得到一个(可行)基. 一个与该(可行)基匹配的数学问题表达式必须是内存中已有的.

--------------------------------------------------------------------------------------------------------------------------------

3)DISPLAY

PIC TABL LOOK NONZ SHOC SOLU RANGE BPIC

CPRI RPRI

PIC TURE 命令:

给出一个LP问题中系数矩阵的简图. 该命令有助于DEBUG一个模型. 下面是图中对应字母代表的数字大小:

Z .000000 -- .000001

Y .000001 -- .000009

X .000010 -- .000099

W .000100 -- .000999

V .001000 -- .009999

U .010000 -- .099999

T 100000 -- .999999

A 1.000001 -- 10.000000

B 10.000001 -- 100.000000

C 100.000001 -- 1000.000000

D 1000.000001 -- 10000.000000

E 10000.000001 -- 100000.000000

F 100000.000001 -- 1000000.000000

G > 1000000

TABL EAU 命令:

显示当前单纯形表中的系数.

LOOK命令:

可用"LOOK"查看当前问题模型的全部或部分. 键入"LOOK ALL"可看全部问题模型. 键入"LOOK row1,row2" 可看行row1至行row2.

模型中系数只能有5个小数位, 最多有9 位整数. 任何更大的数只能显示为*****. NONZ EROES 命令:

显示一个小型的解报告, 其中只有非零的变量及相应的行. 注意: "NONZ"命令并不能求解问题, 所以需首先执行"GO" 命令, 且"NONZ"只有在设置了"TERSE"交互型模式后才能显示其作用.

SHOC OLUMN 命令:

键入"SHOC variable-name"可显示出变量variable-name的系数列.

SOLU TION 命令:

显示解的标准报告. 若要存到硬盘上, 请见"DIVE RT" 命令. 若需要更简明的解报告,请见"NONZ", "CPRI"及"RPRI" 命令.

RANGE命令:

显示关于RHS(右端项)及OBJ(目标函数)的范围报告.

BPIC TURE 命令:

按上一次转置/三角化的行序显示当前(可行)基的逻辑图.

--------------------------------------------------------------------------------------------------------------------------------

4) OUTPUT

SAVE DIVE RVRT SMPS SDBC FBS

CPRI/RPRI命令:

可有选择地显示列(用CPRI)或行(用RPRI)的有关信息. CPRI的命令格式如下: CPRI print-list : conditional-expression

例如, 执行

CPRI N P : N = "M%%X" .AND. D > 0

将显示满足一定条件的列的名称及原始值(PRIMAL VALUE), 其条件为:列名的第一个字符= M, 第四个字符=X, 且有一对偶(DUAL ACTIVITY)大于零.

如果"print-list"一项被省略了, 将只显示匹配的数目. 下面是print-list 及conditional-expression 中有关列/行特征的常用符号及意义:

N = NAME(名称)

P = PRIMAL VALUE (相当于行的松驰量)

D = DUAL VALU

E (相当于列的REDUCED COST )

R = RIM ( OBJ(目标函数), 列系数; 行的RHS(右端项) )

U = SIMPLE UPPER BOUND(上界), L = SIMPLE LOWER BOUND(下界)

T = 键("C", "I", or "F"; "<", "=", OR ">")

Z = 一列或一行中的非零元.

% =名称(N)中的不确定字符

其它一些有用的符号有:

算术运算符逻辑运算符关系运算符顺序运算符

+ - / * ^ .AND. > < = # ( )

LOG( ) EXP( ) .OR.

ABS( ) .NOT.

SAVE 命令:

将当前的问题模型用压缩的LINDO 格式存储到一个文件中. 该问题模型可由"RETR"命令重新提取.

DIVE RT 命令:

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.360docs.net/doc/c116301111.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 来执行。利用该命令,可以对模型一步步求解,以

相关文档
最新文档