• 线性规划入门 康某


    某天我备考运筹学期间,找到了一份来自UCLA的讲义 ,考虑到考试需要以及和各种竞赛关系很大,决定好好学习一下。

    讲义的 P4 给出了线性规划能解决的问题,标准最大化问题的形式:

    简言之,要求你最大化 C1X1 + …… + CnXn,约束条件是下面的不等式,以及X为正。

    以及标准最小化问题的形式:

    接下来,他讲解了一些实际问题的例子,列成方程,都可以转化成标准最大化/最小化问题。

    Goto Page 8: 里面给出了若干概念:

    1:目标函数,就是咱们要最大/小化的函数

    2:可行解(feasible vector),一个满足所有约束条件的向量(或者说X,Y)。

    3:可行域,所有可行解的集合

    4:最优解:顾名思义,一个可行的解,让目标函数取得最优值,就是最优解。

    5:无解:可行域为空,没有可行解。这是线性规划问题解的一种特殊情况。

    6:无界解:最优值可以取到无穷大,这是线性规划问题解的另一种特殊情况,

    所有线性规划问题通过一些技巧都可以转化成标准形式。譬如不等式两边都 *= -1 变号。另一个情况就是变量 Xi 取值范围没有约束,可以列出等式 Xi = Xi_1 - Xi_2 代换掉所有的 Xi,然后给出约束 Xi_1 >= 0,Xi_2 >=0。 明白了概念之后,再看一看标准最小化/最大化问题,就可以一一对应了。

    接下来,教材介绍了对偶。首先,他介绍了标准最大化问题和标准最小化问题互为对偶:

    矩阵的形式看上去很抽象……画成表格看一下:

    直观的多了,借助这个表格,也很容易可以计算得到一个问题的对偶。

    看上去很Magic,补充一个实际问题来说明一下:

    这是某个工厂的情况表,随手盗个图:

    那么,对于工厂来讲,如果需要计算分别生产多少甲乙产品获利最大,那么很显然有:

    Maximize 10X + 18Y

    5X + 2Y <= 170

    2X + 3Y <= 100

    1X + 5Y <= 150

    考虑另外一个问题:假设存在一个原料收购商人,他想要收购你的生产材料,他当然期望尽可能压价,设每样资源的单价为X,Y,Z

    那么目标应该是:

    Minimize 170X + 100Y + 150Z

    但是工厂肯定期望收购价不低于自己生产的盈利,因此有约束条件:

    5X + 2Y + 1Z >= 10

    2X + 3Y + 5Z >= 18

    这就是原问题和对偶问题为啥形式如此相近。

    接下来,P11 Theorem 1: 弱对偶性。证明比较简单,因为 AX <= B && C’ <= Y’A ,所以 C'X <= Y'AX <= Y'B,去掉中间的,C'X <= Y'B
    这个 Theorem 有什么意义呢,我们可以推出:
    Corollary 1:如果原问题和对偶问题都可行,那么他们一定是有界可行。根据Theorem 1中的证明,如果对于标准最大化和最小化问题,分别存在着两个可行解 X,Y,那么最大化问题的解C'X一定小于最小化问题的解 Y’B,我们就找到了一个上界。因此,存在这样的上界。反之亦然。
    Corollary 2:强对偶性,如果存在C’X* = Y*’B,则标准最大化最小化问题同时取得最优解。由于对任何最大化问题的可行解X,由Corollary 1,他都该小于等于Y*’B,而 Y*’B = C’X*,因此 C’X <= C’X*, 证明了X*已经是最优解。反之亦然。
    因此有P11底端的对偶定理呼之欲出:如果原问题和对偶问题都是有解可行,那么一定存在一个解,让两个问题同时取得最优解。
    结合上面的实际例子,这意味着,一定存在一个方案,恰好使工厂将材料卖出给收购商和自己生产取得收益相等。
    之后解释了一下无解和无穷解的对偶关系,结论就是:对于线性规划问题,要么就是原问题和对偶问题都有解,要么就是都无解,要么就是无解和无穷解互为对偶,不存在其他情况。
    接下来,咱们goto到第16页,学习一个Pivot操作
    所谓Pivot,可以理解成换元,是把y’A = s’ 这个矩阵里面,用sj 和 y1...yi-1,yi+1... 表示yi,然后代入换元的操作。例子可见第16页。
    直奔17页下方
    这个式子给出了pivot操作之后,矩阵A 的变化,用矩阵的形式描绘就是
      
    注意这个操作和求解线性规划无关,这只是一个很通用的对方程组的换元操作。
    咱们研究这么个Pivot有什么用呢,goto Page 20,咱们试图来解这个标准最小化问题。
    Y,A,B,C都好理解。原问题的约束条件是一个不等式组,我们加入松弛变量S将其转化成方程组,令S’ = Y’A - C’。
    因此,咱们应该可以理解下面的那个单纯形表了。这个单纯形表表示的就是 S’ = Y’A - C’ 。
    然后,这个问题怎么解呢,由于这个问题是标准最小化问题,容易知道,如果 B >= 0,-C >= 0,最优解应该是Y = 0,最优解也该 = 0,但是问题就是 B >= 0,-C >= 0这个条件不太好满足……因此,咱们的pivot操作就派上用场了,根据之前的变换规则,如果在一个位置 Aij 执行Pivot,交换 yi 和 sj ,那么会让 bi 和 cj 的值发生变化。如果之后满足了 B >= 0,-C >= 0,则相当于令 Y(当然这里的Y 可能一部分已经被S代换了)= 0,就得到了解。
    接下来,他介绍了一个 Pivot Madly的方法,这可就看脸了……
    而后,他介绍了一些策略。根据 Pivot 操作咱们知道,如果在位置 Ai,j Pivot,若Aij > 0, Bi >= 0,则Pivot之后,Aij,Bi 的正负一定不会变,而Cj的正负会反过来。 另一种情况,如果 Bi < 0,那么咱们如果可以找到一个 Aij < 0,那么就可以把Bi反过来。 就这样,不停Pivot,当 B 和 -C都 >= 0,即可得到最优解。最优解保存在这个矩阵的右下角。
     
    这个实际上就是大名鼎鼎的单纯形法。如果我们从空间的角度上思考,每个约束条件,相当于是N维空间的一个超平面,限制这个超平面的一侧是解空间。那么若干个N维平面,他们相交会得到一个N+1个点的凸包,最优解一定是凸包的顶点,但是我们不知是哪个顶点。比起盲目枚举,单纯形法的本质就是从一个顶点出发,走向一个更优的相邻的顶点,直到走到最优解的过程。
     
    由于匹配问题很容易可以转化成网络流问题,我们不单独讨论匹配问题。
    我们讨论一下“最大流等于最小割”。
    现在有一个网络,点 1->2,容量C1,流量F1;点 2->3,容量 C2,流量F2;点 1->3,容量C3,流量F3,源是1,汇是2,
    根据流量平衡以及流量小于容量,我们可以列式:
    Maximize 0F1 + 1F2 + 1F3
    1F1 + 0F2 + 0F3 <= C1
    0F1 + 1F2 + 0F3 <= C2
    0F1 + 0F2 + 1F3 <= C3
    1F1 -  1F2 + 0F3 <= 0
    -1F1 +1F2 + 0F3 <= 0
    而对偶问题则为:
    Minimize C1X1 + C2X2 + C3X3 + 0X4 + 0X5
    1X1 + 1X4 - 1X5 >= 0
    1X2 - 1X4 + 1X5 >= 1
    1X3 >= 1
    易得 X3 >= 1,X1 + X2 >= 1,这就是对应的最小割问题。显然,1->3一定要割掉,1->2,2->3割哪一条,取决于C1,C2的大小了。
     
  • 相关阅读:
    关于cookie的一点知识
    一点简单的关于ASP.NET下载
    一个小小小问题
    复习linq
    拾遗一些关于存储过程
    一般处理程序(下)
    复习一下递归
    复习JS和jQuery
    一点关于Ajax和一个等待图标的显示
    C#开发BIMFACE系列14 服务端API之批量获取转换状态详情
  • 原文地址:https://www.cnblogs.com/sweetsc/p/3468511.html
Copyright © 2020-2023  润新知