改用GUROBI实现的代码如下:
import gurobipy as gp
from gurobipy import *
# parameters
Plants = ["HN"]
Depots = ["NE", "SE"]
Warehouses = ["JS", "ZJ", "JL", "LN", "HLJ"]
Edges_Costs = dict({
("HN", "NE"): 3.5,
("HN", "SE"): 2.5,
("NE", "LN"): 1.5,
("NE", "JL"): 1.7,
("NE", "HLJ"): 2.0,
("SE", "LN"): 2.6,
("SE", "JL"): 2.7,
("SE", "JS"): 1.3,
("SE", "ZJ"): 1.5
})
arcs, Edges_Capacity = gp.multidict({
("HN", "NE"): 250,
("HN", "SE"): 250,
("NE", "LN"): 100,
("NE", "JL"): 100,
("NE", "HLJ"): 100,
("SE", "LN"): 100,
("SE", "JL"): 100,
("SE", "JS"): 100,
("SE", "ZJ"): 100
})
supple = {}
supple["HN"] = 450
demand = {}
demand["JS"] = 90
demand["ZJ"] = 70
demand["JL"] = 120
demand["LN"] = 120
demand["HLJ"] = 50
# model
min_cost_model = Model()
# decision var
# list(Edges_Costs) = list(Edge_Costs.keys())
print(list(Edges_Costs))
x = min_cost_model.addVars(arcs, vtype = GRB.CONTINUOUS, name = "flow")
# objective
obj = x.prod(Edges_Costs)
min_cost_model.setObjective(obj, GRB.MINIMIZE)
# constraints
# plants constraints
min_cost_model.addConstrs((x.sum(k, "*") <= supple[k] for k in supple.keys()), name = "plant constraints")
# depots constraints
min_cost_model.addConstrs((x.sum(k, "*") == x.sum("*", k) for k in Depots), name = "flow constraints")
# warehouse constraints
min_cost_model.addConstrs((x.sum("*", k) == demand[k] for k in demand.keys()), name = "warehouse constraints")
# flow constraints
min_cost_model.addConstrs((x[edge] <= Edges_Capacity[edge] for edge in Edges_Capacity.keys()), name="capacity_constraints")
# optimize
min_cost_model.write("model.lp")
min_cost_model.optimize()