*本文主要记录和分享学习到的知识,算不上原创

*参考文献见链接

本文主要简述了求解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求解方法总结的更多相关文章

  1. Machine Learning系列--隐马尔可夫模型的三大问题及求解方法

    本文主要介绍隐马尔可夫模型以及该模型中的三大问题的解决方法. 隐马尔可夫模型的是处理序列问题的统计学模型,描述的过程为:由隐马尔科夫链随机生成不可观测的状态随机序列,然后各个状态分别生成一个观测,从而 ...

  2. 用CSS画小猪佩奇,你就是下一个社会人! js将“I am a coder”反转成 “coder a am I”,不许用split,join,subString,reverse;求解方法三

    用CSS画小猪佩奇,你就是下一个社会人!   欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:江志耿 | 腾讯TEG网络工程师 我是佩奇,哼,这是我的弟弟乔治,呱呱,这是我的妈妈,嚯 ...

  3. 02(e)多元无约束优化问题- 梯度的两种求解方法以及有约束转化为无约束问题

    2.1 求解梯度的两种方法 以$f(x,y)={{x}^{2}}+{{y}^{3}}$为例,很容易得到: $\nabla f=\left[ \begin{aligned}& \frac{\pa ...

  4. C语言实现定积分求解方法

    求定积分的方法有很多种,下面是我总结的几种比较常用的方法. #include <stdio.h> #include <stdlib.h> #include <math.h ...

  5. 最近公共祖先(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- ...

  6. 组合数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- ...

  7. N!(N的阶乘)最末位非0的求解方法

    问题是求关于N!的最后一位非0位, 如3!=6,最后一位非0位为6, 5!=120, 最后一位非0位为2.怎么样快速的求出最后一位非0位呢? 最朴素的想法就是先求出N!的结果,再求出结果的最后一位非0 ...

  8. 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/ ...

  9. [POJ1050] To the Max 及最大子段和与最大矩阵和的求解方法

    最大子段和 Ο(n) 的时间求出价值最大的子段 #include<cstdio> #include<iostream> using namespace std; int n,m ...

随机推荐

  1. CVE-2017-3248——WebLogic反序列化漏洞利用工具

    著名的web中间件WebLogic被曝出之前的反序列化安全漏洞补丁存在绕过安全风险,用户更新补丁后,仍然存在被绕过成功执行远程命令攻击的情况,安全风险高,Oracle官方及时发布了最新补丁,修复了该漏 ...

  2. 基于华为云语音通知 VoiceCall 的应用上线记录并分享.NET CORE DEMO

    最近公司要上线语音通知功能,需求如下: 场景:发生报警时,自动通知到指定的手机号,同时,提供几个按键选项,例如,语音通知如下: “您好,XXX小区发生XXXX报警,按1确认报警,按2忽略报警,按3屏蔽 ...

  3. python_12(并发编程)

    第1章 进程 1.1 队列Queue 1.2 Queue方法 1.2.1 q.get([block [,timeout]]) 1.2.2 q.get_nowait() 1.2.3 q.put(item ...

  4. aspectj xml

    1.接口和类 1.1 ISomeService 接口 public interface ISomeService { public void doSome(); public void dade(); ...

  5. java.lang.ClassCastException android.widget.RelativeLayout LayoutParams 异常

    1.在xml布局文件如下所示: <RelativeLayout android:layout_width="match_parent" android:layout_heig ...

  6. {g2o}Installation Notes:ccmake

    main reference: http://www.cnblogs.com/gaoxiang12/p/3776107.html "注意libqglviewer-qt4-dev只在ubunt ...

  7. 这么大一座Azure“图书馆”,你竟没有发现…

    为避免被叫做「伸手党」,很多技术人员早已养成遇到问题上网搜的好习惯. 然而…… 同一个概念,搜到两个相互矛盾的解释,以谁的为准? 想查找某个 API 的用法,搜索结果数十万条,怎样筛选出最有价值的? ...

  8. COGS 2334. [HZOI 2016]最小函数值

    时间限制:1 s   内存限制:128 MB [题目描述] 有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Aix2+Bix+Ci(x∈N∗).给定这些Ai.Bi和Ci,请求出所有函数的所 ...

  9. Kubenetes里pod和service绑定的实现方式

    我之前的文章 如何在Kubernetes里创建一个Nginx service介绍了如何创建一个Kubernetes pod和service,使用的方法是命令kubectl run. 本文介绍另一种方式 ...

  10. A*算法研究

    许多工业与科学计算问题都可以转化为在图中寻路问题.启发式的寻路方法将问题表示为一个图,然后利用问题本身的信息,来加速解的搜索过程.一个典型的例子是有一些通路连接若干城市,找出从指定起点城市到指定终点城 ...