当前位置:文档之家› 应用LINGO软件求解运输问题

应用LINGO软件求解运输问题

应用LINGO软件求解运输问题
应用LINGO软件求解运输问题

2012——2013学年第一学期

合肥学院数理系

实验报告

课程名称:运筹学

实验项目:应用LINGO软件求解运输问题

实验类别:综合性□设计性□√验证性□专业班级:

姓名:学号:

实验地点:

实验时间:

指导教师:成绩:

一.实验目的

1、学会使用LINGO 软件求解运输问题的步骤与方法。

2、掌握使用LINGO 对运输问题的求解功能,并对结果进行分析。

二.实验内容

1.已知某企业有甲、乙、丙三个分厂生产一种产品,其产量分别为7、9、7个单位,需运往

A 、

B 、

C 、

D 四个门市部,各门市部需要量分别为3、5、7、8个单位。已知单位运价如下表。试确定运输计划使总运费最少。

2.现在要在五个工人中确定四个人来分别完成四项工作中的一项工作。由于每个工人的技术特长不同,他们完成各项工作所需的工时也不同。每个工人完成各项工作所需工时如下表所示,试找出一个工作分配方案,使总工时最小。

三. 模型建立

1.由题设知,总产量为:7+9+7=23个单位,总销量为:3+5+7+8=23个单位,所以这是一个产销平衡的运输问题。

设)4,3,2,1;3,2,1(==j i x ij 代表从第i 个产地运往第j 个销地的数量,z 为总运费。i a 表示第i 个产地的产量,j b 表示第j 个销地的销量ij c 表示从第i 个产地运往第j 个销地的单位产

品运输费用。则该问题的数学模型为:

34114

1

3

1

max 0,1,2,3;1,2,3,4ij ij

i j ij i

j ij j i ij Z c x x a x b x i j =====?=???=???≥==??∑∑∑∑

2. 设0-1变量,1,0ij i x i ?=??

当第个人完成某j 项工作,当第个人不完成某j 项工作 则该问题的数学模型为:

54

115

141

min 1,1,01ij ij

i j ij i ij j ij

Z c x x j x i x i j =====?= =1,2,3,4

???= = 1,2,3,4,5

???= =1,2,3,4,5;=1,2,3,4??

∑∑∑∑或,

四. 模型求解(含经调试后正确的源程序)

1、编写程序1-1.m 如下:

model :

sets :

warehouses/wh1..wh3/: capacity;

vendors/v1..v4/: demand;

links(warehouses,vendors): cost, volume;

endsets

data :

capacity=7 9 7;

demand=3 5 7 8;

cost= 12 13 10 11

10 12 14 10

14 11 15 12;

enddata

min =@sum (links(I,J): cost(I,J)*volume(I,J));

@for(vendors(J):

@sum(warehouses(I): volume(I,J))=demand(J));

@for(warehouses(I):

@sum(vendors(J): volume(I,J))<=capacity(I));

end

2、编写程序2-1.m如下:

model:

sets:

workers/w1..w5/;

jobs/j1..j4/;

links(workers,jobs): cost,volume;

Endsets

data:

cost=9 4 3 7

4 6

5 6

5 4 7 5

7 5 2 3

10 6 7 4;

enddata

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)));

End

五.结果分析

1、运行结果:

Global optimal solution found.

Objective value: 239.0000

Infeasibilities: 0.000000

Total solver iterations: 6

Variable Value Reduced Cost CAPACITY( WH1) 7.000000 0.000000 CAPACITY( WH2) 9.000000 0.000000 CAPACITY( WH3) 7.000000 0.000000 DEMAND( V1) 3.000000 0.000000 DEMAND( V2) 5.000000 0.000000 DEMAND( V3) 7.000000 0.000000 DEMAND( V4) 8.000000 0.000000

COST( WH1, V1) 12.00000 0.000000

COST( WH1, V2) 13.00000 0.000000

COST( WH1, V3) 10.00000 0.000000

COST( WH1, V4) 11.00000 0.000000

COST( WH2, V1) 10.00000 0.000000

COST( WH2, V2) 12.00000 0.000000

COST( WH2, V3) 14.00000 0.000000

COST( WH2, V4) 10.00000 0.000000

COST( WH3, V1) 14.00000 0.000000

COST( WH3, V2) 11.00000 0.000000

COST( WH3, V3) 15.00000 0.000000

COST( WH3, V4) 12.00000 0.000000

VOLUME( WH1, V1) 0.000000 1.000000 VOLUME( WH1, V2) 0.000000 3.000000 VOLUME( WH1, V3) 7.000000 0.000000 VOLUME( WH1, V4) 0.000000 0.000000 VOLUME( WH2, V1) 3.000000 0.000000 VOLUME( WH2, V2) 0.000000 3.000000 VOLUME( WH2, V3) 0.000000 5.000000 VOLUME( WH2, V4) 6.000000 0.000000 VOLUME( WH3, V1) 0.000000 2.000000 VOLUME( WH3, V2) 5.000000 0.000000 VOLUME( WH3, V3) 0.000000 4.000000 VOLUME( WH3, V4) 2.000000 0.000000

Row Slack or Surplus Dual Price

1 239.0000 -1.000000

2 0.000000 -12.00000

3 0.000000 -11.00000

4 0.000000 -11.00000

5 0.000000 -12.00000

6 0.000000 1.000000

7 0.000000 2.000000

8 0.000000 0.000000

所以,最优调运方案为:甲→C:7单位;甲→D:0单位;乙→A:3单位;

乙→D:6单位;丙→B:5单位;丙→D:2单位。最少总运费为:239。

2、运行结果:

Global optimal solution found.

Objective value: 14.00000

Objective bound: 14.00000

Infeasibilities: 0.000000

Extended solver steps: 0

Total solver iterations: 0

Variable Value Reduced Cost COST( W1, J1) 9.000000 0.000000 COST( W1, J2) 4.000000 0.000000 COST( W1, J3) 3.000000 0.000000 COST( W1, J4) 7.000000 0.000000 COST( W2, J1) 4.000000 0.000000 COST( W2, J2) 6.000000 0.000000 COST( W2, J3) 5.000000 0.000000 COST( W2, J4) 6.000000 0.000000 COST( W3, J1) 5.000000 0.000000 COST( W3, J2) 4.000000 0.000000 COST( W3, J3) 7.000000 0.000000 COST( W3, J4) 5.000000 0.000000 COST( W4, J1) 7.000000 0.000000 COST( W4, J2) 5.000000 0.000000 COST( W4, J3) 2.000000 0.000000 COST( W4, J4) 3.000000 0.000000 COST( W5, J1) 10.00000 0.000000 COST( W5, J2) 6.000000 0.000000 COST( W5, J3) 7.000000 0.000000 COST( W5, J4) 4.000000 0.000000 VOLUME( W1, J1) 0.000000 9.000000 VOLUME( W1, J2) 0.000000 4.000000 VOLUME( W1, J3) 1.000000 3.000000 VOLUME( W1, J4) 0.000000 7.000000 VOLUME( W2, J1) 1.000000 4.000000 VOLUME( W2, J2) 0.000000 6.000000 VOLUME( W2, J3) 0.000000 5.000000 VOLUME( W2, J4) 0.000000 6.000000 VOLUME( W3, J1) 0.000000 5.000000 VOLUME( W3, J2) 1.000000 4.000000 VOLUME( W3, J3) 0.000000 7.000000 VOLUME( W3, J4) 0.000000 5.000000 VOLUME( W4, J1) 0.000000 7.000000 VOLUME( W4, J2) 0.000000 5.000000 VOLUME( W4, J3) 0.000000 2.000000 VOLUME( W4, J4) 1.000000 3.000000 VOLUME( W5, J1) 0.000000 10.00000 VOLUME( W5, J2) 0.000000 6.000000

VOLUME( W5, J3) 0.000000 7.000000

VOLUME( W5, J4) 0.000000 4.000000

Row Slack or Surplus Dual Price

1 14.00000 -1.000000

2 0.000000 0.000000

3 0.000000 0.000000

4 0.000000 0.000000

5 0.000000 0.000000

6 1.000000 0.000000

7 0.000000 0.000000

8 0.000000 0.000000

9 0.000000 0.000000

10 0.000000 0.000000

所以,最优指派方案为:Ⅰ→C;Ⅱ→A;Ⅲ→B;Ⅳ→D。

最小总共时为:14。

六.实验总结

通过此次实验,我进一步掌握了LINGO软件的编程操作,更让我明白了运输问题数学模型的建立以及求解过程,从而让我们在掌握相关理论知识的基础上,能够充分利用数学软件去求解实际问题。这对提高我们分析问题和解决实际问题的能力有很大的帮助。

学生签名:

2012 年 12 月 6 日

lingo教程 和MATLAB入门教程

LINGO 使用教程 LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 212 1≥≤+≥≥++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个收点的最小费用运输问题。产销单位运价如

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允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。

LINGO11教程

LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 212 1≥≤+≥≥++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个收点的最小费用运输问题。产销单位运价如

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允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。 2.1 为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个

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软件在求解数学优化问题的使用技巧

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中使用集合1

例题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,因为">"是关系运算符不是逻辑运算符; @sum (V(i):x(i,j))=1;); !利用循环函数表达:当i>1(即i 从2到10)时, {x(i,j):j=1..10}的和等于1;

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求解运输问题

一.实验目的 1、学会使用LINGO 软件求解运输问题的步骤与方法。 2、掌握使用LINGO 对运输问题的求解功能,并对结果进行分析。 二.实验内容 1.已知某企业有甲、乙、丙三个分厂生产一种产品,其产量分别为7、9、7个单位,需运往A 、B 、C 、D 四个门市部,各门市部需要量分别为3、5、7、8个单位。已知单位运价如下表。试确定运输计划使总运费最少。 2.现在要在五个工人中确定四个人来分别完成四项工作中的一项工作。由于每个工人的技术特长不同,他们完成各项工作所需的工时也不同。每个工人完成各项工作所需工时如下表所示,试找出一个工作分配方案,使总工时最小。 三. 模型建立 1.由题设知,总产量为:7+9+7=23个单位,总销量为:3+5+7+8=23个单位,所以这是一个产销平衡的运输问题。 设)4,3,2,1;3,2,1(==j i x ij 代表从第i 个产地运往第j 个销地的数量,z 为总运费。i a 表示第i 个产地的产量,j b 表示第j 个销地的销量ij c 表示从第i 个产地运往第j 个销地的单位产

品运输费用。则该问题的数学模型为: 3 4 1 1 4 13 1 max 0,1,2,3;1,2,3,4ij ij i j ij i j ij j i ij Z c x x a x b x i j =====?=???=???≥==??∑ ∑ ∑∑ 2. 设0-1变量,1,0ij i x i ?=??当第个人完成某j 项工作 ,当第个人不完成某j 项工作 则该问题的数学模型为: 5 4 115 141 min 1,1,01ij ij i j ij i ij j ij Z c x x j x i x i j =====?= =1,2,3,4??? = = 1,2,3,4,5???= =1,2,3,4,5;=1,2,3,4?? ∑∑∑∑或, 四. 模型求解(含经调试后正确的源程序) 1、编写程序1-1.m 如下: model : sets : warehouses/wh1..wh3/: capacity; vendors/v1..v4/: demand; links(warehouses,vendors): cost, volume; endsets data : capacity=7 9 7; demand=3 5 7 8; cost= 12 13 10 11 10 12 14 10 14 11 15 12; enddata min =@sum (links(I,J): cost(I,J)*volume(I,J));

LINGO软件及其应用

LINGO 软件及其应用 一、求解线性规划 例题1:目标函数:max z=2x1+3x2 约束条件:x1+2x2<=8 4x1<=17 4x2<=13 x1,x2>=0 输入语句: model: max=2*x1+3*x2; x1+2*x2<8; 4*x1<17; 4*x2<13; end 说明: 1)问题模型由MODEL:命令开始,END 结束,对简单模型可以省略。 2)目标函数必须由“min =”或“max =”开头。 3)分号是LINGO的分隔符。LINGO中的每一行都以分号结束,如果缺少,模型将无法求解。若一个命令或语句一行写不下,可以分多行写,但是,最后结束命令时,一定别忘了打个分号“;”,一行内也可写多个命令,只要每个用分号分开即可。 4)语句中乘号(*)不能省略,支持()的输入。 5)LINGO中<与<=均代表<=,>与>=也均代表>=。 6)LINGO中的注解必须用感叹号“!”开始,用分号结束。在感叹号和分号之间的所有内容都将被LINGO忽略。注释可以占据多行,也可以插入LINGO 表达式之中。 7)LINGO的命令从来不区分大小写,当你在LINGO中定义变量时,每个变量都要以26个字母开始,后面可跟数字或者下划线,最多可以是32个字符。 8)软件默认决策变量是非负的。如果需要一个变量取负数、整数或一定范

围内的值,可以通过变量限定函数加以限制。 @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的约束。 求解结果如下: Global optimal solution found. Objective value: 14.12500 Total solver iterations: 1 Variable Value Reduced Cost X1 4.250000 0.000000 X2 1.875000 0.000000 Row Slack or Surplus Dual Price 1 14.12500 1.000000 2 0.000000 1.500000 3 0.000000 0.1250000 4 5.500000 0.000000 例题2 一奶制品加工厂用牛奶生产A 1,A 2 两种奶制品,1桶牛奶可以在甲车 间用12小时加工成3公斤A 1,或者在乙车间用8小时加工成4公斤A 2 。根据市 场需求,生产的A 1,A 2 全部能售出,且每公斤A 1 获利24元,每公斤A 2 获利16元。 现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间480小时,并且甲车间每天至多能加工100公斤A 1 ,乙车间的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下3个附加问题:1)若用35元可以买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶?

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^2-0.3*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)表示 限制L ≤x ≤U ;@free(x)表示取消对x 的符号限制,即可正、可负。) 结果: Global optimal solution found. Objective value: 9561.200 Extended solver steps: 0 Total solver iterations: 45 Variable Value Reduced Cost X1 6.000000 -76.70000 X2 31.00000 -151.2000 X3 16.00000 -150.0000 Row Slack or Surplus Dual Price 1 9561.200 1.000000 2 0.000000 0.000000 3 56.00000 0.000000 ———————— 非常简单! 在LINGO 中使用集合 为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO 引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。

用lingo解决运输问题

用lingo解决运输问题 (一)实验目的 1. 运输问题求解的编程实现 2.掌握使用matlab、Lingo、Excel的求解功能求解运输问题,并对结果进行分析。(二)实验内容 《运筹学》清华三版P98页 3.3题 Lingo程序代码及运行结果(选取部分): <1>3.3(1): 程序代码: model: sets: xiao/1..4/:s; chan/1..3/:h; link(chan,xiao):x,y; endsets data: y=3 7 6 4 2 4 3 2 4 3 8 5; h=5 2 3; s=3 3 2 2; enddata min=@sum(link:x*y); @for(xiao(j):@sum(chan(i):x(i,j))=s(j)); @for(chan(i):@sum(xiao(j):x(i,j))=h(i)); 运行结果及结果分析: Objective value: 32.00000 产地1分别将数量为3和2的产品运往销地甲和丁;产地2将数量为2的产品运往销地丙;产地3将数量为3的产品运往销地乙;该运输问题的最小费用为32. <2>3.3(2):

model: sets: xiao/1..4/:s; chan/1..3/:h; link(chan,xiao):x,y; endsets data: y=10 6 7 12 16 10 5 9 5 4 10 10; h=4 9 4; s=5 2 4 6; enddata min=@sum(link:x*y); @for(xiao(j):@sum(chan(i):x(i,j))=s(j)); @for(chan(i):@sum(xiao(j):x(i,j))=h(i)); 运行结果及结果分析: Objective value: 118.0000 产地1将数量为1、2、1的产品分别运往销地甲、乙、丙;产地将数量为3、6的产品运往销地丙、丁;产地3将数量为4的产品运往销地甲。最小费用为118. <3>3.3(3): 程序代码: model: sets: xiao/1..5/:s; chan/1..4/:h; link(chan,xiao):x,y; endsets data: y=10 20 5 9 10 2 10 8 30 6 1 20 7 10 4

用lingo解决运输问题

用lingo解决运输问题 Lingo程序代码及运行结果(选取部分): 程序代码: model: sets: xiao/1..4/:s; chan/1..3/:h; link(chan,xiao):x,y; endsets data: y=3 7 6 4 2 4 3 2 4 3 8 5; h=5 2 3; s=3 3 2 2; enddata min=@sum(link:x*y); @for(xiao(j):@sum(chan(i):x(i,j))=s(j)); @for(chan(i):@sum(xiao(j):x(i,j))=h(i)); 运行结果及结果分析: Objective value: 32.00000 产地1分别将数量为3和2的产品运往销地甲和丁;产地2将数量为2的产品运往销地丙;产地3将数量为3的产品运往销地乙;该运输问题的最小费用为32. 程序代码: model: sets: xiao/1..4/:s; chan/1..3/:h; link(chan,xiao):x,y; endsets

data: y=10 6 7 12 16 10 5 9 5 4 10 10; h=4 9 4; s=5 2 4 6; enddata min=@sum(link:x*y); @for(xiao(j):@sum(chan(i):x(i,j))=s(j)); @for(chan(i):@sum(xiao(j):x(i,j))=h(i)); 运行结果及结果分析: Objective value: 118.0000 产地1将数量为1、2、1的产品分别运往销地甲、乙、丙;产地将数量为3、6的产品运往销地丙、丁;产地3将数量为4的产品运往销地甲。最小费用为118. 程序代码: model: sets: xiao/1..5/:s; chan/1..4/:h; link(chan,xiao):x,y; endsets data: y=10 20 5 9 10 2 10 8 30 6 1 20 7 10 4 8 6 3 7 5; h=5 6 2 9; s=4 4 6 2 4; enddata min=@sum(link:x*y); @for(xiao(j):@sum(chan(i):x(i,j))=s(j)); @for(chan(i):@sum(xiao(j):x(i,j))<=h(i));

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软件使用教程 一般来说,一个优化模型将由以下三部分组成: 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软件求解运输问题

2012——2013学年第一学期 合肥学院数理系 实验报告 课程名称:运筹学 实验项目:应用LINGO软件求解运输问题 实验类别:综合性□设计性□√验证性□专业班级: 姓名:学号: 实验地点: 实验时间: 指导教师:成绩:

一.实验目的 1、学会使用LINGO 软件求解运输问题的步骤与方法。 2、掌握使用LINGO 对运输问题的求解功能,并对结果进行分析。 二.实验内容 1.已知某企业有甲、乙、丙三个分厂生产一种产品,其产量分别为7、9、7个单位,需运往A 、B 、C 、D 四个门市部,各门市部需要量分别为3、5、7、8个单位。已知单位运价如下表。试确定运输计划使总运费最少。 2.现在要在五个工人中确定四个人来分别完成四项工作中的一项工作。由于每个工人的技术特长不同,他们完成各项工作所需的工时也不同。每个工人完成各项工作所需工时如下表所示,试找出一个工作分配方案,使总工时最小。 三. 模型建立 1.由题设知,总产量为:7+9+7=23个单位,总销量为:3+5+7+8=23个单位,所以这是一个产销平衡的运输问题。 设)4,3,2,1;3,2,1(==j i x ij 代表从第i 个产地运往第j 个销地的数量,z 为总运费。i a 表示第i 个产地的产量,j b 表示第j 个销地的销量ij c 表示从第i 个产地运往第j 个销地的单位产

品运输费用。则该问题的数学模型为: 3 4 1 1 4 13 1 m ax 0,1,2,3;1,2,3,4ij ij i j ij i j ij j i ij Z c x x a x b x i j ===== ?=???=???≥==??∑∑ ∑∑ 2. 设0-1变量,1,0ij i x i ?=??当第个人完成某j 项工作 ,当第个人不完成某j 项工作 则该问题的数学模型为: 5 4 1 1 5 14 1 m in 1,1,01ij ij i j ij i ij j ij Z c x x j x i x i j ===== ?= =1,2,3,4???= = 1,2,3,4,5???= =1,2,3,4,5;=1,2,3,4?? ∑∑∑∑或, 四. 模型求解(含经调试后正确的源程序) 1、编写程序1-1.m 如下: model : sets : warehouses/wh1..wh3/: capacity; vendors/v1..v4/: demand; links(warehouses,vendors): cost, volume; endsets data : capacity=7 9 7; demand=3 5 7 8; cost= 12 13 10 11 10 12 14 10 14 11 15 12; enddata min =@sum (links(I,J): cost(I,J)*volume(I,J));

第1讲 Lingo软件入门(2014)

第1讲Lingo软件入门 司守奎 烟台市,海军航空工程学院数学教研室 Email:sishoukui@https://www.doczj.com/doc/a418660860.html, 1 Lingo软件的基本语法 1.1 集合 集合部分的语法为 sets: 集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1; 集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2; 派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3; endsets 例26 sets: product/A B/; machine/M N/; week/1..2/; allowed(product,machine,week):x; endsets 1.2 数据 数据部分的语法为 data: 属性1=数据列表; 属性2=数据列表; enddata 1.3 计算 计算段部分不能含有变量,必须是已知数据的运算。 calc: b=0; a=a+1; endcalc 1.4 模型的目标函数和约束条件 这里就不具体给出了,下面通过具体例子给出。 1.5 子模型 在LINGO 9.0 及更早的版本中,在每个LINGO 模型窗口中只允许有一个优化模型,可以称为主模型(MAIN MODEL)。在LINGO 10.0 中,每个LINGO 模型窗口中除了主模型外,用户还可以定义子模型(SUBMODEL)。子模型可以在主模型的计算段中被调用,这就进一步增强了LINGO 的编程能力。 子模型必须包含在主模型之内,即必须位于以“MODEL:”开头、以“END”结束的模块内。同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名,其基本语法是: SUBMODEL mymodel: 可执行语句(约束+目标函数); ENDSUBMODEL 其中mymodel 是该子模型的名字,可执行语句一般是一些约束语句,也可能包含目标函数,但不可以有自身单独的集合段、数据段、初始段和计算段。也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。 如果已经定义了子模型mymodel,则在计算段中可以用语句“@SOLVE( mymodel);”求解这个子模型。 2 Lingo函数 2.1 算术运算符

用线性规划方法求解运输问题

用线性规划方法求解运输问题 线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法.在经济管理、交通运输、工农业生产等经济活动中,提高经济效果是人们不可缺少的要求,而提高经济效果一般通过两种途径:一是技术方面的改进,例如改善生产工艺,使用新设备和新型原材料.二是生产组织与计划的改进,即合理安排人力物力资源.线性规划所研究的是:在一定条件下,合理安排人力物力等资源,使经济效果达到最好.一般地,求线性目标函数在线性约束条件下的最大值或最小值的问题,统称为线性规划问题。满足线性约束条件的解叫做可行解,由所有可行解组成的集合叫做可行域。决策变量、约束条件、目标函数是线性规划的三要素. 运输问题的提出及其数学模型:现在人们生产活动中,不可避免的要进行物资调运工作,如某时期内将生产基地的蔬菜,粮食等各类物资,分别运到需要这些物资的地区。如何根据各地的生产量和需求量及各地之间的运输费用,如何制定一个运输方案,使总的运输量费用最小,这类的问题称

为运输问题。假设有m 个产地,记为A 1、A 2….A m ,生产某种物资,可供应的产量分别为a 1,a 2….a m ,有n 个销地,记为B 1、B 2…B n ,其需求量分别为b 1、b 2…b n ,假设在供需平衡的情况下,即∑=m i ai 1=∑=n j bj 1 ,从第i 个产地到j 个销地的单位物资的运费为c ij ,在满足各地需求的前提下,求运费最小的方案。 设x ij (i=1、2…m,j=1、2…n )为第i 个产地到第j 个销地的运量,则运输问题的数学模型为 Min Z = ∑=m i 1∑=n j cijxij 1

LINGO软件简介

L I N G O软件简介 Document number:BGCG-0857-BTDO-0089-2022

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^2-0.3*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)表示限制L?x?U ;@free(x)表示取消对x 的符号限制,即可正、可负。) 结果: Global optimal solution found. Objective value: 9561.200 Extended solver steps: 0 Total solver iterations: 45

Variable Value Reduced Cost X1 6.000000 -76.70000 X2 31.00000 -151.2000 X3 16.00000 -150.0000 Row Slack or Surplus Dual Price 1 9561.200 1.000000 2 0.000000 0.000000 3 56.00000 0.000000 ————————非常简单! 在LINGO中使用集合 为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。

Lingo软件解决产销不平衡的运输问题

产销不平衡的运输问题 产地B1 B2 B3 B4 B5 B6 B7 产量 A1 6 2 6 7 4 2 5 60 A2 4 9 5 3 8 5 8 55 A3 5 2 1 9 7 4 3 51 A4 7 6 7 3 9 2 7 43 A5 2 3 9 5 7 2 6 41 销量35 37 22 32 41 32 43 model: sets: supply/1..5/:produce;demand/1..7/:sell; link(supply,demand):cost,x;endsetsdata: cost=6 2 6 7 4 2 5 4 9 5 3 8 5 8 5 2 1 9 7 4 3 7 6 7 3 9 2 7 2 3 9 5 7 2 6; produce=60 55 51 43 41; sell=35 37 22 32 41 32 43; enddatamin=@sum(link:cost*x); @for(supply(i):@sum(demand(j):x(i,j))<=produce(i)); @for(demand(j):@sum(supply(i):x(i,j))=sell(j)); end Global optimal solution found. Objective value: 717.0000 Infeasibilities: 0.000000 Total solver iterations: 14 Model Class: LP Total variables: 35 Nonlinear variables: 0 Integer variables: 0 Total constraints: 13 Nonlinear constraints: 0 Total nonzeros: 105 Nonlinear nonzeros: 0

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