zoukankan      html  css  js  c++  java
  • 混合整数线性规划——切割平面

    我们可以使用Gomory切割来完全求解一个整数线性规划问题。思路是

    1. 求解线性松弛

    2. 根据这个线性松弛的单纯性表产生并添加Gomort切割,切割约束条件空间,

    直到线性松弛的最优解为整。

    针对混合整数线性规划问题,

    [egin{array}{*{20}{l}}
    {max 3x + y + 3z}\
    {2x + 2y + z le 30}\
    {1.5x + 2y + 3z le 25}\
    {2x + y + z le 20}\
    {x ge 0,y ge 0,z ge 0,}
    end{array}]

    引入松弛变量s1,s2,s3也是整数

    [egin{array}{l}
    obj = 3x + y + 3z\
    s1 = 30 - 2x - 2y - z\
    s2 = 50 - 3x - 4y - 6z le 25\
    s3 = 20 - 2x - y - z le 20
    end{array}]

    最优解

    [egin{array}{l}
    obj = 110/3 - 4/3*x + 1/3*s2 - s3\
    s1 = 10 - y + s3\
    z = 40/9 - 5/9*y - 2/9*s2 + 1/3*s3\
    x = 70/9 - 2/9*y + 1/9*s2 - 2/3*s3
    end{array}]

    obj=110/3,x=70/9,y=0,z=40/9

    挑选非整数解的某个等式,改写,

    [egin{array}{l}
    z = 40/9 - 5/9*y - 2/9*s2 + 1/3*s3\
    z + 5/9*y + 2/9*s2 - 1/3*s3 = 40/9\
    (z - s3 - 4) + (5/9*y + 2/9*s2 + 2/3*s3)=4/9
    end{array}]

    其中(z - s3 - 4)必须是整数,(5/9*y + 2/9*s2 + 2/3*s3)必须是正的分数,且产生4/9这个分数部分。

    于是我们生成了一个Gomory切割

    [egin{array}{l}
    5/9*y + 2/9*s2 + 2/3*s3 ge 4/9\
    5y + 2s2 + 6s3 ge 4
    end{array}]

    将松弛变量消除带入,得到一个新的约束,

    [2x + y + 2z le 24]

    这样既去掉了最优的非整数解,又保留了原本混合整数线性规划的所有整数可行解。

    于是继续对带新约束问题的求解,直到最优解是整数解。

    参考

    https://www.coursera.org/lecture/lisan-youhua-suanfapian/3-3-3-qie-ge-ping-mian-loPYl

  • 相关阅读:
    poj1273
    JavaSE入门学习23:Java面向对象之构造方法
    NOI 2015 滞后赛解题报告
    LuaInterface简单介绍
    解决在onCreate()过程中获取View的width和Height为0的4种方法
    函数指针和指针函数
    Quartz-中断正在执行的任务
    servlet3.0获取参数与文件上传代码示例
    Servlet学习:(三)Servlet3.0 上传文件
    layui 批量上传文件 + 后台 用servlet3.0接收【我】
  • 原文地址:https://www.cnblogs.com/yijuncheng/p/10953692.html
Copyright © 2011-2022 走看看