使用现有的线性规划工具找到所有替代的基本解决方案

2024-02-14

我必须找到一些微小线性规划问题的所有基本解决方案。

这是一个示例(采用 lp_solve 格式):

max: x1 + x2;
x1 + x2 <= 1;
x1 <= 0.8;
x2 <= 0.8;

所有 2 个基本解决方案:

  • x1 = 0.2,x2 = 0.8
  • x1 = 0.8,x2 = 0.2

当然有a way http://mat.gsia.cmu.edu/classes/QUANT/NOTES/chap7/node5.html寻找替代解决方案,但我真的更喜欢使用现有的库,而不是编写自己的简单代码。

我使用Python作为我的编程语言,希望有一些方法lp_solve http://lpsolve.sourceforge.net/5.5/ or GLPK https://www.gnu.org/software/glpk/的C API 可以做到这一点。

Thanks.


没有常规方法可以做到这一点glpk;恕我直言,任何现实世界的求解器都不太可能实现类似的东西,因为它在实践中不是很有用,而且它肯定不是一个简单的问题。

确实很容易找到什么one一旦使用单纯形算法达到最优,这并不意味着很容易将它们全部列出。

考虑一个 LP,其域具有维度n;集合S最优解是一个凸多面体,其维度m可以是任何来自0 to n-1。 你想要一个方法来列出问题的所有基本解决方案,即所有顶点S: 立刻m大于 2,当您从一种基本解决方案转向另一种基本解决方案时,您需要小心避免循环。

然而,(幸运的是!)不需要编写自己的单纯形代码:您可以使用 glpk 库(也可能使用 lpsolve)访问当前基础的内部结构。

编辑:两种可能的解决方案

  1. 更好的方法是使用另一个库,例如PPL http://bugseng.com/products/ppl为了这。 假设您遇到以下形式的问题:

    min cx; subject to: Ax <= b
    

    首先用 glpk 解决你的问题,这会给你最优值V的问题。从这一点上,您可以使用 PPL 来获得最优值多面体的描述:

    cx = V and Ax <= b
    

    作为其极值点的凸包,对应于您正在寻找的 BFS。

  2. 您(可能)可以使用 glpk 单纯形例程。一旦获得最佳 BFS,您就可以使用以下例程降低与所有非基本列相关的成本glp_get_row_dual(变量的基础状态可以通过以下方式获得glp_get_row_stat),这样你就可以找到一个非基本变量,其成本降​​低为空。然后,I think你可以使用函数glp_set_row_stat更改该列的基础状态,使其进入基础。 (然后,只要避免循环,您就可以重复此过程。)

请注意,我自己没有尝试过任何这些解决方案;我认为第一个是迄今为止最好的,尽管它需要您学习 PPL API。如果您想选择第二个,我强烈建议您向 glpk 维护者发送一封电子邮件(或查看源代码),因为我真的不确定它是否会按原样工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用现有的线性规划工具找到所有替代的基本解决方案 的相关文章

  • Pyomo 无法找到 GLPK 解算器

    我正在尝试将 GLPK 解算器与 Pyomo 一起使用 我有一个已经过测试的工作模型 但不断收到错误消息 提示无法找到 GLPK 警告 无法找到解算器 glpk 所需的 glpsol 可执行文件 我已经成功安装glpk 我还将目录添加到路径
  • 尽管显然存在可行的答案,但 scipy.optimize.linprog 无法找到可行的起点

    向量 k 似乎满足所有约束 我在这里缺少什么吗 谢谢 import numpy as np from scipy optimize import linprog A ub 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 添加许多约束时 PuLP 非常慢

    我正在尝试使用 PuLP 但它需要50秒添加 4000 个约束 包含 67 个变量 解决问题只需要几分之一秒的时间 我们希望使用 PuLP 轻松测试大量问题的多个求解器 PuLP 应该花这么长时间吗 直接使用 PyGLPK 只需要几分之一秒
  • 线性规划 - Google ortool - 错误的决策变量最终值

    我正在尝试解决线性规划问题 以下是问题的具体情况 我有一个网络流问题已转换为线性规划问题 因此 所有流量约束 例如容量 流量守恒等 都必须强制执行 我的目标是最小化成本 决策变量 我通过定义字典并在这 128 个位置中的每个位置添加决策变量
  • 如何在 DOCPLEX (Python) 上使用连续变量进行 IF-THEN 约束?

    我使用 DOCPLEX 构建混合整数线性规划 MILP 问题 然后通过 Python 上的 CPLEX 解决该问题 但是 在尝试使用 IF THEN 约束解决 MILP 问题时 我收到以下错误 DOcplexException Model
  • 整数线性编程 Java:有多种开源和商业工具可用。使用哪一个?

    我需要为我的应用程序使用整数线性编程 API 工具 虽然我的应用程序是用 Java 编写的 但我不介意从 Java 调用 EXE 工具 使用文件 MPS 等 提供输入 我的搜索分析如下 有多种开源和商业工具可用于解决 ILP 以下问题 我发
  • 在线性规划中将条件约束转换为线性约束

    我有两个变量 x gt 0 和 y 二进制 0 或 1 并且我有一个常数 z gt 0 如何使用线性约束来描述以下条件 If x z then y 1 else y 0 我试图通过定义另一个二元变量 i 和一个足够大的正常数 U 并添加约束
  • 线性规划 - 等于表达式符号的变量

    我正在尝试编写一个线性程序 需要一个等于 x c 符号的变量 z 其中 x 是另一个变量 c 是常数 我考虑过z x c x c 不幸的是 如果 x c 则会除以 0 我不能使用 z x c 因为我不想通过 x 和 c 之间的差异大小来对其
  • Gurobi,如何将连续变量更改为二元变量

    我正在使用 gurobi python 接口 无论如何 是否可以将连续变量转换为二进制变量 我只是不想转换 m addVar lb 0 ub 1 vtype GRB CONTINUOUS to m addVar lb 0 ub 1 vtyp
  • 为什么 scipy.optimize.linprog 返回不满足约束的解决方案?

    我做错了什么还是这是一个错误 c np array 1 0 0 0 0 0 0 0 0 A ub np array 1 724 911 551 555 896 478 80 293 1 566 42 937 233 883 392 909
  • .NET / C# 的线性编程库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要求解欠定线性方程组和约束 然后找到最小化成本函数的特定解决方案 这需要通过在 NET 和 Mon
  • iOS 线性规划库

    我正在寻找一个 iOS 库 可以为我正在开发的应用程序解决 LP IP BIP MIP 问题 我找到了 GLPK 但不知道如何为 iOS 编译它 在网上搜索了一段时间后 我没有找到任何有趣的东西 如果有人可以帮助我如何编译适用于 iOS 的
  • cplex boolVarArray 给出双精度值

    我一直在尝试使用 CPLEX Java 实现 ILP 并且长期以来一直被一个问题困扰 以下是 ILP 的几个变量 IloIntVar above new IloIntVar numRect IloIntVar below new IloIn
  • scipy.optimize.minimize(COBYLA 和 SLSQP)忽略 for 循环内发起的约束

    我正在使用 scipy optimize minimize 来求解复杂的油藏优化模型 SQSLP 和 COBYLA 因为问题受到边界和约束方程的约束 每天有一个决策变量 蓄水量 水库的释放量是根据目标函数内蓄水量变化的函数来计算的 然后应用
  • PuLP目标函数中ABS()的数学运算

    我正在尝试在 PuLP 中构建 LP 问题 因为我是 python 新手 想知道如何使用绝对值运算编写目标函数 到目前为止 我一直在使用 AMPL 来制定问题 现在想将整个模型转换为 Python 谁能帮我理解如何编码 SUM ABS x
  • 使用 lpSolve 优化 R 团队名单

    我是 R 新手 有一个想要解决的特定幻想运动队优化问题 我见过其他帖子使用 lpSolve 来解决类似的问题 但我似乎无法理解代码 下面的示例数据表 每个球员都在一个球队中 扮演着特定的角色 有薪水 并且每场比赛都有平均得分 我需要的限制是
  • 找到线性规划的精确解

    我需要找到线性程序的精确实数解 其中所有输入都是整数 重要的是 求解器还将解输出为有理数 理想情况下无需使用浮点数执行任何中间步骤 GLPK 可以进行精确算术 但无法将解显示为有理数 即 1 3 得到 0 3333 我可能可以尝试猜测这意味
  • 我如何限制 COIN-CBC 的运行时间,因为 maxSeconds 参数似乎对我不起作用?

    我想使用 COIN CBC 或 PuLP 提供的任何其他免费 MIP 求解器 求解一个小型混合整数程序 但时间限制为 10 秒 但是 maxSeconds 参数似乎对我不起作用 举个例子 我这 样调用没有时间限制的求解器 prob solv
  • 使用 Python PuLP 混合整数规划的时间限制

    我一直在使用PuLP http pythonhosted org PuLP 解决我感兴趣的特定混合整数线性规划 MIP 但是 随着问题规模的增长 PuLP 花费的时间太长 我希望能够运行求解器一段时间 并在需要很长时间的情况下提前终止它 并
  • 如何在不使用 exec 的情况下生成 PuLP 变量和约束?

    我使用 PuLP 库编写了以下 Python 代码 用于使用整数规划公式解决背包问题 我使用字符串生成 LpVariable 命令并添加约束 然后使用 eval 执行它们 有没有办法在不使用 eval 的情况下做到这一点 from pulp

随机推荐