python求解整数规划_运筹系列4:整数规划割平面法python代码

1. 分支割平面(branch and cut)

割平面简单来说,就是添加约束条件。在使用分支定界法时,我们一般是首先尝试添加各种割平面后看能不能求出整数解,如果不行再分支。这种方法叫做Branch and Cut。

首先介绍一些基本的cut方法:

rounding:

比如整数变量x ≤ 1.5 x\le 1.5x≤1.5可以转化为x ≤ 1 x\le 1x≤1;

还有GCD reduction:比如3 x + 6 y + 9 z ≤ 11 3x+6y+9z \le 113x+6y+9z≤11,同时除以3后有x + 2 y + 3 z ≤ 3 x+2y+3z\le 3x+2y+3z≤3;

Gomory rouding cut:比如3 x + 3 y + 5 z ≤ 8 3x+3y+5z\le 83x+3y+5z≤8,同时除以3有x + y + 5 / 3 z ≤ 8 / 3 x+y+5/3z\le 8/3x+y+5/3z≤8/3,两边rounding得到x + y + z ≤ 2 x+y+z\le2x+y+z≤2

lifting:

比如4 x + y ≥ 2 , x 4x+y\ge 2, x4x+y≥2,x binary,x从0提升到1,左边slack为2,x前面的系数可以减去2变为2 x + y ≥ 2 2x+y\ge 22x+y≥2

disjunction:

比如x + y ≥ 3.5 , x , y ≥ 0 , y x+y\ge 3.5,x,y\ge0,yx+y≥3.5,x,y≥0,y integer,可以把y拆分为y ≥ 4 y \ge 4y≥4和y ≤ 3 y\le 3y≤3两部分。

2. cut介绍

剪枝方法分为对约束形式有要求的特殊剪枝以及通用的剪枝:

Generic Cuts (valid for any MILP)

Gomory Mixed Integer

Mixed Integer Rounding

Disjunctive cut

Special Structures (valid for certain relaxations of MILPs)

Knapsack / Gub Cover, Pack (many applications)<

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
平面Python代码可以参考以下示例: ```python import numpy as np class CutPlane(object): def __init__(self, c, A, b, lb=None, ub=None): """ :param c: n * 1 vector :param A: m * n matrix :param b: m * 1 vector :param lb: list, lower bounds of x, e.g. \[0, 0, 1, ...\] :param ub: list, upper bounds of x, e.g. \[None, None, ...\], None 代表正无穷 """ # 输入 self._c = np.array(c) * 1.0 self._A = np.array(A) * 1.0 self._b = np.array(b) * 1.0 self._lb = lb self._ub = ub # 输出 self._sol = None # solution self._obj_val = None # objective value # 辅助变量 # ... ``` 以上是平面Python代码的一个简单示例,其中包含了输入和输出的定义,以及一些辅助变量的初始化。具体的算实现部分需要根据具体问题进行编写。 #### 引用[.reference_title] - *1* *3* [【无标题】](https://blog.csdn.net/YUNCHOUSHUO/article/details/124437249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [整数规划平面](https://blog.csdn.net/qx3501332/article/details/120358170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值