10 lindo软件应用

32
10 LINDO 软软软软 软软软软软软软 软软软软软软软软软软软软软软软 —— LINDO 软软软软软软软软软软软软软软软软软 软软软软软软软软 软软软软软 。, 软软软软软 LINDO 软软软软软软软软软软软软软软软软软软软软软软软软软软 软软软 软软软软软软软软软软软软软软软软软软软 ;, 软软软软软软软软软软软软 软软软软软软软软软软软软软软软软软软 软软软软软软软软软软软软软软 软软软软软软软软软软 软软软软 。,体, 软软软软软软软软软软软软软软软软软软软软软软软软软软软软软软软软软软 软软软软 软软软软软 软软软软软软软软软软软软软软软软软软软软 :一,。, 软软软软软软软软软软 软软软软软软软 软软软 软软软 软软软软软软软软软软软软软软软软软软软软软软软软软软软 软软软软软软 ,、、。, 软软软软软软软软软软软软 软软软软 软软软软 软软软软软软软软软软软软 软软软软软软软软软软软软 、、,,。 软软软软软 软软软软软软软软软软软软软软软软 软软 ,, ORS MATLAB WinQSB 软 软软软软软软 软软软软软 LINDO 软 LINGO 软软软软软软软软软软软软软软软软软软软软软软 软软软 软软软软软软软软软软软软软软软 。。, 软软软软软 软软软软软软软软软软软软软软软软 、。 软软软软软 LINDO 软软软 软软 软软软软软软软软 软软软软软软软软软软 一一。 LINDO 软软软

Upload: carolyn-england

Post on 31-Dec-2015

217 views

Category:

Documents


7 download

DESCRIPTION

10 LINDO软件应用. 教学目的与要求. 本章主要介绍运筹学的常用软件之一 —— LINDO 软件的基本操作方法和执行结果的解读。通过大量的图示,使学生由浅入深地掌握 LINDO 在解线性规划问题时如何将数学表达式转换为计算机表达式;同时,使学生掌握在得出结论报告后能够正确地解读并得到自己所需要的信息。由于本章主要的学习内容是软件的使用,所以在教学过程中应使用多媒体方式来组织教学过程,以使学生能够清晰地感受软件的整个操作过程。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 10 LINDO软件应用

10 LINDO 软件应用教学目的与要求

本章主要介绍运筹学的常用软件之一——LINDO 软件的基本操作方法和执行结果的解读。通过大量的图示,使学生由浅入深地掌握 LINDO 在解线性规划问题时如何将数学表达式转换为计算机表达式;同时,使学生掌握在得出结论报告后能够正确地解读并得到自己所需要的信息。由于本章主要的学习内容是软件的使用,所以在教学过程中应使用多媒体方式来组织教学过程,以使学生能够清晰地感受软件的整个操作过程。 运筹学解决问题的方式可以分为两个步骤:一是建模,二是求解。如果数学模型中的决策变量和约束条件不多,手工计算可以得出结果,但却非常单调、琐碎、易错。在生产和管理实际以及科学研究中提出的大量的运筹学问题,其决策变量和主约束条件可以多到十几个、几十个、几百个,这些问题就不是人力所及,只能借助计算机进行求解。 从目前来看,解决运筹学问题的专用软件有不少,比如 ORS 、 MATLAB 、 WinQSB 等,以及现在应用较为普遍的 LINDO 和 LINGO 。这些软件的使用大大提高了运筹问题的求解效率。因此,学生应该在学懂运筹学基本知识的基础上尽量、尽心使用软件来帮助求解各种问题。 下面我们对 LINDO 软件作一个一般性的应用介绍。更深的复杂应用请参阅 LINDO 的专业书籍。

Page 2: 10 LINDO软件应用

10 LINDO 软件应用

10.1 LINDO简介

10.2 整数规划问题的LINDO求解说明

Page 3: 10 LINDO软件应用

10.1 LINDO 简介

10.1.1 初识 LINDO

LINDO 是一种专门用于求解数学规划问题的软件。由 Linus Schrage 于 1986年开发, LINDO 是 Linear INteractive Discrete Optimizer 字母的缩写形式,由于 LINDO 程序执行速度很快,易于方便地输入、求解和分析优化问题, LINDO 在教学、科研和工业界得到广泛应用。 LINDO 主要用于解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于一些非线性和线性方程组的求解以及代数方程求根等。 LINDO 中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。 一般用 LINDO 解决线性规划( LP—Linear Programming )、整数规划( IP—Integer Programming )问题。其中 LINDO 6.1 学生版可求解多达 300 个变量和150 个约束的规划问题。其正式版(标准版)可求解的变量和约束在 104 数量级以上。 LINGO 则用于求解非线性规划( NLP—NON LINEAR PROGRAMMING )和二次规划( QP —QUARATIC PROGRAMING ) , 其中 LINGO 6.0 学生版可求解最多达 300 个变量和 150 个约束的规则问题,其标准版的求解能力亦有 104 数量级以上。虽然 LINDO 和 LINGO 不能直接求解目标规划问题,但用序贯式算法可分解成一个个 LINDO 和 LINGO 能解决的规划问题。最新的 LINGO 版本是 LINGO 11.0 。 下面我们将用一个简单的例子来说明 LINDO 的输入方式及界面形式。当打开 LINDO 程序时,界面显示如图 10.1 所示。

Page 4: 10 LINDO软件应用

图 10.1 LINDO 初始界面 图 10.1 中标为“ LINDO” 的窗口为 LINDO 的主框架窗口。以后运行的所有其他子窗口都将被包含在这个窗口之中。同时它还包含着 LINDO 的命令菜单和命令条。中间标有“ <untitled>” 的子窗口是一个新的空白模型输入窗口。所有规划模型的数据及表达式的输入均在此窗口中完成。 LINDO 模型的输入由三个部分组成:目标、变量和约束条件。 目标有两种表述方式: MAX 和 MIN ,分别代表最大值和最小值,在 LINDO 的输入窗口中第一个字符必须是 MAX 和 MIN 。 跟在 MAX 和 MIN 之后的表达式我们称之为“目标公式”,如下所示: MAX 10X+15Y 上式中 X 和 Y 代表变量,也就是我们的求解对象。任何一个规划模型都有约束条件的限制,在 LINDO 中约束条件需要“ SUBJECT TO”或仅仅是“ ST” 这两个表达式的引

Page 5: 10 LINDO软件应用

导。如在此例中约束条件可在新的一行中输入如下: SUBJECT TO X<10 Y<12 X+2Y<16 在条件限制表达式的输入中,需要注意的是“ <”或“ >” 等同于“ <=”或“ >=” ,如“ X<10” 可输入为“ X<=10” 。

条件限制表达式输入完毕后,最后一行要输入“ END” 作为模型输入的结束。本例的输入界面如图 10.2 所示。

解这个线性规划问题,按下“ Solve”菜单的“ Solve”命令,或按下工具栏中的Solve键()。 LINDO 将开始编译这个模型,这意味着 LINDO 要判断输入的模型是否有数学意义或语法错误。如果编译不能通过,你将会得到下面的错误信息窗口,如图 10.3 所示。

如果编译通过, LINDO 将真正开始解这个线性规划问题,最先出现这个状态窗口如图 10.4 所示。 状态窗口各个域和控制的说明如下: 域 /控制 说明 Status 给出当前结果的状态,可能的值包括: Optimal (最优解)、 Feasible (可行解)、 Infeasible (不可行解)、 Unbounded (无界解) Iterations 求解过程中迭代的次数 Infeasibility 引起解不可行的约束条件的个数

Page 6: 10 LINDO软件应用

图 10.2 模型输入窗口

Page 7: 10 LINDO软件应用

图 10.3 错误信息窗口

Page 8: 10 LINDO软件应用

图 10.4 LINDO 的状态窗口

Page 9: 10 LINDO软件应用

Objective 当前目标表达式的值 BestIP 整数规划的最佳值,仅与整数规划问题有关 IP Bound 整数规划问题的理论边界 Branches 整数规划中整数变量的分支数 Elapsed Time 解决问题的时间 Update Interval 状态窗口更新的频率(以秒计),你可以在此设置任何 非 负值,设为 0 将加快求解的时间 Interrupt Solver 按下此键将中断求解过程,并返回当前的最佳值 Close 关闭状态窗口 接下来, LINDO 将给出报告窗口,但在此前, LINDO 将询问是否进行敏感性分析。窗口如图 10.5 所示。

图 10.5 敏感性分析的询问窗口

Page 10: 10 LINDO软件应用

如果按下“否”并关闭状态窗口,报告窗口将出现,报告窗口呈现的是解决此问题的结论性信息。解读此信息将得到解决此问题的整体方案。此例中的报告窗口如图 10.6 所示。

图 10.6 报告窗口

以上是求解线性规划问题时主要步骤及操作窗口的介绍,报告窗口中主要结论的解读及应用将在后续章节中介绍。

Page 11: 10 LINDO软件应用

10.1.2 LINDO句法 在对 LINDO 有一个初步的认识之后,下面我们就 LINDO 模型的表达式句法作一个较为详细的介绍。 在 LINDO 中,目标公式总是出现在模型输入的开始阶段,并且首字符必须是 MAX (最大值)或MIN (最小值)。目标公式的结束及约束条件的开始要以以下字符为准: SUBJECT TO SUCH THAT S. T. ST 约束条件的结束以“ END” 字符为准。 LINDO 的变量名长度不能超过 8 个字符。变量名必须要以字母字符( A~ Z )为开始,其他字符不能包含!、)、 + 、 - 、 = 、 < 、 > 。如以下变量名是有效的: XYZ MY_VAR A12 SHIP.LA 而以下这些变量名是无效的: THISONESTOOLONGA HYPHEN1 INFRONT 以上无效的变量名中第一个变量名长度超过了八个字符,第二个使用了无效的连字符( - ),第三个不是以字符开头。 作为可选项,你可以为约束条件起名,约束名可以使许多 LINDO 模型的输出报告非常易于被中断。约束名的起名规则必须遵循变量名的起名约定。约束名必须置于约束表达式的开头,并且要以右括号“ )” 作为分隔,在右括号之后你可以输入约束表达式。

Page 12: 10 LINDO软件应用

如下例中约束表达式 X<10 的约束名是 XBOUND 。 XBOUND) X<10 LINDO 中只有五个操作符,分别是加( + )、减( - )、大于( > )、小于( < )和等于( = )。当你输入“ <”或“ >” 时, LINDO 将解释为“ <=”或“ >=” 。当然,如果你愿意,你也可以直接输入“ <=”或“ >=” 。 LINDO 模型中不接受括号运算符,如以下约束条件的输入是不被认可的: 10(X+Y)<135 LINDO 模型的运算顺序是从左到右。 注释可以出现在 LINDO 模型的任何部分中,注释必须以感叹号“!”为引导,跟在感叹后的任何表达式都将被认为是注释。比如上一节中的例题可写为如图 10.7窗口所示。

图 10.7 有注释的输入窗口

Page 13: 10 LINDO软件应用

LINDO 模型表达式的注释可以被保存在 LTX文件中,因为 LTX文件本来就是文本格式。当你把输入文件保存为压缩文件 LPK格式和 MPS格式时,注释行及其他特殊格式将被删除。 约束和目标公式可以被分割为多行,或者被合并为一行。除了变量、变量系数和约定字符外,你可以在任何地点分割表达式。如以下输入是合法的。 MAX 10 X+15Y SUBJECT TO X <10 Y<12 X+2 Y<16 END LINDO 对大小写字母不敏感,所有输入都将被 LINDO转换为大写字母。 在 LINDO 模型中,仅有常数可以被放置在约束表达式的右边,如 X>Y 将被 LINDO拒绝, X-Y>0 是合法的。同样,仅有变量可以被放置在约束表达式的左边,如 3X+4Y-10=0 将被 LINDO拒绝,而 3X+4Y=10 是可接受的。

Page 14: 10 LINDO软件应用

10.1.3 一个简单的线性规划求解过程

现在我们可以通过一个简单的 LP 问题的求解过程来解读 LINDO 的报告窗口所显示出来的各种信息。设有如下的 LP 数学模型需要求解:Max Z=2x1+5x2

0,0

8

3

4

21

21

2

1

xx

xx

x

x

ts

由于 LINDO 中已假设所有的变量都是非负的,所以非负约束不必再输入。在 LINDO 中输入此模型,可显示如图 10.8 所示窗口。

执行以上输入,并确认进行灵敏度分析,可得到报告窗口如图 10.9 所示。

Page 15: 10 LINDO软件应用

图 10.8 本例的输入窗口

图 10.9 本例的报告窗口

此报告窗口可分为两部分,“ RANGES IN WHICH THE BASIS IS UNCHANGED :”上面为求解报告,下面为灵敏度分析报告。 在求解报告中,“ LP OPTIMUM FOUND AT STEP 2”表示单纯形法在两次迭代后得到的最优解。“ OBJECTIVE FUNCTION VALUE 1 ) 19.00000”表示最优目标值为 19.00000 。“ VALUE”给出最优解中各变量( VARIABLE )的值: x1=2.00000 , x2=3.00000 。“ REDUCED COST”给出最优单纯形表中第 0 行中变量的系数( MAX 型

Page 16: 10 LINDO软件应用

问题)。其中基变量的 REDUCED COST值应为 0 ,对于非基变量,相应的 REDUCED COST 的值表示当该非基变量增加一个单位时(其他非基变量保持不变)目标函数减少的量。本例中此值均为 0 。 “SLACK OR SURPLUS”给出松弛变量的值:第 2 、 3 、 4 行松弛变量分别为 2.00000 、 0.00000 、 0.00000 。 “DUAL PRICES”给出最优单纯形表中第 0 行松弛变量的系数( MAX 型问题),即对偶价格值,表示当对应约束有微小变动时,目标函数的变化率,如果某一约束有一个对偶价格 X ,表示对应约束中不等式右端项若增加 1 个单位,目标函数将增加X 个单位。本例中第 2 、 3 、 4 行对偶价格分别为 0.00000 、 1.00000 、 2.00000 。如第 4 行 X1+2X2<8改变为 X1+2X2<9 时,目标函数值为 19+2=21 。 “NO. ITERATIONS=2”表示用单纯形法进行了两次迭代(旋转)。 若要作灵敏度分析,可以在一开始系统询问“ DO RANGE ( SENSITIVITY )ANALYSIS?”回答“是”,或单击“ Reports”菜单的“ Range”项。所谓灵敏度分析,就是当目标函数的系数和约束右端项在什么范围变化(此时假定其他系数保持不变)时,最优基保持不变。报告中的“ INFINITY”表示正无穷。本例中灵敏度分析表为:

Page 17: 10 LINDO软件应用

RANGES IN WHICH THE BASIS IS UNCHANGED : OBJ COEFFICIENT RANGES UARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE x1 2.000000 0.500000 2.000000 x2 5.000000 INFINITY 1.000000

RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS NCREASE DECREASE 2 4.000000 INTINITY 2.000000 3 3.000000 1.000000 1.000000 4 8.000000 2.000000 2.000000 目标函数中变量 X1 的系数为 2 ,当它在[ 2-2 , 2+0.5] =[ 0 , 2.5]范围变化时,最优基保持不变。 第一个约束中右端项为 4 ,当它在[ 4-2 , 4+∞] =[ 2 ,∞)范围变化时,最优基保持不变。 如果要显示单纯形表,则单击主菜单“ Reports” 下拉菜单中的“ Tableau”选项。如图 10.10 所示。

Page 18: 10 LINDO软件应用

图 10.10 Reports下拉菜单

本例的单纯形表显示为:THE TABLEAU ROW(BASIS) X1 X2 SLK 2 SLK 3 SLK 4 1 ART 0.000 0.000 0.000 1.000 2.000 19.000 2 SLK 20.000 0.000 1.000 2.000 -1.000 2.000 3 x2 0.000 1.000 0.000 1.000 0.000 3.000 4 x1 1.000 0.000 0.000 -2.000 1.000 2.000

Page 19: 10 LINDO软件应用

在上表中,基向量为 BASIS={SLK2 , X2 , X1} , SLK2 为第 2 行松弛变量,ART 是人工变量( ARTIFICIAL VARIABLE )。

Page 20: 10 LINDO软件应用

10.1.4 对 LINDO 的进一步认识 本小节我们将通过一个具有典型意义的实例来对 LINDO 作进一步的认识,通过对结论窗口信息的深入解读,我们可以知道, LINDO 不仅可以给出最优的数据,而且可以解决有关线性规划的其他方面的问题。 【例 10.1】一奶制品加工厂用牛奶生产 A1 、 A2 两种奶制品, 1桶牛奶可以在甲车间用 12小时加工成 3 kg A1 ,或者在乙车间用 8小时加工成 4 kg A2 。根据市场需求,生产的 A1 、 A2全部能售出,且每 kg A1获利 24元,每 kg A2获利 16元。现在加工厂每天能得到 50桶牛奶的供应,每天正式工人总的劳动时间 480小时,并且甲车间每天至多能加工 100 kg A1 ,乙车间的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下三个附加问题: ( 1 )若用 35元可以买到 1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶? ( 2 )若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元? ( 3 )由于市场需求变化,每千克 A1 的获利增加到 30元,是否应改变生产计划? 设生产 A1共 X1kg ,生产 A2共 X2kg ,则可在 LINDO 的输入窗口输入如下模型: max 72x1+64x2 st x1+x2<50 12x1+8x2<480 3x1<100 End

Page 21: 10 LINDO软件应用

求解这个模型并作灵敏性分析,结果如下: LP OPTIMUM FOUND AT STEP1 OBJECTIVE FUNCTION VALUE 1)3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000

ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 NO. ITERATIONS= 1

RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 72.000000 24.000000 8.000000 X2 64.000000 8.000000 16.000000

Page 22: 10 LINDO软件应用

RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.000000 10.000000 6.666667 3 480.000000 53.3333328 0.000000 4 100.000000 INFINITY 40.000000 结果告诉我们:这个线性规划的最优解为 x1=20 , x2=30 ,最优值为 z=3360 ,即用 20桶牛奶生产 A1, 30桶牛奶生产 A2 ,可获最大利润 3360元。输出中除了告诉我们问题的最优解和最优值以外,还有许多对分析结果有用的信息,下面结合题目中提出的三个附加问题给予说明。 三个约束条件的右端不妨看做三种“资源”:原料、劳动时间、车间甲的加工能力。输出中 Slack or Surplus给出这三种资源在最优解下是否有剩余:原料、劳动时间的剩余均为零,车间甲尚余 40 (千克)加工能力。 目标函数可以看做“效益”,成为紧约束的“资源”一旦增加,“效益”必然跟着增长。输出中 DUAL PRICES 给出这 3 种资源在最优解下“资源”增加 1 个单位时“效益”的增量:原料增加 1 个单位( 1桶牛奶)时利润增长 48 (元),劳动时间增加 1 个单位( 1小时)时利润增长 2 (元),而增加非紧约束车间甲的能力显然不会使利润增长。这里,“效益”的增量可以看做“资源”的潜在价值,经济学上称为影子价格,即 1桶牛奶的影子价格为 48元, 1小时劳动的影子价格为 2元,车间甲的影子价格为零。我们可以用直接求解的办法验证上面的结论,即将输入文件中原料约束(第 2 行)右端的 50改为 51 ,看看得到的最优值(利润)是否恰好增长 48 (元)。用影子价格的概念很容易回答附加问题 1 :用 35元可以买到 1桶牛奶,低于 1桶牛奶的影子价格 48 ,当然应该作这项投资。回答附加问题 2 :聘用临时工人以增加劳动时间,付给的工资低于劳动时间的影子价格才可以增加利润,所以工资最多是每小时 2元。

Page 23: 10 LINDO软件应用

目标函数的系数发生变化时(假定约束条件不变),最优解和最优值会改变吗?这个问题不能简单回答。上面的输出给出了最优基不变条件下目标函数系数的允许变化范围: x1 的系数为( 72-8 , 72+24 ) = ( 64 , 96 ); x2 的系数为( 64-16 ,64+8 ) = ( 48 , 72 )。注意: x1系数的允许范围需要 x2系数 64 不变,反之亦然。由于目标函数的费用系数变化并不影响约束条件,因此此时最优基不变可以保证最优解也不变,但最优值变化。用这个结果很容易回答附加问题 3 :若每千克 A1 的获利增加到 30元,则 x1系数变为 30×3=90 ,在允许范围内,所以不应改变生产计划,但最优值变为 90×20+64×30=3720 。 下面对“资源”的影子价格作进一步的分析。影子价格的作用(即在最优解下“资源”增加 1 个单位时“效益”的增量)是有限制的。每增加 1桶牛奶利润增长 48元(影子价格),但是,上面输出的 CURRENT RHS 的 ALLOWABLE INCREASE 和 ALLOWABLE DECREASE 给出了影子价格有意义条件下约束右端的限制范围:原料最多增加 10 (桶牛奶),劳动时间最多增加 53 (小时)。现在可以回答附加问题 1 的第 2 问:虽然应该批准用 35元买 1桶牛奶的投资,但每天最多购买 10桶牛奶。顺便地说,可以用低于每小时 2元的工资聘用临时工人以增加劳动时间,但最多增加 53.3333小时。 需要注意的是:灵敏性分析给出的只是最优基保持不变的充分条件,而不一定是必要条件。比如对于上面的问题,“原料最多增加 10 (桶牛奶)”的含义只能是“原料增加 10 (桶牛奶)”时最优基保持不变,所以影子价格有意义,即利润的增加大于牛奶的投资。反过来,原料增加超过 10 (桶牛奶),影子价格是否一定没有意义?最优基是否一定改变?一般来说,这是不能从灵敏性分析报告中直接得到的。此时,应该重新用新数据求解规划模型,才能做出判断。所以,从正常理解的角度来看,我们上面回答“原料最多增加 10 (桶牛奶)”并不是完全科学的。 返回

Page 24: 10 LINDO软件应用

10.2 整数规划问题的 LINDO 求解说明

整数规划是数学规划理论中的重要内容之一。 LINDO具有 0 1 整数规划和整数规划两种模型求解的功能。 LINDO 可以将模型中的一部分变量定义为 0 1 变量、一部分变量定义为整数变量,其余变量仍保留为连续变量。因此, LINDO具有求解 01 、整数混合规划的功能。在使用 LINDO 求解整数规划的功能时,除 0 1 变量、整数变量的定义命令之外,其他操作如求解、模型编辑等与前一章中所介绍过的内容大致相同。因此,本章把定义 0 1 变量和定义整数变量的命令 INT 、 GIN 作为主要内容来介绍。10.2.10 1 规划 【例 10.2】有一钢材物流基地,在配送之前先要对钢材进行物流加工,假设有四组工人,要分别指派他们完成四项不同的工作,每个组做各项工作所消耗的时间如表 10.1 所示。问应该如何指派,才能使总的工作时间最小?

Page 25: 10 LINDO软件应用

工作 时间

小组

A B C D

甲 15 18 21 24

乙 19 23 22 18

丙 26 17 16 19

丁 19 21 23 17

表 10.1

因为每个组只能完成一项工作,所以这是一个 0 1 规划问题。设指派工作组 i(i=1,2,3,4)完成工作 j(j=1,2,3,4) 为 Xij 。则该问题的运筹学模型可表示为: Min :z=15x11+19x21+26x31+19x41+18x12+23x22+17x32+21x42+24x13+22x23+16x33+23x43+24x14+18x24+19x34+17x44ST :x11+x12+x13+x14=1x21+x22+x23+x24=1x31+x32+x33+x34=1

Page 26: 10 LINDO软件应用

x41+x42+x43+x44=1x11+x21+x31+x41=1x12+x22+x32+x42=1x13+x23+x33+x43=1x14+x24+x34+x44=1xij=0或 1; i=1,2,3,4; j=1,2,3,4

因为 Xij 非 0即 1 ,则在 LINDO 中输入是应使用 INT 语句。本例的输入窗口如图 10.11 所示。

图 10.11

Page 27: 10 LINDO软件应用

在 INT 语句的输入中,哪个变量需要定义为 0 1 解,则将那个变量置于 INT 之后。 当模型中有很多变量需要定义成 0 1 变量时,可以有以下命令: INT <n> 其中 n表示模型中的 0 1 型整数变量数目。使用这命令来定义 0 1 变量,可以极大地提高键盘输入效率。对于本例, 16 个 0 1 变量的定义可以如此操作: INT 16 使用该语句时须特别注意变量在目标函数中的排列次序。当目标函数中不是包含有全部变量时,应慎用这一语句。语句中的 n ,是指目标函数中(或模型中先输入的)前 n 个变量,不注意这一点,就容易出错。 求解该问题,则本例的报告窗口如图 10.12 所示。 由报告窗口可以看出,目标值是 70 ,可以指派甲组去做 A 工作,丁组做 B 工作,丙组做 C 工作,乙组做 D 工作。

Page 28: 10 LINDO软件应用

图 10.12

Page 29: 10 LINDO软件应用

10.2.2 整数规划

【例 10.3】某昼夜服务的公交线路每天各时间区段内所需司机和乘务员数如表10.2 所示。

班次 时间 所需人员1 6:00~ 10:00 60

2 10:00~ 14:00 70

3 14:00~ 18:00 60

4 18:00~ 22:00 50

5 22:00~ 2:00 20

6 2:00~ 6:00 30

表 10.2

设司机和乘务人员分别在各时间区段开始上班,并连续工作 8小时,问该公交线路至少配备多少名司机和乘务人员 ?列出这个问题的线性规划模型。 由题意知,“所需人数”是指司机数加乘务人员数之和;另外,司机和乘务人员在各时间区段开始上班之后,要连续工作 8小时。即连续上两个班次,因此,在第一个班次上班的人员中,既有从第六个班次之初开始上班的,也有从第一个班次之初开始上班的,其他以此类推。

Page 30: 10 LINDO软件应用

设从第 i(i= 1 ,…, 6) 个班次之初开始上班的人数为 xi ,则六个班次上班人数共有 x1+x2+x3+x4+x5+x6, 目标是使总人数 z 最少,但同时必须满足在每个班次上班的人数要不小于所需人数,例如,在第一个班次上班的人数至少要有 60 人,即 x6+x1>60 ,其他以此类推。 综上所述,可建立原问题的线性规划数学模型如下: Min z=x1+x2+x3+x4+x5+x6 St: x6+x1≥60 x1+x2≥70 x2+x3≥60 x3+x4≥50 x4+x5≥20 x5+x6≥30 xi≥0且为整数 因为 Xi 为整数,则在 LINDO 中输入是应使用 GIN 参数。本例的输入窗口如图 10.13 所示。 GIN 语句与 INT 语句的用法一样,既可以定义指定变量,也可以集中定义变量的数量。如本例中, 6 个变量都应是整数,可以用 GIN 6 来定义。求解该问题,则本例的报告窗口如图 10.14 所示。

Page 31: 10 LINDO软件应用

图 10.13

Page 32: 10 LINDO软件应用

图 10.14

由报告窗口可以看出,目标值是 150 , 6 个班次各安排 60 、 10 、 50 、 0 、20 和 10 人。

返回