目 录
3.1、整数规划(Integer Programming,简记IP)
2、优化(Optimization),规划(Programming)
4.3 整数规划(4.3 汽车生产与原油采购)(例1 汽车厂生产计划)
4.1 数学规划介绍
数学规划:线性规划、非线性规划、连续规划、整部规划、动态规划...
数学规划:线性规划【整数线性规划(全整数线性规划、部分整数线性规划)、0-1规划】、非线性规划
1、数学规划模型的定义
目标函数:z=f(x) x:n维列向量 x1、x2...xn:决策变量
gi(x) ≤ 0 :约束条件
2、数学规划模型
需要对模型进行计算、分析
2.1、企业生产计划
空间层次
工厂级:根据外部需求和内部设备、人力、原料等条件,以最大利润为目标制订产品生产计划;
车间级:根据生产计划、工艺流程、资源约束及费用参数等,以最小成本为目标制订生产批量计划.
时间层次
若短时间内外部需求和内部资源等不随时间变化,可制订单阶段生产计划,否则应制订多阶段生产计划.
非线性规划问题:无约束 二分法、牛顿迭代法、计数向量法
针对不同的问题,要采用不同的方法。
3、例1 加工奶制品的生产计划
灵敏度分析
影子价格(shadow price),又称 最优计划价格 或 计算价格。它是指依据一定原则确定的,能够反映投入物和产出物真实经济价值、反映市场供求状况、反映资源稀缺程度、使资源得到合理配置的价格。影子价格反映了社会经济处于某种最优状态下的资源稀缺程度和对最终产品的需求情况,有利于资源的最优配置。
Lingo:默认所有变量 ≥ 0;如果变量取负,需要声明【 @free(变量) 】
3.1、整数规划(Integer Programming,简记IP)
整数线性规划问题
@gin(x1):@指向,x1取整数。
Lingo:<、≤ 作用相同!
280*x1:称号* 不能省略,省略的话 280x1 -> 变量名。
4、0-1规划模型 选课策略
0-1规划模型:对 问题决策、选择,有着很大的作用。
3个 约束条件 !!!
选修3号课程的前提是:已学1号、2号课程。
∴ x3 ≤ x1,x3 ≤ x2 两式相加,2*x3 ≤ x1 + x2
移项得:2*x3 - x1 - x2 ≤ 0
与此类似:x4 ≤ x7,x4 - x7 ≤ 0
...
得到 6个 约束条件。
一共9个约束条件。拉格朗日法求解,较为麻烦 --> Lingo @gin(x1...x9):x1...x9取整数
5、非线性规划模型
5.1、非线性规划
只要 目标函数、约束条件,有一个是非线性的,这个问题 就是 非线性规划。
xj 取 0:表示不投资这个项目。
xj 取 1:表示 投资这个项目。
5.2、基本概念
L:下界; U:上界
f(x)、g(x)、h(x) 只要有一个是非线性的,问题就是一个非线性规划问题。
非线性规划问题:有一部分,可以用Lingo求解。
非线性规划问题:无约束(没有条件限制)、约束 两种。
无约束:决策变量无条件限制 x∈
对于无约束问题的求解方法:一般构造 迭代数列。编写迭代程序,求f(x)最小值。
牛顿迭代法(常用)、最速下降法 一般是这俩方法结合使用,各有优点、缺点。
最速下降法:当不知道最优解在什么情况下时,随便找一个初始解,从此解出发 用最速下降法迭代...最后,靠近f(x)最小值点的速度越来越慢,并且永远达不到。--> 改用 牛顿迭代法:当初始值充分靠近x*(f(x)最小值点)附近时,迭代点收敛到x*的速度较快。
最速下降法:当初始值离最优解x*较远的时候,下降速度(收敛速度)很快,一旦靠近x*收敛速度就会变慢。
两法结合使用 --> f(x)最小值最优解x*。
二次规划
min:目标函数; X、c:n维列向量; H:矩阵;
5.3、算法概述
5.4、MATLAB软件求解
4.2 奶制品的生产和销售
1、优化模型和优化软件的重要意义
2、优化(Optimization),规划(Programming)
3、优化问题的一般形式
f(x):目标函数 目的:求最小值min
4、无约束优化:最优解的分类和条件
5、LINGO需要掌握的几个重要方面
- 掌握集合(SETS)的应用;
- 正确阅读求解报告(尤其要掌握敏感性分析);
- 正确理解求解状态窗口;
- 学会设置基本的求解选项(OPTIONS);
- 掌握与外部文件的基本接口方法。
6、例1 加工奶制品的生产计划
6.1、模型求解
Lingo:默认变量非负数。
48.000000:原料每增加一桶牛奶,目标函数值(总利润)增加48元。 48-35=13,获利13元
2.000000:每增加一个工时,利润增加2元。
可以用 Lingo 进行 模型求解
Lingo:<、<= 含义相同;默认所有变量都是 非负变量;@free(x1); 声明变量x1可以取负值。
! :注释作用。
6.2、结果解释
Lingo分析:默认关闭。
开启 Lingo数据分析
结果解释
x1:当前系数72,最大可增加24,最小可减少8
x1在区间 [72-8, 72+24] 变化,最优解不变。
7、LINGO模型的构成:5个段
- 目标与约束段
- 集合段(SETS ENDSETS)
- 数据段(DATA ENDDATA)
- 初始段(INIT ENDINIT)
- 计算段(CALC ENDCALC)
目标:目标函数; 约束段:约束条件
集合段:所用到的变量的下标
数据段:所用到的变量(向量、矩阵...)的值
初始段:Lingo求解线性规划模型,是一个迭代过程,需要初值,设定初始值。
计算段:计算。
实际遇到的问题,规模较大,要掌握Lingo集合。使用原始方法,将模型数据输入,明显不太现实。
Lingo可以求解非线性规划模型。
8、例1:选址问题
吨公里数:运送的水泥量*运送距离。
目标函数(总的顿公里数)min:统计和【Cij(运量) * 距离】
水泥日用量:di 需求量约束 从两个料场运往工地的水泥总数(cij) 要 满足 工地需求量(di) 6个工地
运送水泥量(cij) < 水泥存储量(ej)
sets:集合 endsets 集合结尾 data: 数据 用“ ”或“,”分隔数据 enddata: 结束输入数据
demand集合名称;1...6:六维向量;a、b、d:都是六维向量
supply/1..2/:x,y,e; supply是二维列向量集合, x、y:两个料场的横纵坐标构成的列向量
link(demand, supply):c; 联合集合 矩阵集合 link:六行两列矩阵 c属于此集合
a:六个工地的横坐标 系数矩阵
b:六个工地的纵坐标
d:六个工地的水泥需求量
e:日存储量
x、y:料场的横纵坐标
x=5,1; 两个料厂的横坐标构成的向量
y=2,7; 两个料厂的横坐标构成的向量
目标函数@sum(link(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2)); @sum:Σ(求和) i属于demand(1~6),j属于supply(1~2)
link(i,j) i属于demand(6个分量),j属于supply(2个分量),c(i, j):从j料场到i工地的水泥运量
(x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2):料场到工地的距离
@for():约束条件 demand(i):对任意的i(1~6)
选址问题:NLP
cij:料场j到工地i的运量
总的吨公里数:料场j到工地i的运量 * 料场j到工地i的距离
两个料场的位置:(x1, y1)、(x2, y2)
xj、yj 是 变量
给x、y初始值赋值:迭代法,初始值合适的话,可以减少迭代次数,容易找到迭代次数。 init: endinit 之间
目标函数@sum(link(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2)); @sum:Σ(求和) i属于demand(1~6),j属于supply(1~2)
(x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2):料场到工地的距离
@for():约束条件 demand(i):对任意的i(1~6)
![]()
![]()
x、y是位置,可正可负,取消非负要求 @free()
料场A:(5.75,5.00) 料场B:(7.25,7.75)
C(1, 1)~C(6, 2):运输量
横纵坐标,都取整。
Lingo模型的集合求解
6发点8收点运输模型
4.3 整数规划(4.3 汽车生产与原油采购)(例1 汽车厂生产计划)
整数规划:整数线性规划、整数非线性规划
问题1:制定月生产计划,使工厂的利润最大.
1、模型建立
线性规划模型
x1、x2、x3 取 整数 ---> @gin(x1...x9):x1...x9取整数
2、模型求解
问题2:生产某类汽车,至少生产80辆,求生产计划.
方法1:分解为8个LP子模型
不考虑 “不满足条件的子模型” 。
方法2:引入0-1变量,化为整数规划
引入非常大的正数M y1=1时,表示 生产这种车。
y1 = 0:x1 ≤ 0 ,x1 ≥ 0
y1 = 1:x1 ≤ M,x1 ≥ 80
@bin(); 设定0-1变量
方法3:化为非线性规划
x1 =0 或 ≥80 等价于 x1 (x1 − 80) ≥ 0
汽车厂生产计划---分析总结
汽车厂生产计划
- 决策变量为整数,建立整数规划模型.
- 求解整数规划和非线性规划比线性规划困难得多(即便用数学软件).
- 当整数变量取值很大时, 可作为连续变量处理,问题简化为线性规划.
- 对于类似于“x=0 或 ≥80”这样的条件,通常引入0-1变量处理,尽量不用非线性规划(特别是引入的整数变量个数较少时).
4.4 0-1规划
选课策略
0-1规划模型:对 问题决策、选择(策略选择问题),有着很大的作用。
3个 约束条件 !!!
选修3号课程的前提是:已学1号、2号课程。
∴ x3 ≤ x1,x3 ≤ x2 两式相加,2*x3 ≤ x1 + x2
移项得:2*x3 - x1 - x2 ≤ 0
与此类似:x4 ≤ x7,x4 - x7 ≤ 0
...
得到 6个 约束条件。
一共9个约束条件。拉格朗日法求解,较为麻烦 --> Lingo @gin(x1...x9):x1...x9取整数
@bin(); 设定0-1变量
目标:Z尽量小,W尽量大。即,求 min{Z, -W}
Lingo不能给出问题 所有的最优解,只给一个!!!
加权法:侧重xxx λ1 + λ2 = 1 多目标问题,转化为单目标问题。
- x1 ≤ x2
- x1=1,x2=0
- (x1=1,x2=0 or x1=0,x2=1)x1*x2=0
- x1≥0,x2≥0
销售代理的开发与中断
问题1的建模
0-1规划问题 Σx1t:t(1~5)1~5年
7.5(5*x11 + 4*x12 + 3*x13 + 2*x14 + x15):从第x年,开始建立代理关系。
问题1的求解
代理关系,一旦建立,将长期保持。∴从1~5年建立代理关系后,关系将一直保持到第5年。
i=1~4,分别代表 4位代理;t=1~5,分别 第1~5年。
问题2的建模
问题2的求解
4.5 非线性规划
引例 组合投资
R(X):利润; Q(X):风险
x1~x8:8个项目,只能选一个进行投资。(0-1变量)
- 模型1:将 风险 固定到 某个范围内。
- 模型2:收益大于某个值的情况下,最小化风险。
- 加权平均:ρ小,偏向于增加利润;ρ大,偏向于降低风险。ρ *
或者 R(X),要根据情况选择。
引例 投资选择问题
基本概念
L≤x≤U,决策变量的上界、下界
算法概述
约束非线性规划算法
- 可行方向法;
- 罚函数法;
- 梯度投影法;
- 逐步二次规划法(SQP)
(Sequential Quadratic Programming)
MATLAB软件中主要采用SQP算法。
MATLAB软件求解
fminsearch:寻找无约束规划问题的最小值。一般是,多元函数求最小值。也可求,最大值。
fminunc 无约束非线性最优化 常用
1.函数fminunc、 fminsearch的具体用法
unc:无约束 Unconstrained
求 F(X)最小值,Min F(X)
建立fun.m文件后,将F(X)表达式写到文件中。
[X, fval] :(X)最优解、(fval)最优解对应的最优值
'fun' 或者 @fun
x0:(迭代初始值)设定的初始值
options:设置
先新建fun1.m文件。
x是向量,x向量有2个分量 x(1)、x(2)
误差:1e-10:10^-10
iter:迭代
找两个不同的初始值,进行迭代,结果不一样,说明:此问题对初始值敏感。
选不同的初始值进行比较,看解集中到哪个点上,此点可能就是最优解。
局部性 尽量选择接近最优解的点,否则可能会迭代失败。
2.函数fmincon的具体用法
lb ≤ X ≤ ub lb、ub:决策变量的上界、下界
[x,fval]= fminunc('fun1',x0, options), x:最优解;fval:最优解对应的最优值
x0:迭代初始值 A:所有的不等式线性约束的系数构成的矩阵 b:不等式约束的右端向量
Aeq:所有的线性等式约束的变量前的系数构成的矩阵 beq:等式约束的右端向量
@con:调用con.m文件,记录了模型中所有的不等式约束、等式约束。非线性约束
① fun.m文件:目标函数的表达式文件
② function [c,ceq]= nonlcon(x) c:非线性不等式约束表达式(函数体) ceq:非线性等式约束表达式
非线性不等式约束 写成 标准形式 -> “等式 ≤ 0”的形式
c=G1(x); 有若干个(≥2)非线性不等式约束,使用[]括起来,中间用“,”分开。
没有等式约束:ceq用空“[]”来表示。
f = -x(1)*x(2); 求Max f(x) = x1*x2, fmincon用来求最小值, 给f加负号,可求最大值Max。
x0=[10 10 2]'; ':转置,列向量