首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pickle对PuLP不友好

pickle对PuLP不友好
EN

Stack Overflow用户
提问于 2014-04-04 05:18:01
回答 1查看 320关注 0票数 4

我正在使用Python2.7,并使用PuLP库来设置一个问题。一旦定义了变量、目标和约束,我就会选择LpProblem对象以发送到别处的求解器。在取消我的问题时,我注意到所有的变量都是重复的:

代码语言:javascript
复制
import pulp
import pickle

prob = pulp.LpProblem('test problem', pulp.LpMaximize)
x = pulp.LpVariable('x', 0, 10)
y = pulp.LpVariable('y', 3, 6)
prob += x + y
prob += x <= 5

print prob
print pickle.loads(pickle.dumps(prob))

第一个print语句输出:

代码语言:javascript
复制
>>> print prob
test problem:
MAXIMIZE
1*x + 1*y + 0
SUBJECT TO
_C1: x <= 5

VARIABLES
x <= 10 Continuous
3 <= y <= 6 Continuous

而第二个打印:

代码语言:javascript
复制
>>> print pickle.loads(pickle.dumps(prob))
test problem:
MAXIMIZE
1*x + 1*y + 0
SUBJECT TO
_C1: x <= 5

VARIABLES
x <= 10 Continuous
x <= 10 Continuous
3 <= y <= 6 Continuous
3 <= y <= 6 Continuous

正如您所看到的,目标和约束都很好,但所有变量都是重复的。是什么导致了这种行为,我如何防止这种情况发生?

EN

回答 1

Stack Overflow用户

发布于 2014-04-04 06:06:58

所以我还没有弄清楚为什么会发生这种情况,但我确实有一种方法来解决任何陷入同样情况的人:

代码语言:javascript
复制
def UnpicklePulpProblem(pickled_problem):
    wrong_result = pickle.loads(pickled_problem)
    result = pulp.LpProblem(wrong_result.name, wrong_result.sense)
    result += wrong_result.objective
    for i in wrong_result.constraints: result += wrong_result.constraints[i], i
    return result

以这种方式添加目标和约束可以确保变量在问题中只定义一次,因为您基本上是以这种方式从头开始重新构建问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22849208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档