优化 | 线性化:0-1变量乘以连续变量的线性化

    • 非线性整数规划模型
      • Gurobi求解代码
    • 线性化
  • 总结

作者:刘兴禄, 清华大学

清华-伯克利深圳学院,博士在读

欢迎关注我们的微信公众号 运小筹

非线性整数规划模型

考虑下面的非线性整数规划

max⁡3y+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)​

原模型等价为

max⁡3y+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变量乘以连续变量的线性化相关推荐

  1. UA SIE545 优化理论基础0 优化建模7 二值变量的应用

    UA SIE545 优化理论基础0 优化建模7 二值变量的应用 包含决策变量的绝对值的约束 包含决策变量的最值的约束 包含决策变量的任意分位点的约束 应用:Least Median Squared E ...

  2. UA SIE545 优化理论基础0 优化建模3 线性回归的参数估计问题

    UA SIE545 优化理论基础0 优化建模3 线性回归的参数估计问题 OLS Least Absolute Deviation (LAD) Least Max Deviation (LMD) Lea ...

  3. UA SIE545 优化理论基础0 优化建模1 优化问题的基本形式

    UA SIE545 优化理论基础0 优化建模1 优化问题的基本形式 优化问题的基本形式 确定性优化问题 随机优化问题 Stochastic Programming(SP) Robust Optimiz ...

  4. 如何用python进行相关性分析_使用 Python 查找分类变量和连续变量之间的相关性...

    在表格数据集上创建任何机器学习模型之前, 通常我们会检查独立变量和目标变量之间是否存在关系.这可以通过测量两个变量之间的相关性来实现.在 python 中, pandas 提供了一个函数 datafr ...

  5. UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计

    UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计 我们的目标是设计一种罐头,这种罐头产品按件出售,一件12个罐头,按3行一行四个的形式排列,同时有以下信息: V0V_0V0​:罐头的最小 ...

  6. 第二十五章补充内容 5 不能为0的变量

    // 第二十五章补充内容 5 不能为0的变量 /*#define DEBUG #include <iostream> #include <string> using names ...

  7. 多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)

    在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了.配合Object的wait().notify()系列方法可以实现等待/通知模式.Condition接口 ...

  8. 广义线性回归模型之0,1变量回归(logit/probit回归)—R语言实现

    1.广义线性回归 广义线性模型有三个组成部分: (1) 随机部分, 即变量所属的指数族分布 族成员, 诸如正态分布, 二项分布, Poisson 分布等等. (2) 线性部分, 即 η = x⊤β. ...

  9. 威雅[ViYa]QQ优化工具0.64

    威雅[ViYa]QQ优化工具0.64支持简繁英所有版本[01-14更新] 免责声明: 首先使用此工具前,请您确保已经认真详细阅读过腾讯公司和QQ软件以及其他类似软件相关许可协议.使用此工具是您的自愿选 ...

  10. 旅行商的背包(二进制优化多重+0/1背包枚举体积))

    旅行商的背包(二进制优化多重+0/1背包枚举体积)) 题目描述 小 S 坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有 n n n 种, ...

最新文章

  1. c++ 解析从浏览器端传过来的图像base64编码,并转换成opencv识别的格式
  2. JavaScript中的作用域、作用域链、预解析
  3. 割线法求解过程_求解稀疏优化问题2——临近点方法+半光滑牛顿法
  4. iOS-深复制(mutableCopy)与浅复制(copy)
  5. java并发包源码分析
  6. python 定时任务 web管理_Selenium+WebDriver+Python 定时控制任务
  7. jQuery实现下拉菜单[代码+详细讲解+效果图]
  8. a股用计算机模拟走势,一张图揭示抄底A股的机会在这里
  9. 将不同数据来源的ggplot图绘制到同一张图中,并添加统一的图例
  10. Python运算符优先级与结合性
  11. centos7安装大数据平台
  12. LIN总线协议详解10(LIN的API)
  13. 下一代共识机制探究——基于DAG的BFT共识
  14. 三十八、Fluent融化凝固模型参数设置依据
  15. mysql 笛卡尔积影响_SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积
  16. scrapy创建项目详解---HtmlXPathSelector
  17. 计算机排版比赛,Word排版大赛 敲响IT精英最强音
  18. 【FFH】为什么JSON将逐渐取代XML?
  19. 【大唐杯学习超快速入门】5G技术原理仿真教学——5G物理层过程
  20. EXSI-NFS实验

热门文章

  1. 米家扫地机器人 设置不停止_【小米 米家 扫地机器人使用总结】设置|清扫_摘要频道_什么值得买...
  2. 入行 AI,如何选个脚踏实地的岗位?
  3. 2022-2027年中国OLED显示面板行业发展监测及投资战略研究报告
  4. 实时音视频质量评估方案
  5. 【写论文技巧】如何写一篇好论文?
  6. LoRa开发|LoRa无线传输技术介绍
  7. Domain Driven Design 领域驱动设计
  8. AI Driven Testing的成熟度分析
  9. Jsp生成静态页面(转)
  10. 2021-03-29