天道酬勤,学无止境

linear-programming

使用现有的线性规划工具找到所有替代的基本解决方案(Find all alternative basic solutions using existing linear-programming tool)

问题 我必须找到一些微小的线性规划问题的所有基本解决方案。 这是一个示例(采用 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 当然有一种寻找替代解决方案的方法,但我真的更喜欢使用现有的库而不是制作自己的单纯形代码。 我使用 Python 作为我的编程语言,希望 lp_solve 或 GLPK 的 C API 中有一些方法可以做到这一点。 谢谢。 回答1 没有例程可以用glpk来做到这glpk ; 恕我直言,任何现实世界的求解器都不太可能实现类似的东西,因为它在实践中不是很有用,而且肯定不是一个简单的问题。 一旦您使用单纯形算法达到最优,确实很容易找到另一种基本解决方案,这并不意味着很容易将它们全部列出。 考虑一个域的维度为n的 LP; 最优解的集合S是一个凸多面体,其维度m可以是从0到n-1任何0 。 您需要一种方法来列出问题的所有基本解,即S所有顶点:一旦m大于 2,当您从一个基本解移动到另一个基本解时,您将需要小心避免循环。 但是,(幸运的是!)无需编写自己的单纯形代码:您可以使用 glpk 库访问当前基础的内部结构,也可能使用 lpsolve。 编辑:两种可能的解决方案

2021-09-18 15:01:53    分类:技术分享    linear-programming   glpk   lpsolve

混合整数规划:每个条件的变量赋值(if then else)(Mixed integer programming: variable assignment per condition (if then else))

问题 我对(混合)整数规划比较陌生,并且被约束的公式所困扰。 在我的简化模型中,我有一个参数和两个变量,它们是正实数,上限为 321。 我想表达的逻辑在这里: if Parameter > Variable1: Variable2 = Variable1 else: Variable2 = Parameter **edit** (while Variable1 is always >= Variable2) 实际上是否可以使用线性 in(equalities) 来描述这一点? 如果有帮助:对于实现,我使用 Python、Pyomo 和最新的 gurobi 求解器。 谢谢你的帮助! 回答1 编辑:将Variable2设置为Variable1和Parameter最小值或最大值。 min(Parameter,Variable1) : 如果您确定Variable2在目标函数中“希望” Variable2小,那么您只需要要求Variable2小于或等于Parameter和Variable1 : Variable2 <= Variable1 Variable2 <= Parameter max(Parameter,Variable1) : 如果您确定Variable2在目标函数中“希望” Variable2大,那么您只需要要求Variable2大于或等于Parameter和Variable1

2021-09-18 12:40:50    分类:技术分享    optimization   mathematical-optimization   linear-programming   scientific-computing   integer-programming

将 gurobi 与 java 一起使用 vs gurobi 与 ampl(Using gurobi with java vs gurobi with ampl)

问题 使用 Gurobi 和 AMPL 而不是使用 Gurobi 直接 API(java、C#、C++ 等)来解决大型 MIP 问题有什么优势? 使用 Gurobi 的 API 而不是 AMPL 时是否有性能优势? 回答1 直到 90 年代中期,使用 MIP 求解器解决大规模问题(因此不包括电子表格)的唯一实用选项是 创建 mps 文件使用低级 C 接口(在 cplex 中称为可调用库) 使用领域特定语言,如 AMPL 或 GAMS。 当时,对于非常复杂的 MIP 模型,AMPL 模型会更加简洁、可读和易于维护。 即使在今天,AMPL 模型看起来更像是一个数学公式,而不是其他任何东西。 AMPL 的优势之一是它的数据结构,但是今天 C#、Java 和 C++ 的标准库都具有很好的数据结构。 AMPL 的另一个优点是它的语法看起来非常直观 subject to {j in J} sum {i in I} x[i,j] <= b[j] 但是新的 C++0x 和最新版本的 Java 的语法更接近于此。 AMPL 在求解器之间是可移植的,但是求解器之间的接口差别不大。 虽然将应用程序从一个求解器移植到另一个求解器并不是一项微不足道的任务,但对我来说,这并没有尝试切换数据库(比如从 MySQL 到 Postgres)那么大。 AMPL 有一些特定的缺点。 对于大多数业务应用程序,将 AMPL

2021-09-15 15:37:38    分类:技术分享    java   mathematical-optimization   linear-programming   ampl   gurobi

RGLPK 中的梦幻足球线性规划(Fantasy football linear programming in R with RGLPK)

问题 长时间的听众第一次打电话给 SO .. 我问的问题之前曾被问过非常相似,但是我不相信我足够聪明来破译如何实施解决方案,为此我深表歉意。 这是我发现的问题的链接:R Multiple Integer Linear Programming 中的约束 我正在最大化我的预期幻想点数(FPTS_PREDICT_RF),受制于 50,000 工资帽,同时最小化我提出的“风险”计算。 现在,问题在于“flex”位置。 球队需要由9个位置组成,1 QB 2 RB 3 WR 1 TE 1 DEF 1 FLEX flex 可以是 RB、WR 或 TE。 所以,我们可以有: 1 QB 2-3 RB 3-4 WR 1-2 TE 1 DEF 我正在尝试实现 #RB + #WR + #TE ==7 的约束。 这是相关的代码: library(Rglpk) # number of variables num.players <- length(final$PLAYER) # objective: obj <- final$FPTS_PREDICT_RF # the vars are represented as booleans var.types <- rep("B", num.players) # the constraints matrix <- rbind(as.numeric(final

2021-09-14 23:12:16    分类:技术分享    r   constraints   mathematical-optimization   linear-programming

R 多整数线性规划中的约束(Constraints in R Multiple Integer Linear Programming)

问题 我正在用 R 编写一些代码来优化我的梦幻足球阵容,但我在一个约束下遇到了一些困难。 我基本上有一份球员名单、他们的位置、预期分数和成本。 名册必须包括: 1 QB 2 RB 2 WR 1 TE 1 FLEX(RB、WR 或 TE) 总成本低于 200 美元 我的问题是我的代码想要选择 FLEX 位置作为它已经选择为 WR、RB 或 TE 的球员。 这是我正在使用的代码,我有一个表格,其中包含玩家、位置、积分和成本的列。 在表中,任何 RB、WR 或 TE 都被复制,位置为 FLEX。 我试图更改将 pos=="FLEX" 设置为 pos=="WR"||pos=="RB"||pos=="TE" 的行,但没有奏效,我唯一的其他想法是运行代码,如果它复制了 FLEX 播放器,我将它从源表中删除。 不过这有点痛苦。 任何想法都非常感谢。 name <- mydata$name pos <- mydata$pos pts <- mydata$pts cost <- mydata$cost num.players <- length(name) f <- pts var.types <- rep("B", num.players) A <- rbind(as.numeric(pos=="QB") , as.numeric(pos=="RB") , as.numeric(pos=="WR"

2021-09-14 11:43:45    分类:技术分享    r   optimization   constraints   linear-programming

在 Windows 上安装 GLPK(GNU 线性编程工具包)(Installing GLPK (GNU Linear Programming Kit) on Windows)

问题 这可能是一个烦人的问题。 但我希望有人可以向我提供有关如何在 Windows 机器上启动和运行 GLPK 的分步说明。 我有 Windows 7 64 位。 我曾尝试查看各种网站上的一些说明,但一直遇到问题。 我不是很精通创建目录,使用二进制文件(例如什么是二进制文件)等......甚至运行命令对我来说也有点陌生。 为了了解我在说明中需要什么样的细节,这里有一些我尝试过(但失败)使用的: http://winglpk.sourceforge.net/ http://en.wikibooks.org/wiki/GLPK/Windows 正如你所看到的,我需要一些相当详细的东西。 我已经阅读了一个 GLPK 程序的示例,我相信一旦我启动并运行程序,我应该能够编写代码来使用它。 谁能帮我? 我会很感激的。 编辑:作为一个并行问题,我也对其他程序的建议感兴趣,这些程序将执行与 GLPK 类似的操作,但安装和使用更直接。 回答1 以下是一些帮助您前进的建议: 如果您在运行 Windows 命令行时遇到困难,那么 GLPK(自行安装)可能不是最佳选择。 看看能不能找个Windows 有经验的人帮你安装? (一旦安装,LP 模块就相当容易使用,不会比任何其他模块复杂) 您可以使用任何商业求解器吗? (MATLAB 和 CPLEX 可能很棒) 如果您将在未来一段时间内使用 Windows

2021-09-12 16:55:46    分类:技术分享    gnu   linear-programming

Using gurobi with java vs gurobi with ampl

What are the advantages of using Gurobi with AMPL instead of using Gurobi direct API (java, C#, C++, etc.) for solving large MIP problems? Are there performance benefits when using Gurobi's API instead of AMPL?

2021-09-07 10:53:21    分类:问答    java   mathematical-optimization   linear-programming   ampl   gurobi

Set up linear programming optimization in R using LpSolve?

I have this optimization problem where I am trying to maximize column z based on a unique value from column X, but also within a constraint that each of the unique values picked of X added up column of Y most be less than (in this example) 23. For example, I have this sample data: d=data.frame(x=c(1,1,1,2,2,2,3,3,3),y=c(9,7,5,9,7,5,9,7,5),z=c(25,20,5,20,10,5,10,5,3)) Which looks like this: X Y Z 1 1 9 25 2 1 7 20 3 1 5 5 4 2 9 20 5 2 7 10 6 2 5 5 7 3 9 10 8 3 7 5 9 3 5 5 The result should look like this: X Y Z 1 1 9 25 4 2 9 20 9 3 5 5 How do I set this problem up in the lpSolve::lp function?

2021-09-07 06:40:25    分类:问答    r   optimization   linear-programming   lpsolve

How to use Continuous Variables for IF-THEN constraints on DOCPLEX (Python)?

I'm using DOCPLEX to build up a Mixed Integer Linear Programming (MILP) problem which is then solved via CPLEX on Python. However, upon trying to solve the MILP problem using IF-THEN constraints, I receive the following error: DOcplexException: Model.if_then(), nbBus40 >= 3.0 is not discrete This is happening because I have declared nbbus40 variable to be continuous, as shown in the code below: from docplex.mp.model import Model mdl = Model(name='buses') nbbus40 = mdl.continuous_var(name='nbBus40') nbbus30 = mdl.integer_var(name='nbBus30') mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300,

2021-09-06 05:22:38    分类:问答    python   linear-programming   cplex   mixed-integer-programming   docplex

How to select n objects from a set of N objects, maximizing the sum of pairwise distances between them

You have a set of N=400 objects, each having its own coordinates in a, say, 19-dimensional space. You calculate the (Euclidean) distance matrix (all pairwise distances). Now you want to select n=50 objects, such that the sum of all pairwise distances between the selected objects is maximal. I devised a way to solve this by linear programming (code below, for a smaller example), but it seems inefficient to me, because I am using N*(N-1)/2 binary variables, corresponding to all the non-redundant elements of the distance matrix, and then a lot of constraints to ensure self-consistency of the

2021-09-06 02:42:48    分类:问答    r   optimization   linear-programming   euclidean-distance