优化模型与Lingo软件.ppt

上传人:本田雅阁 文档编号:2160648 上传时间:2019-02-24 格式:PPT 页数:85 大小:1.32MB
返回 下载 相关 举报
优化模型与Lingo软件.ppt_第1页
第1页 / 共85页
优化模型与Lingo软件.ppt_第2页
第2页 / 共85页
优化模型与Lingo软件.ppt_第3页
第3页 / 共85页
亲,该文档总共85页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《优化模型与Lingo软件.ppt》由会员分享,可在线阅读,更多相关《优化模型与Lingo软件.ppt(85页珍藏版)》请在三一文库上搜索。

1、优化模型与Lingo软件,穆国旺 河北工业大学理学院,内容提要,一、优化模型简介 二、LINDO公司的主要软件产品及功能简介 三、LINDO软件的使用 四、LINGO软件的使用 五、建模与求解实例 (结合软件使用),一、优化模型简介,许多生产计划与管理问题都可以归纳为最优化问题, 最优化模型是数学建模中应用最广泛的模型之一,其内容包括线性规划、整数线性规划、非线性规划、动态规划、变分法、最优控制等。近几年来的全国大学生数学建模竞赛中,几乎每次都有一道题要用到此方法。,优化(数学规划)模型的一般形式:,x决策变量,f(x)目标函数,gi(x)0约束条件,分类:,线性规划(LP) 二次规划(QP)

2、 非线性规划(NLP),纯整数规划(PIP) 混合整数规划(MIP),整数规划(IP),0-1整数规划 一般整数规划,连续规划,建立优化模型的关键步骤: 1. 确定决策变量; 2. 确定决策的目标,将目标函数用决策变量表示出来; 3. 确定约束条件,将约束条件用包含决策变量的等式或不等式表示出来。,建模时需要注意的几个基本问题,1. 尽量使用实数优化,减少整数约束和整数变量 2. 尽量使用光滑优化,减少非光滑约束的个数 如:尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等 3. 尽量使用线性模型,减少非线性约束和非线性变量的个数(如x/y 5 改为x5y) 4. 合理设

3、定变量上下界,尽可能给出变量初始值 5. 模型中使用的参数数量级要适当 (如小于103),模型的求解:,我们遇到的实际问题一般规模都较大,即使建立了模型,找到了解的方法,对于庞大的计算量也是望而却步。“工欲善其事,必先利其器”,手中有一个方便的求解最优化问题的工具就显得很重要。LINGO 系列优化软件包就给我们提供了理想的选择。,二、LINDO 公司软件产品 简要介绍,LINGO系列软件是專門用於求解數學規劃問題的套裝軟體。由於執行速度很快、易於方便輸入、求解和分析數學規劃問題, 因此在數學、科研和工業界得到廣泛應用。 美国芝加哥(Chicago)大学的Linus Schrage教授于1980

4、年前后开发, 后来成立 LINDO系统公司(LINDO Systems Inc.), 网址:http:/,LINDO: Linear INteractive and Discrete Optimizer (V6.1) LINGO: Linear INteractive General Optimizer (V8.0) LINDO API: LINDO Application Programming Interface (V2.0) Whats Best!: (SpreadSheet e.g. EXCEL) (V7.0) LINGO 软件包有多种版本,但其软件内核和使用方法类似。教学版和发行版的

5、主要区别在于对优化问题的规模(变量和约束的个数)有不同的限制。详细情况可上网访问LINGO 软件网站:.,LINDO和LINGO软件能求解的优化模型,LINGO,LINDO,优化模型,线性规划 (LP),非线性规划 (NLP),二次规划 (QP),连续优化,整数规划(IP),LINGO主要用於解線性規劃、非線性規劃、二次規劃和整數規劃等題。也可以用於一些非線性和線性方程組的求解以及代數方程求根等。LINGO中包含了一種建模語言和許多常用的數學函數,可供使用者建立規劃問題使用。,需要掌握的几个重要方面,1、LINDO: 正确阅读求解报告(尤其要掌握敏感性分析) 2、LINGO: 掌握集合(SET

6、S)的应用; 正确阅读求解报告; 正确理解求解状态窗口; 学会设置基本的求解选项(OPTIONS) ; 掌握与外部文件的基本接口方法,三、LINDO软件的使用,LINDO (Linear INteractive and Discrete Optimizer),可以用来求解线性规划(LP)、整数规划(IP)和二次规划(QP)问题。,3.1 两个简单的例子:,例1 求解如下的LP问题: Max z=2x+3y s.t. 4x+3y10 3x+5y12 x,y0,用 Lindo来描述: MAX 2x+3y ST 2) 4x+3y=10 3) 3x+5y=12 END,例2 奶制品的生产计划,50桶牛

7、奶,时间480小时,至多加工100公斤A1,制订生产计划,使每天获利最大,35元可买到1桶牛奶,买吗?若买,每天最多买多少?,可聘用临时工人,付出的工资最多是每小时几元?,A1的获利增加到 30元/公斤,应否改变生产计划?,每天:,x1桶牛奶生产A1,x2桶牛奶生产A2,获利 243x1,获利 164 x2,原料供应,劳动时间,加工能力,决策变量,目标函数,每天获利,约束条件,非负约束,线性规划模型(LP),时间480小时,至多加工100公斤A1,模型求解,Max 72x1+64x2 s.t. x1+x250 12x1+8x2480 3x1100 end,OBJECTIVE FUNCTION

8、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= 2,DO RANGE (SENSITIVITY) ANALYSIS?,No,20桶牛奶生产A1, 30桶生产A2,利润3360元。,模型求解,reduced cost值表示当该非基变量增加一个

9、单位时(其他非基变量保持不变)目标函数减少的量(对max型问题),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= 2,也可理解为: 为了使该非基变量变成基变量,目标函数中对应系数应增加的量,OBJECT

10、IVE 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,原料无剩余,时间无剩余,加工能力剩余40,Max 72x1+64x2 st x1+x250 12x1+8x2480 3x1100 end,三种资源,“资源” 剩余为零的约束为紧约束(有效约束),结果

11、解释,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,结果解释,最优解下“资源”增加1单位时“效益”的增量,原料增1单位, 利润增48,时间加1单位, 利润增2,能力增减不影响利润,影子价格,35元可买到1桶牛奶,要买吗?,35 48

12、, 应该买!,聘用临时工人付出的工资最多每小时几元?,2元!,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 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.0

13、00000 10.000000 6.666667 3 480.000000 53.333332 80.000000 4 100.000000 INFINITY 40.000000,最优解不变时目标系数允许变化范围,DO RANGE(SENSITIVITY) ANALYSIS?,Yes,x1系数范围(64,96),x2系数范围(48,72),A1获利增加到 30元/千克,应否改变生产计划,x1系数由243= 72 增加为303= 90,在允许范围内,不变!,(约束条件不变),结果解释,结果解释,RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFIC

14、IENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 72.000000 24.000000 8.000000 X2 64.000000 8.000000 16.000000 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.000000 10.000000 6.666667 3 480.000000 53.333332 80.000000 4 100.000000 INFINITY 40

15、.000000,影子价格有意义时约束右端的允许变化范围,原料最多增加10,时间最多增加53,35元可买到1桶牛奶,每天最多买多少?,最多买10桶?,(目标函数不变),注意: 充分但可能不必要,3.2 LINDO模型的格式:,按线性规划的自然形式输入,格式如下: MAX(或MIN) 目标函数 ST ( 或S.T.或SUCH THAT 或SUBJECT TO) 约束1 约束2 约束3 约束n END,使用Lindo的一些注意事项:,“”(或“=”(或“=”)功能相同 变量与系数间可有空格(甚至回车), 但无运算符 变量名以字母开头,不能超过8个字符 变量名不区分大小写(包括LINDO中的关键字)

16、目标函数所在行是第一行,第二行起为约束条件 行号(行名)自动产生或人为定义。行名以“)”结束 行中注有“!”符号的后面部分为注释。如: ! Its Comment. 在模型的任何地方都可以用“TITLE” 对模型命名(最多72个字符),如: TITLE This Model is only an Example,变量不能出现在一个约束条件的右端 表达式中不接受括号“( )”和逗号“,”等任何符号, 例: 400(X1+X2)需写为400X1+400X2 表达式应化简,如2X1+3X2- 4X1应写成 -2X1+3X2 缺省假定所有变量非负;可在模型的“END”语句后用“FREE name”将变

17、量name的非负假定取消 可在 “END”后用“SUB” 或“SLB” 设定变量上下界 例如: “sub x1 10”的作用等价于“x1=10” 但用“SUB”和“SLB”表示的上下界约束不计入模型的约束,也不能给出其松紧判断和敏感性分析。 14. “END”后对0-1变量说明:INT n 或 INT name 15. “END”后对整数变量说明:GIN n 或 GIN name,四、LINGO软件的使用,LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 包含了LIND

18、O的全部功能 提供了灵活的编程语言(矩阵生成器),4.1 几个简单的例子,例1 用Lingo求解线性规划(奶制品的生产计划),Lindo 模型: Max 72x1+64x2 s.t. x1+x250 12x1+8x2480 3x1100 end,对应的Lingo 模型: Model: Max=72*x1+64*x2; x1+x250; 12*x1+8*x2480; 3*x1100; end,例2 用Lingo求解二次规划,MODEL: MAX=-2*X2-Y2+X*Y+8*X+3*Y; 3*X+Y=10; X0; Y0; END,例3 用Lingo非线性规划,Model : min=200*D

19、1*X1+150*D2*X2+200*D3+300*D4; D1=(X-5)2+(Y-10)2).5; D2=(X-10)2+(Y-5)2).5; D3=(X2+(Y-12)2).5; D4=(X-12)2+Y2).5; gin(X); ! gin(X) 表示X为整数 ; gin(Y); ! gin(Y) 表示X为整数 ; bin(X1) ! bin(X1)表示X1为0-1变量; bin(X2) ! bin(X2)表示X2为0-1变量; end,问题1. 如何下料最节省 ?,例4 钢管下料问题,问题2. 客户增加需求:,节省的标准是什么?,由于采用不同切割模式太多,会增加生产和管理成本,规定切

20、割模式不能超过3种。问如何下料最节省?,按照客户需要在一根原料钢管上安排切割的一种组合。,切割模式,合理切割模式的余料应小于客户需要钢管的最小尺寸,钢管下料,为满足客户需要,按照哪些种合理模式,每种模式切割多少根原料钢管,最为节省?,合理切割模式,2. 所用原料钢管总根数最少,钢管下料问题1,两种标准,1. 原料钢管剩余总余量最小,xi 按第i 种模式切割的原料钢管根数(i=1,2,7),约束,满足需求,决策变量,目标1(总余量),按模式2切割12根,按模式5切割15根,余料27米,最优解:x2=12, x5=15, 其余为0; 最优值:27,整数约束: xi 为整数,当余料没有用处时,通常以

21、总根数最少为目标,目标2(总根数),钢管下料问题1,约束条件不变,最优解:x2=15, x5=5, x7=5, 其余为0; 最优值:25。,xi 为整数,按模式2切割15根,按模式5切割5根,按模式7切割5根,共25根,余料35米,虽余料增加8米,但减少了2根,与目标1的结果“共切割27根,余料27米” 相比,钢管下料问题2,对大规模问题,用模型的约束条件界定合理模式,增加一种需求:5米10根;切割模式不超过3种。,现有4种需求:4米50根,5米10根,6米20根,8米15根,用枚举法确定合理切割模式,过于复杂。,决策变量,xi 按第i 种模式切割的原料钢管根数(i=1,2,3),r1i, r

22、2i, r3i, r4i 第i 种切割模式下,每根原料钢管生产4米、5米、6米和8米长的钢管的数量,满足需求,模式合理:每根余料不超过3米,整数非线性规划模型,钢管下料问题2,目标函数(总根数),约束条件,整数约束: xi ,r1i, r2i, r3i, r4i (i=1,2,3)为整数,增加约束,缩小可行域,便于求解,原料钢管总根数下界:,特殊生产计划:对每根原料钢管 模式1:切割成4根4米钢管,需13根; 模式2:切割成1根5米和2根6米钢管,需10根; 模式3:切割成2根8米钢管,需8根。 原料钢管总根数上界:31,模式排列顺序可任定,钢管下料问题2,需求:4米50根,5米10根,6米2

23、0根,8米15根,每根原料钢管长19米,LINGO求解整数非线性规划模型,Local optimal solution found at iteration: 12211 Objective value: 28.00000 Variable Value Reduced Cost X1 10.00000 0.000000 X2 10.00000 2.000000 X3 8.000000 1.000000 R11 3.000000 0.000000 R12 2.000000 0.000000 R13 0.000000 0.000000 R21 0.000000 0.000000 R22 1.000

24、000 0.000000 R23 0.000000 0.000000 R31 1.000000 0.000000 R32 1.000000 0.000000 R33 0.000000 0.000000 R41 0.000000 0.000000 R42 0.000000 0.000000 R43 2.000000 0.000000,模式1:每根原料钢管切割成3根4米和1根6米钢管,共10根; 模式2:每根原料钢管切割成2根4米、1根5米和1根6米钢管,共10根; 模式3:每根原料钢管切割成2根8米钢管,共8根。 原料钢管总根数为28根。,演示cut02a.lg4; cut02b.lg4,例5:

25、SAILCO 公司需要决定下四个季度的帆船生产量。下四个季度的帆船需求量分别是40 条,60 条,75 条,25 条。每个季度正常的生产能力是40 条帆船,每条船的生产费用为400 美元。如果加班生产,每条船的生产费用为450 美元。每个季度末,每条船的库存费用为20 美元。假定生产提前期为0,初始库存为10 条船。如何安排生产可使总费用最小? 用DEM,RP,OP,INV 分别表示需求、正常生产的产量、加班生产的产量、库存量,则DEM,RP,OP,INV 对每个季度都应该有一个对应的值,也就说他们都应该是一个由4 个元素组成的数组,其中DEM 是已知的,而RP,OP,INV 是未知数。,用L

26、ingo求解模型:,MODEL: SETS: QUARTERS/14/: Demand, RP, OP, Inv; ENDSETS DATA: Demand=40,60,75,25; ENDDATA,!目标:总费用最小; MIN=SUM(QUARTERS(I): 400*RP(I)+450*OP(I)+20*Inv(I); !正常生产能力的限制; FOR( QUARTERS(I): RP(I)=40 ) !产品数量的平衡关系; FOR(QUARTERS(I) | I#GT#1 : Inv(I)=Inv(I-1)+RP(I)+OP(I)-Demand(I); Inv(1)=10+RP(1)+OP

27、(1)-Demand(1); END,计算结果:,4.2 模型的组成:,Model: 集合段(SETS: 定义集合;ENDSETS) 数据段(DATA: 给已知的数据赋值; ENDDATA) 初始段(INIT:给变量赋初值;ENDINIT) 目标与约束段 end,1 集合段(Sets Section),SETS: 集合1的定义; 集合2的定义; 集合n的定义; ENDSETS,集合的类型,集合 派生集合 基本集合 稀疏集合 稠密集合 元素列表法 元素过滤法 直接列举法 隐式列举法,setname /member_list/ : attribute_list;,setname(parent_se

28、t_list) /member_list/ : attribute_list;,SETS: CITIES /A1,A2,A3,B1,B2/; ROADS(CITIES, CITIES)/ A1,B1 A1,B2 A2,B1 A3,B2/:D; ENDSETS,SETS: STUDENTS /S1S8/; PAIRS( STUDENTS, STUDENTS) | ENDSETS,基本集合的定义,格式: setname /member_list/ : attribute_list; Setname 是你选择的来标记集的名字,最好具有较强的可读性。集名字必须严格符合标准命名规则:以英文字母或下划线(

29、_)为首字符,其后由英文字母(AZ)、下划线、阿拉伯数字(0,1,9)组成的总长度不超过32 个字符的字符串,且不区分大小写。 Member_list 是集成员列表。如果集成员放在集定义中,那么对它们可采取显式罗列和隐式罗列两种方式。如果集成员不放在集定义中,那么可以在随后的数据部分定义它们。, 当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开(允许混合使用)。 例2.1 可以定义一个名为students 的原始集,它具有成员John、Jill、Rose 和Mike,属性有sex 和age: sets: students/John Jill, Rose Mike/: s

30、ex, age; endsets, 当隐式罗列成员时,不必罗列出每个集成员。可采用如下语法: setname/member1memberN/: attribute_list; 这里的member1 是集的第一个成员名,memberN 是集的最末一个成员名。LINGO 将自动产生 中间的所有成员名。LINGO 也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。,集合元素的隐式列举, 集成员不放在集定义中,而在随后的数据部分来定义。 例2.2 !集部分; sets: students:sex,age; endsets !数据部分; data: students,sex,age= John

31、1 16 Jill 0 14 Rose 0 17 Mike 1 13; enddata,注意:开头用感叹号(!),末尾用分号(;)表示注释,可跨多行。 在集部分只定义了一个集students,并未指定成员。在数据部分罗列了集成员John、 Jill、Rose 和Mike,并对属性sex 和age 分别给出了值。 集成员无论用何种字符标记,它的索引都是从1 开始连续计数。在attribute_ list 可以指定一个或多个集成员的属性,属性之间必须用逗号隔开。,派生集合的定义,为了定义一个派生集,必须详细声明: 集的名字 父集的名字 集成员(可选) 集成员的属性(可选) 可用下面的语法定义一个派

32、生集: setname(parent_set_list)/member_list/:attribute_list; setname 是集的名字。parent_set_list 是已定义的集的列表,多个时必须用逗号隔开。 如果没有指定成员列表,那么LINGO 会自动创建父集成员的所有组合作为派生集的成员。,例2.3 sets: product/A B/; machine/M N/; week/12/; allowed(product,machine,week):x; endsets LINGO 生成了三个父集的所有组合共八组作为allowed 集的成员。列表如下: 编号 成员,1 (A,M,1)

33、 2 (A,M,2) 3 (A,N,1) 4 (A,N,2) 5 (B,M,1) 6 (B,M,2) 7 (B,N,1) 8 (B,N,2),成员列表被忽略时,派生集成员由父集成员所有的组合构成,这样的派生集成为稠密集。 如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为稀疏集。 一个派生集的成员列表有两种方式生成: 显式罗列;设置成员资格过滤器。 当采用方式时,必须显式罗列出所有要包含在派生集中的成员,并且罗列的每个成员必须属于稠密集。 例: allowed(product,machine,week)/A M 1,A N 2,B N 1/;,如果需要生成一个

34、大的、稀疏的集,那么显式罗列就很讨厌。幸运地是许多稀疏集的成员都满足一些条件以和非成员相区分。我们可以把这些逻辑条件看作过滤器,在LINGO 生成派生集的成员时把使逻辑条件为假的成员从稠密集中过滤掉。 例2.4 sets: !学生集:性别属性sex,1 表示男性,0 表示女性; students/John,Jill,Rose,Mike/:sex,age; !男学生和女学生的联系集:友好程度属性friend,0,1之间; linkmf(students,students)|sex( enddata,用竖线(|)来标记一个成员资格过滤器的开始。#eq#是逻辑运算符,用来判断是否“相等”. &1 可

35、看作派生集的第1 个原始父集的索引,它取遍该原始父集的所有成员;&2 可看作派生集的第2 个原始父集的索引,它取遍该原始父集的所有成员;&3,&4,以此类推。注意如果派生集B 的父集是另外的派生集A,那么上面所说的原始父集是集A 向 前回溯到最终的原始集,其顺序保持不变,并且派生集A 的过滤器对派生集B 仍然有效。因此,派生集的索引个数是最终原始父集的个数,索引的取值是从原始父集到当前派生集所作限制的总和。,2数据段(data section ),The data section allows you to isolate data from the rest of your model. T

36、he data section begins with the keyword DATA: (including the colon) and ends with the keyword ENDDATA 格式: DATA: object_list = value_list; ENDDATA,对象列(object_list)包含要指定值的属性名、要设置集成员的集名,用逗号或空格隔开。一个对象列中至多有一个集名,而属性名可以有任意多。如果对象列中有多个属性名,那么它们的类型必须一致。如果对象列中有一个集名,那么对象列中所有的属性的类型就是这个集。 数值列(value_list)包含要分配给对象列中

37、的对象的值,用逗号或空格隔开。注意属性值的个数必须等于集成员的个数。,例3.1 sets: set1/A,B,C/: X,Y; endsets data: X=1,2,3; Y=4,5,6; enddata,例3.2 sets: set1/A,B,C/: X,Y; endsets data: X,Y=1 4 2 5 3 6; enddata,参数,在数据部分也可以指定一些标量变量(scalar variables)。当一个标量变量在数据部分确定时,称之为参数。例如,假设模型中用利率8.5%作为一个参数,就可以象下面一样输入一个利率作为参数。 例3.3 data: interest_rate =

38、 .085; enddata 也可以同时指定多个参数。 例3.4 data: interest_rate,inflation_rate = .085 .03; enddata,参数也可以在求解时交互输入:,例3.5 data: interest_rate,inflation_rate = .085 ?; enddata,指定属性为一个值,可以在数据声明的右边输入一个值来把所有的成员的该属性指定为一个值。 例3.6 sets: days /MO,TU,WE,TH,FR,SA,SU/:needs; endsets data: needs = 20; enddata LINGO 将用20 指定day

39、s 集的所有成员的needs 属性。,对于多个属性的情形,见下例。 例3.7 sets: days /MO,TU,WE,TH,FR,SA,SU/:needs,cost; endsets data: needs cost = 20 100; enddata,数据部分的未知数值,有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以便让LINGO 去求出它们的最优值。 例3.8 sets: years/15/: capacity; endsets data: capacity = ,34,20,; enddata 属性capacity 的第2 个和第3 个值分别为34 和20

40、,其余的未知。,3初始段(INIT section ),The values you input in the init section are used as starting points by LINGOs solver. 格式: INIT 赋值语句; ENDINIT,例3.9 init: X, Y = 0, .1; endinit Y=log(X); X2+Y2=1; 好的初始点会减少模型的求解时间。,4目标函数和约束条件,(1)目标函数: MAX/MIN=expression; (2)约束条件(基本语句): expression1 = 或 或 = 或 = expression2;,算

41、术运算符,算术运算符是针对数值进行操作的。LINGO 提供了5 种二元运算符: 乘方 乘 除 加 减 LINGO 唯一的一元算术运算符是取反函数“”。 运算的次序可以用圆括号“()”来改变。,5 函数,(1)常用的数学函数 ABS(X) SIGN(X) EXP(X) LOG(X) SIN(X) COS(X) TAN(X) SMIN(list) SMAX(list),(2) 集合(循环)函数:,格式: function( setname ( set_index_list) | condition : expression_list); 其中,condition代表逻辑表达式,可包含以下一些运算符

42、: #GT# (大于),#GE# (大于等于) #LT# (大于), #LE# (大于等于) #EQ#(等于),#NE#(不等于) 逻辑运算符 #NOT# #AND# #OR#,FOR,FOR ( setname ( set_index_list) | condition : expression_list); 例: SETS: TRUCKS / MAC, PETERBILT, FORD, DODGE/: HAUL; ENDSETS FOR( TRUCKS( T): HAUL( T) = 2500); 可生成如下四条约束: HAUL( MAC) = 2500 HAUL( PETERBILT)

43、= 2500 HAUL( FORD) = 2500 HAUL( DODGE) = 2500,SETS: NUMBERS /15/: VALUE, RECIPROCAL; ENDSETS DATA: VALUE = 3 4 2 7 10; ENDDATA FOR( NUMBERS( I): RECIPROCAL( I) = 1 / VALUE( I) );,FOR( NUMBERS( I) | VALUE( I) #NE# 0: RECIPROCAL( I) = 1 / VALUE( I);,SUM( setname ( set_index_list) | condition : express

44、ion_list);,SETS: VENDORS / V1 V2 V3 V4 V5 /: DEMAND; ENDSETS DATA: DEMAND = 5 1 3 4 6; ENDDATA TOTAL_DEMAND = SUM( VENDORS( J): DEMAND( J); 或TOTAL_DEMAND = SUM( VENDORS: DEMAND); DEMAND_3 = SUM( VENDORS( J) | J #LE# 3:DEMAND( J);,MIN( setname (set_index_list) | condition : expression_list); MAX( set

45、name ( set_index_list) | condition :expression_list);,(3)变量定界函数,BND(L,x,U) 限定 x=L ; x=U; BIN(x) 限制 x为0或1. FREE(x) 取消x的非负限制 GIN(x) 限制 x为整数,(4) 财务函数,(5) 概率函数 (6) 集操作函数 (7)文件输入输出函数,例:选址问题,某公司有6个建筑工地,位置坐标为(ai, bi) (单位:公里),水泥日用量di (单位:吨),假设:料场和工地之间有直线道路,用例中数据计算,最优解为,总吨公里数为136.2,线性规划模型,决策变量:ci j (料场j到工地i的运量)12维,选址问题:NLP,2)改建两个新料场,需要确定新料场位置(xj,yj)和运量cij ,在其它条件不变下使总吨公里数最小。,决策变量: ci j,(xj,yj)16维,非线性规划模型,LINGO模型的构成:4个段,集合段(SETS ENDSETS),数据段(DATA ENDDATA),初始段(INIT ENDINIT),目标与 约束段,局部最优:89.8835(吨公里 ),LP:移到数据段,边界,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1