前两天上卜东波老师的课,学习了关于单纯形相关的理论,自认为我已经学的比较扎实,但是在做OJ的时候却遇到了很大的困难,前后花了差不多三天的时间才AC了。为了纪念这份来之不易,也为了方便之后的学习,所以决定写下这个学习的过程。
为了更好地阐述,在本博客的阐述过程中,我决定抛弃所有的证明部分,而是直接告诉你这个结论,我觉得大部分的人只要拿到问题,知道怎么解决,怎么编程才是第一步,至于具体证明过程在之后的使用过程中,你会逐渐发现真知,嘻嘻。
先看这样一个问题:
这是一个简单的二元规划问题,这个问题我们可以通过二维平面绘画出来,如下所示,也就是在下面这个蓝色的可行域内,去寻求一个点,使得目标函数的解最小:
然后在规划的过程中,我们会发现,最优解出现在可行域的一个顶点上。这里就引出了两个重要的概念:
1、simplex所面对的问题,其可行域大多是凸多胞体,然后在这样的可行域上求解问题的最优解,都会出现在顶点的位置。
所以针对上面这个规律,我们可以知道,我们求解最优解的过程,就是在顶点中寻找最优解的过程。
嗯,那么如何确定一个点,是顶点呢?
这个问题的答案是,将约束写成松弛形式,寻找松弛形式下系数矩阵下的一组基,就对应多胞形可行域的一个顶点。
为了让同志们看的更清楚点,再举个例子
这个可行域可以画成三维空间的一个多面体:
下面我将上述这个例子扩写为松弛形式,所谓松弛形式就是将不等式化成等式
然后看这个系数可以通过高斯变换得到一组基,以及其相应的一组解恰好就是可行域中多面体的一个顶点:
所以我们紧接着又得出了这样的结论:可行域的一