优化模型与 LINDO / LINGO 软件谢金星清华大学数学科学系
Tel,010-62787812
Email:jxie@math.tsinghua.edu.cn
http://faculty.math.tsinghua.edu.cn/~jxie
提要
LINDO公司的主要软件产品及功能简介
LINDO软件的使用简介
LINGO软件的使用简介
建模与求解实例优化模型实际问题中的优化模型
mixgts
xxxxfzMaxMin
i
T
n
L
L
,2,1,0)(..
),(),()(
1
=≤
==或
g
i
(x)≤0~约束条件
x~决策变量 f(x)~目标函数数学规划线性规划 (LP)
二次规划 (QP)
非线性规划 (NLP)
纯整数规划 (PIP)
混合整数规划 (MIP)
整数规划 (IP)
0-1整数规划一般整数规划连续规划
LINDO 公司软件产品简要介绍美国芝加哥 (Chicago)大学的 Linus Schrage教授于 1980
年前后开发,后来成立 LINDO系统公司( LINDO
Systems Inc.),网址,http://www.lindo.com
LINDO,Linear INteractive and Discrete Optimizer (V6.1)
LINGO,Linear INteractive General Optimizer (V8.0)
LINDO API,LINDO Application Programming Interface (V2.0)
What’s Best!,(SpreadSheet e.g,EXCEL) (V7.0)
演示 (试用 )版、学生版、高级版、超级版、工业版、
扩展版 … (求解 问题规模 和 选件 不同)
LINDO和 LINGO软件能求解的优化模型
LINGO
LINDO
优化模型线性规划
(LP)
非线性规划
(NLP)
二次规划
(QP)
连续优化 整数规划 (IP)
LINDO/LINGO软件的求解过程
LINDO/LINGO预处理程序线性优化求解程序 非线性优化求解程序分枝定界管理程序
LP QP NLP IP 全局优化 (选 )
ILP INLP
IQP
1、确定常数
2、识别类型
1、单纯形算法
2、内点算法 (选 )
1、顺序线性规划法( Sequential
Linear Programming,SLP)
2、广义既约梯度法( Generalized
Reduced Gradient,GRG) (选 )
3、多点搜索( Multistart) (选 )
建模时需要注意的几个基本问题
1,尽量使用实数优化模型,减少整数约束和整数变量的个数
2,尽量使用光滑优化模型,减少非光滑约束的个数如:尽量少地使用绝对值函数( |x|)、符号函数(当变量 x
为正数时取 1,为 0时取 0,为 -1时取 -1)、多个变量求最大(或最小)值、四舍五入函数、取整函数等
3,尽量使用线性优化模型,减少非线性约束和非线性变量的个数 (如 x/y <5 改为 x<5y)
4,合理设定变量的上下界,尽可能给出变量的初始值
5,模型中使用的单位的数量级要适当 (如小于 10
3
)
需要掌握的几个重要方面
1,LINDO:
正确阅读求解报告(尤其要掌握敏感性分析)
2,LINGO:
掌握集合 (SETS)的应用;
正确阅读求解报告;
正确理解求解状态窗口;
学会设置基本的求解选项 (OPTIONS) ;
掌握与外部文件的基本接口方法例 1 加工奶制品的生产计划
1桶牛奶
3公斤 A
1
12小时
8小时
4公斤 A
2
或获利 24元 /公斤获利 16元 /公斤
50桶牛奶 时 间 480小时 至多加工 100公斤 A
1
每天:
制订生产计划,使每天获利最大
35元可买到 1桶牛奶,买吗?若买,每天最多买多少?
可聘用临时工人,付出的工资最多是每小时几元?
A
1
的获利增加到 30元 /公斤,应否改变生产计划?
1桶牛奶
3公斤 A
1
12小时
8小时
4公斤 A
2
或获利 24元 /公斤获利 16元 /公斤至多加工 100公斤 A
1
时间 480小时50桶牛奶每天决策变量
x
1
桶牛奶生产 A
1
x
2
桶牛奶生产 A
2
获利 24× 3x
1
获利 16× 4 x
2目标函数
21
6472 xxzMax +=
每天获利线性规划模型
(LP)
50
21
≤+ xx
原料供应
480812
21
≤+ xx
劳动时间约束条件
1003
1
≤x
加工能力
0,
21
≥xx
非负约束模型求解
max 72x1+64x2
st
2) x1+x2<50
3) 12x1+8x2<480
4) 3x1<100
end
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
DO RANGE
(SENSITIVITY)
ANALYSIS?
No
LINDO 6.1
软件实现Milk01.ltx
20桶牛奶生产 A
1
,30桶生产 A
2
,利润 3360元。
模型求解
reduced cost值表示当该非基变量增加一个单位时
(其他非基变量保持不变)目标函数减少的量 (对
max型问题 )
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
也可理解为:
为了使该非基 变量变成基变量,
目标函数中对 应系数应增加的量结果解释
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
max 72x1+64x2
st
2) x1+x2<50
3) 12x1+8x2<480
4) 3x1<100
end
三种资源原料无剩余时间无剩余加工能力剩余 40
“资源,剩余为零的约束为紧约束(有效约束)
结果解释
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
最优解下,资源,增加 1
单位时,效益,的增量原料增加 1单位,利润增长 48
时间增加 1单位,利润增长 2
加工能力增长不影响利润影子价格
35 <48,应该买!
35元可买到 1桶牛奶,要买吗?
2元!? 聘用临时工人付出的工资最多每小时几元?
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 72.000000 24.000000 8.000000
X2 64.000000 8.000000 16.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 50.000000 10.000000 6.666667
3 480.000000 53.333332 80.000000
4 100.000000 INFINITY 40.000000
最优解不变时目标函数系数允许变化范围
Yes
DO RANGE(SENSITIVITY) ANALYSIS?
x
1
系数范围 (64,96)
x
2
系数范围 (48,72)
A
1
获利增加到 30元 /千克,应否改变生产计划
x
1
系数由 24 ×3=72
增加为 30×3=90,
在允许范围内不变!
(约束条件不变 )
结果解释
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 72.000000 24.000000 8.000000
X2 64.000000 8.000000 16.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 50.000000 10.000000 6.666667
3 480.000000 53.333332 80.000000
4 100.000000 INFINITY 40.000000
影子价格有意义时约束右端的允许变化范围原料最多增加 10
时间最多增加 53
35元可买到 1桶牛奶,每天最多买多少?
最多买 10桶?
(目标函数不变 )
LINDO的一些注意事项 ( 1)
1.,>”(或,<”)号与,>=”(或,<=”)功能相同
2,变量与系数间可有空格 (甚至回车 ),但无运算符
3,变量名以字母开头,不能超过 8个字符
4,变量名不区分大小写(包括 LINDO中的关键字)
5,目标函数所在行是第一行,第二行起为约束条件
6,行号 (行名 )自动产生或人为定义。行名以,),结束
7,行中注有,!”符号的后面部分为注释。如,
! It’s Comment.
8,在模型的任何地方都可以用,TITLE” 对模型命名
(最多 72个字符),如:
TITLE This Model is only an Example
LINDO的一些注意事项 ( 2)
9,变量不能出现在一个约束条件的右端
10,表达式中不接受括号,( )”和逗号,,”等任何符号,例,
400(X1+X2)需写为 400X1+400X2
11,表达式应化简,如 2X1+3X2- 4X1应写成 -2X1+3X2
12,缺省假定所有变量非负;可在模型的,END”语句后用,FREE name”将变量 name的非负假定取消
13,可在,END”后用,SUB” 或,SLB” 设定变量上下界例如:,sub x1 10”的作用等价于,x1<=10”
但用,SUB”和,SLB”表示的上下界约束不计入模型的约束,也不能给出其松紧判断和敏感性分析。
14.,END”后对 0-1变量说明,INT n 或 INT name
15.,END”后对整数变量说明,GIN n 或 GIN name
二次 规划 (QP)问题
LINDO可求解二次规划 (QP)问题,但输入方式较复杂,因为在 LINDO中不许出现非线性表达式
需要为每一个实际约束增加一个对偶变量
( LAGRANGE乘子),在实际约束前增加有关变量的一阶最优条件,转化为互补问题
,END”后面使用 QCP命令指明实际约束开始的行号,然后才能求解
建议总是用 LINGO解 QP
[注意 ]对 QP和 IP,敏感性分析意义不大状态窗口 ( LINDO Solver Status)
当前状态:已经达到最优解
迭代次数,18次
约束不满足的量 (不是,个数,),0
当前的目标值,94
最好的整数解,94
整数规划的界,93.5
分枝数,1
所用时间,0.00秒(太快了,还不到 0.005秒)
刷新本界面的时间间隔,1(秒 )
选项设置
Preprocess:预处理 (生成割平面 );
Preferred Branch:优先的分枝方式:
“Default”(缺省方式)、
“Up”(向上取整优先)、
“Down”(向下取整优先);
IP Optimality Tol,IP最优值允许的误差上限(一个百分数,如 5%即 0.05);
IP Objective Hurdle,IP目标函数的篱笆值,即只寻找比这个值更优最优解(如当知道当前模型的某个整数可行解时,
就可以设置这个值);
IP Var Fixing Tol:固定一个整数变量取值所依据的一个上限(如果一个整数变量的判别数( REDUCED COST)的值很大,超过该上限,则以后求解中把该整数变量固定下来)。
Nonzero Limit:
非零系数的个数上限;
Iteration Limit:
最大迭代步数;
Initial Contraint Tol:
约束的初始误差上限;
Final Contraint Tol:
约束的最后误差上限;
Entering Var Tol:
进基变量的 REDUCED
COST的误差限;
Pivot Size Tol:
旋转元的误差限
Report/Statistics
ROWS= 5 VARS= 4 INTEGER VARS= 2( 0 = 0/1) QCP= 4
NONZEROS= 19 CONSTRAINT NONZ= 12( 6 = +-1) DENSITY=0.760
SMALLEST AND LARGEST ELEMENTS IN ABSOLUTE VALUE= 0.300000 277.000
OBJ=MIN,NO,<,=,>,2 0 2,GUBS <= 1 VUBS >= 0
SINGLE COLS= 0 REDUNDANT COLS= 0
第一行:模型有 5行(约束 4行),4个变量,两个整数变量(没有
0-1变量),从第 4行开始是二次规划的实际约束。
第二行:非零系数 19个,约束中非零系数 12个 (其中 6个为 1或 -1),
模型密度为 0.760(密度 =非零系数 /[行数* (变量数+1 )]) 。
第三行的意思:按绝对值看,系数最小、最大分别为 0.3和 277。
第四行的意思:模型目标为极小化;小于等于、等于、大于等于约束分别有2、0、2个;广义上界约束( GUBS)不超过1个;
变量上界约束( VUBS)不少于0个。所谓 GUBS,是指一组不含有相同变量的约束;所谓 VUBS,是指一个蕴涵变量上界的约束,如从约束 X1+X2-X3=0可以看出,若 X3=0,则 X1=0,X2=0
(因为有非负限制),因此 X1+X2-X3=0是一个 VUBS约束。
第五行的意思:只含1个变量的约束个数 =0个;冗余的列数 =0个
LINDO行命令、命令脚本文件
WINDOWS环境下行命令的意义不大批处理:可以采用命令脚本(行命令序列)
Model01.ltx
Bat01.txt
Example 演示
LINGO模型 — 例:选址问题某公司有 6个建筑工地,位置坐标为 (a
i
,b
i
) (单位:公里 ),
水泥日用量 d
i
(单位:吨)
i
12 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 3547 1
假设,料场和工地之间有直线道路
1)现有 2 料场,位 于 A (5,1),B (2,7),
记 (x
j
,y
j
),j=1,2,日储 量 e
j
各有 20 吨。
目标,制定每天的供应计划,即从 A,B 两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。
用例中数据计算,
最优解为
i
123456
1i
c (料 场 A)
350701
2i
c (料 场 B)
0040610
总吨公里数为总吨公里数为
136.2
2,1,
6,...,1,..
])()[(min
6
1
2
1
2
1
6
1
2/122
=≤
==
+?
∑
∑
∑∑
=
=
==
jec
idcts
byaxc
jij
i
iij
j
ji
ijijij
线性规划模型决策变量,c
ij
(料场 j到工地 i的运量) ~12维选址问题,NLP
2)改建两个新料场,需要确定新料场位置 (x
j
,y
j
)和运量 c
ij
,在其它条件不变下使总吨公里数最小。
2,1,
6,...,1,..
])()[(min
6
1
2
1
2
1
6
1
2/122
=≤
==
+?
∑
∑
∑∑
=
=
==
jec
idcts
byaxc
jij
i
iij
j
ji
ijijij
决策变量:
c
ij,
(x
j
,y
j
)~16维非线性规划模型
LINGO模型的构成,4个段集合段( SETS ENDSETS)
数据段( DATA ENDDATA)
初始段( INIT ENDINIT)
目标与约束段局部最优,89.8835(吨公里 )
LP:移到数据段边界集合的类型集合派生集合 基本集合稀疏集合 稠密集合元素列表法 元素过滤法 直接列举法 隐式列举法
setname [/member_list/]
[,attribute_list];
setname(parent_set_list)
[/member_list/]
[,attribute_list];
SETS:
CITIES /A1,A2,A3,B1,B2/;
ROADS(CITIES,CITIES)/
A1,B1 A1,B2 A2,B1 A3,B2/:D;
ENDSETS
SETS:
STUDENTS /S1..S8/;
PAIRS( STUDENTS,STUDENTS) |
&2 #GT# &1,BENEFIT,MATCH;
ENDSETS
集合元素的隐式列举类型 隐式列举格式 示例 示例集合的元素数字型
1..n 1..5 1,2,3,4,5
字符 -
数字型
stringM..stringN Car101..car208 Car101,car102,…,
car208
星期型
dayM..dayN MON..FRI MON,TUE,WED,
THU,FRI
月份型
monthM..monthN OCT..JAN OCT,NOV,DEC,
JAN
年份 -
月份型
monthYearM..mo
nthYearN
OCT2001..JAN
2002
OCT2001,
NOV2001,
DEC2001,
JAN2002
运算符的优先级三类运算符:
算术运算符 逻辑运算符 关系运算符优先级 运算符最高 #NOT# —(负号)
^
* /
+ —(减法)
#EQ# #NE# #GT# #GE# #LT# #LE#
#AND# #OR#
最低 <(=) = >(=)
集合循环函数四个集合循环函数,FOR,SUM,MAX,MIN
@function( setname [ ( set_index_list)[ | condition]],expression_list);
Example:
[objective] MAX = @SUM( PAIRS( I,J),BENEFIT( I,J) * MATCH( I,J));
@FOR(STUDENTS( I),[constraints]
@SUM( PAIRS( J,K) | J #EQ# I #OR# K #EQ# I,MATCH( J,K)) =1);
@FOR(PAIRS( I,J),@BIN( MATCH( I,J)));
MAXB=@MAX(PAIRS( I,J),BENEFIT( I,J));
MINB=@MIN(PAIRS( I,J),BENEFIT( I,J));
状态窗口
Solver Type:
B-and-B
Global
Multistart
Model Class:
LP,QP,
ILP,IQP,
PILP,PIQP,
NLP,INLP,
PINLP
State:
Global Optimum
Local Optimum
Feasible
Infeasible
Unbounded
Interrupted
Undetermined
7个选项卡(可设置80-90个控制参数)
程序与数据分离文本文件使用外部数据文件
Cut (or Copy) – Paste 方法
@FILE 函数输入数据,@TEXT函数输出数据(文本文件)
@OLE函数与电子表格软件(如 EXCEL)连接
@ODBC函数与数据库连接
LINGO命令脚本文件
LG4 ( LONGO模型文件)
LNG ( LONGO模型文件)
LTF ( LONGO脚本文件)
LDT ( LONGO数据文件)
LRP ( LONGO报告文件)
常用文件后缀
@FILE和@TEXT:文本文件输入输出
MODEL:
SETS:
MYSET / @FILE(‘myfile.txt’) /,
@FILE(‘myfile.txt’);
ENDSETS
MIN = @SUM( MYSET( I):
SHIP( I) * COST( I));
@FOR( MYSET( I),
[CON1] SHIP( I) > NEED( I);
[CON2] SHIP( I) < SUPPLY( I));
DATA:
COST = @FILE(‘myfile.txt’);
NEED = @FILE(‘myfile.txt’);
SUPPLY = @FILE(‘myfile.txt’);
@TEXT(‘result.txt’)=SHIP,
@DUAL(SHIP),@DUAL(CON1);
ENDDATA
END
myfile.txt文件的内容、格式:
Seattle,Detroit,Chicago,Denver~
COST,NEED,SUPPLY,SHIP~
12,28,15,20~
1600,1800,1200,1000~
1700,1900,1300,1100
@OLE,与EXCEL连接
MODEL:
SETS:
MYSET / @OLE(‘mydata.xls’,’CITIES’) /,@OLE(‘mydata.xls’,‘ATTR’);
ENDSETS
MIN = @SUM( MYSET( I),SHIP( I) * COST( I));
@FOR( MYSET( I),
[CON1] SHIP( I) > NEED( I);
[CON2] SHIP( I) < SUPPLY( I));
DATA:
COST,NEED,SUPPLY = @OLE(‘mydata.xls’);
@(‘mydata.xls’,’SOLUTION’)=SHIP;
ENDDATA
END
mydata.xls文件中必须有下列名称 (及数据 ):
CITIES,ATTR,
COST,NEED,
SUPPLY,SOLUTION
在 EXCEL中还可以通过,宏,自动调用 LINGO
也可以将 EXCEL表格嵌入到 LINGO模型中
@ODBC,与数据库连接目前支持下列 DBMS,(如为其他数据库,则需自行安装驱动 )
ACCESS,DBASE,EXCEL,FOXPRO,ORACLE,
PARADOX,SQL SERVER,TEXE FILES
使用数据库之前,数据源需要在 ODBC管理器注册输入基本集合元素:
setname/@ODBC([‘datasource’ [,‘tablename’ [,‘columnname’]]])/
输入派生集合元素:
setname/@ODBC([‘source’[,‘table’ [,‘column1’[,‘column2’…]]]])/
输入数据:
Attr_list=@ODBC([‘source’[,‘table’ [,‘column1’[,‘column2’…]]]])
输出数据:
@ODBC([‘source’[,‘table’ [,‘column1’[,‘column2’…]]]])= Attr_list
建模例子
(CUMCM-2003B)
露天矿生产的车辆安排露天矿里铲位已分成矿石和岩石,平均铁含量不低于
25%的为矿石,否则为岩石。每个铲位的矿石、岩石数量,以及矿石的平均铁含量(称为品位)都是已知的。
每个铲位至多安置一台电铲,电铲平均装车时间 5分钟矿石卸点需要的铁含量要求都为 29.5%!1%(品位限制),搭配量在一个班次( 8小时)内满足品位限制即可。卸点在一个班次内不变。卡车载重量为 154吨,平均时速 28km,平均卸车时间为 3分钟。
卡车在等待时所耗费的能量也是相当可观的,原则上在安排时 不应发生卡车等待 的情况。
问题:出动几台电铲,分别在哪些铲位上;出动几辆卡车,分别在哪些路线上各运输多少次?
平面示意图问题数据距离 铲位1 铲位 2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位 8 铲位9 铲位10
矿石漏
5.26 5.19 4.21 4.00 2.95 2.74 2.46 1.90 0.64 1.27
倒装Ⅰ
1.90 0.99 1.90 1.13 1.27 2.25 1.48 2.04 3.09 3.51
岩场
5.89 5.61 5.61 4.56 3.51 3.65 2.46 2.46 1.06 0.57
岩石漏
0.64 1.76 1.27 1.83 2.74 2.60 4.21 3.72 5.05 6.10
倒装Ⅱ
4.42 3.86 3.72 3.16 2.25 2.81 0.78 1.62 1.27 0.50
铲位1 铲位2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位 8 铲位9 铲位10
矿石量
0,95 1,05 1,00 1,05 1,10 1,25 1,05 1,30 1,35 1,25
岩石量
1,25 1,10 1,35 1,05 1,15 1,35 1,05 1,15 1,35 1,25
铁含量
30% 28% 29% 32% 31% 33% 32% 31% 33% 31%
问题分析与典型的运输问题明显有以下不同:
1,这是运输矿石与岩石两种物资的问题;
2,属于产量大于销量的不平衡运输问题;
3,为了完成品位约束,矿石要搭配运输;
4,产地、销地均有单位时间的流量限制;
5,运输车辆只有一种,每次满载运输,154吨 /车次;
6,铲位数多于铲车数意味着要最优的选择不多于 7个产地作为最后结果中的产地;
7,最后求出各条路线上的派出车辆数及安排。
近似处理:
先求出产位、卸点每条线路上的运输量 (MIP模型 )
然后求出各条路线上的派出车辆数及安排模型假设
卡车在一个班次中不应发生等待或熄火后再启动的情况;
在铲位或卸点处由两条路线以上造成的冲突问题面前,我们认为只要平均时间能完成任务,就认为不冲突。我们不排时地进行讨论;
空载与重载的速度都是 28km/h,耗油相差很大;
卡车可提前退出系统,等等。
如理解为严格不等待,难以用数学规划模型来解个别参数队找到了可行解 (略)
符号
x
ij
:从 i铲位到 j号卸点的石料运量 (车) 单位,吨;
c
ij
:从 i号铲位到 j号卸点的距离 公里;
T
ij
:从 i号铲位到号 j卸点路线上运行一个周期平均时间 分;
A
ij
:从号铲位到号卸点最多能同时运行的卡车数 辆;
B
ij
:从号铲位到号卸点路线上一辆车最多可运行的次数 次;
p
i
,i号铲位的矿石铁含量 p=(30,28,29,32,31,33,32,31,33,31) %
q
j
,j号卸点任务需求,q=(1.2,1.3,1.3,1.9,1.3)*10000 吨
ck
i
,i号铲位的铁矿石储量 万吨
cy
i
,i号铲位的岩石储量 万吨
f
i
:描述第 i号铲位是否使用的 0-1变量,取 1为使用; 0为关闭。
53
2
++
平均速度距离到 ×
=
ji
T
ij?
=
5
ij
ij
T
A
×?×
=
ij
ij
ij
T
A
B
5)1(608 -
(近似 )
优化模型
cx
ij
ij
ij
×
∑∑
==
10
1
5
1
min
5,,1,10,,1,LL==×≤ ji
BAx ijij
ij
10,,1,5/608
5
1
L=××≤
∑
=
i
f
x
i
j
ij
5,,1,208
10
1
L=×≤
∑
=
j
i
ij
x
10,,1,
154/10000
154/10000
43
521
L=
×≤+
×≤++
i
cy
xx
ckxxx
i
ii
iiii
( 1) 道路能力 (卡车数 )约束
( 2)电铲能力约束
( 3)卸点能力约束
( 4)铲位储量约束
( 5)产量任务约束
( 6)铁含量约束
( 7)电铲数量约束
( 8)整数约束
5,,1,154/
10
1
L=≥
∑
=
j
q
x
j
i
ij
5,2,1,
0)5.28(
0)5.30(
10
1
10
1
=
≥?×
≤?×
∑
∑
=
=
j
p
x
p
x
i
i
ij
i
i
ij
.
7
10
1
≤
∑
=i
i
f
x
ij
为非负整数
f
i
为 0-1整数计算结果( LINGO软件)
铲位1 铲位2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位8 铲位9 铲位10
矿漏 13 54 11
倒Ⅰ 42 43
岩场 70 15
岩漏 81 43
倒Ⅱ 13 2 70
铲位1 铲位2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位8 铲位9 铲位 10
矿石漏
0.867 1.862 0.314
倒场Ⅰ
1.077 1.162
岩场
1.892 0.326
岩石漏
1.841 1.229
倒场Ⅱ
0.684 0.1 1.489
计算结果(派车)
铲位1 铲位2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位8 铲位9 铲位 10
矿石漏
1 (29)
倒场Ⅰ
1 (39) 1 (37)
岩场
1 (37)
岩石漏
1(44) 1 (35)
倒场Ⅱ
1 (47)
此外,6辆联合派车(方案略)
结论:
铲位 1,2,3,4,8,9,10处各放置一台电铲。
一共使用了 13辆卡车;总运量为 85628.62吨公里;
岩石产量为 32186吨;矿石产量为 38192吨。
最大化产量目标函数变化此外:车辆数量( 20辆)限制(其实上面的模型也应该有)
结论:
(略)
其他优化赛题飞行管理问题西气东送问题等等
Thank you for your attendance!
最后,祝大家在数学建模活动中不断提高综合素质,
在数学建模竞赛中取得更好的成绩!
That’s all,
Any Questions?
Tel,010-62787812
Email:jxie@math.tsinghua.edu.cn
http://faculty.math.tsinghua.edu.cn/~jxie
提要
LINDO公司的主要软件产品及功能简介
LINDO软件的使用简介
LINGO软件的使用简介
建模与求解实例优化模型实际问题中的优化模型
mixgts
xxxxfzMaxMin
i
T
n
L
L
,2,1,0)(..
),(),()(
1
=≤
==或
g
i
(x)≤0~约束条件
x~决策变量 f(x)~目标函数数学规划线性规划 (LP)
二次规划 (QP)
非线性规划 (NLP)
纯整数规划 (PIP)
混合整数规划 (MIP)
整数规划 (IP)
0-1整数规划一般整数规划连续规划
LINDO 公司软件产品简要介绍美国芝加哥 (Chicago)大学的 Linus Schrage教授于 1980
年前后开发,后来成立 LINDO系统公司( LINDO
Systems Inc.),网址,http://www.lindo.com
LINDO,Linear INteractive and Discrete Optimizer (V6.1)
LINGO,Linear INteractive General Optimizer (V8.0)
LINDO API,LINDO Application Programming Interface (V2.0)
What’s Best!,(SpreadSheet e.g,EXCEL) (V7.0)
演示 (试用 )版、学生版、高级版、超级版、工业版、
扩展版 … (求解 问题规模 和 选件 不同)
LINDO和 LINGO软件能求解的优化模型
LINGO
LINDO
优化模型线性规划
(LP)
非线性规划
(NLP)
二次规划
(QP)
连续优化 整数规划 (IP)
LINDO/LINGO软件的求解过程
LINDO/LINGO预处理程序线性优化求解程序 非线性优化求解程序分枝定界管理程序
LP QP NLP IP 全局优化 (选 )
ILP INLP
IQP
1、确定常数
2、识别类型
1、单纯形算法
2、内点算法 (选 )
1、顺序线性规划法( Sequential
Linear Programming,SLP)
2、广义既约梯度法( Generalized
Reduced Gradient,GRG) (选 )
3、多点搜索( Multistart) (选 )
建模时需要注意的几个基本问题
1,尽量使用实数优化模型,减少整数约束和整数变量的个数
2,尽量使用光滑优化模型,减少非光滑约束的个数如:尽量少地使用绝对值函数( |x|)、符号函数(当变量 x
为正数时取 1,为 0时取 0,为 -1时取 -1)、多个变量求最大(或最小)值、四舍五入函数、取整函数等
3,尽量使用线性优化模型,减少非线性约束和非线性变量的个数 (如 x/y <5 改为 x<5y)
4,合理设定变量的上下界,尽可能给出变量的初始值
5,模型中使用的单位的数量级要适当 (如小于 10
3
)
需要掌握的几个重要方面
1,LINDO:
正确阅读求解报告(尤其要掌握敏感性分析)
2,LINGO:
掌握集合 (SETS)的应用;
正确阅读求解报告;
正确理解求解状态窗口;
学会设置基本的求解选项 (OPTIONS) ;
掌握与外部文件的基本接口方法例 1 加工奶制品的生产计划
1桶牛奶
3公斤 A
1
12小时
8小时
4公斤 A
2
或获利 24元 /公斤获利 16元 /公斤
50桶牛奶 时 间 480小时 至多加工 100公斤 A
1
每天:
制订生产计划,使每天获利最大
35元可买到 1桶牛奶,买吗?若买,每天最多买多少?
可聘用临时工人,付出的工资最多是每小时几元?
A
1
的获利增加到 30元 /公斤,应否改变生产计划?
1桶牛奶
3公斤 A
1
12小时
8小时
4公斤 A
2
或获利 24元 /公斤获利 16元 /公斤至多加工 100公斤 A
1
时间 480小时50桶牛奶每天决策变量
x
1
桶牛奶生产 A
1
x
2
桶牛奶生产 A
2
获利 24× 3x
1
获利 16× 4 x
2目标函数
21
6472 xxzMax +=
每天获利线性规划模型
(LP)
50
21
≤+ xx
原料供应
480812
21
≤+ xx
劳动时间约束条件
1003
1
≤x
加工能力
0,
21
≥xx
非负约束模型求解
max 72x1+64x2
st
2) x1+x2<50
3) 12x1+8x2<480
4) 3x1<100
end
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
DO RANGE
(SENSITIVITY)
ANALYSIS?
No
LINDO 6.1
软件实现Milk01.ltx
20桶牛奶生产 A
1
,30桶生产 A
2
,利润 3360元。
模型求解
reduced cost值表示当该非基变量增加一个单位时
(其他非基变量保持不变)目标函数减少的量 (对
max型问题 )
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
也可理解为:
为了使该非基 变量变成基变量,
目标函数中对 应系数应增加的量结果解释
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
max 72x1+64x2
st
2) x1+x2<50
3) 12x1+8x2<480
4) 3x1<100
end
三种资源原料无剩余时间无剩余加工能力剩余 40
“资源,剩余为零的约束为紧约束(有效约束)
结果解释
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
最优解下,资源,增加 1
单位时,效益,的增量原料增加 1单位,利润增长 48
时间增加 1单位,利润增长 2
加工能力增长不影响利润影子价格
35 <48,应该买!
35元可买到 1桶牛奶,要买吗?
2元!? 聘用临时工人付出的工资最多每小时几元?
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 72.000000 24.000000 8.000000
X2 64.000000 8.000000 16.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 50.000000 10.000000 6.666667
3 480.000000 53.333332 80.000000
4 100.000000 INFINITY 40.000000
最优解不变时目标函数系数允许变化范围
Yes
DO RANGE(SENSITIVITY) ANALYSIS?
x
1
系数范围 (64,96)
x
2
系数范围 (48,72)
A
1
获利增加到 30元 /千克,应否改变生产计划
x
1
系数由 24 ×3=72
增加为 30×3=90,
在允许范围内不变!
(约束条件不变 )
结果解释
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 72.000000 24.000000 8.000000
X2 64.000000 8.000000 16.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 50.000000 10.000000 6.666667
3 480.000000 53.333332 80.000000
4 100.000000 INFINITY 40.000000
影子价格有意义时约束右端的允许变化范围原料最多增加 10
时间最多增加 53
35元可买到 1桶牛奶,每天最多买多少?
最多买 10桶?
(目标函数不变 )
LINDO的一些注意事项 ( 1)
1.,>”(或,<”)号与,>=”(或,<=”)功能相同
2,变量与系数间可有空格 (甚至回车 ),但无运算符
3,变量名以字母开头,不能超过 8个字符
4,变量名不区分大小写(包括 LINDO中的关键字)
5,目标函数所在行是第一行,第二行起为约束条件
6,行号 (行名 )自动产生或人为定义。行名以,),结束
7,行中注有,!”符号的后面部分为注释。如,
! It’s Comment.
8,在模型的任何地方都可以用,TITLE” 对模型命名
(最多 72个字符),如:
TITLE This Model is only an Example
LINDO的一些注意事项 ( 2)
9,变量不能出现在一个约束条件的右端
10,表达式中不接受括号,( )”和逗号,,”等任何符号,例,
400(X1+X2)需写为 400X1+400X2
11,表达式应化简,如 2X1+3X2- 4X1应写成 -2X1+3X2
12,缺省假定所有变量非负;可在模型的,END”语句后用,FREE name”将变量 name的非负假定取消
13,可在,END”后用,SUB” 或,SLB” 设定变量上下界例如:,sub x1 10”的作用等价于,x1<=10”
但用,SUB”和,SLB”表示的上下界约束不计入模型的约束,也不能给出其松紧判断和敏感性分析。
14.,END”后对 0-1变量说明,INT n 或 INT name
15.,END”后对整数变量说明,GIN n 或 GIN name
二次 规划 (QP)问题
LINDO可求解二次规划 (QP)问题,但输入方式较复杂,因为在 LINDO中不许出现非线性表达式
需要为每一个实际约束增加一个对偶变量
( LAGRANGE乘子),在实际约束前增加有关变量的一阶最优条件,转化为互补问题
,END”后面使用 QCP命令指明实际约束开始的行号,然后才能求解
建议总是用 LINGO解 QP
[注意 ]对 QP和 IP,敏感性分析意义不大状态窗口 ( LINDO Solver Status)
当前状态:已经达到最优解
迭代次数,18次
约束不满足的量 (不是,个数,),0
当前的目标值,94
最好的整数解,94
整数规划的界,93.5
分枝数,1
所用时间,0.00秒(太快了,还不到 0.005秒)
刷新本界面的时间间隔,1(秒 )
选项设置
Preprocess:预处理 (生成割平面 );
Preferred Branch:优先的分枝方式:
“Default”(缺省方式)、
“Up”(向上取整优先)、
“Down”(向下取整优先);
IP Optimality Tol,IP最优值允许的误差上限(一个百分数,如 5%即 0.05);
IP Objective Hurdle,IP目标函数的篱笆值,即只寻找比这个值更优最优解(如当知道当前模型的某个整数可行解时,
就可以设置这个值);
IP Var Fixing Tol:固定一个整数变量取值所依据的一个上限(如果一个整数变量的判别数( REDUCED COST)的值很大,超过该上限,则以后求解中把该整数变量固定下来)。
Nonzero Limit:
非零系数的个数上限;
Iteration Limit:
最大迭代步数;
Initial Contraint Tol:
约束的初始误差上限;
Final Contraint Tol:
约束的最后误差上限;
Entering Var Tol:
进基变量的 REDUCED
COST的误差限;
Pivot Size Tol:
旋转元的误差限
Report/Statistics
ROWS= 5 VARS= 4 INTEGER VARS= 2( 0 = 0/1) QCP= 4
NONZEROS= 19 CONSTRAINT NONZ= 12( 6 = +-1) DENSITY=0.760
SMALLEST AND LARGEST ELEMENTS IN ABSOLUTE VALUE= 0.300000 277.000
OBJ=MIN,NO,<,=,>,2 0 2,GUBS <= 1 VUBS >= 0
SINGLE COLS= 0 REDUNDANT COLS= 0
第一行:模型有 5行(约束 4行),4个变量,两个整数变量(没有
0-1变量),从第 4行开始是二次规划的实际约束。
第二行:非零系数 19个,约束中非零系数 12个 (其中 6个为 1或 -1),
模型密度为 0.760(密度 =非零系数 /[行数* (变量数+1 )]) 。
第三行的意思:按绝对值看,系数最小、最大分别为 0.3和 277。
第四行的意思:模型目标为极小化;小于等于、等于、大于等于约束分别有2、0、2个;广义上界约束( GUBS)不超过1个;
变量上界约束( VUBS)不少于0个。所谓 GUBS,是指一组不含有相同变量的约束;所谓 VUBS,是指一个蕴涵变量上界的约束,如从约束 X1+X2-X3=0可以看出,若 X3=0,则 X1=0,X2=0
(因为有非负限制),因此 X1+X2-X3=0是一个 VUBS约束。
第五行的意思:只含1个变量的约束个数 =0个;冗余的列数 =0个
LINDO行命令、命令脚本文件
WINDOWS环境下行命令的意义不大批处理:可以采用命令脚本(行命令序列)
Model01.ltx
Bat01.txt
Example 演示
LINGO模型 — 例:选址问题某公司有 6个建筑工地,位置坐标为 (a
i
,b
i
) (单位:公里 ),
水泥日用量 d
i
(单位:吨)
i
12 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 3547 1
假设,料场和工地之间有直线道路
1)现有 2 料场,位 于 A (5,1),B (2,7),
记 (x
j
,y
j
),j=1,2,日储 量 e
j
各有 20 吨。
目标,制定每天的供应计划,即从 A,B 两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。
用例中数据计算,
最优解为
i
123456
1i
c (料 场 A)
350701
2i
c (料 场 B)
0040610
总吨公里数为总吨公里数为
136.2
2,1,
6,...,1,..
])()[(min
6
1
2
1
2
1
6
1
2/122
=≤
==
+?
∑
∑
∑∑
=
=
==
jec
idcts
byaxc
jij
i
iij
j
ji
ijijij
线性规划模型决策变量,c
ij
(料场 j到工地 i的运量) ~12维选址问题,NLP
2)改建两个新料场,需要确定新料场位置 (x
j
,y
j
)和运量 c
ij
,在其它条件不变下使总吨公里数最小。
2,1,
6,...,1,..
])()[(min
6
1
2
1
2
1
6
1
2/122
=≤
==
+?
∑
∑
∑∑
=
=
==
jec
idcts
byaxc
jij
i
iij
j
ji
ijijij
决策变量:
c
ij,
(x
j
,y
j
)~16维非线性规划模型
LINGO模型的构成,4个段集合段( SETS ENDSETS)
数据段( DATA ENDDATA)
初始段( INIT ENDINIT)
目标与约束段局部最优,89.8835(吨公里 )
LP:移到数据段边界集合的类型集合派生集合 基本集合稀疏集合 稠密集合元素列表法 元素过滤法 直接列举法 隐式列举法
setname [/member_list/]
[,attribute_list];
setname(parent_set_list)
[/member_list/]
[,attribute_list];
SETS:
CITIES /A1,A2,A3,B1,B2/;
ROADS(CITIES,CITIES)/
A1,B1 A1,B2 A2,B1 A3,B2/:D;
ENDSETS
SETS:
STUDENTS /S1..S8/;
PAIRS( STUDENTS,STUDENTS) |
&2 #GT# &1,BENEFIT,MATCH;
ENDSETS
集合元素的隐式列举类型 隐式列举格式 示例 示例集合的元素数字型
1..n 1..5 1,2,3,4,5
字符 -
数字型
stringM..stringN Car101..car208 Car101,car102,…,
car208
星期型
dayM..dayN MON..FRI MON,TUE,WED,
THU,FRI
月份型
monthM..monthN OCT..JAN OCT,NOV,DEC,
JAN
年份 -
月份型
monthYearM..mo
nthYearN
OCT2001..JAN
2002
OCT2001,
NOV2001,
DEC2001,
JAN2002
运算符的优先级三类运算符:
算术运算符 逻辑运算符 关系运算符优先级 运算符最高 #NOT# —(负号)
^
* /
+ —(减法)
#EQ# #NE# #GT# #GE# #LT# #LE#
#AND# #OR#
最低 <(=) = >(=)
集合循环函数四个集合循环函数,FOR,SUM,MAX,MIN
@function( setname [ ( set_index_list)[ | condition]],expression_list);
Example:
[objective] MAX = @SUM( PAIRS( I,J),BENEFIT( I,J) * MATCH( I,J));
@FOR(STUDENTS( I),[constraints]
@SUM( PAIRS( J,K) | J #EQ# I #OR# K #EQ# I,MATCH( J,K)) =1);
@FOR(PAIRS( I,J),@BIN( MATCH( I,J)));
MAXB=@MAX(PAIRS( I,J),BENEFIT( I,J));
MINB=@MIN(PAIRS( I,J),BENEFIT( I,J));
状态窗口
Solver Type:
B-and-B
Global
Multistart
Model Class:
LP,QP,
ILP,IQP,
PILP,PIQP,
NLP,INLP,
PINLP
State:
Global Optimum
Local Optimum
Feasible
Infeasible
Unbounded
Interrupted
Undetermined
7个选项卡(可设置80-90个控制参数)
程序与数据分离文本文件使用外部数据文件
Cut (or Copy) – Paste 方法
@FILE 函数输入数据,@TEXT函数输出数据(文本文件)
@OLE函数与电子表格软件(如 EXCEL)连接
@ODBC函数与数据库连接
LINGO命令脚本文件
LG4 ( LONGO模型文件)
LNG ( LONGO模型文件)
LTF ( LONGO脚本文件)
LDT ( LONGO数据文件)
LRP ( LONGO报告文件)
常用文件后缀
@FILE和@TEXT:文本文件输入输出
MODEL:
SETS:
MYSET / @FILE(‘myfile.txt’) /,
@FILE(‘myfile.txt’);
ENDSETS
MIN = @SUM( MYSET( I):
SHIP( I) * COST( I));
@FOR( MYSET( I),
[CON1] SHIP( I) > NEED( I);
[CON2] SHIP( I) < SUPPLY( I));
DATA:
COST = @FILE(‘myfile.txt’);
NEED = @FILE(‘myfile.txt’);
SUPPLY = @FILE(‘myfile.txt’);
@TEXT(‘result.txt’)=SHIP,
@DUAL(SHIP),@DUAL(CON1);
ENDDATA
END
myfile.txt文件的内容、格式:
Seattle,Detroit,Chicago,Denver~
COST,NEED,SUPPLY,SHIP~
12,28,15,20~
1600,1800,1200,1000~
1700,1900,1300,1100
@OLE,与EXCEL连接
MODEL:
SETS:
MYSET / @OLE(‘mydata.xls’,’CITIES’) /,@OLE(‘mydata.xls’,‘ATTR’);
ENDSETS
MIN = @SUM( MYSET( I),SHIP( I) * COST( I));
@FOR( MYSET( I),
[CON1] SHIP( I) > NEED( I);
[CON2] SHIP( I) < SUPPLY( I));
DATA:
COST,NEED,SUPPLY = @OLE(‘mydata.xls’);
@(‘mydata.xls’,’SOLUTION’)=SHIP;
ENDDATA
END
mydata.xls文件中必须有下列名称 (及数据 ):
CITIES,ATTR,
COST,NEED,
SUPPLY,SOLUTION
在 EXCEL中还可以通过,宏,自动调用 LINGO
也可以将 EXCEL表格嵌入到 LINGO模型中
@ODBC,与数据库连接目前支持下列 DBMS,(如为其他数据库,则需自行安装驱动 )
ACCESS,DBASE,EXCEL,FOXPRO,ORACLE,
PARADOX,SQL SERVER,TEXE FILES
使用数据库之前,数据源需要在 ODBC管理器注册输入基本集合元素:
setname/@ODBC([‘datasource’ [,‘tablename’ [,‘columnname’]]])/
输入派生集合元素:
setname/@ODBC([‘source’[,‘table’ [,‘column1’[,‘column2’…]]]])/
输入数据:
Attr_list=@ODBC([‘source’[,‘table’ [,‘column1’[,‘column2’…]]]])
输出数据:
@ODBC([‘source’[,‘table’ [,‘column1’[,‘column2’…]]]])= Attr_list
建模例子
(CUMCM-2003B)
露天矿生产的车辆安排露天矿里铲位已分成矿石和岩石,平均铁含量不低于
25%的为矿石,否则为岩石。每个铲位的矿石、岩石数量,以及矿石的平均铁含量(称为品位)都是已知的。
每个铲位至多安置一台电铲,电铲平均装车时间 5分钟矿石卸点需要的铁含量要求都为 29.5%!1%(品位限制),搭配量在一个班次( 8小时)内满足品位限制即可。卸点在一个班次内不变。卡车载重量为 154吨,平均时速 28km,平均卸车时间为 3分钟。
卡车在等待时所耗费的能量也是相当可观的,原则上在安排时 不应发生卡车等待 的情况。
问题:出动几台电铲,分别在哪些铲位上;出动几辆卡车,分别在哪些路线上各运输多少次?
平面示意图问题数据距离 铲位1 铲位 2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位 8 铲位9 铲位10
矿石漏
5.26 5.19 4.21 4.00 2.95 2.74 2.46 1.90 0.64 1.27
倒装Ⅰ
1.90 0.99 1.90 1.13 1.27 2.25 1.48 2.04 3.09 3.51
岩场
5.89 5.61 5.61 4.56 3.51 3.65 2.46 2.46 1.06 0.57
岩石漏
0.64 1.76 1.27 1.83 2.74 2.60 4.21 3.72 5.05 6.10
倒装Ⅱ
4.42 3.86 3.72 3.16 2.25 2.81 0.78 1.62 1.27 0.50
铲位1 铲位2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位 8 铲位9 铲位10
矿石量
0,95 1,05 1,00 1,05 1,10 1,25 1,05 1,30 1,35 1,25
岩石量
1,25 1,10 1,35 1,05 1,15 1,35 1,05 1,15 1,35 1,25
铁含量
30% 28% 29% 32% 31% 33% 32% 31% 33% 31%
问题分析与典型的运输问题明显有以下不同:
1,这是运输矿石与岩石两种物资的问题;
2,属于产量大于销量的不平衡运输问题;
3,为了完成品位约束,矿石要搭配运输;
4,产地、销地均有单位时间的流量限制;
5,运输车辆只有一种,每次满载运输,154吨 /车次;
6,铲位数多于铲车数意味着要最优的选择不多于 7个产地作为最后结果中的产地;
7,最后求出各条路线上的派出车辆数及安排。
近似处理:
先求出产位、卸点每条线路上的运输量 (MIP模型 )
然后求出各条路线上的派出车辆数及安排模型假设
卡车在一个班次中不应发生等待或熄火后再启动的情况;
在铲位或卸点处由两条路线以上造成的冲突问题面前,我们认为只要平均时间能完成任务,就认为不冲突。我们不排时地进行讨论;
空载与重载的速度都是 28km/h,耗油相差很大;
卡车可提前退出系统,等等。
如理解为严格不等待,难以用数学规划模型来解个别参数队找到了可行解 (略)
符号
x
ij
:从 i铲位到 j号卸点的石料运量 (车) 单位,吨;
c
ij
:从 i号铲位到 j号卸点的距离 公里;
T
ij
:从 i号铲位到号 j卸点路线上运行一个周期平均时间 分;
A
ij
:从号铲位到号卸点最多能同时运行的卡车数 辆;
B
ij
:从号铲位到号卸点路线上一辆车最多可运行的次数 次;
p
i
,i号铲位的矿石铁含量 p=(30,28,29,32,31,33,32,31,33,31) %
q
j
,j号卸点任务需求,q=(1.2,1.3,1.3,1.9,1.3)*10000 吨
ck
i
,i号铲位的铁矿石储量 万吨
cy
i
,i号铲位的岩石储量 万吨
f
i
:描述第 i号铲位是否使用的 0-1变量,取 1为使用; 0为关闭。
53
2
++
平均速度距离到 ×
=
ji
T
ij?
=
5
ij
ij
T
A
×?×
=
ij
ij
ij
T
A
B
5)1(608 -
(近似 )
优化模型
cx
ij
ij
ij
×
∑∑
==
10
1
5
1
min
5,,1,10,,1,LL==×≤ ji
BAx ijij
ij
10,,1,5/608
5
1
L=××≤
∑
=
i
f
x
i
j
ij
5,,1,208
10
1
L=×≤
∑
=
j
i
ij
x
10,,1,
154/10000
154/10000
43
521
L=
×≤+
×≤++
i
cy
xx
ckxxx
i
ii
iiii
( 1) 道路能力 (卡车数 )约束
( 2)电铲能力约束
( 3)卸点能力约束
( 4)铲位储量约束
( 5)产量任务约束
( 6)铁含量约束
( 7)电铲数量约束
( 8)整数约束
5,,1,154/
10
1
L=≥
∑
=
j
q
x
j
i
ij
5,2,1,
0)5.28(
0)5.30(
10
1
10
1
=
≥?×
≤?×
∑
∑
=
=
j
p
x
p
x
i
i
ij
i
i
ij
.
7
10
1
≤
∑
=i
i
f
x
ij
为非负整数
f
i
为 0-1整数计算结果( LINGO软件)
铲位1 铲位2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位8 铲位9 铲位10
矿漏 13 54 11
倒Ⅰ 42 43
岩场 70 15
岩漏 81 43
倒Ⅱ 13 2 70
铲位1 铲位2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位8 铲位9 铲位 10
矿石漏
0.867 1.862 0.314
倒场Ⅰ
1.077 1.162
岩场
1.892 0.326
岩石漏
1.841 1.229
倒场Ⅱ
0.684 0.1 1.489
计算结果(派车)
铲位1 铲位2 铲位3 铲位4 铲位5 铲位6 铲位7 铲位8 铲位9 铲位 10
矿石漏
1 (29)
倒场Ⅰ
1 (39) 1 (37)
岩场
1 (37)
岩石漏
1(44) 1 (35)
倒场Ⅱ
1 (47)
此外,6辆联合派车(方案略)
结论:
铲位 1,2,3,4,8,9,10处各放置一台电铲。
一共使用了 13辆卡车;总运量为 85628.62吨公里;
岩石产量为 32186吨;矿石产量为 38192吨。
最大化产量目标函数变化此外:车辆数量( 20辆)限制(其实上面的模型也应该有)
结论:
(略)
其他优化赛题飞行管理问题西气东送问题等等
Thank you for your attendance!
最后,祝大家在数学建模活动中不断提高综合素质,
在数学建模竞赛中取得更好的成绩!
That’s all,
Any Questions?