当前位置:文档之家› lingo解决线性规划问题的程序(经典)

lingo解决线性规划问题的程序(经典)

lingo解决线性规划问题的程序(经典)
lingo解决线性规划问题的程序(经典)

Lingo12软件培训教案

Lingo 主要用于求解线性规划,整数规划,非线性规划,V10以上版本可编程。

例1 一个简单的线性规划问题

0 , 600 2 100 350 st. 3 2max >=<=+=<<=++=y x y x x y x y x z

!exam_1.lg4 源程序 max = 2*x+3*y; [st_1] x+y<350; [st_2] x<100;

2*x+y<600; !决策变量黙认为非负; <相当于<=; 大小写不区分

当规划问题的规模很大时,需要定义数组(或称为矩阵),以及下标集(set) 下面定义下标集和对应数组的三种方法,效果相同::r1 = r2 = r3, a = b = c. sets :

r1/1..3/:a; r2 : b;

r3 : c;

link2(r1,r2): x; link3(r1,r2,r3): y; endsets data :

ALPHA = 0.7; a=11 12 13 ; r2 = 1..3; b = 11 12 13; c = 11 12 13; enddata

例2 运输问题

解: 设决策变量ij x = 第i 个发点到第j 个售点的运货量,i =1,2,…m; j =1,2,…n; 记为ij c =第i 个发点到第j 个售点的运输单价,i =1,2,…m; j =1,2,…n 记i s =第i 个发点的产量, i =1,2,…m; 记j d =第j 个售点的需求量, j =1,2,…n. 其中,m = 6; n = 8.

设目标函数为总成本,约束条件为(1)产量约束;(2)需求约束。 于是形成如下规划问题:

n

j m i x n

j d x

m i s x x c ij j n

i ij

i m

j ij m i n

j ij ij ,...,2,1,,...,2,1,0 ,...,2,1,

,...,2,1, st.

z min 1

111

==>=<==<==∑∑∑∑====

把上述程序翻译成LINGO 语言,编制程序如下:

!exam_2.lg4 源程序

model : !6发点8收点运输问题; sets :

rows/1..6/: s; !发点的产量限制;

cols/1..8/: d; !售点的需求限制;

links(rows,cols): c, x; !运输单价,决策运输量;

endsets

!-------------------------------------;

data:

s = 60,55,51,43,41,52;

d = 35 37 22 32 41 32 43 38;

c = 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

!------------------------------------;

min = @sum(links: c*x); !目标函数=运输总成本;

@for(rows(i):

@sum(cols(j): x(i,j))<=s(i) ); ! 产量约束;

@for(cols(j):

@sum(rows(i): x(i,j))=d(j) ); !需求约束;

end

例3把上述程序进行改进,引进运行子模块和打印运算结果的语句:!exam_3.lg4 源程序

model: !6发点8收点运输问题;

sets:

rows/1..6/: s; !发点的产量限制;

cols/1..8/: d; !售点的需求限制;

links(rows,cols): c, x; !运输单价,决策运输量; endsets

!==================================;

data:

s = 60,55,51,43,41,52;

d = 35 37 22 32 41 32 43 38;

c = 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

!==================================;

submodel transfer:

min = cost; ! 目标函数极小化;

cost = @sum(links: c*x); !目标函数:运输总成本;

@for(rows(i):

@sum(cols(j): x(i,j)) < s(i) ); ! 产量约束;

@for(cols(j):

@sum(rows(i): x(i,j)) > d(j) ); !需求约束;

endsubmodel

!==================================;

calc:

@solve(transfer); !运行子模块(解线性规划);

@divert('transfer_out.txt');!向.txt文件按自定格式输出数据;

@write('最小运输成本=',cost,@newline(1),'最优运输方案x=');

@for(rows(i):

@write(@newline(1));

@writefor(cols(j): ' ',@format(x(i,j),'3.0f') ) );

@divert(); !关闭输出文件;

endcalc

end

打开transfer_out.txt文件,内容为:

最小运输成本=664

最优运输方案x=

0 19 0 0 41 0 0 0

1 0 0 3

2 0 0 0 0

0 11 0 0 0 0 40 0

0 0 0 0 0 5 0 38

34 7 0 0 0 0 0 0

0 0 22 0 0 27 3 0

例4data段的编写技巧(1):从txt文件中读取原始数据!exam_3.lg4 源程序中的data也可以写为:

data:

s = @file('transfer_data.txt');

d = @file('transfer_data.txt');

c = @file('transfer_data.txt');

enddata

其中,transfer_data.txt的内容为:

!transfer.lg4程序的数据;

!产量约束s= ;

60,55,51,43,41,52 ~

!需求约束d= ;

35 37 22 32 41 32 43 38 ~

!运输单价c= ;

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 ~

!注:字符~是数据分割符,若无此符,视所有数据为一个数据块,只赋给一个变量;

例5lingo程序的的3种输入和3种输出方法;

!exam_5.lg4的源程序;

sets:

rows/1..3/: ;

cols/1..4/: ;

link(rows,cols): a, b, mat1, mat2;

endsets

data:

b = 1,2,3,4

5,6,7,8

9,10,11,12; !程序内输入;

a = @file('a.txt'); !外部txt文件输入;

mat1 = @ole('d:\lingo12\data.xls',mat1); !EXcel文件输入;

enddata

calc:

@text('a_out.txt') = a; !列向量形式输出数据;

@for(link: mat2 = 2*mat1);

@ole('d:\lingo12\data.xls') = mat2 ;!把mat2输出到xls文件中的同名数据块;

!向.txt文件按自定格式输出数据(参照前例);

Endcalc

例6程序段中的循环和选择结构举例

!exam_6.lg4的源程序;

sets:

rows/1..5/:;

cols/1..3/:;

links(rows,cols):d;

endsets

data:

d=0 2 3

4 3 2

1 3 2

4 7 2

2 1 6;

enddata

calc:

i=1;

@while(i#le#5:

a = d(i,1);

b = d(i,2);

c = d(i,3);

@ifc(a#eq#0:

@write('infeasible!',@newline(1));

@else

delta = b^2-4*a*c;

sqrt = @sqrt(@if(delta#ge#0, delta,-delta));

@ifc(delta#ge#0:

@write('x1=',(-b+sqrt)/2/a,'

x2=',(-b-sqrt)/2/a,@newline(1));

@else

@write('x1=',-b/2/a,'+',sqrt/2/a,'i',

'x2=',-b/2/a,'-',sqrt/2/a,'i',@newline(1));

);

);

i=i+1;

);

endcalc

本程序中的循环结构也可以用@for(rows(i): 程序体);进行计算。

例7指派问题(n人n任务费用最小)

x=1或0, 表示第i个人是否完成第j项任务,i,j=1,2,…n;

解:设决策变量ij

c=第i个人完成第j项任务的费用,i,j =1,2,…n; n = 6.

记ij

设目标函数为总费用,约束条件为(1)每人只完成一项任务;(2)每项任务只由一人完成。

于是形成如下规划问题:

n

j n i x n

j x

n i x x c ij n

i ij

n

j ij n i n

j ij ij ,...,2,1,,...,2,1,10 ,...,2,1,1

,...,2,1,1 st.

z min 1

111

========∑∑∑∑====或

!exam_7.lg4的源程序;

model : !6人6任务指派问题; sets :

rows/1..6/: ; !6人6任务;

links(rows,rows): c, x; !费用和决策变量; endsets

!-------------------------------------; data :

c = 6 2 6 7 4 2 4 9 5 3 8 5 5 2 1 9 7 4 7 6 7 3 9 2 2 3 9 5 7 2 5 5 2 2 8 1; enddata

!==================================; submodel appointment: min = cost; ! 目标函数极小化;

cost = @sum (links: c*x); !目标函数:总费用; @for (rows(i):

@sum (rows(j): x(i,j)) = 1 ); !每人完成一项 ; @for (rows(j):

@sum (rows(i): x(i,j))= 1 ); !每项由一人完成;

@for (links: @bin (x)); !0-1变量约束;

endsubmodel

submodel binVar:

@for(links: @bin(x)); !0-1变量约束;

endsubmodel

!==================================;

calc:

@solve(appointment,binVar); !运行子模块(解线性规划);

@divert('appointment_out.txt');!向.txt文件按自定格式输出数据;

@write('最小指派费用=',cost,@newline(1),'分配方案x=');

@for(rows(i):

@write(@newline(1));

@writefor(rows(j): ' ',@format(x(i,j),'3.0f') ) );

@divert(); !关闭输出文件;

endcalc

end

例8多目标规划转化为单目标规划问题举例

把上述运输问题稍加修改,考虑到运输量可以要取整数,就变成整数规划问题,而且运输问题除了成本最小一个目标以外,有时也要考虑各发点的运输量尽量均衡作为另一个目标。本程序处理的方法一是两目标加权平均,方法二是只选一个目标,另一个目标转化为约束,从而把多目标改为单目标。

!exam_8.lg4 源程序;

model: !6发点8收点运输问题;

sets:

rows/1..6/: s; !发点的产量限制;

cols/1..8/: d; !售点的需求限制;

links(rows,cols): c, x; !运输单价,决策运输量;

endsets

!==================================;

data:

s = 60,55,51,43,41,52;

d = 35 37 22 32 41 32 43 38;

c = 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

!==================================;

submodel obj_1:

min = minCost; ! 目标函数极小化;

minCost = @sum(links: c*x); !目标函数:运输总成本;

endsubmodel

submodel obj_2:

min = objValue;

objValue = 0.4*obj1+0.6*obj2; ! 二目标加权平均;

obj1 = @sum(links: c*x); !目标函数1:运输总成本;

obj2 = max1-min1; !目标函数2:发点运输量极差;

@for(links(i,j):

@sum(cols(j): x(i,j)) < max1 ;

@sum(cols(j): x(i,j)) > min1 ; ); endsubmodel

submodel obj_3:

min = obj2;

obj2 = max1-min1; !目标函数:发点运输量极差;

@for(links(i,j):

@sum(cols(j): x(i,j)) < max1 ;

@sum(cols(j): x(i,j)) > min1 ; );

cost1 = @sum(links: c*x); !运输总成本;

cost1 < 1.05*minCost; !运输总成本约束;

endsubmodel

submodel subject_to_1:

@for(rows(i):

@sum(cols(j): x(i,j)) < s(i) ); ! 产量约束;

@for(cols(j):

@sum(rows(i): x(i,j)) > d(j) ); !需求约束;

endsubmodel

submodel subject_to_2:

@for(links: @gin(x)); !整数约束;

endsubmodel

!==================================;

calc:

@solve(obj_1, subject_to_1, subject_to_2); !运行子模块(解线性整数规划);

@divert('intModel_out.txt');

@write(@newline(2),'整数规划的最小运输成本

=',minCost,@newline(1),'最优运输方案x=');

@for(rows(i):

@write(@newline(1));

@writefor(cols(j): ' ', @format(x(i,j), '3.0f') ) );

@divert(); @pause();

@solve(obj_2, subject_to_1, subject_to_2); !运行子模块(解线性整数规划);

@divert('intModel_out.txt', 'a');!向.txt文件追加输出数据;

@write(@newline(2),'二目标加权平均最小值

=',objValue,@newline(1),'最优运输方案x=');

@for(rows(i):

@write(@newline(1));

@writefor(cols(j): ' ', @format(x(i,j), '3.0f') ) );

@divert(); @pause();

@solve(obj_3, subject_to_1, subject_to_2); !运行子模块(解线性整数规划);

@divert('intModel_out.txt', 'a');!向.txt文件追加输出数据;

@write(@newline(2),'成本约束时极差最小值

=',obj2,@newline(1),'成本约束时运输量最平均方案x=');

@for(rows(i):

@write(@newline(1));

@writefor(cols(j): ' ', @format(x(i,j), '3.0f') ) );

@divert();

endcalc

end

本例中的运输量均衡指标,可以用方差表示,但变成非线性规划问题,只能求出局部最优解,而线性规划的最优解是全局最优解。

例9杂例1

model: !费波那契数列; !exam_9.lg4 源程序;

sets:

II/1..100/: Fi; !费波那契数列;

endsets

!==================================;

submodel myProc:

Fi(1) = 1;

Fi(2) = 1;

@for(II(i)|(i#ge#3)#and#(i#le#n):

Fi(i)=Fi(i-1)+Fi(i-2) );

endsubmodel

!==================================;

calc:

n = 10;

@solve(myProc);

@divert('Fibo_out.txt');

@writefor(II(k)|k#le#n: 'Fi(',@format(k, '2.0f'),')=', @format(Fi(k), '3.0f'),@newline(1) );

@divert();

endcalc

end

例10杂例2

sets:

II/1..3/:;

links(II,II):a,x;

endsets

data:

a = 1,2,3

2,1,4

3,2,2;

enddata

submodel fMin: !求函数的极值,极小值点;

min = z^2+4*z+3;

@free(z);

endsubmodel

submodel fzero: !解方程,求函数的零点;

@cos(y) = y;

@bnd(0,y,5);

endsubmodel

submodel get_invMat: !解矩阵方程,求逆阵;

@for(II(i):

@for(II(j):

@sum(II(k):a(i,k)*x(k,j)) = @if(i#eq#j,1,0)));

@for(links:@free(x));

endsubmodel

calc:

@solve(fMin);

@solve(fzero);

@solve(get_invMat);

endcalc

Lingo编程语言参考:

LINGO 有9 种类型的函数:

1.基本运算符:包括算术运算符、逻辑运算符和关系运算符

2.数学函数:三角函数和常规的数学函数

3.金融函数:LINGO提供的两种金融函数

4.概率函数:LINGO提供了大量概率相关的函数

5.变量界定函数:这类函数用来定义变量的取值范围

6.集操作函数:这类函数为对集的操作提供帮助

7.集循环函数:遍历集的元素,执行一定的操作的函数

8.数据输入输出函数:允许模型和外部数据源相联系,进行数据输入输出9.辅助函数:各种杂类函数

1. 基本运算符

1.1 算术运算符

^、﹡、/、﹢、﹣

1.2 逻辑运算符:

#not#否定该操作数的逻辑值,#not#是一个一元运算符

#eq#若两个运算数相等,则为true;否则为flase

#ne#若两个运算符不相等,则为true;否则为flase

#gt#若左边的运算符严格大于右边的运算符,则为true;否则为flase

#ge#若左边的运算符大于或等于右边的运算符,则为true;否则为flase #lt# 若左边的运算符严格小于右边的运算符,则为true;否则为flase

#le# 若左边的运算符小于或等于右边的运算符,则为true;否则为flase #and#仅当两个参数都为true 时,结果为true;否则为flase

#or#仅当两个参数都为false 时,结果为false;否则为true

1.3 关系运算符

“=”、“<=”和“>=”, LINGO 中还能用“<”表示小于等于关系,

2.2 数学函数

三角函数@sin(x),@sinh(x), @asin(x), @asinh(x),@cos(x),@cosh(x), @acos(x), @acosh(x), @tan(x),@tanh(x), @atan(x), @atanh(x), @atan2(x) @abs(x)返回x 的绝对值

@exp(x)返回常数e 的x 次方

@floor(x)返回去掉小数部分后的整数

@log(x) 返回x 的自然对数

@log10(x) 返回x 的以10为底的对数

@lgm(x)返回x的gamma 函数的自然对数

@mod(m,n) 返回用n整除m的余数.,如@mod(5,3)返回2;

@pi() 返回圆周率

@pow(x,y) 返回x的y次幂

@sign(x)如果x<0 返回-1;否则,返回1

@smax(x1,x2,…,xn)返回x1,x2,…,xn 中的最大值

@smin(x1,x2,…,xn)返回x1,x2,…,xn 中的最小值

@sqr(x) 返回x的平方.

@sqrt(x) 返回x的平方根.

2. 3 金融函数

@fpa(I,n) 返回如下情形的净现值:单位时段利率为I,连续n个时段支付,每个时段支付单位费用。若每个时段支付x单位的费用,则净现值可用x 乘以@ fpa(I,n)算得。

@fpl(I,n) 返回如下情形的净现值:单位时段利率为I,第n 个时段支付单位费用。

2.4 概率函数

@norminv(p,mu,sigma) N(mu,sigma^2)分布函数的反函数

@norminv(p,mu,sigma) N(0,1)分布函数的反函数

@pbn(p,n,x) 二项分布的累积分布函数。当n和(或)x不是整数时,用线性插值法进行计算。

@pcx(n,x)自由度为n的χ2分布的累积分布函数。

@peb(a,x)当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang 繁忙概率。

@pel(a,x) 当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang 繁忙概率。

@pfd(n,d,x)自由度为n和d 的F 分布的累积分布函数。@pfs(a,x,c) 当负荷上限为a,顾客数为c,平行服务器数量为x时,有限源的Poisson 服务系统的等待或返修顾客数的期望值。a是顾客数乘以平均服务时间,再除以平均返修时间。(或)x不是整数时,采用线性插值进行计算。

@phg(pop,g,n,x)超几何(Hypergeometric)分布的累积分布函数。pop 表示产品总数,g是正品数。从所有产品中任意取出n(n≤pop)件。pop,g,n和x都可以是非整数,这时采用线性插值进行计算。

@ppl(a,x)Poisson 分布的线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从均值为a的Poisson 分布。

@pps(a,x) 均值为a的Poisson 分布的累积分布函数。当x不是整数时,采用线性插值进行计算。

@psl(x)单位正态线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z 服从标准正态分布。

@psn(x)标准正态分布的累积分布函数。

@ptd(n,x)自由度为n的t 分布的累积分布函数。

@qrand(seed)产生服从(0,1)区间的拟随机数。

@rand(seed) 返回0 和1 间的伪随机数,

2.5 变量界定函数

变量界定函数实现对变量取值范围的附加限制,共4 种:

@bin(x)限制x 为0 或1

@bnd(L,x,U) 限制L≤x≤U

@free(x) 取消对变量x 的默认下界为0 的限制,即x 可以取任意实数

@gin(x) 限制x 为整数

在默认情况下,LINGO 规定变量是非负的,也就是说下界为0,上界为+∞。@free 取消了默认的下界为0 的限制,使变量也可以取负值。@bnd 用于设定一个变量的上下界,它也可以取消默认下界为0 的约束。

@semic(L,x,U), 半连续约束。约束x或者取0或者取[L,U]内数据。

2. 6 集操作函数

@in(set_name,primitive_index_1 [,primitive_index_2,…]) 如果元素在指定集中,返回1;否则返回0。

@index([set_name,] primitive_set_element) 该函数返回在集set_name 中原始集成员primitive_set_element 的索引。如果set_name被忽略,那么LINGO 将返回与primitive_set_element 匹配的第一个原始集成员的索引。如果找不到,则产生一个错误。

@wrap(index,limit) 该函数返回j=index-k*limit,其中k 是一个整数,取适当值保证j 落在区间[1,limit] 内。该函数相当于index 模limit 再加1 。该函数在循环、多阶段计划编制中特别有用。

@size(set_name) 该函数返回集set_name 的成员个数。在模型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。

2.7 集循环函数

集循环函数遍历整个集进行操作。其语法为

@function(setname[(set_index_list)[|conditional_qualifier]]:expression_li st);

@function 相应于下面罗列的五个集循环函数之一;setname 是要遍历的集;set_index_list 是集索引列表;conditional_qualifier 是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO 都要对conditional_qualifier 进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环。expression_list 是被应用到每个集成员的表达式列表,当用的是@for函数时,expression_list 可以包含多个表达式,其间用逗号隔开。这些表达式将被作为约束加到模型中。当使用其余的三个集循环函

数时,expression_list 只能有一个表达式。如果省略set_index_lis t,那么在expression_list 中引用的所有属性的类型都是setname 集。

@for 该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过@for 函数允许只输入一个约束,然后LINGO 自动产生每个集成员的约束。

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

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

@min和@max返回指定的集成员的一个表达式的最小值或最大值。

2.8 输入和输出函数

@file 函数该函数用从外部文件中输入数据,可以放在模型中任何地方。该函数的语法格式为

@file(‘filename’)。

这里filename 是文件名,可以采用相对路径和绝对路径两种表示方式。

@file 函数对同一文件的两种表示方式的处理和对两个不同的文件处理是一样的,这一点必须注意。

@text 函数

该函数被用在数据部分用来把解输出至文本文件中。它可以输出集成员和集属性值。其语法为

@text([’filename’])

这里filename 是文件名,可以采用相对路径和绝对路径两种表示方式。如果忽略filename,那么数据就被输出到标准输出设备(大多数情形都是屏幕)。@text 函数仅能出现在模型数据部分的一条语句的左边,右边是集名(用来输出该集的所有成员名)或集属性名(用来输出该集属性的值)。

@ole 函数

@OLE 是从EXCEL 中引入或输出数据的接口函数,它是基于传输的OLE 技术。OLE 传输直接在内存中传输数据,并不借助于中间文件。当使用@OLE 时,LINGO 先装载EXCEL,再通知EXCEL 装载指定的电子数据表,最后从电子数据表中获得Ranges。为了使用OLE 函数,必须有EXCEL5 及其以上版本。OLE函数可在数据部分和初始部分引入数据。@OLE 可以同时读集成员和集属性,集成员最好用文本格式,集属性最好用数值格式。原始集每个集成员需要一个单元(cell),而对于n元的派生集每个集成员需要n个单元,这

里第一行的n个单元对应派生集的第一个集成员,第二行的n个单元对应派生集的第二个集成员,依此类推。@OLE 只能读一维或二维的Ranges(在单个的EXCEL 工作表(sheet)中),但不能读间断的或三维的Ranges。Ranges 是自左而右、自上而下来读。

@ranged(variable_or_row_name)

为了保持最优基不变,变量的费用系数或约束行的右端项允许减少的量。

@rangeu(variable_or_row_name)

为了保持最优基不变,变量的费用系数或约束行的右端项允许增加的量。

@status()

@dual(variable_or_row_na me)返回变量的判别数(检验数)或约束行的对偶(影子)价格(dual prices)。

2.9 辅助函数

@if(logical_condition,true_result,false_result)

@if 函数将评价一个逻辑表达式logical_condit ion,如果为真,返回true_ result,否则返回false_result。

@warn(’text’,logical_condition)

如果逻辑条件logical_condition 为真,则产生一个内容为’text’的信息框。

3. 敏感性分析(略)

运筹学实例分析及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 与线性规划 线性规划的标准形式是 Min z c 1 x 1 c n x n a 11 x 1 a 1n x n b 1 s..t a m1 x 1 a mn x n (1) b m x i 0, i 1,2, , n 其中 z c 1 x 1 c n x n 称为目标函数, 自变量 x i 称为决策变量 ,不等式组 (1)称为约 束条件 . 满足不等式组 (1)的所有 ( x 1, , x n ) 的集合称为可行域,在可行域里面使得z 取最小值的 ( x 1* , , x n * ) 称为最优解,最优解对应的函数值称为最优值。 求解优化模型的主要软件有 Lingo 、Matlab 、Excel 等。其中 Lingo 是一款专 业求解优化模型的软件, 有其他软件不可替代的方便功能。 本文将简要介绍其在线性规划领域的应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者 min= 函数解析式; 2、约束条件输入格式 利用: >、<、>=、<=等符号。但是 >与 >=没有区别。 Lingo 软件默认所以自变量都大于等于 0. 3、运算 加 (+), 减(-), 乘(*), 除(/), 乘方 (x^a) ,要注意乘号 (*) 不能省略。 4、变量名 不区分大小写字母,不超过 32 个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“ ; ”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata , end 尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL 语句 一般程序必须先输入 MODEL :表示开始输入模型,以“ END ”结束。对简单的模型,这两个语句也可以省略。 8、改变变量的取值范围 @bin(变量名 ) ; @bnd(a, 变量名 ,b ) ; @free( 变量名 ) ; @gin(变量名 ) ; 例 1 求目标函数 z 2x 1 限制该变量为 0 或 1. 限制该变量介于 a,b 之间 . 允许该变量为负数 . 限制该变量为整数 . 3x 2 的最小值,约束条件为

试验1用LINGO求解线性规划问题

实验用LINDO或LINGO求解线性规划问题 实验目的 1.对于给定的实际应用问题,正确的建立线性规划问题数学模型,并用LINDO或LINGO 求解; 2.掌握灵敏度分析以及资源的影子价格的相关分析方法. 问题1某工厂在计划期内要安排生产A、B两种产品,已知生产单位产品所需设备台时及对甲、乙两种原材料的消耗,有关数据如表1.1.问:应如何安排生产计划,使工厂获利最大? . LINDO输入语句: max 2x1+3x2 st x1+2x2<=8 4x1<=16 4x2<=12 end 在LINGO的MODEL窗口内输入如下模型: model: max=2*x1+3*x2; x1+2*x2<=8; 4*x1<=16; 4*x2<=12; end 选菜单Lingo|Solve(或按Ctrl+S),或用鼠标点击“求解”按纽,如果模型有语法错误,则弹出一个标题为“LINGO Error Message”(错误信息)的窗口,指出在哪一行有怎样的错误,每一种错误都有一个编号(具体含义可查阅相关文献或LINGO的Help).改正错误以后再求解,如果语法通过,LINGO用内部所带的求解程序求出模型的解,然后弹出一个标题为“LINGO Solver Status”(求解状态)的窗口,其内容为变量个数、约束条件个数、优化状态、耗费内存、所花时间等信息,点击Close关闭窗口,屏幕上出现标题为“Solution Report”(解的报告)的信息窗口,显示优化计算(线性规划中换基迭代)的步数、优化后的目标函

数值、列出各变量的计算结果.求解结果: Global optimal solution found at iteration: 5 Objective value: 14.00000 Variable Value Reduced Cost X1 4.000000 0.000000 X2 2.000000 0.000000 Row Slack or Surplus Dual Price 1 14.00000 1.000000 2 0.000000 1.500000 3 0.000000 0.1250000 4 4.000000 0.000000 该报告说明:运行5步找到全局最优解,目标函数值为14,变量值分别为124,2==x x .“Reduced Cost ”的含义是需缩减成本系数或需增加利润系数(最优解中取值非零的决策变量的Reduced Cost 值等于零).“Row ”是输入模型中的行号,目标函数是第一行;“Slack or Surplus ”的意思是松弛或剩余,即约束条件左边与右边的差值,对于“≤”的不等式,右边减左边的差值为Slack (松弛),对于“≥”的不等式,左边减的右边差值为Surplus (剩余),当约束条件两边相等时,松弛或剩余的值等于零.“Dual Price ”的意思是对偶价格(或称为影子价格),上述报告中Row2的松弛值为0,表明生产甲产品4单位、乙产品2单位,所需设备8台时已经饱和,对偶价格1.5的含义是:如果设备增加1台时,能使目标函数值增加1.5.报告中Row4的松弛值为4,表明生产甲产品4单位、乙产品2单位,所需原材料乙8公斤还剩余4公斤,因此增加原材料乙不会使目标函数值增加,所以对偶价格为0. 对于目标函数系数和约束条件右端常数项的灵敏度分析,可以通过LINGO 软件求解的灵敏度分析给出.如果要看灵敏度分析结果,必须激活灵敏度计算功能才会在求解时给出灵敏度分析结果,默认情况下这项功能是关闭的.想要激活它,必须运行LINGO|Options …命令,选择Gengral Solver ,在Dual Computation 列表框中,选择Prices and Ranges 选项并确定. 法一:打开command window ,输入range ; 法二:LINGO ——options ——General Solver ——DualComputations ——Prices&Ranges , 运行一遍,然后关掉,然后lingo-----range 问题2 某公司饲养实验用的动物以供出售,已知这些动物的生长对饲料中3种营养成分(蛋白质、矿物质和维生素)特别敏感,每个动物每周至少需要蛋白质60g ,矿物质3g ,维生素8mg ,该公司能买到5种不同的饲料,每种饲料1kg 所含各种营养成分和成本如表1.2所示,如果每个小动物每周食用饲料不超过52kg ,求既能满足动物生长需要,又使总成本最低的饲料配方.

数学建模:运用Lindolingo软件求解线性规划

数学建模:运用Lindolingo软件求解线性规划 1、实验内容: 对下面是实际问题建立相应的数学模型,并用数学软件包Lindo/lingo对模型进行求解。 某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.名今工厂共有原料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资. 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划. 数学建模论文 运用lindo/lingo软件求解线性规划 运用lindo/lingo软件求解线性规划 一、摘要 本文要解决的问题是如何安排生产计划,即两种饮料各生产多少使获利最大。 首先,对问题进行重述明确题目的中心思想,做出合理的假设,对符号做简要的说明。 然后,对问题进行分析,根据题目的要求,建立合适的数学模型。 最后,运用lindo/lingo软件求出题目的解。 【关键词】最优解 lindo/lingo软件 第二、问题的重述 某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.今工厂共有原

料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资。 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划。 第三、模型的基本假设 1、每一箱饮料消耗的人力、物力相同。 2、每个人的能力相等。 3、生产设备对生产没有影响。 第四、符号说明 1、x.....甲饮料 2、y.....乙饮料 3、z.....增加的原材料 第五、问题分析 根据题目要求:如何安排生产计划,即两种饮料各生产多少使获利最大,可知本题所求的是利润的最大值。我们可以先建立数学模型,然后用lindo/lingo软件包求解模型的最大值。 第六、模型的建立及求解根据题目建立如下3个模型: 模型1: max=0.1*x+0.09*y; 0.06*x+0.05*y<=60; 0.1*x+0.2*y<=150; x+y<=800; 结果:x=800;y=0;max=80 模型2:

Lingo与线性规划

Lingo 与线性规划 线性规划的标准形式是 1111111..0,1,2,,n n m mn n m i a x a x b s t a x a x b x i n +≤????+≤??≥= ? (1) 其中11n n z c x c x =++称为目标函数,自变量i x 称为决策变量,不等式组(1)称为约束条件. 满足不等式组(1)的所有1(,,)n x x 的集合称为可行域,在可行域里面使得z 取最小值 的**1(,,)n x x 称为最优解,最优解对应的函数值称为最优值。 求解优化模型的主要软件有Lingo 、Matlab 、Excel 等。其中Lingo 是一款专业求解优化模型的软件,有其他软件不可替代的方便功能。本文将简要介绍其在线性规划领域的应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者 min=函数解析式; 2、约束条件输入格式 利用:>、<、>=、<=等符号。但是>与>=没有区别。Lingo 软件默认所以自变量都大于等于0. 3、运算 加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“;”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata ,end 尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL 语句 一般程序必须先输入MODEL :表示开始输入模型,以“END”结束。对简单的模型,这两个语句也可以省略。 8、改变变量的取值范围 @bin(变量名); 限制该变量为0或1. @bnd(a,变量名,b ); 限制该变量介于a,b 之间. @free(变量名); 允许该变量为负数. @gin(变量名); 限制该变量为整数. 例1 求目标函数1 223z x x =+的最小值,约束条件为 输入Lingo 程序: min = 2*x1 + 3*x2; x1 + x2 >= 350; x1 >= 100; 2*x1 + x2 <= 600; 有两种运行方式:

lingo解决线性规划问题的程序

Lingo12软件培训教案 Lingo 主要用于求解线性规划,整数规划,非线性规划,V10以上版本可编程。 例1 一个简单的线性规划问题 0 , 600 2 100 350 st. 3 2max >=<=+=<<=++=y x y x x y x y x z ! 源程序 max = 2*x+3*y; [st_1] x+y<350; [st_2] x<100; 2*x+y<600; !决策变量黙认为非负; <相当于<=; 大小写不区分 当规划问题的规模很大时,需要定义数组(或称为矩阵),以及下标集(set) 下面定义下标集和对应数组的三种方法,效果相同::r1 = r2 = r3, a = b = c. sets : r1/1..3/:a; r2 : b; r3 : c; link2(r1,r2): x; link3(r1,r2,r3): y; endsets data : ALPHA = ; a=11 12 13 ; r2 = 1..3; b = 11 12 13; c = 11 12 13; enddata

例2 运输问题 解: 设决策变量ij x = 第i 个发点到第j 个售点的运货量,i =1,2,…m; j =1,2,…n; 记为ij c =第i 个发点到第j 个售点的运输单价,i =1,2,…m; j =1,2,…n 记i s =第i 个发点的产量, i =1,2,…m; 记j d =第j 个售点的需求量, j =1,2,…n. 其中,m = 6; n = 8. 设目标函数为总成本,约束条件为(1)产量约束;(2)需求约束。 于是形成如下规划问题: n j m i x n j d x m i s x x c ij j n i ij i m j ij m i n j ij ij ,...,2,1,,...,2,1,0 ,...,2,1, ,...,2,1, st. z min 11 11==>=<==<==∑∑∑∑==== 把上述程序翻译成LINGO 语言,编制程序如下: ! 源程序

Lingo与线性规划

Ling o与线性规划 线性规划得标准形式就是 (1) 其中称为口标函数,自变量称为决策变量,不等式组(1)称为约束条件、 满足不等式组(1)得所有得集合称为可行域,在可行域里面使得Z取最小值得称为最优解,最优解对应得函数值称为最优值。 求解优化模型得主要软件有L i ng o、Ma t 1 a b> Ex c el等。其中Lingo 就是一款专业求解优化模型得软件,有其她软件不可替代得方便功能。本文将简要介绍其在线性规划领域得应用。 —、基本规定 1、目标函数输入格式 ma x二函数解析式;或者min二函数解析式; 2、约束条件输入格式 利用:>、V、〉=、〈二等符号。但就是>与>二没有区别。L ingo软件默认所以自变量都大于等于0、 3、运算 加(+),减(-),乘(*),除(/),乘方(x A a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始得就是说明语句(说明语句也需要以分号";”结束)o但就是,mo d el, s e t s, data以":”结尾。endsets, e n ddata, e n d尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL 语句

一般程序必须先输入MODEL:表示开始输入模型,以“END”结束。对简单 (1)

例1求目标函数得最小值,约束条件为 输入Ling o 程序: min = 2*x1 + 3*x2; x I + x2 >= 350?x1 >= 1 0 0;2A *X 1 + x2 <= 600; 有两种运行方式: 1、点击工具条上得按钮 即可。 2、点击菜单:LINGO —Solve 运行结果如下: 下面对其各个部分进行说明: Gl o bal o p tima 1 solution f oun d :表示已找到全局最优解。 Ob j e ctive value :表示最优值得大小。可见本题函数最小值8 00。 Rov Slack or Surplus Dual Price 1 800.0000 -1.000000 2 CLOOCICICICI -4?00 OOOCI 3 150.0CICICI O ?000000 4 CLOOCICICICI 1?000000 Global optimal solution found ? Objective value: 800.0000 Infeasibilities: 0 ? OOOCICICI Total solver iterations: 2 Variable 得模型,这两个语句也可以省略。 8、改变变量得取值范围 bin (变量名); bnd (a,变量名,b ); free (变量名); gin (变量名); 限制该变量为0或1、 限制该变量介于a, b 之间、 允许该变量为负数、 限制该变量为整数、 Value 250.0000 ?dodo Reduced Cost o ?000000 o ?000000

Lingo与线性规划

. Word 文档 Lingo 与线性规划 线性规划的标准形式是 11n n Min z c x c x =++L 1111111..0,1,2,,n n m mn n m i a x a x b s t a x a x b x i n +≤??? ? +≤??≥=?L M L L (1) 其中11n n z c x c x =++L 称为目标函数,自变量i x 称为决策变量,不等式组(1)称为约束条件. 满足不等式组(1)的所有1(,,)n x x L 的集合称为可行域,在可行域里面使得z 取最小值的**1 (,,)n x x L 称为最优解,最优解对应的函数值称为最优值。 求解优化模型的主要软件有Lingo 、Matlab 、Excel 等。其中Lingo 是一款专业求解优化模型的软件,有其他软件不可替代的方便功能。本文将简要介绍其在线性规划领域的应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者 min=函数解析式; 2、约束条件输入格式 利用:>、<、>=、<=等符号。但是>与>=没有区别。Lingo 软件默认所以自变量都大于等于0. 3、运算 加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“;”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata ,end 尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL 语句 一般程序必须先输入MODEL :表示开始输入模型,以“END ”结束。对简单的模型,这两个语句也可以省略。 8、改变变量的取值范围 bin(变量名); 限制该变量为0或1. bnd(a,变量名,b ); 限制该变量介于a,b 之间. free(变量名); 允许该变量为负数. gin(变量名); 限制该变量为整数. 例1 求目标函数1223z x x =+的最小值,约束条件为

lingo求解多目标规划__例题

实验二:目标规划 一、实验目的 目标规划是由线性规划发展演变而来的,线性规划考虑的是只有一个目标函数的问题,而实际问题中往往需要考虑多个目标函数,这些目标不仅有主次关系,而且有的还相互矛盾。这些问题用线性规划求解就比较困难,因而提出了目标规划。熟悉目标规划模型的建立,求解过程及结果分析。 二、目标规划的一般模型 设)...2,1(n j x j =是目标规划的决策变量,共有m 个约束是国刚性约束,可能是等式约束,也可能是不等式约束。设有l 个柔性目标约束,其目标规划约束的偏差是 ),...,2,1(,l i d d i i =-+。设有q 个优先级别,分别为q p p p ,...,21。在同一个优先级k p 中,有 不同的权重,分别记为),...,2,1(,l j w w kj kj =- + 。因此目标规划模型的一般数学表达式为: min ∑∑=+ +-- =+= l j j kj j kj q k k d w d w p z 1 1 );( s.t. ,,...2,1,),(1m i b x a n j i j ij =≥=≤∑= . ,...2,1,0,, ,...,2,1,, ,...2,1,1 l i d d n x o x l i g d d x c i i j i n j i i j ij =≥=≥==-++-=+-∑ 三、实验设备及分组 实验在计算机中心机房进行,使用微型电子计算机,每人一机(一组)。

四、实验容及步骤 1、打开LINGO ,并利用系统菜单和向导在E 盘创建一个项目。目录和项目名推荐使用学生自己的学号。 2、以此题为例,建立数学模型,并用说明语句进行说明,增强程序的可读性。 例2.1: 某工厂生产Ⅰ、Ⅱ两种产品,需要用到A ,B ,C 三种设备,已知有关数据见下表。企业的经营目标不仅仅是利润,还需要考虑多个方面: (1) 力求使利润不低于1500元; (2) 考虑到市场需求,Ⅰ、Ⅱ两种产品的产量比应尽量保持1:2; (3) 设备A 为贵重设备,严格禁止超时使用; (4) 设备C 可以适当加班,但要控制;设备B 即要求充分利用,又尽可能不加班。 在重要性上,设备C 是设备B 的3倍。 此题中只有设备A 是刚性约束,其余都是柔性约束。首先,最重要的指标是企业的利润,将它的优先级列为第一级;其次是Ⅰ、Ⅱ两种产品的产量保持1:2的比例,列为第二级;再次,设备B 、C 的工作时间要有所控制,列为第三级。在第三级中,设备B 的重要性是设备C 的3倍,因此它们的权重不一样,设备B 的系数是设备C 的3倍。 该计划问题可用数学模型表示为: 目标函数 min )33()(433322211+ +-+--+++++=d d d p d d p d p z 满足约束条件 2122x x + 12≤ 15003002001121=-+++-d d x x 022221=-+-+ - d d x x 14x 1633=-++ -d d

线性规划lingo实现示例

加工奶制品的生产计划 问题 品加工厂用牛奶生产1A ,2A 两种奶制品,1桶牛奶可以在设备甲用12小时加工成3公斤1A ,或者在设备乙上用8小时加工成4公斤2A 。根据市场需求,生产的1A ,2A 全部能售出,且每公斤1A 获利24元,每公斤2A 获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间魏480小时,并且设备甲每天至多能加工100公斤1A ,设备乙的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下三个附加问题: 1) 若用35元可以买到1桶牛奶,应否作这项投资? 若投资,每天最多购买多少桶 牛奶? 2) 若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元? 3) 由于市场需求变化,每公斤1A 的获利增加到30元,应否改变生产计划? 问题分析 这个优化问题的目标是使每天的获利最大,要作的决策是生产计划,即每天用多少桶牛奶生产1A ,用多少桶牛奶生产2A ,决策受到3个条件的限制:原料(牛奶)供应、劳动时间、设备甲的工作能力。按照题目所给,将决策变量、目标函数和约束条件用数学符号及式子表示出来,就得到下面的模型。 基本模型 决策变量:设每天用1x 桶牛奶生产1A ,用2x 桶牛奶生产2A 。 目标函数:设每天获利Z 元。1x 桶牛奶可生产31x 公斤1A ,获利1324x ?,2x 桶牛奶可生产42x 公斤2A ,获利2416x ?,故Z=216472x x +. 约束条件 原料供应:生产1A ,2A 的原料(牛奶)总量不得超过每天的供应,即1x +2x ≤50桶; 劳动时间:生产1A ,2A 的总加工时间不得超过每天正式工人总的劳动时间,即121x +82x ≤480小时; 设备能力:1A 的产量不得超过设备甲每天的加工能力,即31x ≤100; 非负:1x ,2x 均不能为负值,即1x ≥0,2x ≥0。 综上可得 Max Z=216472x x + (1) s.t. 1x +2x ≤50 (2)

lingo解决线性规划问题(附程序)

北方民族大学第六届数学建模竞赛 竞赛论文 竞赛分组: 竞赛题目: 组员: 所在学院: 信息与计算科学学院制版

北方民族大学第六届数学建模竞赛承诺书 为保证竞赛的公平、公正,维护竞赛的严肃性,在竞赛期间,我们承诺遵守以下竞赛规定:只在本参赛队的三人之间进行问题的讨论,绝不与本参赛队外的其他人讨论与竞赛题目相关的任何问题,不抄袭、剽窃他人的成果,引用的参考文献在答卷中进行标注。 承诺人签名: 承诺人所在分组: 承诺人所在学院: 年月日

摘要 在工程技术、经济管理等诸多领域中,人们经常遇到的一类决策问题是:在一系列客观或主观限制条件下,寻求所要关注的某个或多个指标达到最大(或最小)的决策。例如,酒店客房分配,我们常常不能使得客房刚好满足顾客的要求,此时,客房是有限的,但是顾客需要的客房数已经超出酒店可提供的客房数目,我们就会选择一种客房分配方案,来使得酒店的收益获得最大的。 7天连锁酒店利用网络系统为常客户开设标准间和商务间两类客房的预定服务,酒店以一周(从星期一到星期日)为一个时段处理这项业务。现在收到一个会务组提出的一个一周的预定需求单,现要求我们依据题目所提供的信息,以酒店收入最大为目标,针对3种不同情况,制定相应的分配方案。 我们把这类决策问题通常归为最优化问题,解决问题的方案是,找到问题的决策变量,目标函数及约束条件。如果需要作出决策的变量较多时,我们就会首选LINGO软件来解决线性规划的问题。 关键词:最优分配、数学建模、线性规划、LINGO

目录 1.问题的重述 (4) 2.问题的分析 (4) 3.模型的假设 (5) 4.符号的约定 (6) 5.模型的建立与求解 (7) 5.1问题(1)的求解 (8) 5.2问题(2)的求解 (9) 5.3问题(3)的求解 (12) 5.4问题(4)的求解 (15) 6.模型的评价与改进 (15) 7.参考文献 (15) 8.附录 (16)

Lingo与线性规划

Lingo与线性规划 线性规划得标准形式就是 (1) 其中称为目标函数,自变量称为决策变量,不等式组(1)称为约束条件、 满足不等式组(1)得所有得集合称为可行域,在可行域里面使得z取最小值得称为最优解,最优解对应得函数值称为最优值。 求解优化模型得主要软件有Lingo、Matlab、Excel等。其中Lingo 就是一款专业求解优化模型得软件,有其她软件不可替代得方便功能。本文将简要介绍其在线性规划领域得应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者min=函数解析式; 2、约束条件输入格式 利用:>、<、>=、<=等符号。但就是>与>=没有区别。Lingo软件默认所以自变量都大于等于0、 3、运算 加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始得就是说明语句(说明语句也需要以分号“;”结束)。但就是,model,sets,data以“:”结尾。endsets,e nddata,end尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL语句 一般程序必须先输入MODEL:表示开始输入模型,以“END”结束。对简单

得模型,这两个语句也可以省略。 8、改变变量得取值范围 bin(变量名); 限制该变量为0或1、 bnd(a,变量名,b);限制该变量介于a,b之间、free(变量名);允许该变量为负数、 gin(变量名);限制该变量为整数、 例1 求目标函数得最小值,约束条件为 输入Lingo程序: min=2*x1 +3*x2; x1+ x2 >=350;?x1 >=100;?2*x1 +x2 <=600; 有两种运行方式: 1、点击工具条上得按钮即可。 2、点击菜单:LINGO→Solve 运行结果如下: 下面对其各个部分进行说明: Global optimalsolution found:表示已找到全局最优解。 Objective value:表示最优值得大小。可见本题函数最小值800。 Infeasibilities:矛盾约束得数目。

用LINGO求解线性规划问题

实验1 用LINGO求解线性规划问题 LINGO使用简介 LINGO软件是美国的LINDO系统公司(Lindo System Inc)开发的一套用于求解最优化问题的软件包.LINGO除了能用于求解线性规划和二次规划外,还可以用于非线性规划求解以及一些线性和非线性方程(组)的求解.LINGO软件的最大特色在于它允许优化模型中的决策变量为整数,而且执行速度快.LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果,这里简单介绍LINGO的使用方法. LINGO可以求解线性规划、二次规划、非线性规划、整数规划、图论及网络优化和排队论模型中的最优化问题等. 一个LINGO程序一般会包含集合段、数据输入段、优化目标和约束段、初始段和数据预处理段等部分,每一部分有其独特的作用和语法规则,读者可以通过查阅相关的参考书或者LINGO的HELP文件详细了解,这里就不展开介绍了. LINGO的主要功能特色为:既能求解线性规划问题,也有较强的求解非线性规划问题的能力;输入模型简练直观;运算速度快、计算能力强;内置建模语言,提供几十个内部函数,从而能以较少语句,较直观的方式描述大规模的优化模型;将集合的概念引入编程语言,很容易将实际问题转换为LINGO模型;并且能方便地与Excel、数据库等其他软件交换数据. LINGO的语法规定: (1)求目标函数的最大值或最小值分别用MAX=…或MIN=…来表示; (2)每个语句必须以分号“;”结束,每行可以有许多语句,语句可以跨行; (3)变量名称必须以字母(A~Z)开头,由字母、数字(0~9)和下划线所组成,长度不超过32个字符,不区分大小写; (4)可以给语句加上标号,例如[OBJ] MAX=200*X1+300*X2; (5)以惊叹号“!”开头,以分号“;”结束的语句是注释语句; (6)如果对变量的取值范围没有作特殊说明,则默认所有决策变量都非负; (7)LINGO模型以语句“MODEL:”开头,以“END”结束,对于比较简单的模型,这两个语句可以省略. 实验目的 1.对于给定的实际应用问题,正确的建立线性规划问题数学模型,并用LINGO求解; 2.掌握灵敏度分析以及资源的影子价格的相关分析方法. 实验数据与内容 问题1.1某工厂在计划期内要安排生产A、B两种产品,已知生产单位产品所需设备台时及对甲、乙两种原材料的消耗,有关数据如表1.1.问:应如何安排生产计划,使工厂获利最大?

LINGO线性规划及其灵敏度分析

线性规划问题及灵敏度分析在LINGO软件中的实现 一、问题的提出: 某公司饲养实验用的动物以出售给动物研究所,已知这些动物的生长对饲料中3种营养成分(蛋白质、矿物质和维生素)特别敏感,每个动物每周至少需要蛋白质60g,矿物质3g,维生素8mg,该公司能买到5种不同的饲料,每种饲料1kg所含各种营养成分和成本如下表所示,如果每个小动物每周食用饲料不超过52kg,才能满足动物生长需要。 问题: 1.求使得总成本最低的饲料配方? 2.如果另一个动物研究对蛋白质的营养要求变为59单位,但是要求动物的价格比现在的价格便宜0.3元,问该养殖所值不值得接受? 3.由于市场因素的影响,X2的价格降为0.6元每千克,问是否要改变饲料配方? 二、建立线性规划数学模型 解答: (1)设需要饲料A1, A2, A3, A4分别为X1, X2, X3, X4kg,则建立线性规划数学模型如下: 目标函数:MinS=0.2X1+0.7X2+0.4X3+0.3X4+0.5X5 约束条件:0.3X1+2X2+X3+0.6X4+1.8X5>=60 0.1X1+0.05X2+0.02X3+0.2X4+0.05X5>=3 005X1+0.1X2+0.02X3+0.2X4+0.08X5>=8

X1+X2+X3+X4+X5<=52 X1, X2, X3, X4, X5>=0 三、在LINGO软件中的求解 在LINGO中输入下面的命令: Model: Min=0.2*x1+0.7*x2+0.4*x3+0.3*x4+0.5*x5; 0.3*x1+2*x2+x3+0.6*x4+1.8*x5>60; 0.1*x1+0.05*x2+0.02*x3+0.2*x4+0.05*x5>3; 0.05*x1+0.1*x2+0.02*x3+0.2*x4+0.08*x5>8; x1+x2+x3+x4+x5<52; end 操作:选菜单Lingo|Solve(或按Ctrl+S),或用鼠标点击“求解”按纽,如果模型有语法错误,则弹出一个标题为“LINGO Error Message”(错误信息)的窗口,指出在哪一行有怎样的错误,每一种错误都有一个编号(具体含义可查阅相关文献或LINGO的Help).改正错误以后再求解,如果语法通过,LINGO用内部所带的求解程序求出模型的解,然后弹出一个标题为“LINGO Solver Status”(求解状态)的窗口,其内容为变量个数、约束条件个数、优化状态、耗费内存、所花时间等信息,点击Close关闭窗口,屏幕上出现标题为“Solution Report”(解的报告)的信息窗口,显示优化计算(线性规划中换基迭代)的步数、优化后的目标函数值、列出各变量的计算结果. 输出结果如下: Global optimal solution found at iteration: 4 Objective value: 22.40000 Variable Value Reduced Cost X1 0.000000 0.7000000 X2 12.00000 0.000000 X3 0.000000 0.6166667 X4 30.00000 0.000000 X5 10.00000 0.000000

Lingo与线性规划

Lingo 与线性规划 线性规划的标准形式是 11n n Min z c x c x =++L 1111111..0,1,2,,n n m mn n m i a x a x b s t a x a x b x i n +≤??? ? +≤??≥=?L M L L (1) 其中11n n z c x c x =++L 称为目标函数,自变量i x 称为决策变量,不等式组(1)称为约束条件. 满足不等式组(1)的所有1(,,)n x x L 的集合称为可行域,在可行域里面使得z 取最小值的** 1(,,)n x x L 称为最优解,最优解对应的函数值称为最优值。 求解优化模型的主要软件有Lingo 、Matlab 、Excel 等。其中Lingo 是一款专业求解优化模型的软件,有其他软件不可替代的方便功能。本文将简要介绍其在线性规划领域的应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者 min=函数解析式; 2、约束条件输入格式 利用:>、<、>=、<=等符号。但是>与>=没有区别。Lingo 软件默认所以自变量都大于等于0. 3、运算 加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号

每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“;”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata ,end 尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL 语句 一般程序必须先输入MODEL :表示开始输入模型,以“END”结束。对简单的模型,这两个语句也可以省略。 8、改变变量的取值范围 @bin(变量名); 限制该变量为0或1. @bnd(a,变量名,b ); 限制该变量介于a,b 之间. @free(变量名); 允许该变量为负数. @gin(变量名); 限制该变量为整数. 例1 求目标函数1223z x x =+的最小值,约束条件为 1211212..35010022600,0 s t x x x x x x x +≥??≥?? +≤??≥? 输入Lingo 程序: min = 2*x1 + 3*x2; x1 + x2 >= 350; x1 >= 100; 2*x1 + x2 <= 600; 有两种运行方式: 1、点击工具条上的按钮 即可。 2、点击菜单:LINGO →Solve 运行结果如下:

用lingo求解线性规划问题

用lingo求解线性规划问题 中国石油大学胜利学院 程兵兵 摘要食物营养搭配问题是现代社会中常见的问题,其最终的目的是节省总费用。本文通过对营养问题的具体剖析.构建了一般的线性规划模型。并通过实例应用Lingo数学软件求解该问题。并给出了价值系数灵敏度分析,得出蔬菜价格的变动对模型的影响。 关键词线性规划,lingo,灵敏度分析。 一、问题重述与分析 营养师要为某些特殊病人拟订一周的菜单,可供选择的蔬菜及其费用和所含营养成分的数量以及这类病人每周所需各种营养成分的最低数量如下表1所示。有以下规定:一周内所用卷心菜不多于2份,其他蔬菜不多于4份。 问题一:若病人每周需要14份蔬菜,问选用每种蔬菜各多少份,可使生活费用最小。 问题二:当市场蔬菜价格发生怎样波动时,所建模型的适用性。 表 1 所需营养和费用 蔬菜 每份蔬菜所含营养成分 费用 (元/份)铁(mg) 磷(mg) VA(单位) VC(mg) 烟酸(mg) 青豆0.45 10 415 8 0.3 1.5 胡萝卜0.45 28 9065 3 0.35 1.5 花菜 1.05 50 2550 53 0.6 2.4 卷心菜0.4 25 75 27 0.15 0.6 甜菜0.5 22 15 5 0.25 1.8 土豆0.5 75 235 8 0.8 1.0 每周营养 最低需求量 6.0 325 17500 245 5.0 营养搭配是一个线性规划问题,在给定蔬菜的情况下,要求菜单所需的营养成分必须达到要求,并在此条件下求出什么样的搭配所花费的费用最少。 第一个要求是满足各类营养的充足,根据表中数据列出不等式。第二要求为问题一中,蔬菜的份数必须为14,第三要求为在一周内,卷心菜不多于2份,其他不多于4份,根据以上条件列出各类蔬菜份数的限定条件,并可表示出费用的表达式。 对于第二问,就是价值系数的变化对总费用的影响,模型的适用范围。

《数学建模》实验指导4Lingo求解线性规划问题

实验四:在Lingo 中利用集求解线性规划问题 学时:4学时 实验目的:掌握利用Lingo 中的集求解线性规划问题的方法。 实验内容: 6 8 ,,1 1 6 ,18 ,1 m in * 1,,8 1,,6 i j i j i j i j j i i j i j cost volum e volum e dem and j volum e capacity i ========∑ ∑∑∑ 使用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 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 回答问题:哪些产地增加产量可以减少运费,应增加哪个产地的产量可以减少的最多。 2.用Lingo中的集求解课本P107上的例1(混合泳接力队的选拔)。 使用LINGO软件,编制程序如下: model: sets: workers/w1..w5/; jobs/j1..j4/; links(workers,jobs): cost,volume; endsets min=@sum(links: cost*volume); @for(workers(I): @sum(jobs(J): volume(I,J))<=1); @for(jobs(J): @sum(workers(I): volume(I,J))=1); @for(links(i,j): @bin(volume(i,j))); data: cost= 66.8 57.2 78 70 67.4 75.6 66 67.8 74.2 71 87 66.4 84.6 69.6 83.8 58.6 53 59.4 57.2 62.4; enddata end

相关主题
文本预览
相关文档 最新文档