Introduction
本系列的初衷:
学习运筹优化也有很长时间了,读研以来也阅读了自认为是较多的文献,我的研究方向是关于应急管理下面的相关物资调度、车辆路径规划等等问题,所以基本接触的都是大规模混合整数规划,但是对于很多基础的运筹优化知识,自我总感觉是缺少点什么,所以呢想回到运筹优化的本源去阅读一些大佬的领域著作。分享自己的学习过程一方面和大家一起交流学习,另一方面也督促自己认真学习。
运筹优化基本介绍:
介绍一下运筹优化一些基本架构和知识。运筹优化主要包含三优化的内容,分别是凸优化、线性规划和数值优化。其中凸优化最有名的当属Stephon Boyed :《Convx optimization》这本书,其中大部分为理论,其实还是有点晦涩难懂的,但是对于优化会有很好的理解;线性规划的神作便是Bertsimas :《introduction to linear programming》,这本书深入浅出的介绍了线性规划的相关内容,从理论到算法较为详细,这也是我接下来要细致阅读且分享的,还有孙小玲教授讲述的课程也是非常细致的,感兴趣的小伙伴可以在B站找到资源,他的书《整数规划》也是很棒的著作,欢迎大家积极阅读;最后是数值优化,主要偏重算法,例如先搜索、信赖域方法等,主要著作有Nocedal :《Numerical Optimization》,小黄书系列的《数值最优化方法》--高力。这些内容大家需要的话可以关注后台私信发给大家。
那么接下来我们就学习一下《introduction to linear programming》书中的内容。本书是麻省理工学院教授编写的面向入门者和进阶者的教材,其内容非常丰富。对与我来说学习一本书总是要把他的逻辑搞清楚,那我们来先看看他的目录也就是本书要讲的内容:
本书的体系介绍:
首先Introduction部分作者对于线性规划的一些基本概念以及背景进行了简单的介绍,然后介绍了分段线性函数与图形的表示。
第二章介绍了线性规划的几何表示,例如凸集、极点极点存在性、投影等。
第三章介绍运筹优化的核心与基础内容也即是单纯性法,这个在后续 的一些算法中都很重要,作者介绍了最优性条件、单纯性的发展及其应用。
第四章主要介绍对偶理论,这在后续的很多算法中都会涉及,主要涉及对偶问题、边际成本、线性不等式、极射线等。
第五章主要介绍敏感性分析。
第六章为大规模优化,主要介绍列生成算法,经典的下料问题,DW分解算法,Benders分解。
第七章为网络流问题,主要介绍图论与最短路、最大流问题。这些都是运筹优化领域的经典问题。
第八章介绍线性规划的复杂性与椭球法。
第九章介绍内点法。
第十章介绍整数规划模型。涉及一些特殊的间模与约束处理方法。
第十一章具体介绍一些整数规划的方法。例如割平面法,分解定界、动态规划、局部搜索等。
作者在在十二章饶有趣味的介绍的线性规划的艺术性,让人不禁感叹大佬就是不一样哈哈哈哈。
本书第一章 Introduction部分:
好的,那介绍完了大致内容,接下来就让我们进入到具体的细节中去,首先本次梳理第一章Introduction部分。本章首先介绍线性规划模型,并给出一些等价的表达,举了一些例子来说明不同情况的适用性。之后介绍了分段线性凸目标函数的线性规划转换方法以及一些现实的例子。
part1 线性规划及其变体
如下是一个线性规划问题:
其中x1,x2,x3,x4为决策变量(decision variables),也就是我们要求的量,我们的目标就是要最小化2x1-x2+4x3,也可以写为
,c也称为成本系数。下面的为等式约束与不等式约束,均可以写成
这样的形式,其中b为标量。那就可以写为以下的形式:
其中M为一些集合。那对于满足以上所有约束条件的x=(x,1x2,x3,...)称为可行解(feasible solution),而其中使得目标函数值最小的即为最优解(optimal solution),c'x称为最优成本(optimal cost).那最大化问题该如何表示呢,其实只要在目标函数前加一个负号就可以了。
接下来讲一些转换方法将一般形式的线性规划问题变换为标准型,至于为什么要转换为标准型呢,后续大家就会理解了。
(1)等式约束
对于,这样的约束,我们可以将其转换为两个约束,
(2)自由变量
对于没有限制的变量Xj,可以将其替换为,均大于零,也就意味着任何实数都可以表示为两个非负数的差。
(3)不等式消除
对于这样的不等式约束。可以通过引入松弛变量的形式加以消除。
以下我们便可以给出线性规划的标准形式:
第一个约束也可以写为.下面我们给出一个标准化的例子:
大家可以试着自己动手做一下。
part2 分段线性凸函数
线性规划中一般要去目标函数是线性的,但是当我们遇到非线性项时如何转换呢,我们先给出一些概念的定义,再来说转换的方法:
定义1 凸函数与凹函数
以上a,b,c分别代表凸函数、凹函数、和非凸非凹函数
对于形如: 的非线性目标函数,c为向量,d为标量,这种通常被称为分段线性凸函数。可我们怎么知道他是凸的呢?以下有一个定理:
证明如下:
最简单的分段线性凸函数为绝对值函数。
由下图可知,分段线性凸函数可以用来近似一般的凸函数。
我们现在考虑线性规划的推广,其目标函数为分段线性和凸的,而非仅仅线性。
注意到 等价于选取最小的z满足
,然后就转换成了
,决策变量为z和x。见上图。推广来看,对于形如,
其中 可以写为
下面用一个例子来讲解转化过程,考虑如下模型:
绝对值即大于等于0,所以我们可以替换为
或者也可以引入新变量来解决绝对值函数问题,
解释一下,两个数都大于零所以两数相加都大于零所以替换目标函数中的x,两数只差由前所述可以代表任何数,所以替换约束条件中的x。
在机器学习或深度学习中的 损失函数也可以写为线性规划模型,例如我们要拟合一系列(x,y)这样的点,即y=ax+b,我们就是要最小化预测结果与实际值之间的差值。min
,此处意为最小化最大残差。也可以转为为
书中后续还介绍了线性系统的最优控制问题和火箭控制问题,感兴趣的可以阅读一下。
简单总结一下,本节简单讲解了线性规划的基本知识,以及一些变量替换方法与标准形式,分段线凸目标函数的转换。以上就是本节的内容,下节我们来阅读线性规划的图形表示。