Lingo超经典案例大全

Lingo超经典案例大全
Lingo超经典案例大全

Lingo超经典案例大全

LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。

Lingo模型由4个段构成:

(1)集合段(sets endsets);(2)数据段(data enddata);

(3)初始段(init endinit);(4)目标与约束段。

Lingo的五大优点:

1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;

2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;

3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;

4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。

5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.

一、求解线性整数规划、非线性整数规划问题:

1.线性整数规划:

model:

max=x1+x2;

x1+9/14*x2<=51/14;

-2*x1+x2<=1/3;

@gin(x1);@gin(x2);

求得x1=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。通过验证也可知这两组解均满足。Lingo的一个缺陷是:每次只能输出最优解中的一个(有时不只一个)。那么,怎样求得其他解呢?一个办法是将求得的解作为约束条件,约束x1不等于3,x2不等于1,再求解。如下:

model:

max=x1+x2;

x1+9/14*x2<=51/14;

-2*x1+x2<=1/3;

@gin(x1);@gin(x2);

@abs(x1-3)>0.001;

@abs(x2-1)>0.001;

end

求得x1=2,x2=2.若再次排除这组解,发现Lingo解不出第三组解了,这时我们可以断定:此优化模型有两组解:

x1=3,x2=1和x1=2,x2=2.

求解模型时需注意:Lingo中,默认变量均为非负;输出的解可能是最优解中的一组,要判断、检验是否还有其他解(根据具体问题的解的情况或用排除已知最优解的约束条件法)。

2、非线性整数规划:

model:

sets:

row/1..4/:b;

col/1..5/:c1,c2,x;

link(row,col):a;

endsets

c1=1,1,3,4,2;

c2=-8,-2,-3,-1,-2;

a=1 1 1 1 1

1 2 2 1 6

2 1 6 0 0

0 0 1 1 5;

b=400,800,200,200;

enddata

max=@sum(col:c1*x^2+c2*x);

@for(row(i):@sum(col(j):a(i,j)*x(j))

@for(col:@gin(x));

@for(col:@bnd(0,x,99));

End

求得:x1=50,x2=99,x3=0,x4=99,x5=20.最大值为51568。

这里,我们看不出是否还有其他解,需要将已知的最优解排除掉。

利用1的方法分别可得到其他解:

x1=48,x2=98,x3=1,x4=98,x5=19.最大值为50330。

x1=45,x2=97,x3=2,x4=97,x5=18.最大值为49037。

x1=43,x2=96,x3=3,x4=96,x5=17.最大值为47859。

x1=40,x2=95,x3=4,x4=95,x5=16.最大值为46636。

......

发现x1,x2,x4,x5均单调减少,x3单调增加。最大值越来越小。可以简单判断第一组为最优的。当然,能够一一检验最好。

二、最优选择问题

某钻井队要从10个可供选择的井位中确定5个钻井探油,使总的钻探费用为最小。若10个井位的代号为s1,s2,...,s10,相应的钻探费用c1,c2,...,c10为5,8,10,6,9,5,7,6,10,8.并且井位选择上要满足下列限制条件:

(1)或选择s1和s7,或选择钻探s9;

(2)选择了s3或s4就不能选s5,或反过来也一样;

(3)在s5,s6,s7,s8中最多只能选两个.

试建立这个问题的整数规划模型,确定选择的井位。

取0-1变量s_i,若s_i=1,则表示选取第i个井,若s_i=0,则表示不选取第i个井。建立数学模型如下:

model:

sets:

variables/1..10/:s,cost;

endsets

data:

cost=5 8 10 6 9 5 7 6 10 8;

enddata

min=@sum(variables:cost*s);

(s(1)+s(7)-2)*(s(9)-1)=0;

s(3)*s(5)+s(4)*s(5)=0;

@sum(variables(i)|i#ge#5#and#i#le#8:s(i))<=2;

@sum(variables:s)=5;

@for(variables:@bin(s));

end

求得:

Total solver iterations: 26

Variable Value Reduced Cost S( 1) 1.000000 -4.000000 S( 2) 1.000000 0.000000 S( 3) 0.000000 2.000000

S( 4) 1.000000 -2.000000

S( 5) 0.000000 0.000000

S( 6) 1.000000 -1.000000

S( 7) 1.000000 0.000000

S( 8) 0.000000 0.000000

S( 9) 0.000000 2.000000

S( 10) 0.000000 0.000000

Objective value: 31.00000

即选择井S1,S2,S4,S6,S7以达到最小费用31.

三、路径和最短问题:

设平面上有N个点,求一点,使得这个点到所有点距离之和最小。这里,取N=8。数据点是1~5的随机数。

Lingo:

model:

sets:

position/1..8/:x,y;

ab/1/:a,b;

endsets

data:

@text('E:\matlab7.0\work\data.txt')=x,y;!读入到matlab的工作空间中;

@text('E:\matlab7.0\work\data1.txt')=a,b;

enddata

x(1)=1+4*@rand(0.12345);

y(1)=1+4*@rand(0.25);

@for(position(i)|i#ge#2:x(i)=1+4*@rand(x(i-1)));!随机产生1~5中的8个点;

@for(position(i)|i#ge#2:y(i)=1+4*@rand(y(i-1)));

[obj]min=@sum(position(i):@sqrt((x(i)-a(1))^2+(y(i)-b(1))^2));!目标函数;

@bnd(1,a(1),5);

@bnd(1,b(1),5);

end

matlab:

clear;

clc;

close all;

load('data.txt');

load('data1.txt');

hold on;

plot(data1(1),data1(2),'o','MarkerSize',15,'MarkerFaceColor','r');

plot(data(:,1),data(:,2),'or','MarkerSize',15,'MarkerFaceColor','b');

set(gcf,'Color','w');

set(gca,'FontSize',16)

grid off;

data1=repmat(data1,8,1);

P=[data1(:,1)';data(:,1)'];

Q=[data1(:,2)';data(:,2)'];

plot(P,Q,'g','LineWidth',2);

xlabel('x');

ylabel('y');

title('Solving the problem of the minimun distance of tne sum of all the blue points towards the being known red point.');

gtext(['The minimun distance is ',num2str(10.2685),'.'],'FontSize',16,'Color','r');

三、运输+选址问题:

某公司有6个建筑工地,位置坐标为(ai, bi) (单位:公里),水泥日用量di (单位:吨)

i 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

(1)现有2料场,位于A (5, 1), B (2, 7),记(x j,y j),j=1,2, 日储量e j各有20吨。

假设料场和工地之间有直线道路,制定每天的供应计划,即从A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。

取决策变量c_ij表示i工地从j料场运来的水泥量。模型(线性模型)为:

model:

sets:

demand/1..6/:a,b,d;

supply/1..2/:x,y,e;

link(demand,supply):c;

endsets

data:

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;

x=5 2;

y=1 7;

e=20 20;

enddata

[obj]min=@sum(link(i,j):c(i,j)*@sqrt((a(i)-x(j))^2+(b(i)-y(j))^2));!目标函数; @for(demand(i):@sum(supply(j):c(i,j))=d(i));

@for(supply(j):@sum(demand(i):c(i,j))<=e(j));

end

求得:

C( 1, 1) 3.000000

C( 1, 2) 0.000000

C( 2, 1) 5.000000

C( 2, 2) 0.000000

C( 3, 1) 0.000000

C( 3,

2) 4.000000

C( 4,

1) 7.000000

C( 4,

2) 0.000000

C( 5,

1) 0.000000

C( 5,

2) 6.000000

C( 6,

1) 1.000000

C( 6, 2) 10.00000

Objective value: 136.2275

(2)改建两个新料场,需要确定新料场位置(xj,yj)和运量cij ,在其它条件不变下使总吨公里数最小。

模型一样,未知量变为料场位置(xj,yj)和运量cij ,变为非线性优化问题。

model:

sets:

demand/1..6/:a,b,d;

supply/1..2/:x,y,e;

link(demand,supply):c;

endsets

data:

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;

e=20 20;

enddata

init:

x=5 2;

y=1 7;

endinit

[obj]min=@sum(link(i,j):c(i,j)*@sqrt((a(i)-x(j))^2+(b(i)-y(j))^2));!目标函数; @for(demand(i):@sum(supply(j):c(i,j))=d(i));

@for(supply(j):@sum(demand(i):c(i,j))<=e(j));

@for(supply:@free(x);@free(y));

end

求得:

C( 1, 1) 3.000000

C( 1, 2) 0.000000

C( 2, 1) 0.000000

C( 2, 2) 5.000000

C( 3, 1) 4.000000

C( 3, 2) 0.000000

C( 4, 1) 7.000000

C( 4, 2) 0.000000

C( 5, 1) 6.000000

C( 5, 2) 0.000000

C( 6, 1) 0.000000

C( 6, 2) 11.00000

(x1,y1)=(3.254884,5.652331)

(x2,y2)=(7.250000,7.750000)

Objective value: 85.26604

四、路径最短问题:

如上图,求从S到T的最短路径。设d(x,y):城市x与城市y之间的直线距离;L(x):城市S 到城市x的最优行驶路线的路长。模型为:

min {L(x)+d(x,y)}

L(S)=0

model:

sets:

city/S,A1,A2,A3,B1,B2,C1,C2,T/:L;

road(city,city)/S,A1 S,A2 S,A3 A1,B1 A1,B2 A2,B1 A2,B2 A3,B1 A3,B2 B1,C1 B1,C2 B2,C1 B2,C2 C1,T C2,T/:d;

endsets

data:

d=6 3 3

6 5 8 6

7 4

6 7 8 9

5 6;

L=0,6,3,3,,,,,;

enddata

@for(city(j)|j#gt#@index(city,S):L(j)=@min(road(i,j):L(i)+d(i,j)));

end

求得最短路径为20.

五、指派问题(0-1规划问题):

四个人完成4项任务所用的时间如下,问如何指派任务使得完成所有任务的时间最短?

务t1 t2 t3 t4

人员

m1 2 15 13

4

m2 10 4 14

15

m3 9 14 16 13

m4 7 8 11 9

c_ij:表示第i个人完成第j项任务所用的时间;

决策变量x_ij:若第i个人选择第j项任务则x_ij=1;否则,x_ij=0;

模型为:

model:

sets:

task/1..4/:t;

man/1..4/:m;

link(man,task):c,x;

endsets

data:

c=2 15 13 4

10 4 14 15

9 14 16 13

7 8 11 9;

enddata

[obj]min=@sum(link:c*x);

@for(task(j):@sum(man(i):x(i,j))=1);

@for(man(i):@sum(task(j):x(i,j))=1);

@for(link:@bin(x));

end

求得:最优指派为:m1--t4,m2--t2,m3--t1,m4--t3

最优值为:28。

六、装配线平衡模型(0-1规划问题)

11 件任务(A—K)分配到 4 个工作站(1—4),任务的优先次序如下图,每件任务所花费的时间如下表。目标是为每个工作站分配加工任务,尽可能使每个工作站执行相同的任务量,其最终装配线周期最短。

任务A B C D E F G H I J K

时间 45 11 9 50 15 12 12 12 12 8 9

T(i):为完成第i项任务需要的时间。

SETS:

TASK/ A B C D E F G H I J K/: T; !任务集合,有一个完成时间属性T; PRED( TASK, TASK)/ A,B B,C C,F C,G F,J G,J

J,K D,E E,H E,I H,J I,J /; !任务之间的优先关系集合(A 必须完成才能开

始B,等等);

STATION/1..4/; ! 工作站集合;

TXS( TASK, STATION): X;! X 是派生集合TXS 的一个属性。如果X(I,K)=1,则表

示第I 个任务指派给第K 个工作站完成;

ENDSETS

DATA:

T = 45 11 9 50 15 12 12 12 12 8 9; !任务 A B C D E F G H I J K 的完成时间;

ENDDATA

@FOR( TASK( I): @SUM( STATION( K): X( I, K)) = 1); !每一个作业必须指派到一个工

作站;

@FOR( PRED( I, J): @SUM( STATION( K): X(I, K))-@SUM( STATION( K):

X(J,

K) )>=0) ; !对于每一个存在优先关系的作业对(I,J)来说,I先J后安排;

@FOR( STATION( K):@SUM( TXS( I, K): T( I) * X( I, K)) <= CYCTIME); !对于每一个

工作站来说,其花费时间必须不大于装配线周期;

MIN = CYCTIME; !目标函数是最小化转配线周期;

@FOR( TXS: @BIN( X)); !指定X(I,J) 为0/1 变量;

END

解得最短周期为50.

分配情况为:A-1,B-3,C-4,D-2,E-3,F-4,G-4,H-3,I-3,J-4,K-4.

七、选址问题

某海岛上有12个主要的居民点,每个居民点的位置(用平面坐标x,y表示,距离单位:km)和居住的人数(r)如下表所示。现在准备在海岛上建一个服务中心为居民提供各种服务,那么服务中心应该建在何处?

x 0 8.20 0.50 5.70 0.77 2.87 4.43 2.58 0.72 9.76 3.19 5.55

y 0 0.50 4.90 5.00 6.49 8.76 3.26 9.32 9.96 3.16 7.20 7.88

r 600 1000 800 1400 1200 700 600 800 1000 1200 1000 1100

设建在(a,b)处最合理。建立模型:

MODEL:

SETS:

VAR/1..12/:X,Y,R;

ENDSETS

DATA:

X=0 8.20 0.50 5.70 0.77 2.87 4.43 2.58 0.72 9.76 3.19 5.55;

Y=0 0.50 4.90 5.00 6.49 8.76 3.26 9.32 9.96 3.16 7.20 7.88;

R=600 1000 800 1400 1200 700 600 800 1000 1200 1000 1100;

ENDDATA

MIN=@SUM(VAR:@SQRT((X-A)^2+(Y-B)^2)*R);

END

求得:(a,b)=(3.601028,6.514223),最小值为:44236.04。

八、婚配问题:

10对年龄相当的青年,任意一对男女青年配对的概率pij见下表。试给出一个配对方案,使总的配对概率最大。

w1 w2 w3 w4 w5 w6 w7 w8 w9 w10

m1 0.5828 0.2091 0.4154 0.2140 0.6833 0.4514 0.6085 0.0841 0.1210 0.2319

m2 0.4235 0.3798 0.3050 0.6435 0.2126 0.0439 0.0158 0.4544 0.4508 0.2393

m3 0.5155 0.7833 0.8744 0.3200 0.8392 0.0272 0.0164 0.4418 0.7159 0.0498

m4 0.3340 0.6808 0.0150 0.9601 0.6288 0.3127 0.1901 0.3533 0.8928 0.0784

m5 0.4329 0.4611 0.7680 0.7266 0.1338 0.0129 0.5869 0.1536 0.2731 0.6408

m6 0.2259 0.5678 0.9708 0.4120 0.2071 0.3840 0.0576 0.6756 0.2548 0.1909

m7 0.5798 0.7942 0.9901 0.7446 0.6072 0.6831 0.3676 0.6992 0.8656 0.8439

m8 0.7604 0.0592 0.7889 0.2679 0.6299 0.0928 0.6315 0.7275 0.2324 0.1739

m9 0.5298 0.6029 0.4387 0.4399 0.3705 0.0353 0.7176 0.4784 0.8049 0.1708

m10 0.6405 0.0503 0.4983 0.9334 0.5751 0.6124 0.6927 0.5548 0.9084 0.9943

取xx_ij为0-1型决策变量。

模型为:

model:

sets:

man/m1..m10/;

woman/w1..w10/;

link(man,woman):p,x;

endsets

data:

p=0.5828 0.2091 0.4154 0.2140 0.6833 0.4514 0.6085 0.0841 0.1210 0.2319 0.4235 0.3798 0.3050 0.6435 0.2126 0.0439 0.0158 0.4544 0.4508 0.2393 0.5155 0.7833 0.8744 0.3200 0.8392 0.0272 0.0164 0.4418 0.7159 0.0498 0.3340 0.6808 0.0150 0.9601 0.6288 0.3127 0.1901 0.3533 0.8928 0.0784 0.4329 0.4611 0.7680 0.7266 0.1338 0.0129 0.5869 0.1536 0.2731 0.6408 0.2259 0.5678 0.9708 0.4120 0.2071 0.3840 0.0576 0.6756 0.2548 0.1909 0.5798 0.7942 0.9901 0.7446 0.6072 0.6831 0.3676 0.6992 0.8656 0.8439 0.7604 0.0592 0.7889 0.2679 0.6299 0.0928 0.6315 0.7275 0.2324 0.1739 0.5298 0.6029 0.4387 0.4399 0.3705 0.0353 0.7176 0.4784 0.8049 0.1708 0.6405 0.0503 0.4983 0.9334 0.5751 0.6124 0.6927 0.5548 0.9084 0.9943; enddata

max=@prod(man(i):@sum(woman(j):p(i,j)*x(i,j)));

@for(woman(j):@sum(link(i,j):x(i,j))=1);

@for(man(i):@sum(link(i,j):x(i,j))=1);

@for(link:@bin(x));

end

求解结果:m1-w5,m2-w8,m3-w2,m4-w4,m5-w7,m6-w3,m7-w6,m8-w1,m9-w9,m10-w10. 最大值为0.055.

九、护士值班安排问题

某医院,从周一到周日都要有人值班,每天至少需要的护士如表。要求每个护士每周连续上班5天,试问该医院至少需要多少护士?并给出上班安排计划。

周 1 2 3 4 5 6 7

人 20 16 13 16 19 14 12

取决策变量star(i):周i开始值班的人数;

目标函数:min sum[star(i)](i=1,2,3, (7)

约束条件:连续工作五天,周j值班的人数>=required(j)(j=1,2,3, (7)

model:

sets:

days/mon..sun/: required,start;

endsets

data:

!每天所需的最少职员数;

required = 20 16 13 16 19 14 12;

enddata

!最小化每周所需职员数;

min=@sum(days: start);

@for(days(J):@sum(days(I) | I #le# 5:start(@wrap(J+2+I,7))) >= required(J));

end

解得:总共需要22人,周一8人开始值班,周二2人,周三0人,周四6人,周五3人,周六3人,周日0人。

十、填数问题

分别把1,2,…,16填到图示的16个圈内,使得每个三角形上的所有圈内的数的和为81(共4个三角形)。

决策变量:e_ij=1,第i个圈填数a_j;e_ij=0,第i个圈不填数a_j。a_j=j,j=1,2,3, (16)

模型:

model:

sets:

number/1..16/:a;

link(number,number):e;

tri1(number)/1 2 3 4 5 6 7 8 9/;

tri2(number)/1 2 3 4 16 15 12 11 10/;

tri3(number)/4 5 6 7 14 13 12 15 16/;

tri4(number)/7 8 9 1 10 11 12 13 14/;

endsets

data:

a=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16;

enddata

[obj]max=@sum(link(i,j):e(i,j)*a(j));

@for(number(i):@sum(link(i,j):e(i,j))=1);

@for(number(j):@sum(link(i,j):e(i,j))=1);

@for(link(i,j):@bin(e(i,j)));

@sum(number(j):@sum(tri1(i):e(i,j)*a(j)))=81;

@sum(number(j):@sum(tri2(i):e(i,j)*a(j)))=81;

@sum(number(j):@sum(tri3(i):e(i,j)*a(j)))=81;

@sum(number(j):@sum(tri4(i):e(i,j)*a(j)))=81;

@sum(link(i,j):e(i,j)*a(j))=136;

end

红色的那句程序可以去掉,也可以为:min=@sum(link(i,j):e(i,j)*a(j)),但求的结果不同,结果都符合要求。

编号1~16的圆圈的填数结果至少有3种:

(1)12 11 1 10 7 8 14 13 5 9 4 16 2 6 15 3

(2)14 3 5 15 8 7 13 4 12 6 11 10 9 2 16 1

(3)14 11 4 15 9 8 13 2 5 16 3 10 12 6 1 7

为了求得更多的解,可以约束编号1~16的圆圈的填数结果不为以上3种结果。

model:

sets:

number/1..16/:a;

link(number,number):e;

tri1(number)/1 2 3 4 5 6 7 8 9/;

tri2(number)/1 2 3 4 16 15 12 11 10/;

tri3(number)/4 5 6 7 14 13 12 15 16/;

tri4(number)/7 8 9 1 10 11 12 13 14/;

yueshu1:c1;

yueshu2:c2;

yueshu3:c3;

endsets

data:

a=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16;

c1=12 11 1 10 7 8 14 13 5 9 4 16 2 6 15 3;

c2=14 3 5 15 8 7 13 4 12 6 11 10 9 2 16 1;

c3=14 11 4 15 9 8 13 2 5 16 3 10 12 6 1 7;

enddata

[obj]min=@sum(number(i):@sum(number(j):e(i,j)*a(j))); @for(number(i):@sum(number(j):e(i,j))=1);

@for(number(j):@sum(link(i,j):e(i,j))=1);

@for(link(i,j):@bin(e(i,j)));

@sum(number(j):@sum(tri1(i):e(i,j)*a(j)))=81;

@sum(number(j):@sum(tri2(i):e(i,j)*a(j)))=81;

@sum(number(j):@sum(tri3(i):e(i,j)*a(j)))=81;

@sum(number(j):@sum(tri4(i):e(i,j)*a(j)))=81;

@sum(link(i,j):e(i,j)*a(j))=136;

@sum(yueshu1(j):@sum(link(i,j):e(i,j)))<16;

@sum(yueshu2(j):@sum(link(i,j):e(i,j)))<16;

@sum(yueshu3(j):@sum(link(i,j):e(i,j)))<16;

end

解得:(4)12 15 11 10 3 8 16 1 5 4 7 14 9 13 2 6

可以继续下去:······

十一、数独求解

在琳琅在线数独随机截取一至尊级题目如下:

用Lingo求解这道题。

LINGO软件简介

LINGO 软件简介 LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性规划、非线性规划、整 数规划等问题。 一个简单示例 有如下一个混合非线性规划问题: ?????≥≤≤+++---+为整数 213 212 13213 2 2212121,;0,,210022..15023.027798max x x x x x x x x x x t s x x x x x x x 。 LINGO 程序(模型): max =98*x1+277*x2-x1^*x1*x2-2*x2^2+150*x3; x1+2*x2+2*x3<=100; x1<=2*x2; @gin (x1);@gin (x2);! Lingo 默认变量非负 (注意:@bin(x)表示x 是0-1变量;@gin(x)表示x 是整数变量;@bnd(L,x,U)表示 限制LxU ;@free(x)表示取消对x 的符号限制,即可正、可负。) 结果: Global optimal solution found. Objective value: Extended solver steps: 0 Total solver iterations: 45 Variable Value Reduced Cost X1 X2 X3 Row Slack or Surplus Dual Price 1 2 3 ———————— 非常简单! 在LINGO 中使用集合 为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO 引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。 例如:对?? ? ??? ? ==-++-==≤++∑=.,,;10)0(;4,3,2,1),()())()1()(;4,3,2,1,20)(..)} (20)(450)(400{min 4 ,3,2,1均非负INV OP RP INV I I DEM I OP I RP I INV I INV I I RP t s I INV I OP I RP I 求解程序: model : sets : mark/1,2,3,4/:dem,rp,op,inv;!也可以vmark/1..4/:dem,rp,op,inv;

运筹学实例分析及lingo求解

运筹学实例分析及lingo 求解 一、线性规划 某公司有6个仓库,库存货物总数分别为60、55、51、43、41、52,现有8个客户各要一批货,数量分别为35,37,22,32,41,32,43,38。各供货仓库到8个客户处的单位货物运输价见表 试确定各仓库到各客户处的货物调运数量,使总的运输费用最小。 解:设 ij x 表示从第i 个仓库到第j 个客户的货物运量。ij c 表示从第i 个仓库到第 j 个客户的单位货物运价,i a 表示第i 个仓库的最大供货量,j d 表示第j 个客户的订货量。 目标函数是使总运输费用最少,约束条件有三个:1、各仓库运出的货物总量不超过其库存数2、各客户收到的货物总量等于其订货数量3、非负约束 数学模型为: ∑∑===6 18 1)(min i j ij ij x c x f ????? ??????≥===≤∑∑==08,,2,1,6,2,1,,. .6 1 8 1ij j i ij i j ij x j d x i a x t s 编程如下: model : Sets : Wh/w1..w6/:ai;

Vd/v1..v8/:dj; links(wh,vd):c,x; endsets Data: ai=60,55,51,43,41,52; dj=35,37,22,32,41,32,43,38; c=6,2,6,7,4,2,5,9 4,9,5,3,8,5,8,2 5,2,1,9,7,4,3,3 7,6,7,3,9,2,7,1 2,3,9,5,7,2,6,5 5,5,2,2,8,1,4,3; Enddata Min=@sum(links(i,j):c(i,j)*x(i,j)); @for(wh(i):@sum(vd(j):x(i,j))<=ai(i)); @for(vd(j):@sum(wh(i):x(i,j))=dj(j)); end Global optimal solution found. Objective value: Total solver iterations: 0 Variable Value Reduced Cost AI( W1) AI( W2) AI( W3) AI( W4) AI( W5) AI( W6) DJ( V1) DJ( V2) DJ( V3) DJ( V4) DJ( V5) DJ( V6) DJ( V7) DJ( V8) C( W1, V1) C( W1, V2) C( W1, V3) C( W1, V4) C( W1, V5) C( W1, V6)

Lingo软件在求解数学优化问题的使用技巧

Lingo软件在求解数学优化问题的使用技巧 LINGO是一种专门用于求解数学规划问题的软件包。由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。LINGO 主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。 LINGO的最新版本为LINGO7.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。 1.LINGO编写格式 LINGO模型以MODEL开始,以END结束。中间为语句,分为四大部分(SECTION):(1)集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS”结束。这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(A TTRIBUTE,类似于数组)。 LINGO中的集合有两类:一类是原始集合(PRIMITIVE SETS),其定义的格式为:SETNAME/member list(or 1..n)/:attribute,attribute,etc。 另一类是是导出集合(DERIVED SETS),即引用其它集合定义的集合,其定义的格式为: SETNAME(set1,set2,etc。):attribute,attribute,etc。 如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。(2)目标与约束:这部分定义了目标函数、约束条件等。一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。求解优化问题时,该部分是必须的。(3)数据部分(DA TA):这部分以“DA TA:”开始,以“END DA TA”结束。其作用在于对集合的属性(数组)输入必要的数值。格式为:attribut=value_list。该部分主要是方便数据的输入。 (4)初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。 编写LINGO程序要注意的几点: 1.所有的语句除SETS、ENDSETS、DA TA、ENDDA TA、INIT、ENDINIT和MODEL,END 之外必须以一个分号“;”结尾。 2.LINGO求解非线性规划时已约定各变量非负。 LINGO内部函数使用详解。 LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。 (1)常用数学函数 @ABS(X) 返回变量X的绝对数值。 @COS( X) 返回X的余弦值,X的单位为弧度 @EXP( X)

基于Lingo的旅游计划制定方法(含代码)

海南大学 《数学模型课程设计》论文 题目:基于Lingo的旅游计划制定方法班级:信息与计算科学 姓名:体贴的瑾色 学号: 指导教师: 日期:2017.06

目录 基于Lingo的旅游计划制定方法 (3) 摘要 (3) 一、问题描述 (3) 二、模型假设 (3) 三、问题分析 (3) 四、符号说明 (4) 五、模型建立 (4) 六、问题解决 (7) 七、回答问题 (9) 八、模型推广 (10) 九、心得体会 (11) 参考文献 (11) 程序附录 (11)

基于Lingo 的旅游计划制定方法 摘要 本文针对海南十八个城市制定旅游规划,在收集了大量的数据情况下,建立评价指标,找到最优的旅游路线。 对于问题一因为不要求求出具体的路程最小值,所以我们使用matlab 处理海南省的地图,找到每个城市在地图的相对坐标,从而得到城市之间的相对距离。以距离为权,以旅程的长度为评价标准建立模型,规划最优路线得到最小相对距离1488。11,注意这里的最小距离并不是实际上的最小距离。 对于问题二将最小费用矩阵代替距离矩阵,以旅程的总车费为评价标准建立模型,规划最优路线,得到最小费用为276元。 对于问题三,在一二问的基础上,综合考虑省时省钱,得到评价标准表达式 1488.11276 min 0.50.51488.11276 D M --=+,建立模型,规划最优路线。 一、问题描述 本题要求在不同的约束条件下规划出海南的最佳旅游路线,路线的基本要求是 必须从海口出发并回到海口,并且经过且经过海南的每个城市(包括县城)一次,并且每个市县玩两天。不同的问题约束条件是: (1)要求总路程最短。 (2)允许选择动车和大巴作为出行工具,规划的路线使得出行总交通费用最少。 (3)综合考虑一二问的条件,得到最优路线,设定出相应的评价准则和指标,修正模型。 二、模型假设 (1) 城市之间路程用城市的直线距离代替。 (2) 近期城市之间的动车价格和大巴价格视为定值。 (3) 城市之间路费取自动车价格和大巴价格的最小值。 (4) 假设不同城市之间的交通工具的速度均相差不大,即旅行时间由旅行 路程唯一决定。 三、问题分析 通过查询知道海南的市县数量总共是有18个(三沙市除外),那么显然这个问题是一个18个城市的TSP 问题。用图论的内容来等价话描述为:设(,,) G V E W =

Lingo超经典案例大全

Lingo超经典案例大全 LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。 Lingo模型由4个段构成: (1)集合段(sets endsets);(2)数据段(data enddata); (3)初始段(init endinit);(4)目标与约束段。 Lingo的五大优点: 1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多; 2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件; 3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变; 4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。 5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加. 一、求解线性整数规划、非线性整数规划问题: 1.线性整数规划: model: max=x1+x2; x1+9/14*x2<=51/14; -2*x1+x2<=1/3; @gin(x1);@gin(x2); end

如何在lingo中使用集合

例题1. 在lingo 中输入下列线性规划模型,并求解 ∑∈?=A j i j i x j i d z ),(),(),( min s.t. 1),1(≥∑∈V j j x , , },10,,2,1{,0),(x , ),(, 1,1),(V V A V V i i i j i x j j i x V i ?==∈=>=∑∈ 为非负实数所有 的数值如下表:d d=0 8 5 9 12 14 12 16 17 22 8 0 9 15 16 8 11 18 14 22 5 9 0 7 9 11 7 12 12 17 9 15 7 0 3 17 10 7 15 15 12 16 9 3 0 8 10 6 15 15 14 8 11 17 8 0 9 14 8 16 12 11 7 10 10 9 0 8 6 11 16 18 12 7 6 14 8 0 11 11 17 14 12 15 15 8 6 11 0 10 22 22 17 15 15 16 11 11 10 0; 分析:这个模型输入的难点,在于变量的数量太多,足足有100个。约束条件也比较多,有没有什么方便的输入方法?下面介绍lingo 中集合的建立 新建lingo 文件 输入下面内容 model : sets : V/1..10/;!创建集合V; A(V,V):d,x;!创建集合A 是V 乘V.而d,x 是与A 同结构的,即d ,x 分别是10*10矩阵; endsets min =@sum (A(i,j):d(i,j)*x(i,j));!创建目标函数; @sum (V(j):x(1,j))>=1; !第一个约束条件; @for (V(j)|j#gt#1: !i#gt#1为逻辑判断语句表示i>1是返回真值,但这里不能直接写i>1,因为">"是关系运算符不是逻辑运算符;

lingo操作介绍

1.2 菜单介绍 1.2.1 File 1 New 新建一个窗口, 当你执行这个命令时, 会出现如下对话框: 你可以在对话框中选择你想要建立的类型. 类型如下: 1)扩展名为(*.lg4) LG4格式是LINGO4.0的版本,是在Windows下最主要的储存文件格式, 这种格式支持字体格式, 自定义格式以及动态连接, LG4以二进制格式存储, 所以不能被其它的应用软件直接读取. 2)扩展名为(*.lng) LNG是捷便的存储方式,是4.0版本前的标准文件格式,为了与前版本的兼容,所以还一直在用,LNG文件是以ASCII形式存储的,所以能被支持文本文件的应用程序读取.该格式不支持多种字体. 3)扩展名为(*.ltd) LTD是数据文件, 可以从@FILE函数导入数据,@FILE函数只能读取文本文件,所以所有的LTD文件是以ASCII形式存储, 也不支持多种字体. 4)扩展名为(*.ltf) LTF是LINGO的调试文件格式, 也是以ASCII格式存储,能直接被LINGO的File|Take command执行. 2 Log Output 输出文本文件,可以将随后原输出到报告窗口的内容输出到文本中. 该命令与Maple 中的writeto命令非常相似. 在Maple中输入如下: > x:=sin(5.); writeto("c://maple.txt"); y:=x+1: print(x,y); print(x); > y; > writeto(terminal);

> y; 执行菜单中的Edit|Excute|Worksheet, 按钮,窗口重新显示如下: > x:=sin(5.); writeto("c://maple.txt"); y:=x+1: print(x,y); print(x); x:=-.9589242747 > y; > writeto(terminal); > y; 0.4010757253 而在C盘的maple.txt文件的内容为: -.9589242747, .0410757253 -.9589242747 .0410757253 从中可以知道,用了writeto(filename)命令以后把结果输出到filename 中. 直到碰到writeto(terminal)命令时,才重新在工作窗口中显示. 当你点击菜单File|Log Output时,系统出现保存对话框,系统就会将命令窗口中的输出结果保存到指定的文件中. 3 Import LINDO File 该命令是用来导入LINDO软件保存的LINDO文件(*.LTX)格式. 只要在LINGO中导入LINDO文件格式, LINGO系统自动将该文件转化为LINGO可执行语句. 1.2.2 Edit 1 Paste Function 用该命令可以在当前点插入LINGO的内部函数, 2 Select Fonts 设置字体类型, 字体大小,字体颜色. 1.2.3 LINGO 1 Solve 用solve命令对当前窗口中的模型求解, 该命令只对report script窗口起作用, 不能对数据窗口求解.

单件作业排序问题的基于lingo软件解法(含代码)

海南大学 《数学模型》课程设计 题目:单件作业排序问题的基于lingo软件解法班级:信息与计算科学 姓名:体贴的瑾色 学号: 指导教师:舒兴明 日期:2017.05

单件作业排序问题的基于lingo软件解法 摘要 关键词:单件工件加工排序 lingo 本文针对一个8*5的单件作业排序问题,通过规定加工顺序,后将不满足这个顺序的工件‘拆分’为不同的工件,然后将问题变成了更为简单的流水作业排序问题。通过引入0-1变量,约束本来同属与一个工件的‘工件’加工顺序建立一个数学规划模型,利用lingo 软件进行模型的求解,得到了使得所有工件都加工完成所需时间最少的排序。最后针对模型做了一个中肯的评价,并将模型推广到m n的单件作业排序问题。 解决*

一、问题分析 该问题是一个单件作业排序问题,这是一般的工件排序问题,也是最复杂的工件排序问题,即每一个工件都有自己独特的加工路线,工件没有一定的流向,这类排序问题暂时还没有一种很好的解决方案。而与之区别的一种工件排序问题是流水作业排序问题,最大的不同就是流水作业排序中在不同的工件在多个机床上的加工顺序是一致的情况下也能够找到最优解或者近似最优解,这类问题往往能得到比较好的解决。本问题对工件在不同机床上加工的顺序做了限制,而且一个工件可能多次在同一个机床上加工,使得问题比较复杂,而如果我们规定工件在机床上加工的顺序只能为A-B-C-D-E,且若某个工件不满足这个顺序就将其看为多个符合顺序的工件组合。比如问题中的工件1加工顺序为A-B-A-C-D-E,在第三道工序不满足规定的顺序,那么就将其拆分为加工顺序为A-B—C-D-E和A-B-C-D-E的两个工件1.1和1.2,其中工件1.2必须在工件1.1全部加工完成后才可以进行加工,并且工件1.1的CDE三道工序加工时间都为0,工件1.2的工序B加工时间为0。如此该问题就变成了一个20个工件在5个机床上加工的流水作业排序问题。变换后的加工时间表为(为了方便处理,将变换后的零件仍然以自然数编号,单位为h): 这样只要决定了每个工件在每个机床的初始时刻,顺序一旦确定,每个工件在每

lingo的常用函数

l i n g o的常用函数 This model paper was revised by the Standardization Office on December 10, 2020

Lingo基本用法总结(除集函数部分) LINGO是用来求解线性和非线性优化问题的简易工具。Lingo免费版可以支持30个未知数,lingo破解版可以支持几万个未知数、几万个约束条件。 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model –LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例如何在LINGO中求解如下的LP问题: 在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮即可。 得到如下结果: 所以当x1为250,x2为100时目标函数得到最大值。 算术运算符 Lingo中变量不区分大小写,以字母开头不超过32个字符 算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符: ^乘方﹡乘/除﹢加﹣减

LINGO唯一的一元算术运算符是取反函数“﹣”。 这些运算符的优先级由高到底为: 高﹣(取反) ^ ﹡/ 低﹢﹣ 运算符的运算次序为从左到右按优先级高低来执行。运算的次序可以用圆括号“()”来改变。 例:在x1+x2>=350,x1>=100,2*x1+x2<=600的条件下求2*x1+3*x2的最小值 在代码窗口中编写 min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后单击上面菜单lingo菜单下solve键即可。 数学函数 标准数学函数: @abs(x) 返回x的绝对值 @sin(x) 返回x的正弦值,x采用弧度制 @cos(x) 返回x的余弦值

lingo软件使用教程

lingo软件使用教程 一般来说,一个优化模型将由以下三部分组成: 1. 目标函数(Objective Function):要达到的目标。 2. 决策变量(Decision variables):每组决策变量的值代表一种方案。在优化模型中需要确定决策变量的最优值,优化的目标就是找到决策变量的最优值使得目标函数取得最优。 3. 约束条件(Constraints):对于决策变量的一些约束,它限定决策变量可以取的值。 在写数学模型时,一般第一行是目标函数,接下来是约束条件,再接着是一些非负限制等。在模型窗口输入如下代码: Max = 2*x1+3*x2; X1+2*x2<=8; 4*x1<16; 4*x2<12; 注意:1.每一个lingo表达式最后要跟一个分号; 2.多数电脑中没有符号,lingo中<=代替;为了方便可以用<代替小于等于,用>代替大于等于。 3.我们可以添加一些注释,增加程序的可读性。注释以一个!(叹号必须在英文状态下输入,它会自动变为绿色)开始,以;(分号)结束。 4.Lingo中不区分变量名的大小写。变量名必须以字母(A-Z)开头,后面的字符可以是字母、数字、下划线。变量名不能超过32个字符。 Lingo程序的一些规则: 1. 在Lingo中最开始都是“MAX=”或者“MIN=”开始表示求目标函数的最大或者最小值。 2. 变量和它前面的系数之间要用“*”连接,中间可以有空格。 3. 变量名不区分大小写,但必须以字母开始,不超过32个字符。 4. 数学表达式结束时要用分号“;”表示结束。表达式可以写在多行上,但是表达式中间不能用分号。 5. 在电脑系统中一般没有“小于等于”符号,在Lingo采用“<=”来表示“小于等于”,用“>=”表示“大于等于”。小于等于也可以用更简单的“<”表示,大于等于用“>”表示。 集合段: 在我们已经得到的程序里有一些量没有定义,如WAREHOUSES( I),DEMAND( J), LINKS( I, J)。这些量将在Lingo中的集合段定义。 集合段以SETS:表示开始,以ENDSETS表示结束。 如果一个集合的元素都已经定义过,就可以用一些循环函数(如@for). 注:1. 集合的属性相当于以集合的元素为下标的数组。Lingo中没有数组的概念,只有定义在集合上的属性的概念。 2 集合的定义语法: set_name[/set_member/:][attribute_list]; 集合的名称在左边,右边是这个集合上的属性,他们之间用冒号“:”分割开,最后由分号表示结束。如果在同一个集合上有多个属性时,不同的属性之间用逗号“,”隔开,如本例的cost和volume属性。如果要特别列出集合的元素时,在集合的名称后把元素写在两条斜线之间,如本例中的仓库可以写为 WAREHOUSES/WH1, WH2, WH3, WH4, WH5, WH6/: CAPACITY;

lingo建模入门--例题一

对于例题一: 某工厂在计划期内要安排生产Ⅰ、Ⅱ两种产品,已知生产单位产品所需的设备台时及A、B两种原材料的消耗,如表1-1所示: ⅠⅡ 设备128台时 原材料A4016kg 原材料B0412kg 利润2元3元 我们建立模型: 利用lingo求解时,可直接将模型输入,如在lingo中输入如下内容:!A sample linear program: MAX= 2 * x1 + 3 * x2; 4 * x1<= 16 ; 4 * x2<= 12 ; x1+ 2 * x2<= 8 ; 然后单机lingo菜单中的solve进行求解即可。 Lingo是一个设计用于建立和求解各种各样优化问题的数学建模语言,我们来看一下上面的模型: 第一行以惊叹号开始,以分号结束,是对模型的注释。 第二行给出了目标函数,显示了他是最大化的(注意:没有包含z变量),乘法用星号来表示,目标函数以分号结束。 下面的三行是约束函数,标点符号同一般的计算机语言,以分号结束。Lingo默认所有的变量为非负,若没有非负约束,需要用@free注明。

Lingo大小写不敏感,变量可以用大写或小写来表示。 Lingo窗口顶部的菜单条是一个标准的windows方式。一旦模型建立,即可从菜单或工具的solve按钮进行求解。在求解之前,lingo首先检查模型是否有语法错误,如果有,则提示错误位置。否则,求解工具开始求解,求解工具将在屏幕上出现一个求解状态窗口,当求解完成,求解报告将出现在屏幕上。 求解报告中,value列给出了决策变量的最优质。Slack or Surplus列的第一个输入显示了目标函数的响应值,下两个输入显示了每个约束函数两边之间的不同(对应于每个约束函数的剩余变量或松弛变量的值)。Reduced Cost和Dual Price列给出了问题的敏感性分析的信息。 这个模型足够小,能够一项一项写出,但这是单调乏味的。在一些相似的应用中,可能会有成千上万的决策变量和约束函数,一次以一项一项的方式写出模型是不现实的,lingo提供了一个有效地、紧凑的书写方式,即lingo建模语言。 LP模型一般具有重复的性质,所有的决策变量和约束函数都是同种类型的,lingo使用集合来描述这些重复的性质。 这个例子中的相关集合: 产品集合:P01,P02 资源集合:M01,M02,M03;(机器和原材料都可以看作是一种资源) 集合的属性: 1、每种产品的产量,每单位产品的利润 2、每周资源的供应量(包括原材料的供应量和设备的台时限制) 3、每单位每种产品分别需要资源的数量(产品和资源的组合的集合 成员的属性,这个集合源于两个简单的集合,称为导出集) 一个典型的lingo建立模型有三个部分: 1. 集合部分 2. 数据部分 3. 提供数学模型的部分 我们建立此模型的集合及数据部分: !lingo11 sets: !产品集合及其属性,/../之间的部分罗列了该集合的成员,每种属性会对应于集合的每个成员有一个值,相当于一个向量;

lingo使用手册

LINGO快速入门 LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 (2) §2 LINGO中的集 (3) 2.1 为什么使用集 (3) 2.2 什么是集 (4) 2.3 模型的集部分 (4) 2.3.1 定义原始集 (4) 2.3.2 定义派生集 (5) §3 模型的数据部分和初始部分 (7) 3.1 模型的数据部分 (7) 3.1.1 数据部分入门 (7) 3.1.2 参数 (8) 3.1.3 实时数据处理 (8) 3.1.4 指定属性为一个值 (9) 3.1.5 数据部分的未知数值 (9) 3.2 模型的初始部分 (10) §4 LINGO函数 (10) 4.1 基本运算符 (10) 4.1.1 算术运算符 (11) 4.1.2 逻辑运算符 (11) 4.1.3 关系运算符 (11) 4.2 数学函数 (12) 4.3 金融函数 (13) 4.4 概率函数 (13) 4.5 变量界定函数 (15) 4.6 集操作函数 (15) 4.7 集循环函数 (16) 4.8 输入和输出函数 (18) 4.9 辅助函数 (21) §5 LINGO WINDOWS命令 (22) 5.1 文件菜单(File Menu) (22) 5.2 编辑菜单(Edit Menu) (23) 5.3 LINGO菜单 (23) 5.4 窗口菜单(Windows Menu) (35) 5.5 帮助菜单(Help Menu) (37) §6 LINGO的命令行命令 (37) §7 综合举例 (41)

Lingo软件的使用

第十八章LINGO软件的使用 18.1 LINGO入门 18.1.1 LINGO软件的安装过程 点击LINGO9.0 for Windows安装文件,出现 点击“Next”按钮,出现 此时需要接受安装协议。系统安装时默认的目录是C:\LINGO9。安装完成前,会出现下图所示的对话框:

这个对话框询问你希望采用的默认的建模(即编程)语言,系统推荐的是采用LINGO语法,也就是选项“LINGO(recommended)”;你也可以选择“LINDO”将LINDO语法作为默认的设置。当然,安装后你也可以通过“LINGO|Options|File Format命令来修改默认的建模(即编程)语言。在上图中按下“OK”按钮,系统就会完成LINGO的安装过程。 18.1.2 LINGO基础知识 LINGO有两种命令格式:一种是常用的Windows模式,通过下拉式菜单命令驱动LINGO 运行,界面是图形式的,使用起来也比较方便;另一种是命令行(Command-Line)模式,仅在命令窗口(Command Window)下操作,通过输入行命令驱动LINGO运行。由于其使用字符方式输入,初学者往往不太容易掌握。在这里,我们主要介绍在菜单驱动模式下LINGO的使用方法。 LINGO 9.0软件比以前的版本有了很大的改进,功能大大增强,性能更加稳定,计算的结果更加可靠。LINGO软件不仅可用于求解非线性规划问题,还可以用以求解非线性整数规划问题;LINGO包含了内置的建模语言,模型中所需的数据可以以一定格式保存在独立的文件中;LINGO允许以简练、直观的方式描述较大规模的优化问题。 注:LIGDO公司目前已将LINDO软件从其产品中删除了。事实上,LINDO软件的所有功能(包括LINDO语法格式)都在LINGO中得到了支持。 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。状态行最左边显示的是“Ready”表示“准备就绪”;右下角显示的是当前时间,时间前面是当前光标的位置“Ln1,Col1”(即1行1列)。将来,用户可以用选项命令(LINGO|Options菜单命令)决定是否需要显示工具栏和状态行。在LINGO 模型窗口中,选择菜单命令“File|Open(F3)”,可以看到下图所示的标准的“打开文件”对话框,我们看到有各种不同的“文件类型”:

运筹学实例分析及lingo求解

. 运筹学实例分析及lingo 求解 一、线性规划 某公司有6个仓库,库存货物总数分别为60、55、51、43、41、52,现有8个客户各要一批货,数量分别为35,37,22,32,41,32,43,38。各供货仓库到8个客户处的单位货物运输价见表 试确定各仓库到各客户处的货物调运数量,使总的运输费用最小。 解:设 ij x 表示从第i 个仓库到第j 个客户的货物运量。ij c 表示从第i 个仓库到第 j 个客户的单位货物运价,i a 表示第i 个仓库的最大供货量,j d 表示第j 个客户的订货量。 目标函数是使总运输费用最少,约束条件有三个:1、各仓库运出的货物总量不超过其库存数2、各客户收到的货物总量等于其订货数量3、非负约束 数学模型为: ∑∑===6 18 1)(min i j ij ij x c x f ????? ??????≥===≤∑∑==08,,2,1,6,2,1,,. .6 1 8 1ij j i ij i j ij x j d x i a x t s ΛΛ

. 编程如下: model: Sets: Wh/w1..w6/:ai; Vd/v1..v8/:dj; links(wh,vd):c,x; endsets Data: ai=60,55,51,43,41,52; dj=35,37,22,32,41,32,43,38; c=6,2,6,7,4,2,5,9 4,9,5,3,8,5,8,2 5,2,1,9,7,4,3,3 7,6,7,3,9,2,7,1 2,3,9,5,7,2,6,5 5,5,2,2,8,1,4,3; Enddata Min=@sum(links(i,j):c(i,j)*x(i,j)); @for(wh(i):@sum(vd(j):x(i,j))<=ai(i)); @for(vd(j):@sum(wh(i):x(i,j))=dj(j)); end Global optimal solution found.

LINGO使用说明(比较简单)

Lingo介绍 Lingo是美国LINDO系统公司(Lindo Symtem Inc)开发的求解数学规划系列软件中的一个(其他软件为LINGDO,GINO,What’s Best等),它的主要功能是求解大型线性、非线性和整数规划问题,目前的版本是lingo11.0。 lingo分为Demo、solve suite、hyper、industrial、extended等六类不同版本,只有Demo版本是免费的,其他版本需要向LINDO系统公司(在中国的代理商)购买,Lingo的不同版本对模型的变量总数、非线性变量个数、整型变量个数和约束条件的数量做出不同的限制(其中extended版本无限制)。 Lingo的主要功能特色为: (1)既能求解线性规划,也有较强的求解非线性规划的能力; (2)输入模型简练直观; (3)运行速度快、计算能力强; (4)内置建模语言,提供几十种内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型; (5)将集合的概念引入编程语言,很容易将实际问题转换为Lingo语言; (6)能方便地与excel、数据库等其他软件交换数据。 学校图书馆40本《lingo和excel在数学建模中的应用》,袁新生、邵大宏、郁时炼主编,科学出版社

Lingo 程序设计简要说明 在数学建模中会遇到如规划类的题型,在这种模型中总存在着一个目标,并希望这个目标的取值尽可能的大或小,同时与这个目标有关的一系列变量之间存在一些约束。在构造出目标函数和约束条件的表达式后,我们需要对求出这个最值和各变量的取值。一般我们用LINGO 来对模型进行求解,本文将通过举一个简单的例子,围绕这个例子逐步学习LINGO 的使用。LINGO 只是一个求解工具,我们主要的任务还是模型的建立! 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。 示例:求解线性规划问题: max z=x1+x2+x3+x4+x5+x6+x7+x8 ???????????????≤≤≤≤≤≤269 + x88 + x72 + x66 + x55 + x47 + x38 + x28 + x16 15 6 + x87 + x7+ x65 + x54 + x44 + x34 + x25 + x15 444 + x86 + x77 + x68 + x58 + x45 + x32 + x27 + x14278 + x85 + x74 + x64 + x55 + x49 + x36 + x25 + x13389 + x84 + x75 + x62 + x57 + x46 + x35 + x28 + x1 2 154 + x8 3 + x79 + x66 + x55 + x45 + x3 4 + x27 + x1 求解这个模型的相应LINGO 程序代码如下: 程序一: max= x1+x2+x3+x4+x5+x6+x7+x8; x1 + 7*x2 + 4*x3 + 5*x4 + 5*x5 + 6*x6 + 9*x7 + 3*x8 + 415<=; 2*x1 + 8*x2 + 5*x3 + 6*x4 + 7*x5 + 2*x6 + 5*x7 + 4*x8 + 938<=; 3*x1 + 5*x2 + 6*x3 + 9*x4 + 5*x5 + 4*x6 + 4*x7 + 5*x8 + 827<=; 4*x1 + 7*x2 + 2*x3 + 5*x4 + 8*x5 + 8*x6 + 7*x7 + 6*x8 + 444<=; 5*x1 + 5*x2 + 4*x3 + 4*x4 + 4*x5 + 5*x6 + x7 + 7*x8 + 6 15<=; 6*x1 + 8*x2 + 8*x3 + 7*x4 + 5*x5 + 6*x6 + 2*x7 + 8*x8 + 926<=; 注:然后点击工具条上的按钮 即可。本模型的最优解为2.636364

lingo基础操作

LINGO 使用教程 LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 2121≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。产销单位运价如下表。

单 位销地 运 B1B2B3B4B5B6B7B8产量价 产地 A1 6 2 6 7 4 2 5 9 60 A2 4 9 5 3 8 5 8 2 55 A3 5 2 1 9 7 4 3 3 51 A4 7 6 7 3 9 2 7 1 43 A5 2 3 9 5 7 2 6 5 41 A6 5 5 2 2 8 1 4 3 52 销量35 37 22 32 41 32 43 38 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 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集

利用Lingo解一个具体的运输问题例子

实验三:利用Lingo 解一个具体的运输问题例子 1、 实验目的和任务 1.1. 进一步掌握Lingo 编程操作; 1.2通过实验进一步掌握运筹学运输问题的建模以及求解过程,提高学生分析问题和解决问题能力。 2、 实验仪器、设备及材料 计算机、Lingo 3、 实验内容 运输问题 问题P271 设有某种物资需要从m 个产地12,,...,m A A A 运到n 个销地12,,...,n B B B ,其中每个产地的生产量为 12,,...,m a a a ,每个销地的需求量为 12,,...,n b b b 。设从产地 i A 到销地 j B 的运费单价为 (1,2,...,, 1,2,..ij c i m j n ==,问如何调运可使总运费最少? 3个产地4个销地的运输问题 建模 决策变量:决策变量就是产地i A 到销地j B 的运量ij x 目标函数: 1 1 m in m n ij ij i j z c x === ∑∑, 约束条件:第i 个产地的运出量应小于或等于该地的生产量,即 1 ,1,2,...,.n ij i j x a i m =≤=∑ 第j 个销地的运入量应等于该地的需求量,即

1 ,1,2,....m ij j i x b j n ===∑ 求解过程 编写模型程序: model : ! 3 Warehouse,4 Customer Transportation Problem; sets : Warehouse/1..3/:a; Customer/1..4/:b; Routes(warehouse,customer):c,x; endsets !here are the parameters; data : a=30,25,21; b=15,17,22,12; c=6,2,6,7, 4,9,5,3, 8,8,1,5; enddata ! The objective; [obj] min =@sum (routes:c*x); !The supply constraints; @for (warehouse(i):[sup]@sum (customer(j):x(i,j))<=a(i)); !The demand constraints; @for (customer(j):[dem] @sum (warehouse(i):x(i,j))=b(j)); end 计算结果: Global optimal solution found. Objective value: 161.0000 Total solver iterations: 6 Variable Value Reduced Cost A( 1) 30.00000 0.000000 A( 2) 25.00000 0.000000 A( 3) 21.00000 0.000000 B( 1) 15.00000 0.000000 B( 2) 17.00000 0.000000 B( 3) 22.00000 0.000000

相关文档
最新文档