数学模型tricks

您所在的位置:网站首页 模型线性化处理 数学模型tricks

数学模型tricks

2024-07-13 10:05| 来源: 网络整理| 查看: 265

数学模型tricks | 大M法线性化注意事项

文章目录 数学模型tricks | 大M法线性化注意事项问题错误根源总结1.综上2.大M的用法详细介绍3.大M取值太小引发的错误4.Gurobi求解时精度引起的错误5.偷懒的解决方法

问题

有如下二次项: g x gx gx 其中 g ∈ { 0 , 1 } , − 10 ≤ x ≤ 0 g \in \{0,1\},-10 \leq x \leq 0 g∈{0,1},−10≤x≤0 用大M法线性化 令 y = g x y = gx y=gx,转化为 y ≥ x , y ≥ − M g , y ≤ x + M ( 1 − g ) y \geq x,y \geq -Mg,y \leq x + M(1-g) y≥x,y≥−Mg,y≤x+M(1−g) 即: g = 1 g =1 g=1时, y = x y=x y=x; g = 0 g =0 g=0时, y = 0 y=0 y=0

为了检验大M法的效果,用Gurobi求解下面的问题 m i n x y ≥ x y ≥ − M g y ≤ x + M ( 1 − g ) g ∈ { 0 , 1 } − 10 ≤ y ≤ 0 − 10 ≤ x ≤ 0 min \quad x\\ y \geq x\\ y \geq -Mg\\ y \leq x + M(1-g)\\ g \in \{0,1\}\\ -10\leq y \leq 0\\ -10 \leq x \leq 0 minxy≥xy≥−Mgy≤x+M(1−g)g∈{0,1}−10≤y≤0−10≤x≤0

from gurobipy import * m= Model() M = GRB.INFINITY x = m.addVar(lb = -10,ub=0,vtype=GRB.CONTINUOUS,name='miu') y = m.addVar(lb = -10,ub=0,vtype=GRB.CONTINUOUS,name='xi') g = m.addVar(vtype=GRB.BINARY,name='g') m.setObjective(x,GRB.MINIMIZE) m.addConstr(y >= x) m.addConstr(y >= -M * g) m.addConstr(y


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3