加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – pickle与PuLP玩得不好

发布时间:2020-12-20 13:41:36 所属栏目:Python 来源:网络整理
导读:我正在使用 Python 2.7并使用PuLP库来设置问题.一旦定义了变量,目标和约束,我就会挑选我的LpProblem对象以发送给其他地方的Solver.在解开我的问题时,我注意到所有变量都是重复的: import pulpimport pickleprob = pulp.LpProblem('test problem',pulp.LpMax
我正在使用 Python 2.7并使用PuLP库来设置问题.一旦定义了变量,目标和约束,我就会挑选我的LpProblem对象以发送给其他地方的Solver.在解开我的问题时,我注意到所有变量都是重复的:

import pulp
import pickle

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

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

第一个打印声明输出:

>>> print prob
test problem:
MAXIMIZE
1*x + 1*y + 0
SUBJECT TO
_C1: x <= 5

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

而第二次打印:

>>> 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

如您所见,目标和约束都很好,但所有变量都是重复的.导致此行为的原因是什么,以及如何防止这种情况发生?

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读