LINGO软件的基本使用方法
- 格式:ppt
- 大小:1.46 MB
- 文档页数:122


LINGO使用指南LINGO是用来求解线性和非线性优化问题的简易工具。
LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。
§1 LINGO快速入门当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model –LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO中求解如下的LP问题:在模型窗口中输入如下代码: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 产量A1 6 2 6 7 4 2 5 9 60A2 4 9 5 3 8 5 8 2 55A3 5 2 1 9 7 4 3 3 51A4 7 6 7 3 9 2 7 1 43A5 2 3 9 5 7 2 6 5 41A6 5 5 2 2 8 1 4 3 52销量35 37 22 32 41 32 43 38使用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然后点击工具条上的按钮即可。
第4讲 Lingo 软件入门司守奎烟台市,海军航空工程学院数学教研室Email :sishoukui@4.1 初识Lingo 程序Lingo 程序书写实际上特别简捷,数学模型怎样描述,Lingo 语言就对应地怎样表达。
首先介绍两个简单的Lingo 程序。
例4.1 求解如下的线性规划问题:121212112max726450,128480,s.t.3100,,0z x x x x x x x x x =++≤⎧⎪+≤⎪⎨≤⎪⎪≥⎩ Lingo 求解程序如下max =72*x1+64*x2; x1+x2<=50;12*x1+8*x2<=480; 3*x1<=100;说明:Lingo 中默认所有的变量都是非负的,在Lingo 中就不需写出对应的约束。
例4.2 抛物面22y x z +=被平面1=++z y x 截成一椭圆,求原点到这椭圆的最短距离。
该问题可以用拉格朗日乘子法求解。
下面我们把问题归结为数学规划模型,用Lingo 软件求解。
设原点到椭圆上点),,(z y x 的距离最短,建立如下的数学规划模型:⎩⎨⎧+==++++.,1s.t.min 22222y x z z y x z y xLingo 求解程序如下: min =(x^2+y^2+z^2)^(1/2); x+y+z=1; z=x^2+y^2;@free (x); @free (y);说明:Lingo 中默认所有变量都是非负的,这里y x ,的取值是可正可负的,所以使用Lingo 函数free 。
例4.3 求解如下的数学规划模型:⎪⎪⎩⎪⎪⎨⎧==∑∑∑===.,1s.t.min9912100100110012i ii i i ix x x x用Lingo 求解上述数学规划问题,使用集合和函数比较方便,使用集合的目的是为了定义向量,集合使用前,必须先定义;Lingo 程序中的标量不需要定义,直接使用即可。
sets :var/1..100/:x; endsetsmin =@sqrt (@sum (var(i):x(i)^2)); @sum (var(i):x(i))=1;x(100)=@sum (var(i)|i#le#99:x(i)^2); @for (var(i)|i#le#99:@free (x(i)));说明:如果不使用集合和函数,全部使用标量x1,x2,…,x100,最后一个约束就要写99遍,@free(x1); …; @free (x99)。