我需要再次使用这个模型,因为它是非常长的,而且在建立的过程中会有延迟,所以我如何能再次使用这个模型,通过固定一些变量来解决,而让其他变量自由地找到一个结果。
我正在尝试。
***** 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)
让我使用 动物园和巴士的例子 给你看
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))
它给出了相同的,但没有额外的约束条件。