Lingo详细教程.doc

上传人:人*** 文档编号:562737031 上传时间:2023-02-04 格式:DOC 页数:10 大小:325.50KB
返回 下载 相关 举报
Lingo详细教程.doc_第1页
第1页 / 共10页
Lingo详细教程.doc_第2页
第2页 / 共10页
Lingo详细教程.doc_第3页
第3页 / 共10页
Lingo详细教程.doc_第4页
第4页 / 共10页
Lingo详细教程.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《Lingo详细教程.doc》由会员分享,可在线阅读,更多相关《Lingo详细教程.doc(10页珍藏版)》请在金锄头文库上搜索。

1、第7章 LINGO软件入门7.1 LINGO 软件基本用法7.1.1 LINGO软件简介:LINGO软件是一套专门用于求解最优化问题的软件包.LINGO可用于求解线性规划(LP),二次规划(QP),非线性规划(NLP),整数规划(IP),动态规划,多目标规划等,特别是对于变量或约束条件较复杂的大规模模型,提供了较好的选择.LINGO还是最优化问题的一种建模语言,包括许多常用的数学函数可以调用,并可以接受其他数据文件(如文本文件、Excel电子表格文件、数据库文件等),同时LINGO提供了与电子表格软件(如Excel等)的接口,能够直接集成到电子表格中使用.即使对优化方面知识了解不多的用户,也能

2、够方便地建模和输入、有效地求解.7.1.2 LINGO基本用法:启动LINGO后,在主窗口上弹出标题为LINGO Model LINGO1 的窗口,称为LINGO 的模型窗口,建立的模型都要在该窗口内编码实现.例1.求解下列二次规划. 输入模型窗口LINGO1后的形式见下图.请注意以下几点:(1)LINGO总是根据“MAX=”或“MIN=”语句寻找目标函数,而其他语句都是约束条件(除注释语句和TITLE语句),所以语句顺序不重要.(2)LINGO中模型以“MODEL:”开始,以“END”结束.对简单的模型,这俩个语句也可以省略.(3)LINGO模型是由一系列语句组成,每个语句都以分号“;”结尾

3、.(4)LINGO中不分大小写字母;其变量和行名由不超过32个字符(数字和字母)组成,且以字母开头;(5)乘号不能省略,即系数与变量之间要加运算符“*”.(6)“!”开头的是注释行(注释语句),可以省略.(7)“”为用户自定义的行号或行名,放在每行之前,可以省略.(8)LINGO中以“”都是函数调用,GIN表示变量取正整数.默认情况下,LINGO规定变量是非负的.(我们将在后面详细介绍函数)(9)“TITLE”后加名字,可对此模型命名,可以省略. 现在我们用LINGO来解这个模型.点击工具条上的按钮,或从菜单中选择LINGO|Sovle即可.(若模型编译有错,会有提示)求解时会显示下图: 关闭

4、窗口,得到运行结果:Local optimal solution found at iteration:找到最优解时迭代的次数.Objective value:表示所求的最优目标值(11077.50).Variable:变量名Value:最优解中各变量( Variable)的值.Row:约束条件行名. Reduced Cost:当该非基变量增加一个单位时(其他非基变量保持不变)目标函数减少的量(对max型问题)Slack or Surplus:约束对应得松弛变量的值.(第三行取0,对于最优解来讲,第三个约束取等号,为紧约束) Dual Price:对偶价格的值.表示当对应约束有微小变动时,目标

5、函数的变化率,若其数值为,表示对应约束中不等式右端项若增加一个单位,目标函数将增加个单位(max 型问题).7.1.3 在LINGO中使用集合:1、LINGO模型的基本组成LINGO也是一种建模语言,称为矩阵生成器,通过集合的引入,它可使输入较大规模问题的过程得到简化.LINGO模型由5段组成:(1)、集合段:是用于定义变量.以“SETS:”开始,以“ENDSETS”结束.定义集合变量,元素,和属性.集合名/元素/:属性元素:类似于数组的下标.属性:定义集合的变量,类似于数组.属性之间必须用逗号或空格隔开.(2)、目标与约束段:定义目标函数,约束条件. (3)、数据段:用于给变量赋值.以“DA

6、TA:”开始,以“ENDDATA”结束.对集合的属性(数组)输入必要的常数数据. attribute list(属性) = value_list;(常数列表)(value_list)中数据用逗号或空格隔开.在此段也可引入参数,“变量名=?”,在运行时才对参数赋值.但这仅用于单个变量赋值,而不能用于属性变量(数组). (4)、初始段:以“init:”开始,以“endinit”结束.对集合的属性(数组)定义初值. (5)、计算段:以“CALC:”开始,以“ENDCALA”结束.对一些原始数据进行“预处理”.计算段中语句是顺序执行,不能交换位置.计算段中只能直接使用赋值语句.2、集合的定义:变量使用

7、之前需先定义,而LINGO中的变量是通过集合来定义的,变量皆为向量或由向量生成的二维数组.如:Demand/1.6/:a,b,d :集合名为Demand,共6个元素,a,b,d 为属于此集合的变量,其为含6个元素的向量.Supply/1,2/:x,y,e :集合名为Supply ,共2个元素,x,y,e 为属于此集合的变量,其为含2个元素的向量.基本集合Link(demand,supply):c :集合link 是由集合demand和 supply生成的新集合,为二维数组,其元素由demand和 supply的笛卡尔积构成,即共6*2=12个元素变量c即为6*2的矩阵派生集合例、某公司有6个建

8、筑工地,位置坐标为(ai, bi) (单位:公里),水泥日用量di(单位:吨)ia1.258.750.55.7537.25b1.250.754.7556.57.75d3547611现有2料场,位于A (5, 1), B (2, 7),记(xj,yj),j=1,2, 日储量ej各有20吨.假设从料场到工地之间均有直线道路相连,试制定每天的供应计划,即从A, B 两料场分别向各工地运送多少吨水泥,使总的吨公里数最小.解:设决策变量: (料场j到工地i的运量)则其为12维.则规划模型为其LINGO模型为:(1)集合段:我们定义需求点demand和供应点supply两个集合,分别有6个和2个元素,De

9、mand/1.6/:a,b,d; 其中a为该集合的属性(变量),表示6个工地位置的横坐标的集合,是一个有6个元素的向量.Supply/1,2/:x,y,e; 其中x该集合的属性(变量),表示2个料场位置的横坐标的集合,是一个有2个元素的向量.运送量的集合是一个6*2 的矩阵,它需要利用集合demand和supply,定义一个新集合,定义为这个新集合的属性:Link(demand,supply):c;(2)数据段:给已知变量赋值.如a,b=1.25,1.25,8.75,0.75,0.5,4.75,5.75,5,3,6.5,7.25,7.75;也可写成a=1.25,8.75,0.5,5.75,3,

10、7.25; b=1.25,0.75,4.75,5,6.5,7.75;注 LINGO对数据是按列赋值的,而不是按行.分割数据可用空格,逗号,回车.(3)目标与约束段:目标函数用LINGO语句表示为:min=sum(link(i,j):c(i,j)*(x(j)-a(i)2+(y(j)-b(i)2)(1/2);sum:求和函数.这个函数的功能是对语句中冒号“:”后面的的表达式,按照“:”前面的集合指定的下标进行求和.“sum”相当于,“link(i,j)”相当于“i,j link”约束条件用LINGO语句表示为:for(demand(i): sum(supply(j):c(i,j) =d(i););

11、for:循环函数.意思是对冒号“:”前面的集合的每个元素(下标),对于“:”后面的约束关系式都要成立.注 for和sum可以嵌套使用.free 函数取消了变量x,y非负限制.(4)初始段:“X ,Y =5,1,2,7;”语句的实际赋值顺序是X=(5,2),Y=(1,7).作为寻找最优解的起始值.模型如下:MODEL:Title Location Problem;sets: demand/1.6/:a,b,d; supply/1.2/:x,y,e; link(demand,supply):c;endsetsdata:!locations for the demand(需求点的位置);a=1.25

12、,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;!quantities of the demand and supply(供需量);d=3,5,4,7,6,11; e=20,20;enddatainit:!initial locations for the supply(初始点);x,y=5,1,2,7;endinit!Objective function(目标);OBJ min=sum(link(i,j): c(i,j)*(x(j)-a(i)2+(y(j)-b(i)2)(1/2) );!demand constraints(需求约束);fo

13、r(demand(i): sum(supply(j):c(i,j) =d(i););!supply constraints(供应约束);for(supply(i): sum(demand(j):c(j,i) =e(i); );for(supply: bnd(0.5,X,8.75); bnd(0.75,Y,7.75); );END运行,得局部最优解X(1)=7.249997,X(2)=5.695940,Y(1)=7.749998,Y(2)=4.928524,最小运量=89.8835(吨公里).NLP中局部最优解不一定就是全局最优解,可通过“LINGO|Options|Global Solver|

14、Use Global Solver”菜单命令激活全局最优求解程序.7.1.4 LINGO的运算符和函数:在此我们主要介绍前六种函数1、算术运算符及其优先级:算术运算符:+(加法),(减法或负号),*(乘法),/(除法)求幂)关系运算符:(即(即=,大于等于)逻辑运算符:#AND#(与),#OR#(或),#NOT#(非),#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于).结果只有“真”(1)和“假”(0)两个值。(用在循环语句中,及过滤条件)优先级运算符最高#not# (负号)* /+ -#EQ# #NE# #GT# #GE# #LT# #LE#AND# ,#OR#最低2、数学函数: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时,返回不超过x的最大整数;当x0 时,返回不低于x 的最大整数.smax(x1,x2,xn) 返回x

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号