lingo自学笔记.docx

上传人:b****7 文档编号:11200025 上传时间:2023-02-25 格式:DOCX 页数:29 大小:251.39KB
下载 相关 举报
lingo自学笔记.docx_第1页
第1页 / 共29页
lingo自学笔记.docx_第2页
第2页 / 共29页
lingo自学笔记.docx_第3页
第3页 / 共29页
lingo自学笔记.docx_第4页
第4页 / 共29页
lingo自学笔记.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

lingo自学笔记.docx

《lingo自学笔记.docx》由会员分享,可在线阅读,更多相关《lingo自学笔记.docx(29页珍藏版)》请在冰豆网上搜索。

lingo自学笔记.docx

lingo自学笔记

LINGO学习笔记

(注意:

MATLABdijkstra算法在最后一例写出,在真正比赛中不要完整的复制粘贴,否则我会害了你们的!

一、逻辑运算符

LINGO中的辑运符有9种,可以分为两类:

(1)#AND#(与),#OR#(或),#NOD#(非),这3个运算是逻辑值之间的运算,也就是它们操作的对象本身必须已经是逻辑值或逻辑表达式.计算结果也是逻辑值;

(2)#EQ#(等于).#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于).#LE#(小于等于):

这6个操作实际上是"数与数之间"的比较,也就是它们操作的对象本身必须是两个数。

表1-1运算符的优先级

优先级运算符

最高#NOT#-(负号)

^

*/

+-(减法)

#EQ##NE##GT##GE##LT##LE#

#AND##OR#

最低<=>

二、基本的数学函数

在LINGO中建立优化模型时引用大量的内部函数这些函数以"@"负号打头.

LINGO中包括相当丰富的数学函数,这些函数的用法非常简单,我们直接在下一一列出

@ABS(X);绝对值函数,返回X的绝对值

@COS(X);余弦函数,返回X的余弦值(X的单位是弧度)

@EXP(X)指数函数,返回

的值(其中e为自然对数值的底,即2.718281)

@FLOOR(X);取整函数,返回X的整数部分(向最靠近0的方向取整).

@LGM(X):

返回X的伽马(Gamma)函数的自然对数值(当X为整数时LGM(X)=LOG(X-1)!

;当X不为整数时,采用线性插值得到结果)

@LOG(X):

自然对数函数,返回自然对数值

@MOD(X,Y):

模函数,返回X对Y的取模的结果,即X除以Y的余数,这里X余Y应是整数

@POW(X,Y):

指数函数,返回

的值.

@SIGN(X):

符号函数,返回X的符号值(X<0是返回-1,X>=0时返回+1)

@SIN(X):

正弦函数,返回X的正弦值(X的单位是弧度)

@SMAX(list):

:

最大值函数,返回一列数(list)的:

最大值

@SMIN.(list):

:

最小值函数,返回一列数(list)的:

最小值

@SQR(X):

平方函数,返回X的平方即(X*X)的值

@SQRT(X):

平方根函数,返回X的平方根的值

@TAN(X);正切函数,返回X的正切值(X的单位是弧度)。

三、集合循环函数

集合循环函数是指对集合上的元素(下标)进行循环操作的函数,如前我们用过的@FOR和@SUM等,一般用法如下:

@function(setname[(set_index_list)[|condition]]:

expression_list);

其中:

function是集合函数名,是FOR,MAX,PROD,SUM五种之一;

setname是集合名;

set_index_list是集合索引列表(不需使用索引时可以省略);

condition是逻辑表达式描述的过虑条件(通常含有索引,无条件时可省略);

expression_list是一个表达式(对@FOR函数,可以是一组表达式)。

五个集合函数名的含义如下:

@FOR(集合元素循环函数):

对集合setname的每个元素独立地生成表达式,表达式由expression_list描述(通常是优化问题的约束)。

@MAX(集合属性的最大值函数):

返回集合setname上的表达式的最大值。

@MIN(集合属性的最小值函数):

返回集合setname上的表达式的最小值。

@PROD(集合属性的乘积函数):

返回集合setname上的表达式的积。

@SUM(集合属性的求和函数):

返回集合setname上的表达式的和。

四、变量定界函数

变量定界函数对变量的取值范围附加限制,共有以下四种函数:

@BND(L,X,U):

限制L<=X<=U;

@BIN(X):

即限制X为0或1;

@FREE(X):

取消对X的符号限制(即可取负数、0后正数);

@GIN(X):

限制X为整数.

例1.连续函数的最值问题

求下列函数的最大值和最小值

max=(x-x^3+y^3-y^5)*@exp(-(x^2+y^2));

@bnd(-2,x,2);

@bnd(-3,y,3);

Localoptimalsolutionfound.

Objectivevalue:

0.5186037

Infeasibilities:

0.000000

Extendedsolversteps:

5

Totalsolveriterations:

102

ModelClass:

NLP

Totalvariables:

3

Nonlinearvariables:

2

Integervariables:

0

Totalconstraints:

2

Nonlinearconstraints:

1

Totalnonzeros:

3

Nonlinearnonzeros:

2

 

VariableValueReducedCost

X0.4809119E-010.000000

Y-1.7288290.2356938E-08

RowSlackorSurplusDualPrice

10.51860371.000000

min=(x-x^3+y^3-y^5)*@exp(-(x^2+y^2));

@bnd(-2,x,2);

@bnd(-3,y,3);

Localoptimalsolutionfound.

Objectivevalue:

-0.5186037

Infeasibilities:

0.000000

Extendedsolversteps:

5

Totalsolveriterations:

78

ModelClass:

NLP

Totalvariables:

3

Nonlinearvariables:

2

Integervariables:

0

Totalconstraints:

2

Nonlinearconstraints:

1

Totalnonzeros:

3

Nonlinearnonzeros:

2

 

VariableValueReducedCost

X-0.4809120E-01-0.1040013E-07

Y1.7288290.5431772E-07

RowSlackorSurplusDualPrice

1-0.5186037-1.000000

例2.纯整数线性规划问题(PILP)

某架货机有三个货舱:

前仓、中仓、后仓。

三个货舱所能装载的货物的最大重量和体积都有限制,如表1-7所示。

为了保持飞机的平衡,三个货舱中实际装载货物的重量必须与其最大容许重量成比例。

现有四类货物供该货机本次飞行装运,其有关信息如表1-8所示,最后一列指装运后所获得的利润。

应如何安排装运,使该获机本次飞行获利最大?

请建立该问题的优化模型。

表2-1三个货舱装载货物的最大容许重量和体积

前仓

中仓

后仓

重量限制/t

10

16

8

体积限制/m³

6800

8700

5300

表2-2四类装运货物的信息

重量/t

空间/(m³/t)

利润/(元/t)

货物1

18

480

3100

货物2

15

650

3800

货物3

23

580

3500

货物4

12

390

2850

设货物i的重量为Mi,空间大小为Vi,利润为Ci,i=1,2,3,4;设前仓,中仓,后仓分别为j仓,其对重量的限制分别为LIMITMj,对体积的限制分别为LIMITVj,将货物i装载在j仓的数量为Xij,j=1,2,3;

则优化模型为:

其lingo程序为:

sets:

A/1..4/:

M,V,C;

B/1..3/:

LIMITM,LIMITV;

LINK(A,B):

X;

ENDSETS

DATA:

LIMITM=10168;

LIMITV=680087005300;

M=18152312;

V=480650580390;

C=3100380035002850;

ENDDATA

MAX=@SUM(A(I):

@SUM(B(J):

C(I)*X(I,J)));

@FOR(B(J):

@SUM(A(I):

M(I)*X(I,J))<=LIMITM(J));

@FOR(B(J):

@SUM(A(I):

V(I)*X(I,J))<=LIMITV(J));

运行结果:

Globaloptimalsolutionfound.

Objectivevalue:

8613.333

Infeasibilities:

0.000000

Totalsolveriterations:

3

ModelClass:

LP

Totalvariables:

12

Nonlinearvariables:

0

Integervariables:

0

Totalconstraints:

7

Nonlinearconstraints:

0

Totalnonzeros:

36

Nonlinearnonzeros:

0

 

VariableValueReducedCost

M

(1)18.000000.000000

M

(2)15.000000.000000

M(3)23.000000.000000

M(4)12.000000.000000

V

(1)480.00000.000000

V

(2)650.00000.000000

V(3)580.00000.000000

V(4)390.00000.000000

C

(1)3100.0000.000000

C

(2)3800.0000.000000

C(3)3500.0000.000000

C(4)2850.0000.000000

LIMITM

(1)10.000000.000000

LIMITM

(2)16.000000.000000

LIMITM(3)8.0000000.000000

LIMITV

(1)6800.0000.000000

LIMITV

(2)8700.0000.000000

LIMITV(3)5300.0000.000000

X(1,1)0.0000001460.000

X(1,2)0.0000001460.000

X(1,3)0.0000001460.000

X(2,1)0.66666670.000000

X(2,2)1.0666670.000000

X(2,3)0.53333330.000000

X(3,1)0.0000002326.667

X(3,2)0.0000002326.667

X(3,3)0.0000002326.667

X(4,1)0.000000190.0000

X(4,2)0.000000190.0000

X(4,3)0.000000190.0000

RowSlackorSurplusDualPrice

18613.3331.000000

20.000000253.3333

30.000000253.3333

40.000000253.3333

56366.6670.000000

68006.6670.000000

74953.3330.000000

所以最优分配方案是装载0.667吨货物2到前仓,装载1.067吨货物2到中仓,装载0.533吨货物2到后仓,可获得最大利润,最大利润为8613.33元

例3.非线性优化问题(NLP)

建筑工地的位置(用平面坐标a,b表示,距离单位:

km)及水泥日用量d(单位:

t)由表3-1给出。

目前有两个临时料场位于P(5,1),Q(2,7),日储量各有20t。

请回答以下两个问题:

(1)假设从料场到工地之间句均有直线道路相连,试制定每天的供应计划,即从A,

B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。

(2)为了进一步减少吨公里数,打算舍弃目前的两个料场,改建两个新的料场,日储

量仍各为20t,问应建在何处,与目前相比节省的吨公里数有多大。

表3-1工地的位置(ab)及水泥日用量d

1

2

3

4

5

6

a

1.25

8.75

0.5

5.75

3

7.25

b

1.25

0.75

4.75

5

6.5

7.75

d

3

5

4

7

6

11

记工地的位置为(ai,bi),水泥日用量为di,i=1,2,,6;料场位置为(xi,yi),日储量为ej,j=1,2;从料场j向工地i的运送量为.cij

决策变量:

在问题

(1)中,决策变量就是料场j向工地i的运送量cij;在问题

(2)中,决策变量除了料场j向工地i的运送量cij外,新建料场位置(xj,yj)也是决策变量。

目标函数:

这个优化问题的目标函数f是总吨公里数(运量乘以运输距离),所以优化目标可表为

(1)

约束条件:

各工地的日用量必须满足,所以

(2)

各料场的运送量不能超过日用量,所以

(3)

问题归结为在约束条件(3)、

(2)及决策变量cij非负的情况下,使目标

(1)达到最小。

(1)编写lingo程序:

sets:

a/1..6/:

horizontal,vertical,distance;

b/1,2/:

positionx,positiony;

link(a,b):

c;

endsets

data:

horizontal=1.258.750.55.7537.25;

vertical=1.250.754.7556.57.75;

distance=3547611;

positionx=52;!

分别为P,Q的横坐标;

positiony=17;!

分别为P,Q的纵坐标;

enddata

min=@sum(b(j):

@sum(a(i):

c(i,j)*@sqrt((positionx(j)-horizontal(i))^2+(positiony(j)-vertical(i))^2)));

@for(a(i):

@sum(b(j):

c(i,j))=distance(i));

@for(b(j):

@sum(a(i):

c(i,j))<=20);

运行结果:

Globaloptimalsolutionfound.

Objectivevalue:

136.2275

Infeasibilities:

0.000000

Totalsolveriterations:

1

ModelClass:

LP

Totalvariables:

12

Nonlinearvariables:

0

Integervariables:

0

Totalconstraints:

9

Nonlinearconstraints:

0

Totalnonzeros:

36

Nonlinearnonzeros:

0

 

VariableValueReducedCost

HORIZONTAL

(1)1.2500000.000000

HORIZONTAL

(2)8.7500000.000000

HORIZONTAL(3)0.50000000.000000

HORIZONTAL(4)5.7500000.000000

HORIZONTAL(5)3.0000000.000000

HORIZONTAL(6)7.2500000.000000

VERTICAL

(1)1.2500000.000000

VERTICAL

(2)0.75000000.000000

VERTICAL(3)4.7500000.000000

VERTICAL(4)5.0000000.000000

VERTICAL(5)6.5000000.000000

VERTICAL(6)7.7500000.000000

DISTANCE

(1)3.0000000.000000

DISTANCE

(2)5.0000000.000000

DISTANCE(3)4.0000000.000000

DISTANCE(4)7.0000000.000000

DISTANCE(5)6.0000000.000000

DISTANCE(6)11.000000.000000

POSITIONX

(1)5.0000000.000000

POSITIONX

(2)2.0000000.000000

POSITIONY

(1)1.0000000.000000

POSITIONY

(2)7.0000000.000000

C(1,1)3.0000000.000000

C(1,2)0.0000003.852207

C(2,1)5.0000000.000000

C(2,2)0.0000007.252685

C(3,1)0.0000001.341700

C(3,2)4.0000000.000000

C(4,1)7.0000000.000000

C(4,2)0.0000001.992119

C(5,1)0.0000002.922492

C(5,2)6.0000000.000000

C(6,1)1.0000000.000000

C(6,2)10.000000.000000

RowSlackorSurplusDualPrice

1136.2275-1.000000

20.000000-3.758324

30.000000-3.758324

40.000000-4.515987

50.000000-4.069705

60.000000-2.929858

70.000000-7.115125

84.0000000.000000

90.0000001.811824

最优方案:

(单位:

吨)

1

2

3

4

5

6

运送量

A

3

5

0

7

0

1

16

B

0

0

4

0

6

10

20

需求量

3

5

4

7

6

11

36

最小的总吨公里数为:

136.2275

示意图:

(2)编写lingo程序:

sets:

a/1..6/:

horizontal,vertical,distance;

b/1,2/:

positionx,positiony;

link(a,b):

c;

endsets

data:

horizontal=1.258.750.55.7537.25;

vertical=1.250.754.7556.57.75;

distance=3547611;

enddata

init:

positionx=3.254882,7.250000;

positiony=5.652333,7.750000;

endinit

min=@sum(b(j):

@sum(a(i):

c(i,j)*((positionx(j)-horizontal(i))^2+(positiony(j)-vertical(i))^2)^(1/2)));

@for(a(i):

@sum(b(j):

c(i,j))=distance(i));

@for(b(j):

@sum(a(i):

c(i,j))<=20);

@for(b:

@free(positionx);@free(positiony));

运行结果:

Localoptimalsolutionfound.

Objectivevalue:

85.26604

Infeasibilities:

0.000000

Totalsolveriterations:

124

ModelClass:

NLP

Totalvariables:

16

Nonlinearvariables:

16

Integervariables:

0

Totalconstraints:

9

Nonlinearconstraints:

1

Totalnonzeros:

40

Nonlinearnonzeros:

16

 

VariableValueReducedCost

HORIZONTAL

(1)1.2500000.000000

HORIZONTAL

(2)8.7500000.000000

HORIZONTAL(3)0.50000000.000000

HORIZONTAL(4)5.7500000.000000

HORIZONTAL(5)3.0000000.000000

HORIZONTAL(6)7.2500000.000000

VERTICAL

(1)1.2500000.000000

VERTICAL

(2)0.75000000.000000

VERTICAL(3)4.7500000.000000

VERTICAL(4)5.0000000.000000

VERTICAL(5)6.5000000.000000

VERTICAL(6)7.7500000.000000

DISTANCE

(1)3.0000000.000000

DISTANCE

(2)5.0000000.000000

DISTANCE(3)4.0000000.000000

DISTANCE(4)7.0000000.000000

DISTANCE(5)6.0000000.000000

DISTANCE(6)11.000000.000000

POSITIONX

(1)3.2548830.000000

POSITIONX

(2)7.250000-0.7481680E-06

POSITIONY

(1)5.6523320.000000

POSITIONY

(2)7.7500000.5438639E-06

C(1,1)3.0000000.000000

C(1,2)0.0000004.0

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1