优化 | 线性化:0-1变量乘以连续变量的线性化
优化 | 线性化:0-1变量乘以连续变量的线性化
- 非线性整数规划模型
- Gurobi求解代码
- 线性化
- 总结
作者:刘兴禄, 清华大学
清华-伯克利深圳学院,博士在读
欢迎关注我们的微信公众号 运小筹
非线性整数规划模型
考虑下面的非线性整数规划
max3y+xzs.t.2y+3z⩽12x+y⩽1x,y,∈{0,1},0⩽z⩽100\begin{aligned} \max \quad \,\,\,& 3y + xz \\ s.t. \quad \,\,\,& 2y + 3z \leqslant 12 \\ & x + y \leqslant 1 \\ & x, y, \in \{0, 1\}, 0 \leqslant z \leqslant 100 \end{aligned} maxs.t.3y+xz2y+3z⩽12x+y⩽1x,y,∈{0,1},0⩽z⩽100
Gurobi求解代码
from gurobipy import *
model = Model('non-linear model')
x = model.addVar(lb=0, ub=1, vtype=GRB.BINARY, name='x')
y = model.addVar(lb=0, ub=1, vtype=GRB.BINARY, name='y')
z = model.addVar(lb=0, ub=100, vtype=GRB.CONTINUOUS, name='z') model.setObjective(3 * y + x*z, GRB.MAXIMIZE)
model.addConstr(2 * y + 3*z <= 12)
model.addConstr(x + y <= 1) model.optimize() print('x:', x.x)
print('y:', y.x)
print('z:', z.x)
求解结果
Optimal solution found (tolerance 1.00e-04)
Best objective 4.000000000000e+00, best bound 4.000000000000e+00, gap 0.0000%
x: 1.0
y: 0.0
z: 4.0
线性化
- 令 w=xzw=xzw=xz,且w∈[0,U]w\in [0, U]w∈[0,U]
- 引入下面的辅助约束
w⩽Uxw⩽zw⩾z−U(1−x)\begin{aligned} &w \leqslant Ux \\ &w \leqslant z \\ &w \geqslant z - U(1-x) \end{aligned} w⩽Uxw⩽zw⩾z−U(1−x)
原模型等价为
max3y+xzs.t.2y+3z⩽12x+y⩽1w⩽Uxw⩽zw⩾z−U(1−x)x,y,∈{0,1},0⩽z,w⩽U\begin{aligned} \max \quad \,\,\,& 3y + xz \\ s.t. \quad \,\,\,& 2y + 3z \leqslant 12 \\ & x + y \leqslant 1 \\ &w \leqslant Ux \\ &w \leqslant z \\ &w \geqslant z - U(1-x) \\ & x, y, \in \{0, 1\}, 0 \leqslant z, w \leqslant U \end{aligned} maxs.t.3y+xz2y+3z⩽12x+y⩽1w⩽Uxw⩽zw⩾z−U(1−x)x,y,∈{0,1},0⩽z,w⩽U
具体推导见视频详解。
令
w=xz\begin{aligned} w=xz \end{aligned} w=xz
我们分为下面几种情况讨论:
- 情况1
ifx=0,thenw=0\text{if}\,\,x=0 , \text{then}\,\,w=0ifx=0,thenw=0, 容易得到w−Mx⩽0w-Mx\leqslant 0w−Mx⩽0, 整理得w⩽Mxw\leqslant Mxw⩽Mx,这里MMM是www的一个上界即可,我们取最紧的上界,即M=UM=UM=U。因此该式化简为
w⩽Ux\begin{aligned} &w\leqslant Ux \end{aligned} w⩽Ux
另外,我们易得
w⩽z\begin{aligned} &w\leqslant z \end{aligned} w⩽z
- 情况2
ifx=1,thenw=z\text{if}\,\,x=1, \text{then}\,\,w= zifx=1,thenw=z, 由于逻辑约束不能写等号,因此我们将===分成2个。
(1) ifx=1,thenw⩾z\text{if}\,\,x=1, \text{then}\,\,w\geqslant zifx=1,thenw⩾z, 此时if1−x=0,thenz−w⩽0\text{if}\,\,1-x=0, \text{then}\,\,z-w\leqslant 0if1−x=0,thenz−w⩽0, 也就是z−w−M(1−x)⩽0z-w-M\left( 1-x \right) \leqslant 0z−w−M(1−x)⩽0, 进而得到
w⩾z−M(1−x)\begin{aligned} &w\geqslant z-M\left( 1-x \right) \end{aligned} w⩾z−M(1−x)
这里仍然取M=UM=UM=U。
(2) ifx=1,thenw⩽z\text{if}\,\,x=1, \text{then}\,\,w\leqslant zifx=1,thenw⩽z, 此时if1−x=0,thenw−z⩽0\text{if}\,\,1-x=0, \text{then}\,\,w-z\leqslant 0if1−x=0,thenw−z⩽0, 也就是w−z−M(1−x)⩽0w-z-M\left( 1-x \right) \leqslant 0w−z−M(1−x)⩽0, 进而得到
w⩽z+M(1−x)\begin{aligned} &w\leqslant z + M\left( 1-x \right) \end{aligned} w⩽z+M(1−x)
这里仍然取M=UM=UM=U。
这样,ifx=1,thenw⩾z\text{if}\,\,x=1, \text{then}\,\,w\geqslant zifx=1,thenw⩾z
并且, ifx=1,thenw⩽z\text{if}\,\,x=1, \text{then}\,\,w\leqslant zifx=1,thenw⩽z
同时约束,就得到了ifx=1,thenw=z\text{if}\,\,x=1, \text{then}\,\,w = zifx=1,thenw=z.
但是其实,ifx=1,thenw⩽z\text{if}\,\,x=1, \text{then}\,\,w\leqslant zifx=1,thenw⩽z是不需要的,因为前面已经有了
w⩽zw\leqslant zw⩽z的约束,因此,约束
w⩽z+M(1−x)\begin{aligned} &w\leqslant z + M\left( 1-x \right) \end{aligned} w⩽z+M(1−x)
可以被约束w⩽zw \leqslant zw⩽z给dominate掉,也就是说,w⩽z+M(1−x)w\leqslant z + M\left( 1-x \right)w⩽z+M(1−x)是冗余的。
下面我们用代码进行验证。
from gurobipy import *
model = Model('non-linear model')
x = model.addVar(lb=0, ub=1, vtype=GRB.BINARY, name='x')
y = model.addVar(lb=0, ub=1, vtype=GRB.BINARY, name='y')
z = model.addVar(lb=0, ub=100, vtype=GRB.CONTINUOUS, name='z')
w = model.addVar(lb=0, ub=100, vtype=GRB.CONTINUOUS, name='w') model.setObjective(3 * y + w, GRB.MAXIMIZE)
model.addConstr(2 * y + 3*z <= 12)
model.addConstr(x + y <= 1)
model.addConstr(w <= 100 * x)
model.addConstr(w <= z)
model.addConstr(w >= z - 100 * (1 - x))
# model.addConstr(w <= z + 100 * (1 - x))
model.optimize() print('x:', x.x)
print('y:', y.x)
print('z:', z.x)
print('w:', w.x)
求解结果为
Optimal solution found (tolerance 1.00e-04)
Best objective 4.000000000000e+00, best bound 4.000000000000e+00, gap 0.0000%
x: 1.0
y: 0.0
z: 4.0
w: 4.0
可见结果是一致的。
总结
一个0-1变量xxx和一个连续变量zzz相乘,0⩽z⩽U0\leqslant z \leqslant U0⩽z⩽U,则可以用下面3个约束以及一个辅助变量等价线性化。
- 引入辅助变量w=xzw=xzw=xz, 且w∈[0,U]w \in [0, U]w∈[0,U].
- 加入下面的3个约束
w⩽Uxw⩽zw⩾z−U(1−x)\begin{aligned} &w \leqslant Ux \\ &w \leqslant z \\ &w \geqslant z - U(1-x) \end{aligned} w⩽Uxw⩽zw⩾z−U(1−x)
欢迎关注我们的微信公众号 运小筹
公众号往期推文如下
优化 | 线性化:0-1变量乘以连续变量的线性化相关推荐
- UA SIE545 优化理论基础0 优化建模7 二值变量的应用
UA SIE545 优化理论基础0 优化建模7 二值变量的应用 包含决策变量的绝对值的约束 包含决策变量的最值的约束 包含决策变量的任意分位点的约束 应用:Least Median Squared E ...
- UA SIE545 优化理论基础0 优化建模3 线性回归的参数估计问题
UA SIE545 优化理论基础0 优化建模3 线性回归的参数估计问题 OLS Least Absolute Deviation (LAD) Least Max Deviation (LMD) Lea ...
- UA SIE545 优化理论基础0 优化建模1 优化问题的基本形式
UA SIE545 优化理论基础0 优化建模1 优化问题的基本形式 优化问题的基本形式 确定性优化问题 随机优化问题 Stochastic Programming(SP) Robust Optimiz ...
- 如何用python进行相关性分析_使用 Python 查找分类变量和连续变量之间的相关性...
在表格数据集上创建任何机器学习模型之前, 通常我们会检查独立变量和目标变量之间是否存在关系.这可以通过测量两个变量之间的相关性来实现.在 python 中, pandas 提供了一个函数 datafr ...
- UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计
UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计 我们的目标是设计一种罐头,这种罐头产品按件出售,一件12个罐头,按3行一行四个的形式排列,同时有以下信息: V0V_0V0:罐头的最小 ...
- 第二十五章补充内容 5 不能为0的变量
// 第二十五章补充内容 5 不能为0的变量 /*#define DEBUG #include <iostream> #include <string> using names ...
- 多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)
在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了.配合Object的wait().notify()系列方法可以实现等待/通知模式.Condition接口 ...
- 广义线性回归模型之0,1变量回归(logit/probit回归)—R语言实现
1.广义线性回归 广义线性模型有三个组成部分: (1) 随机部分, 即变量所属的指数族分布 族成员, 诸如正态分布, 二项分布, Poisson 分布等等. (2) 线性部分, 即 η = x⊤β. ...
- 威雅[ViYa]QQ优化工具0.64
威雅[ViYa]QQ优化工具0.64支持简繁英所有版本[01-14更新] 免责声明: 首先使用此工具前,请您确保已经认真详细阅读过腾讯公司和QQ软件以及其他类似软件相关许可协议.使用此工具是您的自愿选 ...
- 旅行商的背包(二进制优化多重+0/1背包枚举体积))
旅行商的背包(二进制优化多重+0/1背包枚举体积)) 题目描述 小 S 坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有 n n n 种, ...
最新文章
- c++ 解析从浏览器端传过来的图像base64编码,并转换成opencv识别的格式
- JavaScript中的作用域、作用域链、预解析
- 割线法求解过程_求解稀疏优化问题2——临近点方法+半光滑牛顿法
- iOS-深复制(mutableCopy)与浅复制(copy)
- java并发包源码分析
- python 定时任务 web管理_Selenium+WebDriver+Python 定时控制任务
- jQuery实现下拉菜单[代码+详细讲解+效果图]
- a股用计算机模拟走势,一张图揭示抄底A股的机会在这里
- 将不同数据来源的ggplot图绘制到同一张图中,并添加统一的图例
- Python运算符优先级与结合性
- centos7安装大数据平台
- LIN总线协议详解10(LIN的API)
- 下一代共识机制探究——基于DAG的BFT共识
- 三十八、Fluent融化凝固模型参数设置依据
- mysql 笛卡尔积影响_SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积
- scrapy创建项目详解---HtmlXPathSelector
- 计算机排版比赛,Word排版大赛 敲响IT精英最强音
- 【FFH】为什么JSON将逐渐取代XML?
- 【大唐杯学习超快速入门】5G技术原理仿真教学——5G物理层过程
- EXSI-NFS实验