【问题标题】:PuLP - Is there a way to access the variable names from dict instead of parsing the string version from .variables()?PuLP - 有没有办法从 dict 访问变量名,而不是从 .variables() 解析字符串版本?
【发布时间】:2021-01-04 21:46:07
【问题描述】:

我正在使用 PuLP for Python 来解决一些线性规划问题。目前,我能够找到的唯一方法是在解决模型后检索变量名称是解析它的名称的字符串版本,该版本在列出所有使用的变量的pulp.LpProblem().variables() 方法中可用。 但是,这会返回一个类似于sometext('var1','var2') 的字符串。所以我需要解析文本来访问字符串名称,这样我才能得到正确的.varValue

有没有办法以类似 dict 的方式访问这些变量,或者是解析字符串的唯一方法?

【问题讨论】:

  • 我不认为你可以,尽管你可以用它们创建一个字典。 {v.name:v.varValue for v in model.variables()}

标签: python linear-programming cplex pulp


【解决方案1】:

您可以直接访问变量而无需检索它们。
考虑以下示例:

>>> import pulp
>>> x = pulp.LpVariable('x',0,3)
>>> y = pulp.LpVariable('y',0,3)
>>> prob = pulp.LpProblem('example',pulp.LpMinimize)
>>> prob+= x+y
>>> prob+= x+y >= 4
>>> prob.solve()
1           
>>> x.varValue
1.0
>>> y.varValue
3.0

这同样适用于其他变量容器,例如字典

>>> x_vars = pulp.LpVariable.dicts('x', range(1,6), lowBound=0, upBound=1)
>>> x_vars
{1: x_1, 2: x_2, 3: x_3, 4: x_4, 5: x_5}

在哪里可以使用键访问相关变量的值,例如x_vars[1].varValue

【讨论】:

  • 好的,我想我知道你会怎么做。在这种情况下,我为索引传递了元组,这导致名称是元组每个元素中文本的某种组合,这是解决后要取回的噩梦。似乎最好为 vars 使用非复合名称并在外部进行映射。
猜你喜欢
  • 2023-04-01
  • 2023-04-02
  • 2014-02-07
  • 1970-01-01
  • 2014-08-04
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
相关资源
最近更新 更多