Preview
做这篇总结的原因是因为博主去年在学校的时候选了这门课,老师教得很多方法和原理以及将问题应用到的python的package都非常全面,之前的笔记比较碎片化,现在在解决一些实际的优化问题的时候除了单纯形法和拉格朗日求导方法其他几乎都忘记了,因此将一些觉得实用和启发性的东西写在这里,以便于记忆与温故知新。
1. General knowledge on Optimization
Concepts of a Mathematical Program
最优化建模的目标是将人类语言的描述翻译为数学公式。 一个最普遍的最优化数学程序可以用一般公式表达如下:
• xj, j = 1, . . . , n, 被称作决策变量:decision variables.
• gi(x1, . . . , xn)~bi, i = 1, . . . , m, 被称为结构性限制条件: structural constraints (or functional constraints or technological constraints).
• xj ≥ 0, j = 1, . . . , n 被称为非负性限制条件: nonnegativity constraints. We can always transform any variable to nonnegative variable(s).
• f(x1, . . . , xn) 为目标函数。
2.Simplex Method
From LP geometry to Algebra
先将所有的不等式限制条件加入slack variable变为等式限制条件,然后用图形去表示我们的可行域如上图所示,因为线性问题的可行域一定是一个规则的多边形,单纯形法其实就是从一个多边形的顶点出发,通过矩阵变化计算到另一个顶点,直到我们获得一个最小的cost function到达最优解。
如图,我们可以把每一条多边形的边想象成每一个xi=0的轴,这样的话,每个顶点就对应了两个x=0的条件,我们称这两个x为非基础变量:NonBasic Variables. 其他的非x!=0的x为基础变量:Basic Variables例如图中A点,x1,x2就为非基础变量。
以A点为起始点:
这里要注意,constraint的个数一定要小于加入slack variable之后的变量数,不然就会出现共线性的问题。