在 python 中获取由 GLPK 求解器为 LP 计算的前 10 个次优解
Getting top 10 sub-optimal solutions computed by GLPK solver for LP in python
我正在尝试使用 GLPK 来解决 LP 问题。我的问题是计算机网络中的路由问题。给定网络拓扑和每个 link 容量以及网络中每个源-目的地对的流量需求矩阵,我想最小化网络中的最大 link 利用率。这是一个LP问题,我知道如何使用GLPK得到最优解。
我的问题是我也想获得次优解。有什么方法可以让我通过 GLPK 获得前 10 个次优解决方案?
最佳
对于纯 LP(只有连续变量),寻找“下一个最佳”解决方案的概念非常困难(只需将 epsilon 移开,你就会有另一个解决方案).我们可以对此进行不同的定义:找到“下一个最佳”角点(a.k.a.bases)。这不是那么容易做到的,但是使用二进制变量 (link).
对碱基进行编码是一种有点复杂的方法
如果问题实际上是 MIP(具有二进制变量),则更容易找到“次佳”解决方案。一些高级求解器为此内置了工具(称为:solution pool)。注意:glpk 没有这个选项。或者,我们也可以通过添加一个禁止最佳解决方案的切割来实现这一点,然后解析 (link). In this case we exploited some structure. A general cut for 0-1 variables is derived here。这也可以用于一般整数变量,但事情会变得有点混乱。
我正在尝试使用 GLPK 来解决 LP 问题。我的问题是计算机网络中的路由问题。给定网络拓扑和每个 link 容量以及网络中每个源-目的地对的流量需求矩阵,我想最小化网络中的最大 link 利用率。这是一个LP问题,我知道如何使用GLPK得到最优解。
我的问题是我也想获得次优解。有什么方法可以让我通过 GLPK 获得前 10 个次优解决方案?
最佳
对于纯 LP(只有连续变量),寻找“下一个最佳”解决方案的概念非常困难(只需将 epsilon 移开,你就会有另一个解决方案).我们可以对此进行不同的定义:找到“下一个最佳”角点(a.k.a.bases)。这不是那么容易做到的,但是使用二进制变量 (link).
对碱基进行编码是一种有点复杂的方法如果问题实际上是 MIP(具有二进制变量),则更容易找到“次佳”解决方案。一些高级求解器为此内置了工具(称为:solution pool)。注意:glpk 没有这个选项。或者,我们也可以通过添加一个禁止最佳解决方案的切割来实现这一点,然后解析 (link). In this case we exploited some structure. A general cut for 0-1 variables is derived here。这也可以用于一般整数变量,但事情会变得有点混乱。