matlab实现单纯型法解线性规划_线性规划问题中的多解现象

知乎用户Devin 化工系

线性规划问题中出现多个解的现象是非常常见的。代数解释是,目标向量是某些约束向量的线性组合;几何解释是目标向量垂直于那个最优超平面。

出现多解问题的几种可能性:

  1. 问题没有能够得到很好地定义,或者说问题定义得比较“松”,导致有多个解。如果约束恰当,那么可能会恰好消除掉多解。
  2. 问题的系统非常健壮,天然有一种灵活性,有多种方法得到相同的目标。如网络,有多个通路可以实现同样的目标。

当多解存在时,最优解有无穷个,可以分为两类,基本最优解(basic optimum)、非基本最优解(nonbasic optimum)。几何上看,基本最优解,就是可行域角点上的最优解,有有限个;非基本最优解是非角点上的解,有无穷个。使用不同的LP求解器会得到不同的结果,单纯形法及其变种,搜索的是角点,所以理论上通常得到基本最优解;内点法,搜索的是中心路径(central path)的解析中心(analytical center),所以理论上通常得到的是非基本最优解。相比而言,单纯形法是基本解,所以一般而言比内点法稀疏;如果希望是稀疏解,应该尽量使用单纯形法,或者带有crossover的内点法。Crossover,是CPLEX求解LP问题时,求解后默认的一个后处理方法,这个后处理可以得到近似解最近的基本最优解;多解存在时,如果使用了内点法加上crossover的后处理,得到的还是一个基本最优解。

如果换个视角,最优解集实际上可以看成凸组合,那么基本最优解是凸组合的角,所有非基本最优解可以看做基本最优解的凸组合。正是因为这样,当多解存在时,求解得到所有基本最优解最关键。Cplex 上有一个不错的关于多解的讨论(链接:CPLEX Optimizers)值得一看。我不太清楚CPLEX能不能找到LP问题的所有最优解,但是好像整数规划CPLEX是可以找到所有的最优解的(我曾经搜到过)。

搜索所有基本最优解的常见方法有两种,一种是把LP问题转化成MILP问题,效率低,个人不喜欢;另一种方法相对简单。单纯形法停止时的单纯形表中,非基变量如果有系数为零的,那么该非基变量进基,不会带来目标函数的变化,这就是多个基本最优解。可以通过让该变量进基,然后得到一个新的基本最优解。新的基本最优解,可能也存在非基变量系数为零的情况,其中一个解进基会得到刚才的解;其他的进基会得到新的基本最优解。通过这样迭代的搜寻,并且排除所有的重复的基本最优解,就得到了所有的基本最优解集。个人经验,这种方法因可能会搜索到重复的,编程上需要特殊处理(递归调用,树状搜索,不太清楚可不可以避免递归),否则一个简单的问题因为递归,就会把内存耗尽。我曾经有一个原LP问题50个变量左右,经过标准化后搜索出超过2500个基本最优解,然后内存就耗尽了。

Lee, S., Phalakornkule, C., Domach, M. M., & Grossmann, I. E. (2000). Recursive MILP model for finding all the alternate optima in LP models for metabolic networks.Computers & Chemical Engineering,24(2-7), 711-716.

Motamedian, E., & Naeimpoor, F. (2018). LAMOS: A linear algorithm to identify the origin of multiple optimal flux distributions in metabolic networks.Computers & Chemical Engineering,117, 372-377.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值