lindo常用的基本语法_第1页
lindo常用的基本语法_第2页
lindo常用的基本语法_第3页
lindo常用的基本语法_第4页
lindo常用的基本语法_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目标函数以“max”或“min”开头,max(或min)与目标函数表达式之间不能有“=”。lindo常用的基本语法

2、变量名的长度不超过8个字符,并且必须以英文字母开头。英文字母不区分大小写。3、目标函数与约束条件之间必须用“st”分开,并且“st”单独一行。4、目标函数、各约束条件都必须以“回车键”结束,并且都应该是经过化简后的表达式,所有字符必须是英文状态下输入的。5、lindo软件已规定所有的决策变量均为非负数。6、变量与其系数之间可以有空格,乘号必须省略,式中不能有括号;约束条件的右端不能有决策变量,

左端不能有常数项;没有下标,式中不能有分母,式中不能有“逗号”和“句号”等(说明语句除外)。常用的基本语法

7、约束条件中的符号“≥”用“>=”表示,

“≤”用“<=”表示,并且可以分别用“>”和“<”表示。8、输入文件中的第一行默认为目标函数,可以用2),3)等标明各约束条件,便于从输出结果中查找信息。以感叹号“!”开始的是说明语句.9、程序最后以end结束,对于小型的规划问题,end可以省略。

常用的基本语法

整数变量(例如:ginx1)和0-1变量(例如intx3)的约束放在end之后,此时end不能省略。10、如果所有的决策变量都是整数变量(假如有6个变量),则可以在end之后写命令:

gin6

如果不是所有的决策变量都是整数变量,则不能采用此方法。

此时,如果省略end的话,整数变量、0-1变量等限制将不起作用。11、如果x1是整数变量,则应在end之后写上命令:ginx1如果x1是0-1变量,则应在end之后写上命令:intx1

如果所有的决策变量共有6个,并且所有的决策变量都是整数,则可以在end之后写命令:gin6

如果x1,x2都是整数变量,但并不是所有的变量都是整数变量,则要写成ginx1ginx2不能写成ginx1,x2或ginx1;x24.2.1LINGO软件使用格式(1)目标函数以“max=”或“min=”开头,其后面是目标函数的表达式。(2)模型以“model:”开始,以“end”结束,

对简单的模型,“model:”及“end”也可以省略。

lingo中的语句顺序不重要,目标函数与约束条件有明显的标志,不用加其它的符号。

lingo总是根据“max=”或“min=”语句寻找目标函数,而其它的语句都是约束语句和说明语句。

除了首行和末行外,每行以“;”结束。所有字符必须是英文状态下输入的。

1、LINGO使用规则LINGO软件的使用规则(2)(3)乘号“*”不能省略,式中可以有括号,约束条件的右端可以有决策变量,没有下标,式中不能有分母,式中不能有“逗号”和“句号”(说明语句和函数中的内容除外)

,故目标函数和各约束约束条件都可以是没有经过化简后的表达式。(4)英文字母不区分大小写字母,

lingo中的变量名和行名可以超过8个字符,但不能超过32个字符,并且变量名必须以字母开头,后面跟数字或字母。(5)lingo软件已规定所有的决策变量均为非负数,(除非用限定变量取值范围的函数@free或@bnd等另行说明)。LINGO软件的使用规则(3)(6)约束条件中的符号“≥”用“>=”或“>”表示,“≤”用“<=”或“<”表示。(7)计算机把输入程序中的第一行默认为目标函数,其它各约束条件可以用[_1],[_2]标明它的行号。

(8)虽然决策变量可以放在约束条件的右端,但为了提高Lingo的求解效率,应尽可能采用线性表达式定义目标函数和约束条件。(9)在lingo中以感叹号“!”开始的是说明语句,并且说明语句也需要以分号“;”结束,并且除了“!”和“;”之外,说明语句中的其它字符可以是任何字符。LINGO软件的使用规则(4)(10)lingo模型是由一系列语句组成的,即每个语句是组成lingo模型的基本部分,每个语句(目标、约束、说明语句等)都是以分号“;”结尾的,编写程序时应注意保持模型的可读性。例如:虽然lingo允许每行写多个语句,也允许一个语句写成几行,但最好一行只写一个语句,并且按照语句的嵌套关系对语句安排适当的缩进,增强层次感。LINGO软件的使用规则(5)(11)在lingo中,以“@”开头的都是函数调用,其中有:整型变量函数(@bin表示0-1变量,@gin表示整数变量)和上下界限定等函数(@free表示去掉非负限制,@bnd限定变量的上限、下限)。这些变量的限制要放在“end”之前,否则这些变量的限制将不起作用

。如果x1是整数变量,则应在end之前写命令:@gin(x1);如果x1是0-1变量,则应在end之前写命令:@bin(x1);如果所有的决策变量共有6个,并且所有的决策变量都是整数,不能写命令:

@bin(6);等其它的命令如果x1,x2都是整数变量,并且不是所有的变量都是整数变量,则要写成@gin(x1);@gin(x2);不能写成@gin(x1,x2)或其它的命令练习:分别用lindo、lingo编写下列数学模型的程序(1)可以用于求线性规划及非线性规划问题,包括非线性整数规划问题。2、lingo的优点(2)lingo包含内置的建模语言(常称矩阵生成器),允许以简练、直观的方式描述较大规模的优化模型(成千万个约束条件和变量),

模型中所需的数据可以用一定格式保存在独立的文件中,需要时再读取数据。

在lindo中的目标函数最优值、最优解与灵敏度分析是一起显示出来,

3、lingo中的灵敏度分析而在lingo中,最优解、最

优值与灵敏度分析是分别用不同的命令显示出来。

lingo中的灵敏度分析的数据输出结果与lindo中的灵敏性分析中输出结果是相同的。

因为lingo的求解结果中是没有灵敏度分析的,所以如果需要灵敏度分析的数据,可以通过修改选项来实现。

①先修改系统选项,启动灵敏度分析通过修改选项得到灵敏度分析数据的步骤:执行“LINGO/options”菜单命令弹出“选项”对话框,在“General

solver”选项卡中,将其中左边列的第二个选项“Dualcompulations”(对偶计算)选项的默认设置“prices”改为“pricesandRanges”(价格及范围)后,先对规划问题求解一次。②执行“LINGO/Range”菜单命令,运行后计算机则显示只有灵敏度分析的数据。一般情况下,lingo得到的都是局部最优解,要得到全局最优解,

激活全局最优求解程序的步骤

则要激活全局最优求解程序,方法如下:执行“LINGO/Options”菜单命令弹出“选项框”对话框,在“GlobalSolver”选项卡上选择“UseGlobalSolver”点确定即可。

由于全局最优求解程序花费的时间可能是很长的,所以为了减少计算工作量,我们应该尽量对变量等做进一步的限制。

1、运算符4.2.2

运算符及优先级(1)算术运算符:

+加-减*乘/除^乘方(开方)(2)逻辑运算符:逻辑运算结果只有真与假,在lingo中用1和0表示,逻辑运算符(表达式)通常作为过滤条件使用。

①#and#与,#or#或,#not#非②#eq#等于,#ne#不等于,#gt#大于,#ge#大于等于,#lt#小于,#le#小于等于

即:g—大于,e—等于,l—小于,t—不等于(3)关系运算符2、运算符的优先级<(或<=)=>(或>=)

#not#(负号)^

*/

+(减法)

#eq#,#ne#,#gt#,#ge#,#lt#,#le##and#与,#or#>=<

@sqrt(x)

4.2.3常用的函数在Lingo中,所有的系统函数都必须是以“@”开头。1、数学函数@abs(x)

求绝对值函数,返回x的绝对值

@cos(x)

求余弦函数,返回x的余弦值,

x的单位是弧度@exp(x)

计算ex的值@log(x)

计算lnx

的值@pow(x,y)

计算xy的值@sqr(x)

计算x的平方计算x的平方根@size(A)

求矩阵A的元素个数2、集合循环函数集合循环函数是指对集合中的所有元素(下标)进行循环操作的函数,如@sum,@for等。

具体的使用格式:@循环函数名(循环变量所在的集(循环变量)│过滤条件:循环表达式)其中,如果在操作过程中没有过滤条件,可以省略过滤条件;如果表达式是对集合的所有循环变量进行操作,循环变量也可以省略。集合循环函数:@for

是对集合的每个元素独立地操作一次表达式,通常用于优化问题的约束条件;

@sum是求集合中表达式的和;

@prod是求集合中表达式的乘积;@max是求集合中表达式的最大值;

@min是求集合中表达式的最小值;

但如果是求目标函数的最大、最小值,则是用

“max=目标函数表达式”,“min=目标函数表达式”,

而不用写@。

(1)@for

该函数用来产生对集成员的约束。@for函数允许只输入一个约束条件,然后由lingo自动产生每个集成员的约束条件。例4-2

产生序列{1,4,9,16,25}model:

sets:

number/1..5/:x;!此命令产生一个变量x,是单下标变量,其下标有5个取值;

endsets

@for(number(i):x(i)=i^2);!此命令是对所有的下标i,分别求i2;

end(2)@sum

该函数返回遍历指定的集成员的一个表达式的和。

例4-3

求向量[5,1,3,4,6,10]前5个数的和。model:

sets:

number/1..6/:x;

endsets

data:

x=5134610;!此命令给变量x具体的取值;

enddata

s=@sum(number(i)|i#le#5:x(i));

end3、变量定界函数变量定界函数是对变量的取值范围附加限制。@bnd(A,x,B):

是指限定变量x的取值为

A≤x≤B(在LINDO中无此函数)

@gin(x):

限定变量x

的取值为整数;

@bin(x):

限定变量x为0-1变量,@free(x):

取消变量x的非负限制,即x可以取负数、0或正数,因为lingo原来默认所有的变量非负取值。

在lindo是用命令int,而在lingo中没有@int(x)

4.2.4lingo计算输出的结果

lingo计算的输出结果与lindo计算的输出结果是完全相同的,只是输出的命令不相同。在lindo中,最优值、最优解,影子价格与灵敏度分析的数据可以同时输出。而在lingo

中,灵敏度分析的数据只有通过修改选项才能输出。lingo计算输出结果例4-1的数学模型:model:

max=32*x1+30*x2;

3*x1+4*x2<=36;

5*x1+4*x2<=40;

9*x1+8*x2<=76;

end

输出结果:Globaloptimalsolutionfound.

Objectivevalue:282.6667

Totalsolveriterations:3

VariableValueReducedCost

X11.3333330.000000

X28.0000000.000000

RowSlackorSurplusDualPrice

1282.66671.000000

20.0000001.166667

31.3333330.000000

40.0000003.1666674.2.5关于lingo程序中的段一般来说,lingo中建立的优化模型可以由五部分来组成,或称为五段。下面介绍常用的三段:集合段,数据段,目标和约束段

1、集合段(sets):这部分要以“sets:”开始,以“endsets”结束。作用在于定义必要的集合及其元素。

属性相当于变量或数组,集合的成员相当于下标。

1、集合段(sets):具体使用格式是:集合名/集的成员/:属性;ABD/1,2,3,4,5,6/:x,y;显式罗列所有的成员ABD/1..6/:x,y;

隐式罗列所有的成员,中间的成员系统自动产生,只要列出集合的第一个和最后一个成员就行,但所有的成员必须是有规律的。不同的成员及不同的属性之间,用“,”分隔。

集合的属性相当于以集合的元素为下标的数组,

即属性相当于变量,成员相当于下标。具体来说,ABD/1,2,3,4,5,6/:x,y;其集合名为ABD,属性为x,y

成员为1,2,3,4,5,6定义以x,y为变量,下标分别为1,2,3,4,5,6的变量,即x1,

x2,x3,x4,x5,x6

y1,y2,y3,y4,y5,y6

属性(变量)的具体值如果是常数,则应在数据段中输入具体数据;如果是未知数(即决策变量),则在数据段中不能输入数据,但可以在初始段输入初值。集合的成员和属性可以在定义时省略,随后在数据段中输入。关于集合的一些说明:

myfile/1..5/:a;

定义原始集合myfile,属性a的成员有5个元素,即定义a是单下标变量,下标有5个取值,即a1,a2,a3,a4,a5。

myfoes/1..6/:b;

定义原始集合myfoes,属性b的成员有6个元素,即定义b是单下标变量,下标有6个取值,即b1,b2,b3,b4,b5,b6。

myido(myfoes,myfile):x,c;

定义派生集合myido,属性x和c的成员有30个元素,即定义x和c是双下标变量,第1个下标有6个取值,第2个下标有5个取值。其中myfoes和myfile称为派生集合的父集。例4-4model:

sets:

myfile/1..5/:a;

myfoes/1..6/:b;

myido(myfile,myfoes):x,c;

endsets

data:

c=1,2,-2,5,6,-4

2,3,-4,6,9,3

2,5,-1,5,-2,0

-5,6,7,9,10,-10

33,4,6,6,7,9;

a=100,200,100,100,400;

b=100,200,100,150,150,200;

enddatamin=@sum(myido(i,j):c(i,j)*x(i,j));

!产销平衡运输问题的目标函数;

@for(myfile(i):@sum(myfoes(j):x(i,j))=a(i));

!产销平衡运输问题产地的产量约束;

@for(myfoes(j):@sum(myfile(i):x(i,j))=b(j));

!产销平衡运输问题销地的销量约束;

end

2、数据段(data):以“data:”开始,以“enddata”结束,作用在于对集合的属性(数组或变量)输入必要的常数数据。具体的使用格式为:

属性(或变量)=常数列表;在常数列表中,数据之间用“,”分隔,也可以空格分开(“ctrl+回车”的作用也等价于一个空格),即变量(或属性)是取等号右边的常数.model:

sets:

ABD/1,2,3,4,5,6/:x,y;

endsets

data:

x=1,3,0,5,6,-7;

y=-3,4,29,58,3,10;

enddata

end在数据段中输入数据时,可以分别输入每个变量对应的数据,也可以同时输入多个同维的变量的数据值。两种输入方法得到的结果相同例4-5等同于x,y=1,-3,3,4,0,29,5,58,6,3,-7,10;

3、目标和约束段:这部分实际上是定义目标函数、约束条件等,但这部分并没有段的开始及结束的标记。

lingo的目标函数和约束条件,一般要用到循环函数:如求和函数@sum和循环函数@for等。

目标函数是求最大值或最小值.

max=目标函数;

min=目标函数;

约束条件的标志是:@for(约束条件);目标函数的标志是:

例如:

sets:

ABD/1,2,3,4,5,6/:X;

AB/1..3/:Y,D;

endsets(1)如程序中有约束条件:

在lingo程序中应该表示为:

@for(AB(j):@sum(ABD(i):x(i)*y(j))<=d(j));(2)如程序中有约束条件:

在lingo程序中应该表示为:

@for(AB(i):@sum(ABD(j):x(i)*y(j))<=d(i));循环变量:循环变量:先计算变量j

,再计算变量i.

先计算变量i,再计算变量j.

model:

sets:

myfile/1..5/:a;myfoes/1..6/:b;myido(myfile,myfoes):x,c;

endsets

data:

c=1,2,-2,5,6,-4

2,3,-4,6,9,3

2,5,-1,5,-2,0

-5,6,7,9,10,-10

33,4,6,6,7,9;

a=100,200,100,100,400;b=100,200,100,150,150,200;

enddata

min=@sum(myido(i,j):c(i,j)*x(i,j));

@for(myfile(i):@sum(myfoes(j):x(i,j))=a(i));@for(myfoes(j):@sum(myfile(i):x(i,j))=b(j));

end分析用lingo编写的程序例4-6写出下面规划问题的lingo中用集合编写的求解程序。如果线性规划问题有最优解,请写出最优解。

解:要写出用lingo中集合的方法求解的程序,则应该先把规划模型化为用求和形式表示的模型,

其中:

则该规划问题的用求和形式表示的模型为:用求和形式表示的模型讨论用集合表示的模型:其中:(1)变量c,x是单

下标,下标有3

个取值;变量b是单下标,下标有4个取值。对于单下标的变量,只要直接定义集合即可,即要定义两个集合,一个有3个取值的,另一个有4个取值的。由于变量c,b,a已经有具体的数值,故必须在数据段中给出具体的取值;变量x没有具体的数值,它是决策变量,故不能在数据段中给出具体的取值。讨论用集合表示的模型:(2)变量a是双

下标变量,下标共有4×3个取值,第1个i下标有4个取值,第2个下标j有3个取值。

对于双下标的变量,必须定义派生集合。

它第1个父集是有4个取值,第2个父集是有3个取值。

变量a已经有具体的数值,它不是决

策变量,故必须在数据段中给出具体的取值。

上述数学模型用集合编写的求解程序为:集合段

sets:

endsets

ab/1,2,3/:x,c;

abc/1,2,3,4/:b;

abcd(abc,ab):a;数据段

data:

enddata

c=8,10,2;

b=70,80,15,50;

a=2,1,3

4,2,2

3,0,1

2,2,0;目标函数

max=@sum(ab(j):c(j)*x(j));约束条件@for(abc(i):@sum(ab(j):a(i,j)*x(j))<=b(i));

ab/1,2,3/:x,c;

abc/1,2,3,4/:b;

abcd(abc,ab):a;用集合表示的程序为:model:

sets:

ab/1,2,3/:x,c;

abc/1,2,3,4/:b;

abcd(abc,ab):a;

endsets

data:

c=8,10,2;

b=70,80,15,50;

a=2,1,34,2,23,0,12,2,0;

enddata

max=@sum(ab(j):c(j)*x(j));

@for(abc(i):@sum(ab(j):a(i,j)*x(j))<=b(i));

endmodel:

sets:

ab/1,2,3/:x,c;

abc/1,2,3,4/:b;

abcd(abc,ab):a;

endsets

data:

c=8,10,2;

b=70,80,15,50;

a=2,1,34,2,23,0,12,2,0;

enddata

max=@sum(ab(j):c(j)*x(j));

@for(abc(i):@sum(ab(j):a(i,j)*x(j))<=b(i));

end

Globaloptimalsolutionfound.Objectivevalue:280.0000Totalsolveriterations:2VariableValueReducedCostX(1)0.0000002.666667X(2)25.000000.000000X(3)15.000000.000000利用软件计算,可知:该数学规划模型的最优解为最优值为:

(2)把规划问题化为用求和形式表示的模型,其中:

该规划问题用求和形式表示的模型为:该规划问题用集合编写的程序为:集合段

sets:

endsets

ab/1,2,3,4,5/:x,c;

abc/1,2,3/:b;

abcd(abc,ab):a;数据段

data:

enddata

c=3,-1,-1,0,0;

b=11,3,1;

a=1,-2,1,1,0

-4,1,2,0,-1

-2,0,1,0,0;目标函数

max=@sum(ab(j):c(j)*x(j));约束条件

@for(abc(i):@sum(ab(j):a(i,j)*x(j))=b(i));

ab/1,2,3,4,5/:x,c;

abc/1,2,3/:b;

abcd(abc,ab):a;model:

sets:

ab/1,2,3/:b;

abc/1,2,3,4,5/:c,x;

abcd(ab,abc):a;

endsets

data:

c=3,-1,-1,0,0;

b=11,3,1;

a=1,-2,1,1,0

-4,1,2,0,-1-2,0,1,0,0;

enddata

max=@sum(ab(j):c(j)*x(j));

@for(abc(i):@sum(ab(j):a(i,j)*x(j))=b(i));

end用集合表示的程序为:model:

sets:

ab/1,2,3/:b;

abc/1,2,3,4,5/:c,x;

abcd(ab,abc):a;

endsets

data:

c=3,-1,-1,0,0;

b=11,3,1;

a=1,-2,1,1,0

-4,1,2,0,-1

-2,0,1,0,0;

enddata

max=@sum(abc(j):c(j)*x(j));

@for(ab(i):@sum(abc(j):a(i,j)*x(j))=b(i));

end

Globaloptimalsolutionfound.Objectivevalue:2.000000Totalsolveriterations:0VariableValueReducedCostX(1)4.0000000.000000X(2)1.0000000.000000X(3)9.0000000.000000X(4)0.0000000.3333333X(5)0.0000000.3333333利用软件计算可知:该数学规划模型的最优解为最优值为:

2

用LINGO求解运输问题:某产品有5个产地A1,A2,A3,A4,A5,它的产品供应6个销地B1,B2,B3,B4,B5,B6,产地的产量、销地的销

量及产品从各产地运往各销地的单位运价如下表:产地销地B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论