保存和重复使用PULP CPLEX模型。

问题描述 投票:0回答:1

我需要再次使用这个模型,因为它是非常长的,而且在建立的过程中会有延迟,所以我如何能再次使用这个模型,通过固定一些变量来解决,而让其他变量自由地找到一个结果。

我正在尝试。

***** Buil model and save in external file ****
pickle.dump(prob, open('modelo.pkl', 'wb'))
***** Solve problem ****
prob.solve(solver)
***** read again problem  ****
prob = pickle.load(open("modelo.pkl","rb"))
***** fix some variable result problem  ****
carro[1,1].setInitialValue(200)
carro[1,1].fixValue()
carro[2,1].setInitialValue(500)
carro[2,1].fixValue()
***** Solve again problem ****
prob.solve(solver)
cplex pulp
1个回答
0
投票

让我使用 动物园和巴士的例子 给你看

import pulp
import cplex

bus_problem = pulp.LpProblem("bus", pulp.LpMinimize)

nbBus40 = pulp.LpVariable('nbBus40', lowBound=0, cat='Integer')
nbBus30 = pulp.LpVariable('nbBus30', lowBound=0, cat='Integer')

# Objective function
bus_problem += 500 * nbBus40 + 400 * nbBus30, "cost"

# Constraints
bus_problem += 40 * nbBus40 + 30 * nbBus30 >= 300

#fix nbBus40
bus_problem += nbBus40==2

bus_problem.solve(pulp.CPLEX())
print(pulp.LpStatus[bus_problem.status])

for variable in bus_problem.variables():
    print ("{} = {}".format(variable.name, variable.varValue))

给予

Optimal
nbBus30 = 8.0
nbBus40 = 2.0

import pulp
import cplex

bus_problem = pulp.LpProblem("bus", pulp.LpMinimize)

nbBus40 = pulp.LpVariable('nbBus40', lowBound=2, upBound=2, cat='Integer')
nbBus30 = pulp.LpVariable('nbBus30', lowBound=0, cat='Integer')

# Objective function
bus_problem += 500 * nbBus40 + 400 * nbBus30, "cost"

# Constraints
bus_problem += 40 * nbBus40 + 30 * nbBus30 >= 300



bus_problem.solve(pulp.CPLEX())
print(pulp.LpStatus[bus_problem.status])

for variable in bus_problem.variables():
    print ("{} = {}".format(variable.name, variable.varValue))

它给出了相同的,但没有额外的约束条件。

© www.soinside.com 2019 - 2024. All rights reserved.