Сохранить и повторно использовать модель PULP CPLEX - PullRequest
0 голосов
/ 01 мая 2020

Мне нужно снова использовать модель, потому что она очень длинная и задерживается при построении, так как я могу использовать модель снова, чтобы решить ее, исправив некоторые переменные и оставив другие свободными для поиска результата.

Я попробую:

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

1 Ответ

0 голосов
/ 02 мая 2020

позвольте мне использовать пример зоопарка и автобуса , чтобы показать вам

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

, который дает то же самое, но без дополнительного ограничения

...