lINGO11使用
lingo教程
lingo教程LINGO是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门安装:实验室的所有电脑都已经事先安装好了Lingo 8(或者9,10,11)。
如果要在自己的电脑上安装这个软件,建议从网上下载一个破解版的,按照提示一步一步地安装完毕。
简单例子:当你在windows系统下开始运行LINGO时,会得到类似于下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model –LINGO1的窗口是LINGO的默认模型窗口,建立的模型都要在该窗口内编码实现。
下面举两个例子。
例1 某工厂在计划期内要安排生产I、II两种产品,已知生产单位产品所需的设备台时及A、B两种原材料的消耗,如表所示。
产品I 产品II 设备 1 2 8台时原材料A 4 0 16kg 原材料B 0 4 12kg工厂每生产一件产品I可获利2元,每生产一件产品II可获利3元,问应该如何安排生产计划使该厂获利最多?我们用下面的数学模型来描述这个问题。
设x_1、x_2分别表示在计划期内产品I、II的产量。
因为设备的有效台时是8,这是一个限制产量的条件,所以在确定产品I、II的产量时,要考虑不超过设备的有效台时数,即可用不等式表示为x_1 + 2x_2 <=8 同理,因原材料A、B的限量,可以得到以下不等式4x_1 <=16 4x_2 <=12 该工厂的目标是在不超过所有资源限量的条件下,如何确定产量x_1、x_2以得到最大的利润。
若用z表示利润,这时z=2x_1+3x_2.综合上述,该计划问题可用数学模型表示为:目标函数max z=2x_1+3x_2约束条件x_1+2x_2<=84x_1 <=16 4x_2 <=12 x_1、x_2 >=0 一般来说,一个优化模型将由以下三部分组成:1. 目标函数(Objective Function):要达到的目标。
LINGO软件的使用方法
2
2
答案
model: max=98*x1+277*x2-x1^2 -0.3*x1*x2-2*x2^2; x1+x2<100; x1<2*x2; @gin(x1); @gin(x2); end ※@gin()是调用的整数函数
第三节 在LINGO中使用集合
• 例题:某公司要决定下四个季度帆船生 产量。下四个季度需求量分别是40条, 60条,75条,25条。每季度生产能力40 条,生产费用400美元/条,如果加班生产 费用450美元/条,每季度库存费20美元/ 条。假定生产提前期为0,初始库存10条, 问如何安排生产总费用最小?
显式列举法 元素列表 隐式列举法
第四节 运算符及其优先级
• 算术运算符:+,-,*,/,^ • 逻辑运算符: #AND#,#OR#.#NOT#,#EQ#,#NE#,#GT#,# GE#,#LT#,#LE#,TRUE,FALSE • 关系运算符:<(即<=),=,>(即>=)
优先级
优先级 表: 最高 运算符 #NOT#,-(负号) ^ *,/ +,-(减号) #EQ#,#NE#,#GT#,#GE#, #LT#,#LE# #AND#,#OR# <,=,>
集合循环函数
• 用法:@function(setname:expression_list); • 具体如下:@for @sum @max @min
变量界定函数
• • • • @BND(L,X,U)-限制L<=X<=U @BIN(X)-限制X为0或1 @FREE(X)-取消对X的符号限制 @GIN(X)-限制X为整数
• • • • • • • • • 以model:开始,以end结束。 不区分大小写。 目标函数为max=。 语句以;结束。 数与变量之间的乘号不能省。 约束S.t.省略不写。 <与<=,>与>=是等价的。 非负约束可以不输入。 说明语句以!开头。
LINGO的使用方法说明大全
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求解模型之前为其指定值.数据部分以关键字“data:”开始,以关键字“enddata”结束.(3) 目标与约束段:这部分用来定义目标函数与约束条件等.该部分没有开始与结束的标记.主要就是要用到LINGO的内部函数,尤其就是与集合有关的求与与循环函数等.(4)初始段:这个部分要以关键字“INIT:”开始,以关键字“ENDINIT”结束,它的作用就是对集合的属性定义一个初值.在一般的迭代算法中,如果可以给一个接近最优解的初始值,会大大减少程序运行的时间.(5) 数据预处理段:这一部分就是以关键字“CALC:”开始,以关键字“ENDCALC”结束.它的作用就是把原始数据处理成程序模型需要的数据,它的处理就是在数据段输入完以后、开始正式求解模型之前进行的,程序语句就是按顺序执行的.3、2 LINGO中集合的概念在对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具与雇工等等.LINGO允许把这些相联系的对象聚合成集(sets).一旦把对象聚合成集,就可以利用集来最大限度地发挥LINGO建模语言的优势.现在将深入介绍如何创建集,并用数据初始化集的属性.3、2、1集的构成集就是LINGO建模语言的基础,就是程序设计最强有力的基本构件.借助于集能够用一个单一的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型.集就是一群相联系的对象,这些对象也称为集的元素.一个集可能就是一系列产品、卡车或雇员.每个集的元素可能有一个或多个与之有关联的特征,把这些特征称为属性.属性值可以预先给定,也可以就是未知的,有待于LINGO求解的.LINGO有两种类型的集:原始集(primitive set)与派生集(derived set).一个原始集就是由一些最基本的对象组成的.一个派生集就是用一个或多个其它集来定义的,也就就是说,它的元素来自于其它已存在的集.3、2、2模型的集部分集部分在程序中又称为集合段,它就是LINGO模型的一个可选部分.在LINGO模型中使用集之前,必须在集部分事先定义.集部分以关键字“sets:”开始,以“endsets”结束.一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分.一个集部分可以放置于模型的任何地方,但就是一个集及其属性在模型约束中被引用之前必须先定义.(1)原始集的定义为了定义一个原始集,必须详细说明集的名字,而集的元素与相应的属性就是可选的.定义一个原始集,用下面的语法:setname[/member_list/][:attribute_list];注意:用“[]”表示该部分内容就是可选的(下同).Setname就是用来标记集的名字,最好具有较强的可读性.集名字必须严格符合标准命名规则:以拉丁字母或下划线为首字符,其后由拉丁字母、下划线、阿拉伯数字组成的总长度不超过32个字符的字符串,且不区分大小写.注意:该命名规则同样适用于集元素名与属性名等的命名.Member_list就是集元素的列表.如果集元素放在集定义中,那么对它们可采取显式与隐式罗列两种方式.如果集元素不放在集定义中,那么可以在随后的数据部分定义.①当显式罗列元素时,必须为每个元素输入一个不同的名字,中间用空格或逗号隔开,允许混合使用.例3、1 定义一个名为friends的原始集,它具有元素John,Jill,Rose 与Mike,其属性有sex与age: sets:friends/John Jill, Rose Mike/: sex, age;endsets②当隐式罗列元素时,不必罗列出每个集元素.可采用如下语法:setname/member1、、member N/[: attribute_list];这里的member1就是集的第一个元素名,member N就是集的最后一个元素名.LINGO将自动产生中间的所有元素名.LINGO也接受一些特定的首元素名与末元素名,用于创建一些特殊的集.③集元素不放在集定义中,而在随后的数据部分来定义.例3、2!集部分;sets:friends:sex,age;endsets!数据部分;data:friends,sex,age=John,1,16 Jill,0,14 Rose,0,17 Mike,1,13;enddata注意:开头用感叹号(!),末尾用分号(;)表示注释,可跨多行.在集部分只定义了一个集friends,并未指定元素.在数据部分罗列了集元素John,Jill,Rose与Mike,并对属性sex与age分别给出了值.集元素无论用何种字符标记,它的索引都就是从1开始连续计数.在attribute_ list可以指定一个或多个集元素的属性,属性之间必须用逗号隔开.LINGO内置的建模语言就是一种描述性语言,用它可以描述现实世界中的一些问题,然后再借助于LINGO求解器求解.因此,集属性的值一旦在模型中被确定,就不可能再更改.只有在初始部分中给出的集属性值在以后的求解中可更改.这与前面并不矛盾,初始部分就是LINGO求解器的需要,并不就是描述问题所必须的.。
lingo使用教程
注意:用“[]”表示该部分内容可选。下同,不再赘述。
Setname 是你选择的来标记集的名字,最好具有较强的可读性。集名字必须严格符合标 准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z) 、下划线、阿拉 伯数字(0,1,„,9)组成的总长度不超过 32 个字符的字符串,且不区分大小写。
min s.t.
2 x1 3 x 2 x1 x 2 350 x1 100
2 x1 x 2 600 x1 , x 2 0
在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例 1.2 使用 LINGO 软件计算 6 个发点 8 个收点的最小费用运输问题。产销单位运价如 下表。 单 位 销地 运 B1 B2 B3 B4 B5 B6 B7 B8 产量 价 产地
使用 LINGO 软件,编制程序如下:
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软件使用教程
为了定义一个原始集,必须详细声明: ·集的名字 ·可选,集的成员 ·可选,集成员的属性 定义一个原始集,用下面的语法: setname[/member_list/][:attribute_list]; 注意:用―[]‖表示该部分内容可选。下同,不再赘述。 2.1.3 派生集 为了定义一个派生集,必须详细声明: ·集的名字 ·父集的名字 ·可选,集成员 ·可选,集成员的属性 可用下面的语法定义一个派生集: setname(parent_set_list)[/member_list/][:attribute_list]; setname 是集的名字。parent_set_list 是已定义的集的列表,多个时必须用逗号隔开。如果没 有指定成员列表,那么 LINGO 会自动创建父集成员的所有组合作为派生集的成员。派生集 的父集既可以是原始集,也可以是其它的派生集。 例 sets: product/A B/; machine/M N/; week/1..2/; allowed(product,machine,week):x; endsets LINGO 生成了三个父集的所有组合共八组作为 allowed 集的成员。列表如下: 编号 成员 1 (A,M,1) 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)
数值列(value_list)包含要分配给对象列中的对象的值,用逗号或空格隔开。注意属性 值的个数必须等于集成员的个数。看下面的例子。 例
sets: set1/A,B,C/: X,Y; endsets data: X=1,2,3; Y=4,5,6;
enddata 在集 set1 中定义了两个属性 X 和 Y。X 的三个值是 1、2 和 3,Y 的三个值是 4、5 和 6。也 可采用如下例子中的复合数据声明(data statement)实现同样的功能。 例 sets:
如何使用Lingo11
集合的基本用法和 LINGO模型的基本要素
例 SAILCO 公司需要决定下四个季度的帆船生产量。下四 理解 LINGO 建模语言最重要的是理解集合(Set)及 个季度的帆船需求量分别是 40条,60条,75条,25条,这 其属性(Attribute)的概念。 些需求必须按时满足。每个季度正常的生产能力是40条帆 船,每条船的生产费用为400美元。如果加班生产,每条 船的生产费用为450美元。每个季度末,每条船的库存费 用为20美元。假定生产提前期为0,初始库存为10条船。 如何安排生产可使总费用最小? 用DEM,RP,OP,INV分别表示需求量、正常生产的产量、 加班生产的产量、库存量,则DEM,RP,OP,INV对每个季 度都应该有一个对应的值,也就说他们都应该是一个由4 个元素组成的数组,其中DEM是已知的,而RP,OP,INV是 未知数。
lINGO11使用
6
稠密集合与稀疏集合
包含了两个基本集合构成的所有二元有序对的派生集合 称为稠密集合(简称稠集)。有时候,在实际问题中,一 些属性(数组) 只在笛卡儿积的一个真子集合上定义,这 种派生集合称为稀疏集合(简称疏集)。
D:稀疏集合ROADS对应的属性变量(给定的距离)
本例的计算 S
L A1 6, L A2 3, L A3 3;
56 6 A2 8 3 6 7 3 A3 4
A1
B1
7 B2
6 8 9
C1 5 C2 6 T
L B1 min L A1 6, L A2 8, L A3 7 10 L A3 7; L B 2 min L A1 5, L A2 6, L A3 4 7 L A3 4; L C1 min L B1 6, L B 2 8 15 L B 2 8; L C 2 min L B1 7, L B 2 9 16 L B 2 9; L T min L C 1 5, L C 2 6 20 L C 1 5.
LINGO软件的基本使用方法
LINGO入门
LINGO的界面
• LINGO软件的主窗口(用 户界面),所有其他窗口 都在这个窗口之内。
• 当前光标 的位置 • 模型窗口(Model Window),用于输入 LINGO优化模型(即 LINGO程序)。
• 状态行(最左边显 示“Ready”,表示 “准备就绪”)
a b d
建立模型 记工地的位置为 ( a , b ) ,水泥日用量为 d , i 1, 6 ;料场 位置为( x , y ) ,日储量为 e , j 1, 2 ;从料场 j 向工地 i 的 运送量为 c 。
LINGO使用说明(比较简单)
@sum( xb1(j) : a(i,j)*x(j)) +c(i) <= b(i);
); 同时我们在E盘新建了一个名为DATA.XLS的EXCLE文件;关于 EXCLE的使用,这里不更多说明。需要指出的是‘ DA ’ , ‘ DB ’ , ‘ DC ’是EXCLE中对一系列单元格的命名,即先选中某个一维或多维单元格 区域,然后再在显示单元格行列坐标的文本框中写入对这个区域的命 名,再回车确认。这样就可以通过这个命名来控制访问EXCLE的数据 了。至于另一种操作方法请查找相关的help文件。 以上只是介绍了LINGO基本的知识,上面的程序未经调试,可能存 在一些问题!还有希望大家能尽可能使用help文件,在其中有着详细的 解答!
相应Lingo代码如下: @max( xb1( i ) : b( i )*c( i ) ) <=33 ;
同样MAX语句也可以用于多维变量。 4.MIN语句:
MIN语句的功能是从一组取值与下标有关的表达式中返回它们 的最小值。用法与MAX的相同。
三.EXCEL电子表格接口
在你解决一个模型的时候,或许会有大量的数据要整合到你的 代码中去,而这些数据大部分时候会被保存在电子表格中。而且 EXCEL也是用来处理你所得到的数据较好的一个选择。出于上述原
当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗 口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将 被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的 窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实 现。 示例:求解线性规划问题:
LINGO使用教程
LINGO 使用教程LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++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 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
LINGO软件的基本使用方法(20140217)
• 运行状态窗口
优化建模 当前模型的类型 :LP,QP,ILP,IQP,PILP, PIQP,NLP,INLP,PINLP (以I开头表示 IP,以PI开头表示PIP) 当前解的状态 : "Global Optimum", "Local Optimum", "Feasible", "Infeasible“(不可行), "Unbounded“(无界), "Interrupted“(中断), "Undetermined“(未确定) 当前约束不满足的总量(不是不 满足的约束的个数):实数(即使 该值=0,当前解也可能不可行, 因为这个量中没有考虑用上下界 命令形式给出的约束)
优化建模
文件输入输出函数
• @FILE(filename) 当前模型引用其他ASCII码文件中的数据或 文本时可以采用该语句(但不允许嵌套使用),其中filename 为存放数据的文件名,该文件中记录之间用“~”分开。 • @ODBC 提供LINGO与ODBC(Open Data Base Connection, 开放式数据库连接)的接口。 • @OLE 提供LINGO与OLE(Object Linking and Embeding)接 口。 • @POINTER( N)在Windows下使用LINGO的动态连接库DLL , 直接从共享的内存中传送数据。 • @TEXT(['filename']) 用于数据段中将解答结果送到文本文件 filename中,当省略filename时,结果送到标准的输出设备(通 常就是屏幕)。filename中可以带有文件路径,没有指定路径 时表示在当前目录,如果这个文件已经存在,将会被覆盖。
1 2 3 4
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使用教程
L I N G O使用教程(总59页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除LINGO 使用教程LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例 如何在LINGO 中求解如下的LP 问题:⎪⎪⎩⎪⎪⎨⎧≥≤+≥≥++0,6002100350..32min212112121x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600;然后点击工具条上的按钮 即可。
例使用LINGO软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如下表。
使用LINGO软件,编制程序如下: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 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
lingo11课程设计
lingo11课程设计一、教学目标本课程的教学目标是让学生掌握lingo11的基本概念和应用,包括其语法、功能和操作方法。
学生应该能够熟练地使用lingo11进行简单的编程和问题求解。
此外,学生还应该通过学习本课程,培养逻辑思维能力、问题解决能力和创新意识。
具体来说,知识目标包括:1.理解lingo11的基本语法和结构。
2.掌握lingo11的基本数据类型和运算符。
3.学会使用lingo11进行简单的输入输出操作。
4.理解lingo11的控制语句和函数。
技能目标包括:1.能够使用lingo11编写简单的程序,解决实际问题。
2.能够阅读和理解lingo11程序代码。
3.能够对lingo11程序进行调试和优化。
情感态度价值观目标包括:1.培养学生的团队合作意识和沟通能力。
2.培养学生的创新意识和问题解决能力。
3.培养学生的自主学习能力和持续学习的意识。
二、教学内容本课程的教学内容主要包括lingo11的基本概念、语法和应用。
具体的教学大纲如下:1.引言:介绍lingo11的发展历程和应用领域,激发学生的学习兴趣。
2.基本语法:介绍lingo11的基本语法和结构,包括数据类型、变量、运算符等。
3.输入输出操作:讲解lingo11的输入输出操作,包括文件的读写和图形界面的设计。
4.控制语句:讲解lingo11的控制语句,包括条件语句、循环语句等。
5.函数:讲解lingo11的函数,包括用户自定义函数和内建函数。
6.编程实践:通过实际案例和项目,让学生运用lingo11解决实际问题。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式进行教学。
包括:1.讲授法:教师通过讲解lingo11的基本概念和语法,引导学生理解相关知识。
2.案例分析法:通过分析实际案例,让学生学会如何使用lingo11解决实际问题。
3.实验法:安排实验课,让学生亲自动手编写程序,培养实际操作能力。
4.小组讨论法:学生进行小组讨论,促进学生之间的交流与合作。
LINGO的基本用法
LINKS (WH, VD) :C, X;
注: 如果集合的元素省略不写, 则默认衍生集合的元素取它所 对应初始集合的所有可能组合.
18
2. 数据初始化.
LINGO 教 程
如何给例2中的集合AI, DJ, C, X赋值?
DATA: AI = 60, 55, 51, 43, 41, 52; DJ = 35, 37, 22, 32, 41, 32, 43, 38; C = 6, 2, 6, 7, 4, 2, 5, 9 4, 9, 5, 3, 8, 5, 8, 2
22 逻辑运算符优先级别:#NOT#最高, #AND#和#OR#最低
例. 计算 2 #GT# 3 #AND# 4 #GT# 2
LINGO 教 程
结果为 0(FALSE)
3. 关系运算符.
关系运算符通常用在条件表达式中,用来指定约束条件表 达式左边与右边必须满足的关系. 有以下三种:
= <= >=
注:①LINGO没有单独的“<”和“>”关系,如果出现了单 个
j 1
6
xij d j , j 1, 2, ,8;
i 1
xij 0,,i 1, 2, , 6, j 1, 2, ,8;
16
1. 集合定义部分
LINGO 教 程
集合是一组相关对象构成的组合
集合分为初始(基本\原始)集合和衍生(派生)集合
集合在使用之前需要预先给出定义, 初始集合的定义三要素: 集合的名称, 集合的元素, 集合的属性(可视为与该集合有关 的变量或常量).
②“如<”果和需“要>”严,格L小IN(GO大认)为于是关省系略,了如“A=严”格. 小于B,可
以表示成:A B
LINGO使用指南
LINGO 使用指南LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++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 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
Lingo的基本使用方法
加上变量的非负约束
注:LINGO中没有数组,只能对每个季度分别定义变量,如正常 产量就要有RP1,RP2,RP3,RP4 4个变量等。写起来就比较麻烦 ,尤其是更多(如1000个季度)的时候。
记四个季度组成的集合QUARTERS={1,2,3,4},它们就是上 面数组的下标集合,而数组DEM,RP,OP, INV对集合QUARTERS中 的每个元素1,2,3,4分别对应于一个值。LINGO正是充分利用 了这种数组及其下标的关系,引入了“集合”及其“属性”的概 念,把QUARTERS={1,2,3,4}称为集合,把DEM,RP,OP, INV 称为该集合的属性(即定义在该集合上的属性)。
当前时间
一个简单的LINGO程序
例1 直接用LINGO来解如下二次规划问题:
Max98x127x72x120.3x1x22x22 1
s.t. x1x2100
2
x12x2
3
x1,x20 为整数
4
输入窗口如下:
程序语句输入的备注:
LINGO总是根据“MAX=”或“MIN=”寻找目标函数,而除 注释语句和TITLE语句外的其他语句都是约束条件,因此语句 的顺序并不重要 。 限定变量取整数值的语句为“@GIN(X1)”和“@GIN(X2)”, 不可以写成“@GIN(2)”,否则LINGO将把这个模型看成没有 整数变量。 LINGO中函数一律需要以“@”开头,其中整型变量函数( @BIN、@GIN)和上下界限定函数(@FREE、@SUB、@SLB )与LINDO中的命令类似。而且0/1变量函数是@BIN函数。
因为这个量中没有考虑用上下界 命令形式给出的约束)
运行状态窗口
扩展 的求 解器( 求解 程序) 状态 框
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
D:稀疏集合ROADS对应的属性变量(给定的距离)
本例的计算 S
L A1 6, L A2 3, L A3 3;
56 6 A2 8 3 6 7 3 A3 4
A1
B1
7 B2
6 8 9
C1 5 C2 6 T
L B1 min L A1 6, L A2 8, L A3 7 10 L A3 7; L B2 min L A1 5, L A2 6, L A3 4 7 L A3 4; L C1 min L B1 6, L B2 8 15 L B2 8; L C2 min L B1 7, L B2 9 16 L B2 9; L T min L C1 5, L C2 6 20 L C1 5.
一个简单的LINGO程序
LINGO的基ห้องสมุดไป่ตู้用法的几点注意事项
•LINGO中不区分大小写字母;变量和行名可以超过8个字符,但 不能超过32个字符,且必须以字母开头。 •用LINGO解优化模型时已假定所有变量非负(除非用限定变量取 值范围的函数@free或@sub或@slb另行说明)。 •变量可以放在约束条件的右端(同时数字也可放在约束条件的左 端)。但为了提高LINGO求解时的效率,应尽可能采用线性表达 式定义目标和约束(如果可能的话)。 •语句是组成LINGO模型的基本单位,每个语句都以分号结尾,编 写程序时应注意模型的可读性。例如:一行只写一个语句,按照 语句之间的嵌套关系对语句安排适当的缩进,增强层次感。 •以感叹号开始的是说明语句(说明语句也需要以分号结束))。
问题:最小运量89.8835是不是全局最优
为减少计算工作量,对X,Y的取值再做一些限制。虽然理论上 此时目标函数值的下界(Obj 新建料场的位置可以是任意的,但显然最佳的料场位置不应该离 Bound=85.2638)与目前得到的最 工地太远,至少不应该超出现在6个工地所决定的坐标的最大、 好的可行解的目标函数值(Best 最小值决定的矩形之外,即: Obj=85.2661)相差已经非常小,可 0.5<=x<=8.75, 0.75<=y<=7.75. 以认为已经得到了全局最优解。 可以用@bnd函数加 上这个条件取代模型 END上面的行,运行 NLP模型,全局最优 求解程序花费的时间 仍然很长,运行27分 35秒时人为终止求解 (按下“Interrupt Solver”按钮)得到左 边模型窗口和全局求 解器的状态窗口
ij ij
输入程序
定义了三个集合,其中LINK在前 两个集合DEMAND 和SUPPLY的 基础上定义 表示集合LINK中的元素就是集合DEMAND 和SUPPLY的元素组合成的有序二元组, 从数学上看LINK是DEMAND 和SUPPLY的笛 卡儿积,也就是说 LINK={(S,T)|SDEMAND,TSUPPLY} 因此,其属性C也就是一个6*2的矩阵(或者 说是含有12个元素的二维数组)。
输入程序
定义目标和约束,与前例的方法是类似(这里 包含了派生集合),请特别注意进一步体会集 合函数@SUM和@FOR的用法。 在程序开头用TITLE语句 对这个模型取了一个标题 由于新建料场的位置理论上讲可以是任意的, “LOCATION PROBLEM; 所以在约束的最后(模型的“END”语句上面 并且对目标行([OBJ])和 的一行)用@free函数取消了变量X、Y的非负 限制 两类约束 (DEMAND_CON、 SUPPLY_CON)分别进行 了命名(请特别注意这里约 束命名的特点)。
a b d
建立模型 记工地的位置为 (a , b ) ,水泥日用量为 d , i 1,6 ;料场 位置为( x , y ) ,日储量为 e , j 1,2 ;从料场 j 向工地 i 的 运送量为 c 。
i i
i
j
j
j
ij
MIN s.t.
f cij
j 1 i 1
2
6
x
j
ai y j bi
• 当前时间
一个简单的LINGO程序
例 直接用LINGO来解如下二次规划问题:
2 Max 98 x1 277 x2 x12 0.3 x1 x2 2 x2
s.t.
x1 x2 100 x1 2 x2 x1 , x2 0 为整数
1 2 3 4
输入窗口如下:
LINGO软件的基本使用方法
LINGO入门
LINGO的界面
• LINGO软件的主窗口(用 户界面),所有其他窗口 都在这个窗口之内。
• 当前光标 的位置 • 模型窗口(Model Window),用于输入 LINGO优化模型(即 LINGO程序)。
• 状态行(最左边显 示“Ready”,表示 “准备就绪”)
输入程序
同理,数据段中对常数数组A,B的赋值语句也可以写成 A, B=1.25 1.25 8.75 0.75 0.5 4.75 5.75 5 3 6.5 7.25 7.75;
初始段
INGO对数据是按列赋值的 语句的实际赋值顺序是 X=(5,2), Y=(1,7), 而不是 X=(5,1), Y=(2,7) 等价写法: “X=5,2; Y=1,7;”
•LINGO中函数一律需要以“@”开头,其中整型变量 函数(@BIN、@GIN)和上下界限定函数(@FREE、 @SUB、@SLB),@BIN函数在0-1规划中有广泛应 用@BND( L,X,U)表示L<=X<=U
输出结果: 运行菜单命令“LINGO|Solve”
最大利润=11077.5
最优整数解 X=(35,65)
程序语句输入的备注:
•LINGO总是根据“MAX=”或“MIN=”寻找目标函数, 而除注释语句和TITLE语句外的其他语句都是约束条 件,因此语句的顺序并不重要 。 •限定变量取整数值的语句为“@GIN(X1)”和 “@GIN(X2)”,不可以写成“@GIN(2)”,否则 LINGO将把这个模型看成没有整数变量。
6 5 4 3 2 1 0 20 4 7 3 5 0 1 2 3 4 5 6 7 8 9
6
稠密集合与稀疏集合
包含了两个基本集合构成的所有二元有序对的派生集合 称为稠密集合(简称稠集)。有时候,在实际问题中,一 些属性(数组) 只在笛卡儿积的一个真子集合上定义,这 种派生集合称为稀疏集合(简称疏集)。
解答:运行菜单命令“LINGO|Solve” 局部最优解X(1)=7.249997, X(2)=5.695940, Y(1)=7.749998, Y(2)=4.928524,C(略), 最小运量=89.8835(吨公里)。
问题:最小运量89.8835是不是全局最优 是用“LINGO|Options”菜单命令打开选项对话框,在 “Global Solver”选项卡上选择“Use Global Solver”, 激 活全局最优求解程序。
A1
B1 7 B2
6 8 9
C1 5 C2 6 T
分析 S
56 6 A2 8 3 6 7 3 A3 4
A1
B1
7 B2
6 8 9
C1 5 C2 T
6
假设从S到T的最优行驶路线 P 经过城市C1, 则P中从S到C1的子路 也一定是从S到C1的最优行驶路线; 假设 P 经过城市C2, 则P中从S到C2的子路也一定是从S到C2的最优 行驶路线. 因此, 为得到从S到T的最优行驶路线, 只需要先求出从S到Ck(k=1,2) 的最优行驶路线, 就可以方便地得到从S到T的最优行驶路线. 同样,为了求出从S到Ck(k=1,2)的最优行驶路线, 只需要先求出从S 到Bj(j=1,2)的最优行驶路线; 为了求出从S到Bj(j=1,2)的最优行驶路线, 只需要先求出从S到Ai (i=1,2,3)的最优行驶路线. 而S到Ai(i=1,2,3)的最优行驶路线是很容 易得到的(实际上, 此例中S到Ai(i=1,2,3)只有唯一的道路)
分析 S
56 6 A2 8 3 6 7 3 A3 4
A1
B1
7 B2
6 8 9
C1 5 C2 T
6
此例中可把从S到T的行驶过程分成4个阶段,即 S→Ai (i=1,2或3), Ai → Bj(j=1或2), Bj → Ck(k=1或2), Ck → T. 记 d(Y,X)为城市Y与城市X之间的直接距离(若这两个城市之 间没有道路直接相连,则可以认为直接距离为∞),用 L(X)表示城市S到城市X的最优行驶路线的路长:
2
2
1 2 3
j j
c
j 1 6
2
ij
d i , i 1, 2, L , 6 e j , j 1, 2
c
i 1
ij
使用现有临时料场时,决策变量只有 c ij (非负),所以这是LP模型;当为新 建料场选址时决策变量为 c ij 和 x , y ,由于目标函数 f 对 x , y 是非线性的, 所以在新建料场时是NLP模型。先解NLP模型,而把现有临时料场的位置作 为初始解告诉LINGO。
在LINGO中使用集合
基本集合与派生集合
例 建筑工地的位置(用平面坐标a, b表示,距离单位:公 里)及水泥日用量d(吨)下表给出。有两个临时料场位于P (5,1), Q (2, 7),日储量各有20吨。从A, B两料场分别向各 工地运送多少吨水泥,使总的吨公里数最小。两个新的 料场应建在何处,节省的吨公里数有多大? 1 1.25 1.25 3 2 8.75 0.75 5 3 0.5 4.75 4 4 5.75 5 7 5 3 6.5 6 6 7.25 7.75 11
L S 0;
L X min L Y d Y , X ,
YX