LINDO软件求线性规划、整数规划和0-1规划

LINDO软件求线性规划、整数规划和0-1规划
LINDO软件求线性规划、整数规划和0-1规划

LINDO软件简介/求解线性规划问题

LINDO是一种专门用于求解数学规划问题的软件包。由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。因此在数学、科研和工业界得到广泛应用。LINDO/GO主要用于解线性规划、非线性规划、二次规划和整数规划等问题。也可以用于一些非线性和线性方程组的求解以及代数方程求根等。LINDO/GO中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。

一般用LINDO(Linear Interactive and Discrete Optimizer)解决线性规划(LP—Linear Programming)。整数规划(IP—Integer Programming)问题。其中LINDO 6 .1 学生版至多可求解多达300个变量和150个约束的规划问题。其正式版(标准版)则可求解的变量和约束在1量级以上。

LINGO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP—QUARATIC PROGRAMING)其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦在10^4量级以上。虽然LINDO和LINGO 不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。

要学好用这两个软件最好的办法就是学习他们自带的HELP文件。

下面拟举数例以说明这两个软件的最基本用法。(例子均选自张莹《运筹学基础》)

例1.(选自《运筹学基础》P54.汽油混合问题,线性规划问题)

一种汽油的特性可用两个指标描述:其点火性用“辛烷数”描述,其挥发性用“蒸汽压力”描述。某炼油厂有四种标准汽油,设其标号分别为1,2,3,4,其特性及库存量列于下表1中,将上述标准汽油适量混合,可得两种飞机汽油,某标号为1,2,这两种飞机汽油的性能指标及产量需求列于表2中。

问应如何根据库存情况适量混合各种标准汽油,使既满足飞机汽油的性能指标,而产量又为最高。

表1

(1 g/cm^2=98Pa)

表2

建模过程略(详见《运筹学基础》P54—55)目标函数:max z=x1+x2+x3+x4

约束条件:x5+x6+x7+x8>=250000

x1+x5<=380000

x2+x6<=265200

x3+x7<=408100

x4+x8<=130100

2.85x1-1.42x2+4.27x3-18.49x4>=0

2.85x5-1.42x6+4.27x7-18.49x8>=0

16.5x1+2.0x2-4.0x3+17x4>=0

7.5x5-7.0x6-13.0x7+8.0x8>=0

xj>=0(j=1,2 (8)

下面我们就用LINDO来解这一优化问题。

输入语句:

max(不区分大小写) x1+x2+x3+x4

ST(大写或写subject to)

x5+x6+x7+x8>=250000

x1+x5<=380000

x2+x6<=265200

x3+x7<=408100

x4+x8<=130100

2.85x1-1.42x2+4.27x3-18.49x4>=0

2.85x5-1.42x6+4.27x7-18.49x8>=0

16.5x1+2.0x2-4.0x3+17x4>=0

7.5x5-7.0x6-13.0x7+8.0x8>=0

end

然后再按运算符键即可得结果。

LINDO是规定Xj非负的,我们可发现输入方式与我们的数学书写的形式基本一致,运算后,计算机会问您是否需要灵敏度分析,我们选择“是”,结果如下:

下面给出其结果的一般解释:

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

“OBJECTIVE FUNCTION VALUE 1)933400.0”表示最优目标值为933400。

“VALUE”给出最优解中各变量的值。

“SLACK OR SURPLUS”给出松弛变量的值。上例中SLK 2= 第二行松弛变量=0(模型第一行表示目标函数,所以第二行对应第一个约束)

“REDUCE COST”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时,目标函数的变化率,其中基变量的reduce cost 值应为0,对于非基变量Xj相应的reduce cost值表示Xj增加一个单位(此时假定其他非基变量保持不变)时目标函数减小的量(max 型问题)。上例中:X1 对应的 reduce cost 值为0,表示当X1=1 时,目标函数值不变。

“DUAL PRICE”(对偶价格)列出最优单纯形表中判别数所在行的松弛变量的系数,表示当对应约束有微小变动时,目标函数的变化率,输出结果中对应每一个约束有一个对偶价格。若其数值为X,表示对应约束中不等式右端项若增加一个单位,目标函数将增加X个单位(max 型问题)。上例中:第二行对应的对偶价格值应为-1表示当约束2)X5 + X6 + X7 + X8>250000变为2)X5 + X6 + X7 + X8>250001时,

目标函数值=933400-1=933399

当REDUCE COST 或DUAL PRICE 的值为0。表示当微小扰动不影响目标函数。有时,通过分析DUAL PRICE,也可对产生不可行问题的原因有所了解。

灵敏度分析:如果做敏感性分析,则系统报告当目标函数的费用系数和约束右端项在什么范围变化(此时假定其他系数保持不变)时,最优基保持不变。报告中INFINITY表示正无穷,如上例:目标函数中X1的变量系数为1,当它在[1-1.154137,1-0]=

[-0.154137,1] 变化时,最优基保持不变。

第一个约束右端项为250000,当它在[250000-234752.984375,250000+186222.0625]

=[15247.015625,436222.0625] 范围变化时,最优基保持不变。

当您要判断表达式输入是否有错误时,也可以使用菜单“Reports”的“Picture”选项。

若想获得灵敏度分析,可用“Reports”的“Rang”选项。

若需显示单纯形表,可执行“Reports”的“Tab lean”选项。

注意事项:

1)目标函数与各约束条件之间一定要有“Subject to (ST) ”分开。

2)变量名不能超过8个字符。

3)变量与其系数间可以有空格,但不能有任何运算符号(如乘号“*”等)。

4)要输入<=或>=约束,相应以<或>代替即可。

5)一般LINDO中不能接受括号“()”和逗号“,”,例:400(X1+X2) 需写成400X1+400X2;10,000需写成10000。

6)表达式应当已经过简化。不能出现 2X1+3X2-4X1,而应写成-2X1+3X2。

LINDO 常用命令注释表

(6.1版是面对用户的窗口,只需在窗口菜单上找到相应的操作菜单后单击即可,当然,后面的命令注释是有助于了解常用操作的命令菜单的。)

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)文件输出类命令

SA VE 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".

LEA V E 命令:

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

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

SA VE 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 V ALUE), 其条件为:列名的第一个字符= M, 第四个字符=X, 且有一对偶(DUAL ACTIVITY)大于零.

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

N = NAME(名称)

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

D = DUAL V ALU

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 命令:

要求你提供一个文件名, 随后所有的结果输出( 如解集报告等), 将转至该文件中, 直至你给出一个RVRT (REVERT) 命令为止.

RVRT命令:

重新使以后的所有结果输出都回到终端. 该命令的作用与"DIVE RT" 命令相反.

SMPS命令:

将当前的问题模型用MPS 格式存储到文件中. 细节参看IBM MPSX手册.

SDBC命令:

用DATABASE 格式存储一列. 变量名称, 大小, REDUCED COST, 上界SUB 和下界SLB都以(A8,2G15.8,A1,2G15.8) 格式存储.

FBS命令:

将当前的(可行)基存入一个文件. 若重新提取, 可参见FBR命令.

5)SOLUTION

GO PIV

GO命令:

求解当前的问题模型. 该模型在求解过程中不会被改变. 若在GO之后有一正整数, 表示用单纯形法枢变(PIVOT)的次数.

PIV OT 命令:

演示单纯形方法的每一步(PIVOT STEP). 如果键入"PIV OT"+变量名, 则该变量会被输入到解中, 同时会输出该变量所在的行号.

6)PROBLEM EDITING

ALT EXT DEL SUB APPC SLB FREE EDIT

ALT ER 命令:

用"ALTER"可编辑当前的问题模型. 使用格式为: "ALTER row-id var-id". "row-id" 是需要改动的行的行号,"var-id"是需要改动的变量系数的变量名. 随后, LINDO会提示你输入一个新的值.如果想改动RHS(右端项), DIRECTION(不等号方向) 或某个行的名称,"var-id"一项可用"RHS", "DIR", 或"NAME".

注:

- 对目标函数而言, 有效的DIRECTIONS有"MAX" 或

"MIN"; 对所有其它行可用"<", "=",或"<".

- 请用"DELETE"命令, 而勿用"ALTER"来消去一行.

EXT END 命令:

可为一个以前定义的问题模型增添约束行. 输入新的行, 不要再键入"MAX", "MIN"或"SUBJECT TO"这样的关键词. 新的行将会被附在原问题模型的最后. 键入"END"以结束.

DEL ETE 命令:

键入"DELETE row-id"可从当前的问题模型中消除行"row-id" . 也可键入"DELETE row1 row2" 消去行row1至行row2. "DELETE ALL" 可用来清除当前的整个问题模型.

SUB命令:

键入"SUB var-id bound"可以输入或改变一个变量的上界, 其中"var-id"是变量名, 而"bound"是作为上界的具体数值. 对大问题而言, SUB用于表示象X < 10这样的约束是比较有效的.

APP END C OLUMN 命令:

键入"APPC var-id" 可为问题模型添加以"var-id"命名的新的一列. 随后是关于该对应变量出现的行/系数值. 每行有一对行/系数值; 行和系数值要用一个空格分开. 输入A0作为行名可结束. 若以"RHS"为列名, 将使输入成为新的RHS(右端项).

SLB命令:

键入"SLB var-id bound"可以输入或改变一个变量的下界, 其中"var-id"是变量名, 而"bound"是作为下界的具体数值. 对大问题而言, SUB用于表示象X > 10这样的约束是比较有效的.

FREE命令:

键入: FREE X可使当前数学表达式中的X 成为一个自由变量, 既无上界亦无下界.

EDIT命令:

LINDO转为全屏幕编辑状态. 光标可游动于问题模型中. 其它有用的编辑设置包括:

光标移动到正文开始处

光标移动到正文结尾处

/ 翻页

Cntrl-S 光标移动到当前行的开始

Cntrl-E 光标移动到当前行的结尾

Cntrl-right arrow 光标移动到当前词的结尾

Cntrl-left arrow 光标移动到当前词的开始

用EDIT命令编辑的问题模型不能超过30998 个字符. 问题若更大可用ALTER, DEL 和EXTEND 命令.

7)QUIT

QUIT

QUIT命令:

"QUIT"用于退出LINDO. 任何未存储下来的问题模型会被丢失!

8)INTEGER, QUADRATIC, AND PARAMETRIC PROGRAMS

INT QCP PARA POSD TITAN BIP GIN IPTOL

INT EGER 命令:

INTEGER 命令可将问题模型中的变量标为0/1型. 第一种格式为"INTEGER n" , 其中n 是整型变量的个数. LINDO 要求整型变量应放在问题模型的最前面. 第二种格式为"INTEGER var-id" , 其中"var-id"是变量名.

执行GO 命令后, 将会显示一系列渐优的整数规划解.

QCP命令:

"QCP" 用于求解二次规划问题. 例如: 对于

MIN 3X*X + Y*Y - X*Y + .4Y

ST

1.2X + .9Y > 1.1

X + Y= 1

Y <.7

该问题通过在实际约束前增加有关变量的一阶条件转化为线性(互补)型. 这需要我们为每一个实际约束增加一个对偶变量. 要使用QCP, 第一行(目标函数)只用于给出相应变量的顺序. 对上面的例子,我们将用到RT, ONE 和UL. 问题输入如下:

MIN X+Y+RT+ONE+UL

ST

6X - Y - 1.2RT + ONE > 0.

- X + 2Y - .9RT + ONE + UL > -.4

1.2X + .9Y > 1.1

X + Y = 1

Y < .7

END

QCP

ROW NO. OF FIRST REAL CONSTRAINT(第一个实际约束的行号为):

4

GO

PAR A 命令:

键入"PARA row-id new-rhs" 可对行"row-id"的RHS(右端项) 进行参数分析. "PARA" 会将该行RHS(右端项)的当前值改为新值"new-rhs", 同时演示出在由此方式改变任一(可行)基产生的最优目标值.

在此之前, 该问题需被优化过.

POSD命令:

检验一个"QCP" 问题中二次型对应的子约束矩阵是否正定.

TITAN命令:

该命令可收紧一个LP/IP 问题模型(加强条件). 第一, 它将收紧上界, 例如: 有

2X + Y < 12

-X + 2Y < 3

执行后可将上界SUBS减为:

SUB X 6

SUB Y 4.5

第二, 会收紧整型变量的系数. 如另外有:

30W - 3X + 2Y > 3

, 其中W 是0/1型, 那么收紧为:

21W - 3X + 2Y > 3.

BIP命令:

键入"BIP bound-val" 会标出"bound-val"在最坏的IP解的一个界. 然后LINDO会剪除在B&B (分枝定界)

树中的值较差的任一分枝. 例如, 任何已知的可行解可看作一个"BIP ".

GIN命令:

GIN命令可将问题模型中的变量标为0/1型. 第一种格式为"GIN n" , 其中n 是整型变量的个数. LINDO 要求整型变量应放在问题模型的最前面. 第二种格式为"GIN var-id" , 其中"var-id"是变量名.

执行GO 命令后, 将会显示一系列渐优的IP解.

IPTOL命令:

格式为: IPTOL F, 其中 F 是一个非负分数. 当搜索另一个IP解时, 只考虑比目前最好的解至少优F的解.

9)CONVERSATIONAL PARAMETERS

WIDTH TERS VERB BAT PAGE PAUS

WIDTH命令:

键入"WIDTH n"可告知LINDO 你的终端屏幕宽为n 字符. 例如:, "WIDTH 132" 表示你的终端使用LINE PRINTER WIDTH PAPER.

TERS E 命令:

改变对话方式为TERSE(简明)型, 例如, 它将不会自动地显示LP问题的最优解报告. 使用者可用命令"NONZ", "CPRI", 或"RPRI" 浏览解. 命令"VERBOSE"可消除"TERSE".

VERB OSE 命令:

令对话方式回到"VERBOSE"状态(也即缺省状态) .

BAT CH 命令:

设置对话方式到BATCH(分批)状态模式. 分批运行任务,可使输出更具可读性,并可在第一个主要错误处停止运行.

PAGE 命令:

设置帧幅. 例如, PAGE 24 将使每屏幕显示24行出现一次暂停. 触击一次CR将显示下一幅. PAGE 0 表示不设限制,这对于HARDCOPY TERMINALS是适宜的.

PAUS E 命令:

用于一个TAKE 文件, 它将导致一个暂停直至键入下一个回车. 任何PAUSE后的内容(在同一行)被显示到终端上.

10)USER SUPPLIED ROUTINES

USER

USER命令:

执行一个应用子程序可调用USER(IN) , 其中IN 是当前的输入UNIT. LINDO中可被调用的子程序可用于:

1) 构造一个问题模型,

2) 修改现存的模型,

3) 求解一个问题模型,

4) 重获解的有关信息.

详情请看USERS MANUAL.

11)MISCELLANEOUS

INV STAT BUG DEB SET TITL

INV ERT 命令:

INVERTS(转)当前的(可行)基. 将使结果更趋精确.

STAT S 命令:

给出当前的问题模型统计分析, 例如, 行数和列数.

BUG命令:

出错报告。

DEB UG 命令:

如因约束系数或右端项中的错误造成问题无可行解, DEBUG将标出一个包含错误的约束条件的最小集合, 但不能用于二次规划.

SET命令:

允许你重新设置LINDO的内部参数. 格式为:

SET PARAM-ID NEW-VALUE.

可行的参数有:

PARAM-ID PURPOSE

1 最后的约束容限

2 初始约束容限

3 输入变量的REDUCED COST 容限

4 固定IP 变量的阈值

5 PIVOT SIZE 阈值

TITLE命令:

TITLE 'TEXT'

将'TEXT'与当前问题相连.

TITLE

演示当前的题目.

熟练掌握LINDO

要想学好LINDO, 首先要掌握LINDO中所有的命令--command. 一句话, 熟能生巧. 掌握了命令的功能及使用范围, 也不要太拘泥于LINDO或别人教你的方法, 要会举一反三, 综合使用, 才能用得巧而精. 这就象编程序一样, 同样的几条程序命令, 有的人只能生搬硬套, 而有的人却能发挥得淋漓尽致, 这中间的功夫不是光靠一招招向书本学能得来的了.

下面列出几个较为重要的命令:

第一类: TAKE(LEAV), DIVE, RVRT, BA T, PAUS;

第二类: FREE, SUB/SLB, GIN, TITAN

第一类命令可使你同时运行一系列的LINDO命令, 也可使运行结果更有可读性. 例: 可做内容为如下命令序列的文件TK1.HLP

BA T

! WE WILL DIVERT OUTPUT TO FILE "RESULT"

DIVE RESULT

! WE WILL RETRIEVE AN OLD PROBLEM PREVIOUSL Y SA VED IN FILE "DIET"

RETR DIET

! WE WILL SEE THE MODEL

LOOK ALL

! SOVLE THE MODEL

GO

! DO WE NEED SENSITIVE ANAL YSIS (y/n)?

N

! GIVE SOLUTION ?

SOLU

! WE WILL GIVE AN MESSAGE TO THE TERMINAL TO SHOW THE END OF THE SOLUTION

PAUS END OF THE SOLUTION, TYPE THE ENTER KEY, PLEASE!

! CLOSE FILE "RESULT", RETURN TO TERMINAL

RVRT

! RETURN TO PREVIOUS CONVERSATIONAL STYLE

BA T

! LEAVE

LEAV

然后TAKE TK1.HLP, 这会将一个问题DIET的目标函数, 约束条件及解答送至一文件RESULT中.

练习: 可试试去掉上面的BAT 命令, 会有什么样的结果呢? 上述命令序列文件中哪些在实际操作时是可以去掉

的呢?

第二类命令, 可使原问题有更灵活的变化. 如FREE X 可将原本约定下界为0 的变量X 的下界定为无穷小. (注: 若欲去掉已存在的FREE X, 可用命令SLB X 0 )

LINDO求整数规划(IP)

运行结果为:

LINDO求0-1规划(举例)

例1:MIN -2X1-X2+X3

ST

X1+3X2+X3<2

4X2+X3<5

X1+2X2-X3<2

X1+4X2-X3<4

END

INT 3

运行结果为:

例2:MAX 5X1+8X2 ST

X1+3X2<=6

5X1+9X2<=45

END

GIN 2

例3:MAX 20X1+10X2 ST

5X1+4X2<=24

2X1+5X2<=13

END

GIN 2

注释:

MATLAB求解线性规划含整数规划和01规划问题.pdf

MATLAB 求解线性规划(含整数规划和0-1规划)问题 线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约束的,变量范围为有理数的线性规划。如: max 712z x y =+ 9430045200s.t 310300,0 x y x y x y x y +≤??+≤??+≤??≥? 对于这类线性规划问题,数学理论已经较为完善,可以有多种方法求解此类问题。但写这篇文章的目的并不是为了介绍数学理论,我们这里主要讲解如果利用工具求解这一类线性规划问题。 最著名,同时也是最强大的数学最优化软件是LINGO/LINDO 软件包,它能够求解多种的数学规划问题,同时还提供了多种的分析能力。但LINGO 软件并不容易上手,同时,应用LINGO 的场合一般是大规模的线性规划问题,小小的线性规划完全可以不使用它。一个更受科研人员欢迎的数学软件是MATLAB ,它以功能强大而称著,并有数学软件中的“航空母舰”之称。我们这里就是要学习使用MATLAB 软件求解线性规划(含整数规划和0-1规划)问题。 为了使得不熟悉MATLAB 的人员也能够使用MATLAB 进行线性规划问题求解,本文将对MATALB 中使用到的函数和过程以及结果进行详细的分析,最后会对每一个问题都给出一个可以完全“套用”的MATLAB 程序。 我们首先从上面的线性规划问题开始,为了便于表达,将上面的式子写成矩阵形式: max 712z x y =+ 9430045200s.t 310300,0x y x y ???????? ? ??≤? ? ? ???? ? ???????≥? 于是约束就表达为了一个Ax b ≤不等式。 求解MATLAB 线性规划时,最常用的函数是linprog 函数,下面来介绍一下这个函数的使用。 打开MATLAB 帮助文档(PS:帮助文档的内容是最全的,只要你的英文过了专业8级),可以看到linprog 函数求解的是具有如下标准形式的线性规划:

整数线性规划理论

整数线性规划理论 §1 概论 1.1 定义 规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型整数线性规划。目前所流行的求解整数规划的方法,往 1.2 如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类: 1o 变量全限制为整数时,称纯(完全)整数规划。 2o 变量部分限制为整数的,称混合整数规划。 1.3 整数规划特点 (i ) 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况: ①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。 ②整数规划无可行解。 例1 原线性规划为 21min x x z += 0,0,5422121≥≥=+x x x x 其最优实数解为:4 5min ,4 5,021===z x x 。LINGO1.lg4 LINGO11.lg4 ③有可行解(当然就存在最优解),但最优解值变差。 例2 原线性规划为 21m i n x x z += 0,0,6422121≥≥=+x x x x 其最优实数解为:2 3min ,23,021===z x x 。 若限制整数得:2min ,1,121===z x x 。LINGO2.lg4 LINGO21.lg4 (ii ) 整数规划最优解不能按照实数最优解简单取整而获得。 1.4 求解方法分类: (i )分枝定界法—可求纯或混合整数线性规划。 (ii )割平面法—可求纯或混合整数线性规划。 (iii )隐枚举法—求解“0-1”整数规划: ①过滤隐枚举法; ②分枝隐枚举法。 (iv )匈牙利法—解决指派问题(“0-1”规划特殊情形)。 (v )蒙特卡洛法—求解各种类型规划。 下面将简要介绍常用的几种求解整数规划的方法。 §2 分枝定界法 对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行

整数线性规划

整数线性规划 【数学模型】 m in T x f x st. A x b ?≤ A eq x b eq ?= lb x ub ≤≤ i x 取值为整数 其中f , x , b , beq , lb 和ub 为向量,A 和Aeq 为矩阵。 【函数】 intprog 【说明】 在Matlab 中无求解整数线性规划的现成函数,利用Matlab 的线性规划函数linprog 来编写整数线性规划函数,输入与输出与linprog 类似,采用分枝定界法来实现。 Matlab 主程序intprog 如下: function [x,fval,status] = intprog(f,A,B,I,Aeq,Beq,lb,ub,e) %整数规划求解函数 intprog() % 其中 f 为目标函数向量 % A 和B 为不等式约束 Aeq 与Beq 为等式约束 % I 为整数约束 % lb 与ub 分别为变量下界与上界 % x 为最优解,fval 为最优值 % 控制输入参数 if nargin < 9, e = 0.00001; if nargin < 8, ub = []; if nargin < 7, lb = []; if nargin < 6, Beq = []; if nargin < 5, Aeq = []; if nargin < 4, I = [1:length(f)]; end , end , end , end , end , end %求解整数规划对应的线性规划,判断是否有解 options = optimset('display','off'); [x0,fval0,exitflag] = linprog(f,A,B,Aeq,Beq,lb,ub,[],options); if exitflag < 0 disp('没有合适整数解'); x = x0; fval = fval0; status = exitflag; return ; else %采用分支定界法求解

整数线性规划word版

第三章 整数线性规划 本章, 我们介绍三种解决整数线性规划问题的软件: 第一种: MATLAB 中的optimization toolbox 中的若干程序; 第二种: LINDO 软件; 第二种: LINGO 软件. 1. MATLAB 程序说明 程序名: intprogram, L01p_e, L01p_ie, transdetobi, biprogram intprogram 是利用分支定界法解决整数规划问题, 是全部的整数规划问题; L01p_e 是利用枚举法解决0-1规划问题, 变量要求全部为0或者1; L01p_ie 是利用隐枚举法解决0-1规划问题, 变量要求全部为0或者1; Transdetobi 是枚举法和隐枚举法中利用到的将十进制数转化为二进制数的函数; Biprogram 是MATLAB6.5以上版本中有的求解0-1规划的函数的程序. intprogram 执行实例1: 12 121212max 2010s.t.5424 2513 ,0, f x x x x x x x x =++≤+≤≥ 且为整数 在命令窗口的程序执行过程和结果如下: >> c=[-20,-10]; %将最大转化为最小; >> a=[5,4;2,5]; >> b=[24;13]; >> [x,f]=intprogram(c,a,b,[0;0],[inf;inf],[],0,0.0001) % c,a,b 之后[0;0] is the value of low bound;[inf;inf] is the value of up bound;[] is the initialization;0 is the number of the equation constraints; 0.0001 is the concise rate. x = 4.0000 1.0000 f = -90 intprogram 执行实例2: 书中例题3.3.1 在命令窗口的程序执行过程和结果如下: >> c=[-1,-1]; >> a=[-4,2;4,2;0,-2]; >> b=[-1;11;-1];

探讨线性规划整数最优解的调整

探讨线性规划整数最优解的调整 对于高中的二元一次不等式(组)与平面区域这个知识点是不难的,不过对于解题的规范性学生还是要加强的。在这里就和大家探讨必修五课本当中的一道关于线性规划要求整数解的问题。 例1:某工厂用A ,B 两种配件生产甲,乙两种产品,每生产一件甲产品使用4个A 配件耗时1h ,每生产一件乙产品使用4个B 配件耗时2h ,该厂每天最多可以从配件厂获得16个A 配件和12个B 配件,按每天工作8h 计算,该厂所有可能的日生产安排是什么?若生产一件甲产品获利2万元,生产一件乙产品获利3万元,问哪种生产安排利润最大? 分析:这是一道典型的线性规划的问题,首先可以设甲,乙两种产品分别为x,y 件,从而列出约束条件。在这道题目中,所设的是产品个数的问题,那就要注意x,y ∈N +。 解:设甲,乙两种产品分别为x,y 件,由题意可得: ???????????∈≥≥≤≤≤++ N y x,0y 0x 164y 164x 8 2y x 接着还要求解第二问,这就涉及到了目标函数,设利润为Z ,则Z=2x+3y 。 当目标函数刚好与可行域交于点M (4,2)时,能使获得的利润最大,Z max =14(万元) M(4,2)

此题中的点M 是刚好为整数点,而假设M 不是为整数点时,那又应该如何寻找其最优解?接下来再以必修五课本的一道为例题. 评析:对于此道类型的题目求出来的最优解恰好能符合条件,难度没那么大,但是有些题目对于最优解还要再进一步进行讨论。 例2:要将两种大小不同的钢板截成A ,B ,C 三种规格,每张钢板可同时截得三种规格的小钢板的块数如下表所示: 问题1:今需要A ,B ,C 三种规格的成品分别15,18,27,用数学关系式和图形表示上述要求。 问题2:各截这两种干板多少张可得所需A ,B ,C 三种规格成品,且使所用钢板张数最少? 分析:这种也是典型的线性规划的题目,问题1难度就是读懂题目,然后根据题意列出约束条件;而对于问题2即是求最优解,而此题的最优解也是要取整数,而这个整数最优解相对上一题就较难点。 解:设需截第一种钢板x 张,第二种钢板y 张,则 ?????????? ?∈≥≥≥+≥+≥++ N y x,0y 0x 27 3y x 182y x 15y 2x 则图形中的阴影部分的所有整数点就是可截的方法。接着还要求解问题 规格类型 钢板类型 A 规格 B 规格 C 规格 第一种钢板 2 1 1 第二种钢板 1 2 3

用“小范围搜索法”求“线性规划问题”的最优整数解

用“小范围搜索法”求“线性规划问题”的最优整数解 笔者对教科书中的全部7个线性规划的实际应用问题进行了研究和分类。其中1个问题(教科书第61页例3)的最优解不是整数解,最优解有且只有一个,最优解显然在边界折线的顶点处,此为第一类问题;有3个问题(教科书第64页练习第2题、第65页习题第3题,第66页研究课题与实习作业)的最优解为整数解,最优整数解有且只有一个,最优解整点显然在边界折线的顶点处,此为第二类问题;另有3个问题(教科书第63页例4、第65页习题第4题、第87页复习参考题七A组第16题)的最优解为整数解,最优整数解可能不止一个,最优解整点不在边界折线的顶点处,或虽在边界折线的顶点处但并不显然,此为第三类问题。第一、第二类问题的最优解可以通过解一个二元一次方程组直接得到,学生比较容易掌握。第三类问题的最优解不能通过解一个二元一次方程组直接得到,必须通过观察图形或计算检验去寻找,学生不容易掌握,学习困难比较大。 为了解决这类寻找最优整数解的困难,笔者采用“小范围搜索法”进行教学。该方法的优点在于,把在大范围同寻找最优整数解转化为在小范围内寻找最优整数解,而且在通过观察图形作出准确判断有困难的情况下,通过计算检验作出准确判断的工作量比较小。其步骤为(1)在边界折线顶点附近的小范围内搜索一个可行域内的年整点;(2)过该点作一条斜率为-(其中A,B分别为目标函数中变量x,y的系数)的直线,与可行域边界折线相交得到一个小范围的区域;(3)在这个小范围区域内继续搜索全部最优整数解。 用“小范围搜索法”成功解题的关键是分析,要把分析贯彻于解题的全过程,观察图形要分析,计算检验也要分析,通过分析充分发掘线性约束条件和线性目标函数的特殊性,使搜索范围缩到最小,计算的工作量减到最小。下面以教科书中的题目为例,说明“小范围搜索法”的运用。 例1教科书第65页习题题,题目略。 本题的线性约束条件 线性目标函数z=200x+150y,其中x,y分别为大房间与小房间的间数。作出可行域如图1。 (1)搜索一个可行域内邻近边界折线顶点的整点。 解方程组 得到点A(,),由于点A的坐标不是整数,故不是最优解。由于要使目标函数取最大值,因此要寻找可行域右上侧靠近边界或边界上的整点。与点A邻近的整点共有4个(2,8),(2,9),(3,8)与(3,9),显然点(2,8)是可行域内的整点,点(3,9)不是可行域内的整点。记点(a,b)处的目标函数的值为z(2,8),所以还应检验点(2,9)与(3,8)是否在可行域内。注意到目标函数z=200x+150y=150(x+y)+50x,而2+9=3+8,所以必有z (3,8)>z(2,9),所以应先检验点(3,8)是否在可行域内。观察与计算都表明该点在可行域内。记点(3,8)为B,B即为搜索到的可行域内邻近边界折线顶点的整点。 (2)作出可行域内的小范围搜索区域。 算出z(3,8)=1800,过B作直线200x+150y=18004x+3y=36.

线性规划中的最优整数解

线性规划中的最优整数解 线性规划中的最优解,就是在线性约束条件下使目标函数取得最大值或最小值的可行 解,而求最优整数解,是同学们的棘手问题,下面以例题的形式讲讲如何求最优解。 例. 某人承揽了一项业务:需做文字标牌6个,绘画标牌5个。现有两种规格的原料, 甲种规格每张32m ,可做文字标牌1个、绘画标牌2个;乙种规格每张22m ,可做文字标 牌2个、绘画标牌1个,求两种规格的原料各用多少张才能使总的用料面积最小?最小用料 面积是多少? 分析:将已知数据列成如下所示的表格: 解法一:设甲种规格的原料用x 张,乙种规格的原料用y 张,总的用料面积为z 2m ,则 z=3x+2y x+2y ≥6 2x+y ≥5 x ≥0 y ≥0 其可行域如图所示: 解方程组 x+2y=6 2x+y=5 得M 的坐标为47 (,)33

当直线z=3x+2y过点M 47 (,) 33 时z最小,此时 4726 32 333 z=?+?= 由题意可知,点M 47 (,) 33 不是最优解,因为此问题最优解(x,y)中x,y应都是非负 整数,所以目标函数z的最小值一定是大于26 3 的整数,且x,y都是非负整数。取z=9,得 3x+2y=9,其非负整数解是(1,3)和(3,0),但点(3,0)不在可行域内,舍去,所以 点(1,3)是最优解, min 9 z= 解法二:由解法一可知,点M 47 (,) 33 不是最优解,这时可求出可行域内左下侧靠近 边界的整点,依次为A(0,5),B(1,3),C(2,2),D(3,2),E(4,1),F(5,1),G(6,0),将这些点的坐标分别代入目标函数z=3x+2y,求出z的各对应值,经检验可知,在整点B(1,3)处z取得最小值9。 答:甲种规格的原料用1张,乙种规格的原料用3张时,总的用料面积最小,其最小用料面积为92 m。 对于线性规划中的最优整数解问题,当解方程组得到的解不是整数解时,可采用如下的方法: 1.调整优值法:先求“非整点最优解”及“最优值”,根据题意调整“最优值”,再求目标函数中的整数解,便可得出最优整数解。课本人教A版必修5第89页例6求最优整数解用的就是这种调整优值法。 2.代入验证法:在可行域内求出与“边界”(求得非整点最优解的两条直线)靠近的所有整点,代入目标函数,再进行比较就可得出最优整数解。

整数线性规划理论(优选.)

最新文件---------------- 仅供参考--------------------已改成-----------word 文本 --------------------- 方便更改 赠人玫瑰,手留余香。 整数线性规划理论 §1 概论 1.1 定义 规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目 前还没有一种方法能有效地求解一切整数规划。 1.2 整数规划的分类 如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类: 1o 变量全限制为整数时,称纯(完全)整数规划。 2o 变量部分限制为整数的,称混合整数规划。 1.3 整数规划特点 (i ) 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况: ①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。 ②整数规划无可行解。 例1 原线性规划为 21m in x x z +=

0,0,5422121≥≥=+x x x x 其最优实数解为:4 5min ,45 ,021===z x x 。LINGO1.lg4 LINGO11.lg4 ③有可行解(当然就存在最优解),但最优解值变差。 例2 原线性规划为 21m in x x z += 0,0,6422121≥≥=+x x x x 其最优实数解为:2 3min ,23 ,021===z x x 。 若限制整数得:2m in ,1,121===z x x 。LINGO2.lg4 LINGO21.lg4 (ii ) 整数规划最优解不能按照实数最优解简单取整而获得。 1.4 求解方法分类: (i )分枝定界法—可求纯或混合整数线性规划。 (ii )割平面法—可求纯或混合整数线性规划。 (iii )隐枚举法—求解“0-1”整数规划: ①过滤隐枚举法; ②分枝隐枚举法。 (iv )匈牙利法—解决指派问题(“0-1”规划特殊情形)。 (v )蒙特卡洛法—求解各种类型规划。 下面将简要介绍常用的几种求解整数规划的方法。 §2 分枝定界法 对有约束条件的最优化问题(其可行解为有限数)的所有可行

相关文档
最新文档