MIP求解方法总结
*本文主要记录和分享学习到的知识,算不上原创
*参考文献见链接
本文主要简述了求解MIP问题的两大类(精确求解和近似求解),或者更细致地,三大类方法(精确算法,ε-近似算法和启发式算法)。由于暂时不太熟悉ε-近似算法,所以在这个版块我大部分只会涉及到精确算法和启发式算法。
目录
MIP问题
MIP求解方法
MIP问题
MIP问题,即混合整数规划问题(Mixed integer programming)。
首先我们来简单回顾一下线性规划问题。
线性规划问题
线性规划问题指的是满足:
(1)目标函数是线性函数;
(2)约束条件是线性等式或不等式;
的优化问题。通常是求最小化目标函数或最大化目标函数。
我以下提到的线性规划问题,如果没有特殊说明,指的是最小化目标函数。注意:最小化目标函数与最大化目标函数可以相互转换,没有实质上的区别。
线性规划问题
→整数规划问题
→0-1 问题
→混合整数规划问题
线性规划问题,根据对变量的限制,可以更细地区分出:
(1)整数规划问题:指的是变量是整数的线性规划问题。
它将连续的线性规划跳转到离散的整数规划。需要说明的是求解整数规划的难度比求解线性规划的难度要大很多,尤其是当问题的规模很大时。
(2)0-1规划问题:指的是变量只能取值0或1的线性规划问题。
它是整数规划中特殊的一种。
(3)混合整数规划问题:指的是所有变量中有些变量可以取值连续,有些变量只能取整数值的线性规划问题。
混合整数规划问题
根据混合整数规划问题(MIP)的定义,可以概括出其一般形式:

MIP求解方法
MIP的求解方法可以分为:精确求解和近似求解两大类,如下图:

我们简单谈一谈精确求解和近似求解的区别:
(1)精确求解的目标是求得最优解(global optimal solution),但作为代价求解的过程需要花很长时间(exponential time),所以更适合于规模比较小的MIP问题。
(2)近似求解并不要求求得最优解,而是希望能在短时间内求得较优解(suboptimal solution)。
近似求解,实际上可以理解成用时间换质量的一种求解思想。
近似求解又可以分为两种大类:
(1)ε-approximation:ε-近似算法要求在短时间内(in polynomial time)求得次优解(suboptimal solution),并且可以保证解的优秀程度(bound on the degree of suboptimality)。
对于最小化问题而言,一个ε-近似算法在多项式时间内得到的解ZH满足:
ZH≤(1+ε)Z*
其中,Z*表示该问题的最优解。
(2)metaheuristics:启发式算法往往能在短时间内(empirically fast)获得较优解(suboptimal solution),但不能保证解的优秀程度(without a gurantee of its quality)。由于启发式算法通常求解速度快,适用于规模中等或规模大的MIP问题,所以企业中常常使用启发式算法求解问题。
*精确算法和启发式算法并不是完全分割的,比如Cplex利用branch and cut思想求解整数规划时,可以调用HeuristicCallback,而variable neighborhood search、local braching等启发式算法在求解大规模问题时可以调用Cplex求解局部最优解。
MIP求解方法总结的更多相关文章
- Machine Learning系列--隐马尔可夫模型的三大问题及求解方法
本文主要介绍隐马尔可夫模型以及该模型中的三大问题的解决方法. 隐马尔可夫模型的是处理序列问题的统计学模型,描述的过程为:由隐马尔科夫链随机生成不可观测的状态随机序列,然后各个状态分别生成一个观测,从而 ...
- 用CSS画小猪佩奇,你就是下一个社会人! js将“I am a coder”反转成 “coder a am I”,不许用split,join,subString,reverse;求解方法三
用CSS画小猪佩奇,你就是下一个社会人! 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:江志耿 | 腾讯TEG网络工程师 我是佩奇,哼,这是我的弟弟乔治,呱呱,这是我的妈妈,嚯 ...
- 02(e)多元无约束优化问题- 梯度的两种求解方法以及有约束转化为无约束问题
2.1 求解梯度的两种方法 以$f(x,y)={{x}^{2}}+{{y}^{3}}$为例,很容易得到: $\nabla f=\left[ \begin{aligned}& \frac{\pa ...
- C语言实现定积分求解方法
求定积分的方法有很多种,下面是我总结的几种比较常用的方法. #include <stdio.h> #include <stdlib.h> #include <math.h ...
- 最近公共祖先(LCA)的三种求解方法
转载来自:https://blog.andrewei.info/2015/10/08/e6-9c-80-e8-bf-91-e5-85-ac-e5-85-b1-e7-a5-96-e5-85-88lca- ...
- 组合数C(n,m)的四种求解方法
转自:文章 1.暴力求解 C(n,m)=n*(n-1)*...*(n-m+1)/m!,(n<=15): int CF(int n,int m) { ,i,j; ;i--) ans*=i; ;i- ...
- N!(N的阶乘)最末位非0的求解方法
问题是求关于N!的最后一位非0位, 如3!=6,最后一位非0位为6, 5!=120, 最后一位非0位为2.怎么样快速的求出最后一位非0位呢? 最朴素的想法就是先求出N!的结果,再求出结果的最后一位非0 ...
- low-rank 的相关求解方法 (CODE) Low-Rank Matrix Recovery and Completion via Convex Optimization
(CODE) Low-Rank Matrix Recovery and Completion via Convex Optimization 这个是来自http://blog.sina.com.cn/ ...
- [POJ1050] To the Max 及最大子段和与最大矩阵和的求解方法
最大子段和 Ο(n) 的时间求出价值最大的子段 #include<cstdio> #include<iostream> using namespace std; int n,m ...
随机推荐
- POJ 1458 Common Subsequence DP
http://poj.org/problem?id=1458 用dp[i][j]表示处理到第1个字符的第i个,第二个字符的第j个时的最长LCS. 1.如果str[i] == sub[j],那么LCS长 ...
- 持续集成~Jenkins里的NuGet和MSBuild插件
Jenkins是一个持续集成的环境,它是java开发的,大叔认为它的工作流程是 从源代码拉一个项目下来到它本地(可以配置定时机制) 恢复相关程序包nuget 编译程序 发布程序 现在说一下在配置jen ...
- C#的特性学习
转自:https://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类 ...
- hihocoder1080 更为复杂的买卖房屋姿势
思路: 线段树区间修改,需要使用两个懒标记set和add.处理好两个标记的优先级即可(set之前的set和add是没有作用的). 实现: #include <bits/stdc++.h> ...
- dos命令-环境变量-数据类型-命名规范
JAVA第一天笔记--dos命令-环境变量-数据类型-命名规范 1.能够阐述JDK和JRE之间区别 JDK(Java Development Kit)是提供给开发人员使用的JAVA开发工具包(java ...
- restful十项规范
1.协议 API与用户的通信都是通过HTTPS协议进行的 2.域名 应尽量将API部署在专有域名下:https://api.example.com 如果确定API很简单,不会有什么扩展,则可以放在主域 ...
- echarts getAttribute”的值: 对象为 null 或未定义 错误解决方法,
echarts.js引用放在head中或者放在body中HTML代码的前面了,造成加载时阻塞后面的html. 解决方法就是将echarts.js的引用放在</body>之前就可以了,完美解 ...
- HDU 1561 The more, The Better (树形DP,常规)
题意:给一个森林,n个节点,每个点有点权,问若从中刚好选择m个点(选择某点之前必须先选择了其父亲),使得这m个点权之和最大为多少? 思路: 比较常规.就是DFS一次,枚举在子树中可能选择的k个点(注意 ...
- 霍金的新语音系统 ACAT 将开源
英国理论物理学家斯蒂芬·霍金(Stephen Hawking)使用了二十年的语音通讯系统被英特尔开发的新一代通讯平台替代,显著改进了通讯效率.但霍金的声音并没有发生改变,他仍然使用相同的语音合成器.霍 ...
- Unity3d中MonoBehavior默认函数的执行顺序和生命周期
Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次:如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数 ...