《lingo入门》PPT课件.ppt
《《lingo入门》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《lingo入门》PPT课件.ppt(122页珍藏版)》请在三一文库上搜索。
1、Lingo优化软件入门,(商用版) 舒兴明,一、Lindo/Lingo软件简介,1、美国芝加哥大学的Linus Schrage教授于1980年前后开发的专门用于求解最优化问题的软件包,后经多年完善与扩充,并成立了LINDO系统公司进行商业运作取得巨大成功。根据 LINGO公司主页(http:/)提供的信息,位列财富杂志500强的企业中,有一半以上使用Lingo优化软件,前25强有23企业使用Lingo优化软件。用户可以在 主页自由下载各类子包的演示版和应用 例子。演示版和正式版功能类似,只是求解问题规模受到限制。各类版本的限制如下表,LINGO是英文Linear Interactive and
2、 General Optimizer首写字母的缩写,即“交互式线性和通用化求解器”。,2、Lindo/Lingo软件内部有以下4个求解程序用于求解不同类型的优化模型,(1)直接求解器(Direct Solver);,(2)线性优化求解程序(Linear Solver);,(3)非线性优化求解程序(Nonlinear Solver);,(4)分支定界管理程序(Branch and Bound Manager)。,对于已经输入的一个优化模型,一旦发出求解指令,第一步是对等式约束的直接处理,例如,如果约束中有三个等式约束,Xyz=30, X+y=8, Y=5,则Lingo软件能直接确定y=5,x=3
3、,z=2,这三个变量就变成常数了。这样就尽量减少模型的规模(变量数和约束数),从而使得求解更加有效快捷。第二步就是识别模型的类型,根据类型调用不同的处理器来求解。,而处理器识别模型会在计算界面给出说明:,LP:线性规划模型 QP:二次规划模型 NLP:非线性规划 ILP:整数线性规划 INLP:整数非线性规划 IQP:整数二次规划,二、建立优化模型应注意的几个问题,1、尽量使用实数优化模型,尽量减少整数约束和整数变量的个数;,2、尽量使用光滑优化模型,尽量避免使用非光滑函数;,尽量少用绝对值函数(|x|)、符号函数(当x0时,函数为1)、多个变量求最大(或最小)、四舍五入函数、取整函数等。,3
4、、尽量使用线性优化模型,尽量减少非线性约束和非线性变量(非线性约束中的变量)的个数;,4、合理设定变量的上下界,避免计算陷入“大海捞针”。,5、模型中使用的单位的数量级要适当,Lingo计算时,最大数尽量不要超过最小数的1000倍,如果出现100000000与0.1的计算,误差很大!小数湮没于大数!,例1,例1 化下列非线性规划化为线性规划,解,令,,代入原规划模型,得,解,设,,由此解得,同理,有,代入模型,注意增加约束,解,令,,则此约束的充分条件是,所以,原模型等价于,最高分越低越好!,解 设,,此约束等价于,所以原模型等价于,最低分越高越好!,三、编写一个简单的lingo程序,1、安装
5、lingo优化软件,根据一般的程序安装方法,运行setup.exe文件,只要按照提示步骤,就可以顺利安装完毕。在第一次运行lingo(这里以lingo8.0为例)需要你输入密码(安装序列号),如果没有,就只有使用演示版(试用版),假设你购买的是正版,把复制好地秘密粘贴到此窗口即可。,2、编写一个简单的LINGO程序,例2 在lingo的编辑窗口输入如下规划(二次规划),x1+x2100; x12*x2; max=98*x1+277*x2-x12-0.3*x1*x2-2*x22; gin(x1);gin(x2);,例2,根据上面的书写格式,归纳如下:,(1)Lingo总是根据“max=“或”mi
6、n=“语句寻找目标函数,其它语句都是约束条件(注释句除外),即输入时不需要按顺序输入;,(2)Lingo中不区分大小写字母,Lingo中的变量名可以超过8个字符,但不能超过32个字符,且必须以字母开头,其中不能含有中文;,(3) Lingo中已假设所有变量都是非负的,所以当x=0时,不必在输入计算机中,相反,如果有变量x可以取负数,则应规范free(x);,(4)Lingo中的=,替换,即不区分大于等于和大于,小于等于和小于;,例如:y=sinx-1,数学上y取值于【-2,0】,如果是写在lingo程序中,就导致y=0!,(必须加上free(y)),为什么?,(5)输入的多余的空格和回车都会被
7、忽略,一个约束可以分两行或者多行书写;,(6)Lingo模型是由一系列语句构成,即语句是组成Lingo模型的基本单位,每个语句都是以分号“;”结尾,但尽量一个语句用一行来书写;,(7) 以感叹号“!”开始的语句是说明语句(注释语句,以便读者更好理解程序),但计算机在读取模型时,会忽略这样的语句。,(8)在Lingo中,以“”开头的都是调用函数,这在后面专门叙述。,3、计算,摁这个按钮就可以开始计算,如果有错误,根据提示逐步修改。最终得到一个计算状态文档(如下所示),Lingo程序常见错误:乘号“*”漏掉;分号“;”漏掉;变量名没有定义;函数标示“”漏掉;括号不配对;sets,endsets,d
8、ata,enddata(不是enddate!)后加分号。,同时也得到一个求解结果的窗口,Global optimal solution found at iteration: 364 Objective value: 11077.50 Variable Value Reduced Cost X1 35.00000 -1.999947 X2 65.00000 0.000000 Row Slack or Surplus Dual Price 1 0.000000 6.500069 2 95.00000 0.000000 3 11077.50 1.000000,得到最优解迭代次数为364次,目标值为
9、11077.5,其中x1=35,x2=65,其余的解读后面再给出。,例3,例3,min=4*x11+12*x12+4*x13+11*x14 +2*x21+10*x22+3*x23+9*x24 +8*x31+5*x32+11*x33+6*x34; x11+x12+x13+x14=16; x21+x22+x23+x24=10; x31+x32+x33+x34=22; x11+x21+x31=8; x12+x22+x32=14; x13+x23+x33=12; x14+x24+x34=14;,Global optimal solution found at iteration: 6 Objectiv
10、e value: 244.0000 Variable Value Reduced Cost X11 4.000000 0.000000 X12 0.000000 2.000000 X13 12.00000 0.000000 X14 0.000000 0.000000 X21 4.000000 0.000000 X22 0.000000 2.000000 X23 0.000000 1.000000 X24 6.000000 0.000000 X31 0.000000 9.000000 X32 14.00000 0.000000 X33 0.000000 12.00000 X34 8.000000
11、 0.000000,四、Lingo运算符,1、算术运算符,+ - * / ,加 减 乘 除 幂,2、逻辑运算符,2.1 逻辑值之间的运算符,#AND# #OR# #NOT#,与 或 非,算术运算符是数与数之间的运算,结果也是数。,参与运算的是逻辑值,结果也是逻辑值,逻辑值只有“真”(True=1)和“假”(False=0)两个值。,2.2 逻辑表达式的比较符,#EQ# #NE# #GT# #GE# #LT# #LE#,等于 不等于 大于 大于等于 小于 小于等于,这6个操作符实际还是“数与数之间的”比较,而逻辑表达式计算的结果是逻辑值。,3、关系运算符,(=) =,小于(小于等于) 大于(大于
12、等于) 等于,这三个符号表示数与数之间的大小关系,4、运算符的优先级别,优先级 运算符,最高,最低,#not# -(负号),* /,+ -(减法),#eq# #ne# #gt# #ge# #lt# #le#,#and# #or#,括号“()”优先,同行从左往右计算顺序。,五、函数,abs(x): 绝对值函数,返回x的绝对值; cos(x):x的余弦值,x是弧度值; sin(x):x的正弦值,x是弧度值; tan(x):x的正切值,x是弧度值; exp(x):ex; log(x):ln(x); lgm(x):返回x的伽玛函数的自然对数,当x为整数时,lgm(x)=ln(x-1)!,如果x不是整数
13、采用线性插值的结果;例如:lgm(2.3)0.7lgm(2)+0.3lgm(3)。,1、基本函数,mod(x,y):模函数,即x除以y的余数,x,y是整数;,pow(x,y):xy;,sign(x):返回x的符号值,x0,sign(x)=1,x0,sign(x)=-1,x=0,sign(x)=0;,smax(list):返回数列list的最大值;,smin(list):返回数列list的最小值;,sqr(x):x*x;,sqrt(x):x的平方根;,floor(x):取整(返回x的整数部分);,prod(list):返回连乘的积;,2、变量定界函数,bnd(L,X,U):限制LxU;,bin(
14、X):限制x为0或1;,gin(x):限制X只能取整数;,FREE(X):取消对x的符号限制,可以取负数,0,正数.,六、在lingo中使用集合模型(例4),例4 某部门有三个生产同一产品的工厂(产地),生产的产品运往四个销售点(销地)出售,各个工厂的生产量、各销地的销量(单位:吨)、从各个工厂到各个销售点的单位运价(元/吨)如下表,研究如何调运才能使得总运费最小。,产地,销地,1 2 3 4 产量,1,2,3,销 量,4 12 4 11 16,2 10 3 9 10,8 5 11 6 22,8 14 12 14 48,分析,一个完整的调运方案,要明确地给出从每个产地运往各个销地的具体运输量(
15、当然是总运输费用越小,方案越好)。,符号设置,Xij:表示从第i产地调运到第j销地的运输量; i=1,2,3;j=1,2,3,4,Cij:表示从第i产地运往第j销地的单位运价;,Ai:表示第i产地的产量;i=1,2,3,Bj:表示第j销地的销售量;j=1,2,3,4,调运量表格,运价表格,总的调运费用为,(每条道路运费之和),对每个产地来说,调运量总和不超过该产地的产量,对每个销售地来说,调运量总和必须满足销售需求,各种调运量非负,数学模型,如果此模型扩展到有50个产地和100个销售地的规模,从理解问题的角度看,就是让i=1,2,50;j=1,2,100就行了,但是为了让计算机处理,还是按照前
16、面的一行一个语句逐字逐句地输入,工作量就太大了。Lingo就有节约时间的输入方式,且计算机也能理解,那就是集合式输入法。,1、集合(下标)部分,这一部分定义集合以及属性(这里以例4为例叙述),规范格式,sets: chandi/1,2,3/:a; endsets,这样就定义了集合chandi=1,2,3,对应的属性(与这个下标有关的量)a,于是上述语句就定有了a(1),a(2),a(3)这三个变量名(可能是决策变量,也可能是已知量),表示是三个产地的产量。,在计算过程中,只要出现chandi,就表示按顺序取值于1,2,3。,上面的集合定义,如果集合元素比较多,则采用下面的定义方式,sets:
17、chandi/13/:a; endsets,如果是,sets: chandi/150/:a; endsets,那就定义了50个变量名a(1),a(2),a(50)。,而例4中,有三个产地(及其产量),四个销售地(相应的产量),则可以如下定义,这样就定义了chandi这个集合,与这个集合有关的属性a,xiaodi这个集合,与这个集合有关的属性b,直接定义了a(1),a(2),a(3),b(1),b(2),b(3),b(4),这样直接定义的集合称为基本集合。,例4中,还有形如x12,c12这样的变量名如何定义呢?这样的变量既与产地有关,又与销地有关,于是就由chandi这个集合与xiaodi这个集
18、合联合生成一个笛卡尔集,称为派生集合(关联变量的下标范围):,sets: chandi/13/:a; xiaodi/14/:b; link(chandi,xiaodi):x,c; endsets,这样就增加了一个新的集合link,它由chandi和xiaodi两个集合生成,从数学看,与之有关的属性为x,c,就定义了如下变量名,X(1,1),x(1,2),x(1,3),x(1,4),x(2,1),x(2,2),x(2,3),x(2,4),x(3,1),x(3,2),x(3,3),x(3,4) c(1,1),c(1,2),c(1,3),c(1,4),c(2,1),c(,2,2),c(2,3),c(
19、2,4),c(3,1),c(3,2),c(3,3),c(3,4),2、数据部分,这部分格式:,data: a=16,10,22; b=8,14,12,14; c=4 12 4 11 2 10 3 9 8 5 11 6; enddata,以”data:”开始,以“enddata”结束。不管变量是行还是列,都采用行写,行元素见可以逗号“,”隔开,也可以空格隔开。而矩阵输入时,先行后列,每行输入完毕,就回车(enter),再输入一行,直到输入完毕,再分号“;”每个变量的数据输入完毕,都用分号“;”结束。,3、模型部分,这样部分要把模型的约束和目标函数全部反应出来(仍然以例4为例书写),如下约束,即对
20、每个产地i(i=1,2,3)来说,从这里运往各个销地(j=1,j=2,j=3,j=4)的运输量之和:,不超过产地i 的产量a(i),即,X(i,1)+x(i,2)+x(i,3)+x(i,4),x(i,1)+x(i,2)+x(i,3)+x(i,4)= a(i),i=1,2,3,对每个i: for(chandi(i):),对所有销地j求和,sum(xiaodi(j):x(i,j),X(i,1)+x(i,2)+x(i,3)+x(i,4)= a(i),i=1,2,3,对每个i: for(chandi(i): ),对所有销地j求和,sum(xiaodi(j):x(i,j),按照这个逻辑,合并为:,for
21、(chandi(i): sum(xiaodi(j): x(i,j) = a(i) );,求和,求和范围,求和对象,第i个约束条件,对每个chandi,按照上面的分析方法,对每个销售地来说,调运量总和必须满足销售需求,for(xiaodi(j): sum(chandi(i): x(i,j) = b(j) );,目标是将所有线路的运费求和,并使之最小化,即,min= sum( link(i,j): c(i,j)*x(i,j);,求和对象,求和范围,求和函数,目标标识,注意:以上写法中,注意括号匹配,分号结束。,4、初始值部分,在针对线性规划时,这个部分不需要。但是针对非线性规划,这个部分就有必要了
22、,给出决策值的迭代始点,更容易找到局部最优解,同时,给出不同的初始值,可以尝试寻找不同的局部最优解,然后加以比较,找到较好的局部最优解,作为全局最优解使用。,例5,min=exp(-x1-x2)*(2*x12+3*x22); init: x1=2; x2=2; endinit,例6 将数学模型翻译成lingo模型,sets: bianliang/14/:x,c; fangcheng/13/:b; link(fangcheng,bianliang):a; endsets data: c=-3 4 -2 5; b=-2 14 -2; a=4 -1 2 -1 1 1 -1 2 2 -3 -1 1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- lingo入门 lingo 入门 PPT 课件
链接地址:https://www.31doc.com/p-2706613.html