文档库 最新最全的文档下载
当前位置:文档库 › LINGO软件简介

LINGO软件简介

LINGO软件简介
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引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。

例如:对??

?

???

?

==-++-==≤++∑=.,,;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; endsets

min =@sum (mark:400*rp+450*op+20*inv);!也可以

mark(I):400*rp(I)+450*op(I)+20*inv(I); @for (mark(I): rp(I)<40);

@for (mark(I)|I#gt#1: inv(I)=inv(I-1)+rp(I)+op(I)-dem(I)); inv(1)=10+rp(1)+op(1)-dem(1); data :

dem=40,60,75,35;

enddata

end

上面程序在model …end 之间有(1)集合定义、(2)数据输入和(3)其他三部分内容。

集合定义部分(从sets:到endsets):定义了一个指标集合mark(可以理解为数组下标及其范围)和其4个属性dem、rp、op、inv (用此向量的数组变量)。

数据输入部分(从data:到enddata)依次给出常量(dem)的值。

其他部分:给出优化目标及约束。

一般而言,LINGO中建立优化模型的程序可以由五部分组成,或称为五段(section):

(1)集合段(SETS):这部分以“SETS:”开始,以“ENDSETS”结束,作用在于定义必要的集合变量(SET)及其元素(member,含义类似于数组的下标)和属性(attribute,含义类似于数组)。

(2)目标与约束段:这部分实际上定义了目标函数、约束条件等,但这部分没有段的开始和结束标记;该段一般常用到LINGO内部函数,尤其是和集合相关的求和函数@SUM和循环函数@FOR等。

(3)数据段(DATA):这部分以“DATA:”开始,以“ENDDATA”结束,作用在于对集合的属性(数组)输入必要的常数数据。格式为:attribute(属性)=value_list(常数列表);

常数列表中的数据之间可以用逗号、空格或回车符分隔。如果想要在运行时才对参数赋值,可以在数据段使用输入语句,其格式为“变量名=?;”,但仅限对单个变量赋值,而不能用于属性变量(数组)的单个元素。

(4)初始段(INIT):这部分以“INIT:”开始,以“ENDINIT”结束,作用在于对集合的属性(数组)定义初值(因为求解算法一般是迭代算法,提供一个较好的初值,能提高计算效果)。定义初值的语句格式为:

attribute(属性)=value_list(常数列表);

这与数据段中的用法类似。

(5)计算段(CALC):这部分以“CALC:”开始,以“ENDCALC”结束,作用在于对一些原始数据进行预处理加工,使其成为模型直接需要的数据。该段中通常是计算赋值语句。

基本集合与派生集合

为了处理二维数组变量等有多个下标的问题,LINGO引入了“派生集”的概念。我们把直接列出元素的指标集合叫“基本集合”,而基于其他集合派生出来的二维或多维指标集合称为“派生集”。派生集的定义格式为:

派生集名(原始集合1,原始集合2,…,原始集合n):属性变量列表;

实际上就是笛卡儿积的意思,即:派生集={(i

1,i

2

, (i)

n

)| i

1

?集合1, i

2

?

集合2,…, i

n

?集合n}。

1)一个应用例子(布局问题):某些建筑工地的位置(用平面坐标a,b表示)及水泥日用量d已知。现有A、B两临时料场位于P(5,1)、Q(2,7),日储量20。问A、B两料场分别向各工地运输多少吨水

泥,使总吨公里数最小?若重新安排两料场的位置,应怎样安排才能使总吨公里数最小?这样安排可节省多少吨公里?

设工地位置(a

i ,b

i

),水泥日用量为d

i

(i=1,2,…,6);料场位置

(x

i ,y

i

),日储量e

j

,j=1,2;

从料场j向工地i运送量为cij。该问题的数学模型为:LINGO求解程序为:

MODEL:

sets:

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

Jmark/1,2/:x,y,e;

IJmark(Imark,Jmark):c;

endsets

data:

!Location for demand(需求点位置);

a=1.25,8.75,0.5,5.75,3,7.25;

b=1.25,0.75,4.75,5,6.5,7.75;

!Quantities of the demand and supply(供需量);

d=3,5,4,7,6,11;e=20,20;

enddata

init:

!Initial location for the supply(初始点);

x,y=5,1,2,7;

endinit

!Objective function(目标);

[OBJ] min=@sum(IJmark(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-

b(i))^2)^(1/2));

!demand contraints(需求约束);

@for(Imark(i):[DEMAND_CON] @SUM(Jmark(j):c(i,j))=d(i););

!supply constrains(供给约束);

@for(Jmark(j):[SUPPLY_CON] @SUM(Imark(i):c(i,j))<=e(j););

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

END

2)一个动态规划的例子:(最短路问题)从S城市到T城市之间找一条最短路径,道路情况如下:

数学模型为:

LINGO求解程序:

model:

sets:

cities/s,a1,a2,a3,b1,b2,c1,c2,t/:L; !属性L(i)表示城市S到城市i 的最优行驶路线的里程;

roads(cities,cities)/ !派生集合roads表示的是网络中的道路;

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 !属性D(i,j)是城市i到城市j 的直接距离(已知);

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,,,,,,,,; !因为L(s)=0;

enddata

@for(cities(i)|i#gt#@index(s): !这行中"@index(s)"可以直接写成"1";

L(i)=@min(roads(j,i):L(j)+D(j,i));); !这就是最短路关系式;

end

Variable Value

L( S) 0.000000

L( A1) 6.000000

L( A2) 3.000000

L( A3) 3.000000

L( B1) 10.00000

L( B2) 7.000000

L( C1) 15.00000

L( C2) 16.00000

L( T) 20.00000

最短路径为:S-〉A3-〉B2-〉C1-〉T

3)(指派问题)设有6个人做6件事。其中c

ij

表示第i人做第j事

的收益;设第i人做第j事时x

ij =1,否则x

ij

=0。该问题的规划模型:

说明:其中“-”表示某人无法做该事。可令其为-?(表示绝对不行)或0(领薪不用干活)

LINGO求解程序:

MODEL:

sets:

Imark/1..6/:i;

Jmark/1..6/:j;

IJmark(Imark,Jmark):c,x;

endsets

data:

!第i人做第j事的收益;

c=

20,15,16,5,4,7

17,15,33,12,8,6

9,12,18,16,30,13

12,8,11,27,19,14

-99,7,10,21,10,32

-99,-99,-99,6,11,13;

enddata

[OBJ] max=@sum(IJmark(i,j): c*x);

!每人做一项工作;

@for(Imark(i): @SUM(Jmark(j):x(i,j))=1;);

!每事一人做;

@for(Jmark(j): @SUM(Imark(i):x(i,j))=1;);

@for(IJmark: @bin(x));!本约束可以不要,因为有解时必为0或1;

END

4)(生产与销售计划问题)某公司用两种原油(A和B)混合加工成两种汽油(甲和乙)。甲、乙两种汽油含原油A的最低比例分别为50%和60%,每吨售价分别是4800元和5600元。该公司现有原油A和B的库存量分别为500吨和1000吨,还可以从市场上买到不超过1500吨的原油A。原油A的市场价为:购买量不超500吨时单价为10000元/吨;购买量超过500吨但不超1000吨时,超过500吨部分单价为8000元/吨;购买量超过1000吨部分的单价是6000元/吨。该公司应如何安排原油的采购和加工以获得最大利润?

数学模型:

设原油A用于生产甲、乙两种汽油的数量分别是x11和

x12,原油B用于生产甲、乙两种汽油的数量分别是x21和x22;购买原油A的数量是x吨,采购支出为c(x)千元/吨。

为了处理分段函数c(x),将原油采购量x 分解为对应价格10千元/吨的采购量x1、对应对应价格8千元/吨的采购量x2和对应价格6千元/吨的采购量x3,它们应满足:

0)500(21=-x x 表示要么x1=500要么x2=0,即x1的量不达

到500时x2=0

0)500(32=-x x 表示要么x2=500要么x3=0,即x2的量不达

到500时x3=0

此时采购支出3216810)(x x x x c ++= 模型改变为:

LINGO 求解程序: model : init : x1=500; x2=500; x3=0; x12=1500; x22=1000; x11=0; x21=0; endinit

max =4.8*x11+4.8*x21+5.6*x12+5.6*x22-10*x1-8*x2-6*x3; x11+x12<=x+500;

x21+x22<=1000;

0.5*x11-0.5*x21>=0;

0.4*x12-0.6*x22>=0; x=x1+x2+x3;

(x1-500)*x2=0;

(x2-500)*x3=0;

@bnd(0,x1,500);

@bnd(0,x2,500);

@bnd(0,x3,500);

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;

数学建模:运用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软件包求解模型的最大值。

运筹学利用lindo、lingo软件的上机报告

一、投资计划问题 某地区在今后3年内有4种投资机会,第一种是在3年内每年年初投资,年底可获利润20%,并可将本金收回。第二种是在第一年年初投资,第二年年底可获利50%,并可将本金收回,但该项投资金额不超过2百万元。第三种是在第二年年初投资,第三年年底收回本金,并获利60%,但该项投资金额不超过1.5百万元。第四种是在第三年年初投资,第三年年底收回本金,并可获利40%,但该项投资金额不超过1百万元。现在该地区准备了3百万元资金,如何制定投资方案,使到第三年年末本利的和最大? 理论模型 以分别A x i ,B x i ,C x i ,D x i 表示第i 年年初给项目第一、二、三、四种的投资额,它们都是待定的未知变量。根据给定的条件,将变量列于下表 ???????????≤≤≤≤--+≤-+≤+++=1 5.1205.12.10 2.13 6.14.12.1max 321123312211233D C B B A D A A C A B A C D A x x x x x x x x x x x x x x x z 输入模型:

max C D A x x x 2336.14.12.1++ st 311≤+B A x x 02.1122≤-+A C A x x x 05.12.11233≤--+B A D A x x x x 21≤B x 5.12≤C x 13≤D x 运行求解结果: LP OPTIMUM FOUND AT STEP 5 OBJECTIVE FUNCTION VALUE 1) 5.750000 VARIABLE VALUE REDUCED COST X3A 1.625000 0.000000 X3D 1.000000 0.000000 X2C 1.500000 0.000000 X1A 1.250000 0.000000 X1B 1.750000 0.000000 X2A 0.000000 0.060000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 1.800000 3) 0.000000 1.500000 4) 0.000000 1.200000 5) 0.250000 0.000000 6) 0.000000 0.100000 7) 0.000000 0.200000 NO. ITERATIONS= 5 RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES

LindoLingo软件基本知识

Lindo /Lingo 软件基本知识 Lindo/Lingo 软件是美国Lindo 系统公司开发的一套专门用于求解优化模型的软件。 一.Lingo 入门 1.编写简单的Lingo 程序 Lingo 程序:在“模型窗口”中,按Lingo 语法格式,输入一个完整的优化模型。 (注意:一个程序就是一个优化模型) 例1 要求解线性规划问题 . 0,, 1253,1034.., 32max ≥≤+≤++=y x y x y x t s y x z 输入程序: max=2*x+3*y; 4*x+3*y<=10; 3*x+5*y<=12; 例2 求解 .,0,, 2, 100.., 23.027798max 21212122212121且都是整数≥≤≤+---+x x x x x x t s x x x x x x 输入程序: max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; x1<=2*x2;x1+x2<=100; @gin(x1); @gin(x2); 2.语法格式 (1)目标函数 max= 或 min= (2)每个语句的结尾要有“;” (3)程序中,各个语句的先后次序无关 (4)自动默认各个变量均为大于等于零的实数 (5)不区分大写、小写 (6)程序中的“<=”、“<”等同于原模型中的“≤” 程序中的“>=”、“>”等同于原模型中的“≥” (7)对一个特定的变量 x ,进行限制: @free(x) :把x 放宽为任意实数

@gin(x) :限制x 为整数 @bin(x) :限制x 只能取0或1 @bnd(-6,x,18) :限制x 为闭区间[-6,18]上的任意实数 例3:某学校游泳队要从5名队员中选4名参加4乘100米混合泳接力赛。 5名队员4种泳姿的百米成绩(单位:秒) ----------------------------------------------------------------------------------- 李 王 张 刘 赵 蝶泳 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 ----------------------------------------------------------------------------------- 如何选拔? (1)请建立“0----1规划”模型; (2)用Lingo 求解。 解:若第i 名队员参加第j 种泳姿比赛,则令1=ij x ;否则令0=ij x ;共有20个决策变量ij x 。第i 名队员的第j 种泳姿成绩记为ij c ,则 目标函数为:∑∑==5141min i j ij ij x c 约束条件有:每名队员顶多能参加一种泳姿比赛 5,4,3,2,1,14 1=≤∑=i x j ij ; 每种泳姿有且仅有一人参加 .4,3,2,1,151==∑=j x i ij 这样就能建立如下“0----1规划”模型: ∑∑==5141min i j ij ij x c s.t. 5,4,3,2,1,141=≤∑=i x j ij .4,3,2,1,151==∑=j x i ij

lingo-lindo简介

Lingo、lindo简介 一、软件概述 (1) 二、快速入门 (4) 三、Mathematica函数大全--运算符及特殊符号 (11) 参见网址: https://www.wendangku.net/doc/5a9786754.html,/ 一、软件概述 (一)简介 LINGO软件是由美国LINDO系统公司研发的主要产品。LINGO是Linear Interactive and General Optimizer的缩写,即交互式的线性和通用优化求解器。LINGO可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。其特色在于 内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。能方便与EXCEL,数据库等其他软件交换数据。 LINGO实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel 电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。 (二)LINGO的主要特点: Lingo 是使建立和求解线性、非线性和整数最佳化模型更快更简单更 有效率的综合工具。Lingo 提供强大的语言和快速的求解引擎来阐述和求 解最佳化模型。

1 简单的模型表示 LINGO 可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。LINGO的建模语言允许您使用汇总和下标变量以一种易懂的直观的方式来表达模型,非常类似您在使用纸和笔。模型更加容易构建,更容易理解,因此也更容易维护。 2 方便的数据输入和输出选择 LINGO 建立的模型可以直接从数据库或工作表获 取资料。同样地,LINGO 可以将求解结果直接输出到数据库或工作表。使得您能够在您选择的应用程序中生成报告。 3 强大的求解器 LINGO拥有一整套快速的,内建的求解器用来求解线性的,非线性的(球面&非球面的),二次的,二次约束的,和整数优化问题。您甚至不需要指定或启动特定的求解器,因为LINGO会读取您的方程式并自动选择合适的求解器。 4交互式模型或创建Turn-key应用程序 您能够在LINGO内创建和求解模型,或您能够从您自己编写的应用程序中直接调用LINGO。对于开发交互式模型,LINGO提供了一整套建模环境来构建,求解和分析您的模型。对于构建turn-key解决方案,LINGO提供的可调用的DLL 和OLE界面能够从用户自己写的程序中被调用。LINGO也能够从Excel宏或数据库应用程序中被直接调用。 5 广泛的文件和HELP功能

LINDO-LINGO简介及使用方法

欢迎访问华中数学建模网 https://www.wendangku.net/doc/5a9786754.html, 1.LINDO、LINGO 一、软件简介 LINDO是一种专门用于求解数学规划问题的软件包。由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。因此在数学、科研和工业界得到广泛应用。LINDO主要用于解线性规划、非线性规划、二次规划和整数规划等问题。也可以用于一些非线性和线性方程组的求解以及代数方程求根等。LINDO中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。 一般用LINDO(Linear Interactive and Discrete Optimizer)解决线性规划(LP—Linear Programming)。整数规划(IP—Integer Programming)问题。其中LINDO 6 .1 学生版至多可求解多达300个变量和150个约束的规划问题。其正式版(标准版)则可求解的变量和约束在1量级以上。 LINDO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP —QUARATIC PROGRAMING)其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦再10^4量级以上。虽然LINDO 和LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。 要学好用这两个软件最好的办法就是学习他们自带的HELP文件。 下面拟举数例以说明这两个软件的最基本用法。(例子均选自张莹《运筹学基础》) 例1.(选自《运筹学基础》P54.汽油混合问题,线性规划问题) 一种汽油的特性可用两个指标描述:其点火性用“辛烷数”描述,其挥发性用“蒸汽压力”描述。某炼油厂有四种标准汽油,设其标号分别为1,2,3,4,其特性及库存量列于下表1中,将上述标准汽油适量混合,可得两种飞机汽油,某标号为1,2,这两种飞机汽油的性能指标及产量需求列于表2中。 问应如何根据库存情况适量混合各种标准汽油,使既满足飞机汽油的性能指标,而产量又为最高。 表1 标准汽油辛烷数 蒸汽压力(g/cm^2) 库存量 1107.57.11*10^(-2)380000 293.011.38*10^(-2)262200 387.0 5.69*10^(-2)408100 4108.028.45*10^(-2)130100

相关文档
相关文档 最新文档