整数规划简介及Lingo求解
- 格式:doc
- 大小:269.50 KB
- 文档页数:9
2012——2013学年第一学期合肥学院数理系实验报告课程名称:运筹学实验项目: LINGO软件求解整数规划问题实验类别:综合性□设计性□√验证性□专业班级: 10数学与应用数学(1)班姓名:学号:实验地点:实验时间:指导教师:成绩:一.实验目的1、学会使用LINGO 软件求解整数规划问题。
2、学会分析LINGO 软件求解的结果。
二.实验内容1、某班有男同学30人,女同学20人,星期天准备去植树。
根据经验,一天中,男同学平均每人挖坑20个,或栽树30棵,或给25棵树浇水,女同学平均每人挖坑10个,或栽树20棵,或给15棵树浇水。
问应怎样安排,才能使植树(包括挖坑、栽树、浇水)最多。
建立该问题的数学模型,并求其解。
2、求解线性规划:121212212max 2251228010,Z x x x x x x x x x =++≥⎧⎪+≤⎪⎨≤≤⎪⎪⎩全为整数3、在高校篮球联赛中,我校男子篮球队要从8名队员中选择平均身高最高的出场阵容,队员的号码、身高及擅长的位置如右表:同时,要求出场阵容满足以下条件: (1) 中锋最多只能上场一个。
(2)至少有一名后卫 。
(3)如果1号队员和4号队员都上场, 则6号队员不能出场(4)2号队员和6号队员必须保留一个不出场。
问应当选择哪5名队员上场,才能使出场队员平均身高最高?试写出上述问题的数学模型,并求解。
三. 模型建立1、设需要男生挖坑1x 人,栽树2x 人,浇树3x 人;需要女生挖坑4x 人,栽树5x 人,浇树5x 人,则该问题的数学模型建立如下:1212345614252536123456max 201030202010302030202515,,,,,0Z x x x x x x x x x x x x x x x xx x x x x x =+++=⎧⎪++=⎪⎪+=+⎨⎪+=+⎪⎪≥⎩且全为整数2、模型略3、设1=j x 表示第j 号队员上场,0=j x 表示第j 号队员不上场,其中,82,1,,⋯=j ,其中,j c 表示第j 号队员的身高,82,1,,⋯=j 。
lingo整数规划整数规划是运筹学中的一种优化方法,用于解决决策问题中存在离散决策变量的数学规划问题。
在整数规划中,决策变量的取值只能是整数。
整数规划的应用非常广泛,包括生产计划、资源分配、货物运输等领域。
下面将介绍一些与整数规划相关的术语和技巧。
1. 最优解:整数规划的目标是找到使目标函数最大或最小的整数解。
最优解指的是在满足约束条件的前提下,使目标函数的取值达到最优的决策变量取值。
2. 整数线性规划:整数线性规划是整数规划的一种特殊情况,其中目标函数和约束条件都是线性的。
3. 整数非线性规划:整数非线性规划是整数规划的另一种形式,其中目标函数或约束条件中至少有一项是非线性的。
4. 分枝定界法:分枝定界法是求解整数规划问题的一种常用方法。
它通过将整数规划问题划分为多个子问题,并对每个子问题进行求解,直到找到最优解。
5. 割平面法:割平面法是求解整数规划问题的另一种方法。
它通过加入额外的线性不等式约束,逐步削减可行解空间,直到找到最优解。
6. 整数规划松弛:整数规划松弛是指将整数规划问题中的整数约束条件松弛为连续变量的约束条件,从而将整数规划问题转化为线性规划问题。
7. 整数规划可行解:整数规划问题的可行解是指满足所有约束条件的整数取值。
8. 整数规划解的整数性:整数规划解的整数性是指整数规划问题的解是否满足整数约束条件。
9. 混合整数规划:混合整数规划是一类更一般的整数规划问题,其中决策变量可以是整数或连续变量。
10. 整数规划的应用:整数规划在各种领域中都有广泛的应用,包括生产计划、资源分配、货物运输等。
通过合理的建模和求解技巧,整数规划可以帮助企业优化决策,提高效益。
总之,整数规划是一种应用十分广泛的优化方法,通过对决策变量的整数约束进行建模,帮助解决实际问题中存在的离散决策变量的优化问题。
2011——2012学年第二学期合肥学院数理系实验报告课程名称:运筹学实验项目:求解线性规划问题实验类别:综合性□设计性□验证性□√专业班级: 09级数学与应用数学(1)班姓名:王秀秀学号: 0907021006 实验地点: 9#503实验时间: 2012-4-18 指导教师:管梅成绩:一.实验目的1、熟悉LINGO 软件的使用方法、功能;2、掌握LINGO 软件以下内部函数的应用:@free(variable)取消默认域,使变量可以取任意实数@gin(variable) 限制变量取整数值 @bin(variable) 限制变量取值为0,1@bnd(low,variable,up) 限制变量于一个有限的范围 二.实验内容1、某班有男同学30人,女同学20人,星期天准备去植树。
根据经验,一天中,男同学平均每人挖坑20个,或栽树30棵,或给25棵树浇水,女同学平均每人挖坑10个,或栽树20棵,或给15棵树浇水。
问应怎样安排,才能使植树(包括挖坑、栽树、浇水)最多。
建立该问题的数学模型,并求其解。
2、求解线性规划:121212212max z x 2x 2x 5x 12x 2x 8s.t.0x 10x ,x =++≥⎧⎪+≤⎪⎨≤≤⎪⎪⎩为整数3、在高校篮球联赛中,我校男子篮球队要从8名队员中选择平均身高最高的出场阵容,队员的号码、身高及擅长的位置如下表:同时,要求出场阵容满足以下条件: ⑴ 中锋最多只能上场一个。
⑵ 至少有一名后卫 。
⑶ 如果1号队员和4号队员都上场,则6号队员不能出场 ⑷ 2号队员和6号队员必须保留一个不出场。
问应当选择哪5名队员上场,才能使出场队员平均身高最高? 试写出上述问题的数学模型,并求解。
三. 模型建立1、设1x ,2x ,3x 分别表示男生挖坑、栽树、浇水人数1y ,2y ,3y 分别表示女生挖坑、栽树、浇水人数则数学模型为1231231231231122i i max z 20x +30x +25x +10y +20y +15y x +x +x 30y +y +y =20s.t.20x 10y 30x 20y 0x 30;0y 20;i 1,2,3==⎧⎪⎪⎨+≥+⎪⎪≤≤≤≤=⎩2、数学模型为:121212212max z x 2x 2x 5x 12x 2x 8s.t.0x 10x ,x =++≥⎧⎪+≤⎪⎨≤≤⎪⎪⎩为整数3、设1,i x 0i i ⎧=⎨⎩表示第个球员上场,表示第个球员不上场则数学模型为12345678126781462681max z 1.92x 1.90x 1.88x 1.86x 1.85x 1.83x 1.80x 1.78x x +x 1x +x +x 1x +x +x 2x +x 1x 5x 0i i i ==+++++++≤⎧⎪≥⎪⎪≤⎪≤⎨⎪⎪=⎪⎪⎩∑取或1,i=1,2 (8)四. 模型求解(含经调试后正确的源程序) 1、求解:model:max=20*x1+30*x2+25*x3+10*y1+20*y2+15*y3; x1+x2+x3=30; y1+y2+y3=20;20*x1+10*y1>=30*x2+20*y2; @gin(x1);@gin(x2);@gin(x3); @gin(y1);@gin(y1);@gin(y1); @bnd(0,x1,30); @bnd(0,x2,30); @bnd(0,x3,30); @bnd(0,y1,20); @bnd(0,y2,20); @bnd(0,y3,20);结果显示:2、求解:model:max=x1+2*x2; 2*x1+5*x2>12; x1+2*x2<8;@gin(x1);@gin(x2);@bnd(0,x2,10); end结果显示:3、求解:model:max=(1.92*x1+1.90*x2+1.88*x3+1.86*x4+1.85*x5+1.83*x6+1.80*x7+1.78*x8) /5;x1+x2<=1;x6+x7+x8>=1;x1+x4+x6<=2;x2+x6<=1;x1+x2+x3+x4+x5+x6+x7+x8=5;@bin(x1);@bin(x2);@bin(x3);@bin(x4);@bin(x5);@bin(x6);@bin(x7);@bin(x8);end结果显示:五.结果分析第一题最优解:x1=20;x2=0; x3=10;y1=0;y2=20; y3=0;最优值:max=1050;第二题最优解:x1=0;x2=4; 最优值max=8;第三题最优解:X=(1,0,1,1,1,0,1,0) 最优值max=1.862;六.实验总结通过此次实验,我掌握LINGO软件一些内部函数的应用,这些函数的应用使实际生活中的许多问题得到了解决。
Lingo如何求解整数规划?Lingo求解整数规划的详细方法
导读:Lingo是一款功能非常强大的求解器,Lingo能有效的精准的求解线性、非线性和整数最优化,那么,Lingo如何求解整数规划呢?下面就是Lingo如何求解整数规划的方法步骤,一起往下看看吧!
方法步骤
1、打开lingo,这是它的主界面;
2、输入程序框架;
3、输入问题只需要按照图中的格式去写。
可以看到,lingo的编程语言与我们所学到的运筹学公式基本一致;
4、添加整数约束希望哪一个变量是整数,就在末尾加一行“@gin(变量);”就可以了;
5、得出结果点击图中的“solve”按钮;
6、查看结果解决后,会弹出一个窗口,向你显示目标函数值和每个变量的
取值。
问题解决。
以上就是Lingo如何求解整数规划的方法步骤,如果你不知道怎么在Lingo 求解整数规划的话,那就快点根据上面的方法步骤学起来吧!。
Lingo、lindo简介一、软件概述 (1)二、快速入门 (4)三、Mathematica函数大全--运算符及特殊符号 (11)参见网址: /一、软件概述(一)简介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拥有一整套快速的,内建的求解器用来求解线性的,非线性的(球面&非球面的),二次的,二次约束的,和整数优化问题。
LINDO和LINGO是美国LINDO系统公司开发的一套专门用于求解最优化问题的软件包。
LINDO 用于求解线性规划和二次规划,LINGO除了具有LINDO的全部功能外,还可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解以及代数方程求根等。
LINDO和LINGO软件的最大特色在于可以允许优化模型中的决策变量是整数(即整数规划),而且执行速度很快。
LINGO实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其它数据文件(如文本文件、EXCEL电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。
由于这些特点,LINDO和LINGO软件在教学、科研和工业、商业、服务等领域得到广泛应用。
1)目标函数及各约束条件之间一定要有“Subject to (ST) ”分开。
2)变量名不能超过8个字符。
3)变量与其系数间可以有空格,单不能有任何运算符号(如乘号“*”等)。
4)要输入<=或>=约束,相应以<或>代替即可。
5)一般LINDO中不能接受括号“()“和逗号“,“,例:400(X1+X2) 需写成400X1+400X2;10,000需写成10000。
6)表达式应当已经过简化。
不能出现 2 X1+3 X2-4 X1,而应写成-2X1+3 X2。
用LINDO求解施工中的线性规划(LP)问题1 引言线性规划是现代化管理的常用工具与方法,在施工过程中,很多实际问题,如配(下)料,运输(土石方调配),施工机具车辆调度,施工场地的合理设点,成品、半成品、原材料的合适库存量规划问题等等,都需要运用线性规划方法求得最优方案。
线性规划一般需要先确定要求的未知变量和目标函数,然后找出所有的约束条件,表示为线性方程或不等式,建立问题的数学模型,对于变量数目和约束条件较少的情况可用手工计算,较多的情况则需运用计算机来求解。
2 LINDO介绍LINDO是Linear INteractive and Discrete Optimizer字首的缩写形式,是由Linus Schrage 于1986年开发的优化计算软件包。
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中。
用LINGO求解整数规划在LINGO中,输入总是以model:开始,以end结束;中间的语句之间必须以“;”分开;LINGO不区分字母的大小写;目标函数用MAX=…;或MIN=…;给出(注意有等号“=”)。
在LINDO中所有的函数均以“@”符号开始,如约束中@gin(x1)表示x1为整数,用@bin(x1)表示x1为0-1整数。
在现在的LINDO中,默认设置假定所有变量非负。
函数中变量的界定:@GIN(X):限制X为整数@BIN(X):限定变量X为0 或1。
@FREE(X):取消对x的符号限制(即可取任意实数包括负数)@BND(L,X,U):限制L<= X <= ULINGO提供了大量的标准数学函数:@abs(x)???????????? 返回x的绝对值@sin(x)???????????? 返回x的正弦值,x采用弧度制@cos(x)???????????? 返回x的余弦值@tan(x)???????????? 返回x的正切值@exp(x)???????????? 返回常数e的x次方@log(x)???????????? 返回x的自然对数@lgm(x)???????????? 返回x的gamma函数的自然对数@sign(x)??????????? 如果x<0返回-1;否则,返回1@smax(x1,x2,…,xn)? 返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn)? 返回x1,x2,…,xn中的最小值例1:整数规划模型在LINGO中可以如下输入:model:Max=5*x1+8*x2;!*号不能省略x1+x2<=6;!约束条件和目标函数可以写在model:与end之间的任何位置5*x1<=45-9*x2;@gin(x1);@gin(x2); !和LINDO不同,不能写在end之后end运行后同样得到最优解为x1=0,x2=5,最优值为40。
例2:在线性规划中的应用max Z =5X1+3X2+6X3,s.t.X1 +2 X2 + X3 ≤182 X1 + X2 +3 X3 =16X1 + X2 + X3 =10X1 ,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);然后按运行按钮,得到模型最优解,具体如下:Objective value: 46.00000Variable Value Reduced Costx1 14.00000 0.000000x2 0.000000 1.000000x3 -4 .000000 0.000000由此可知,当 x1 =14 , x2 =0 , x3 =-4 时,模型得到最优值,且最优值为 46。
整数规划及Lingo 求解一、 概论1.1 整数规划的定义在工程设计和企业管理中,常常会遇到要求决策变量取整数值的规划问题。
安排生产时,投入的人力与机器数量必须是整数,生产的 某些产品(如汽车、机床、船舶等)的数量也是整数。
整数规划就是用于研究、处理这一类问题的数学规划。
如果在线性规划的基础上,把规划中的变量(部分或全部)限制为整数时,就称之为线性整数规划。
大部分的整数规划都是线性的所以我们也称线性整数规划为整数规划。
在许多情况下,我们都可以把规划问题的决策变量看成是连续的变量;但在某些情况下,规划问题的决策变量却被要求一定是整数。
例如,完成某项工作所需要的人数或设备台数,进入市场销售的商品件数,以及某一机械设备维修的次数等。
当连续的决策变量变为离散变量时非线性优化问题通常会难解得多。
但是应用软件就方便多了,本文给了Lingo 在规划中的常用方法和程序。
1.2 整数规划的分类在线性规划的基础上,要求所有变量都取整的规划问题称为纯整数规划问题;如果仅仅是要求一部分变量取整,则称为混合整数规划问题。
全部或部分决策变量只能取0,1值的规划问题称为10-规划问题。
1.3 整数规划的一般模型目标函数约束条件决策集 x 为整数如果用集合表示上面的式子目标函数: Cx =max(min)约束条件为: b Ax =例 1.1 飞船装载问题设有n 种不同类型的科学仪器希望装在登月飞船上, 令0>j c 表示每件第j 类仪器的科学价值;0>j a 表示每件第j 类仪器的重量。
每类仪器件数不限, 但装载件数只能是整数。
飞船总载荷不得超过数b 。
设计一种方案, 使得被装载仪器的科学价值之和最大。
建模 记j x 为第j 类仪器的装载数。
目标函数 ∑=j j x c m a x约束条件 ∑≤b x a j j决策集 j x 为正整数⎪⎪⎩⎪⎪⎨⎧≤+++≤+++≤+++m n mm m m n n n n k x a x a x a k x a x a x a k x a x a x a t s22112222212111212111..n n x c x c x c +++= 2211m ax (m in)二、 算法简介及应用举例2.1 解整数规划的一般算法通常解整数规划有三种方法,下面只介绍算法思想不具体讲解,在限制条件少的情况下分支定界法最为常用。
因为Lingo 软件可以很好的解决这一类问题,所以给出Lingo 的程序以便求解更复杂的问题。
图解法:解两个变量的线性规划问题,在平面上画出可行域,计算目标函数在各极点处的值,经比较后,取最值点为最优解。
用分枝定界法:反复划分可行域并确定最优值的界限,将原问题不断地分枝为若干个子问题, 且缩小最优质的取值范围,直到求得最优解.枚举法:列出所有可行解逐一比较求出最优解。
2.2例题分析例 2.1 背包问题一个旅行者的背包最多只能装 6kg 物品,现有4 件物品的重量和价值分别为 2 kg ,3 kg ,3 kg ,4 kg ;1 元,1.2元,0.9元,1.1元。
问应怎样携带那些物品使得携带物品的价值最大?建模:记j x 为旅行者携带第j 件物品的件数, 取值只能为 0 或 1。
求目标函数43211.19.02.1x x x x f +++=在约束条件643324321≤+++x x x x 下的最大值.用Lingo 软件求解0-1规划Model:Max=x1+1.2*x2+0.9*x3+1.1*x4;2*x1+3*x2+3*x3+4*x4<=6;@bin(x1);@bin(x2);@bin(x3);@bin(x4);End计算结果图1 结果解释变量名 取值例 2.2 某公司要在市东、西、南三区建立分公司。
拟议中有7个位置(点))7,,2,1( =i A i 可供选择。
规定在东区:由321,,A A A 三个点中至多选两个;在西区:由54,A A 两个点中至少选一个;在南区:由76,A A 两个点中至少选一个。
如选用i A 点,设备投资估计为i b 元,每年可获利润估计为i c 元,但投资总额不能超过B 元。
问应选择哪几个点可使年利润为最大?解题时先引入10-变量)7,,2,1( =i x i令⎩⎨⎧=.,0,1点没被选中当点被选中当,i A i A i x 7,,2,1 =i . 于是问题可列写成:i i i x c z ∑==71Maxs.t. ⎪⎪⎪⎩⎪⎪⎪⎨⎧=≥+≥+≤++≤∑=10,112765432171或i i i i x x x x x x x x Bx b例 2.3 求目标函数2123x x f +=在约束条件: 143221≤+x x , 9221≤+x x , 1x ,2x 为自然数下的最大值。
用Lingo 软件求解整数规划model:max =3*x1+2*x2;2*x1+3*x2<=14;2*x1+x2<=9;@gin(x1);@gin(x2);End计算结果为:最大值14,x1=4,x2=1。
例2.4 钢材截短问题有一批钢材, 每根长7.3米. 现需做100套短钢材. 每套包括长2.9米, 2.1米,1.5米的各一根. 至少用掉多少根钢材才能满足需要, 并使得用料最省. 分析: 可能的截法和余料第1种 7.3-(2.9×2+1.5)=0第2种 7.3-(2.9+2.1×2)=0.2第3种 7.3-(2.9+1.5×2)=1.4第4种 7.3-(2.9+2.1+1.5)=0.8第5种 7.3-(2.1×2+1.5×2)=0.1第6种 7.3-(2.1×3)=1第7种 7.3-(2.1+1.5×3)=0.7第8种 7.3-(1.5×4)=1.3模型:设决策变量按第i 种方法截i x 根钢材。
求目标函数的最小值87654323.17.01.08.04.12.0x x x x x x x f ++++++=约束条件10024321=+++x x x x10032276542=++++x x x x x1004322875431=+++++x x x x x x0≥i x ,i =1,…,8编程:model :min =0.2*x2+1.4*x3+0.8*x4+0.1*x5+x6+0.7*x7+1.3*x8;2*x1+x2+x3+x4=100;2*x2+x4+2*x5+3*x6+x7=100;x1+2*x3+x4+2*x5+3*x7+4*x8=100;@gin (x1);@gin (x2);@gin (x3);@gin (x4);@gin (x5);@gin (x6);@gin (x7);@gin (x8);end解得i x =(40, 20, 0, 0, 30, 0, 0, 0) , )(i x f = 7三、集合在整数规划中的应用例3.1 SAILCO 公司需要决定下四个季度帆船的生产量。
下四个季度帆船的需求量分别是40条,60条,75条,25条,这些需求必须按时满足。
每个季度正常的生产能力是40条帆船,每条船的生产费用为400美元。
如果加班生产,每条船的生产费用为450美元。
每个季度末,每条船的库存费用为20美元。
假定生产提前期为0,初始库存为10条船,如何安排生产可使总费用最小?我们用DEM ,RP ,OP ,INV 分别表示需求量、正常生产量、加班生产量、库存量,则DEM ,RP ,OP ,INV 对每个季度都应该有一个对应的值,也就是说他们都应该是一个由4个元素组成的数组,其中DEM 是已知的,而RP ,OP ,INV 是未知的。
现在我们可以写出这个问题的模型。
首先,目标函数是所有费用的和:Min{}∑=++4,3,2,1)(20)(450)(400I I INV I OP I RP (1)约束条件主要有两个:(1) 能力限制RP (I )≤40,I=1,2,3,4; (2)(2) 产品数量的平衡方程INV (I )=INV (I -1)+RP (I )-DEM (I ),I=1,2,3,4; (3)INV (0)=10; (4)当然还要加上变量的非负约束,构成了这个问题的模型。
可以看出,如果利用数组的概念,这个模型是比较容易建立的,记4个季度组成的集合QUARTERS={1,2,3,4},它们就是上面数组的下标集合,而数组DEM ,RP ,OP ,INV 对集合QUARTERS 中的每个元素1,2,3,4分别对应于一个值,如图3-13所示。
LINGO 正是充分利用了这种数组及其下标的关系,引入了“集合”及其“属性”的概念,把QUARTERS={1,2,3,4}称为集合,把DEM ,RP ,OP ,INV 称为该集合的属性(即定义在该集合上的属性)。
表1更清楚地列出了集合元素及其属性所确定的所有变量。
图2 集合及其属性表1 集合元素及集合的属性确定的所有变量LINGO 中的一个典型的输入方式见图3.我们可以看到这个输入方式以“MODEL :”开始,以“END ”结束,它们之间有语句构成,可以分为三个部分:图3 输入方式(1)集合定义部分(从“SETS:”到“ENDSET”):定义集合及其属性,语句“QUARTERS/1,2,3,4/:DEM,RP,OP,INV,其结果正是定义了表1所列出的16个变量名(并不一定都是决策变量,如下面马上就看到DEM对应的4个变量是已知的)。
(2)数据输入部分(从“DATA:”到“ENDDATA”):“DEM=40,60,75,25;”给出常量DEM(给定的需求量)的值,即DEM(1)=40,DEM(2)=60,DEM(3)=75,DEM(4)=25.(3)其他部分:给出优化目标函数和约束。
目标函数(“MIN=”后面所接的表达式)是用求和函数“@SUM(集合(下标):关于集合的属性的表达式)”的方式定义的,这个函数的功能是对语句中冒号后面的表达式,按照“:”前面的集合指定的下标(元素)进行求和。
本例中目标函数也可以等价的写成“@SUM(QUARTERS(i):400*RP(i)+450*OP(i)+20*INV(i))”,这里“@SUM”相当于求和符号“∑”,而“QUARTERS(i)”相当于“i∈QUARTERS”的含义。
只是由于本例中目标函数对集合QUARTERS的所有元素(下标)都要求和,所有我们在相应的语句中将下标i省去。
约束是用循环函数“@FOR(集合(下标):关于集合的属性的约束关系式)”的方式定义的,意思是对冒号“:”前面的集合的每个元素(下标),冒号“:”后面的约束关系式都要成立。
我们先看到能力限制(2),即每个季度正常的生产能力是40条帆船,这正是语句“@FOR(QUARTERS(I):RP(I)<40);”的含义。