|
|
@ -28,23 +28,34 @@ end
|
|
|
|
function solve(
|
|
|
|
function solve(
|
|
|
|
instance::Instance;
|
|
|
|
instance::Instance;
|
|
|
|
optimizer = nothing,
|
|
|
|
optimizer = nothing,
|
|
|
|
|
|
|
|
lp_optimizer = nothing,
|
|
|
|
output = nothing,
|
|
|
|
output = nothing,
|
|
|
|
marginal_costs = true,
|
|
|
|
marginal_costs = true,
|
|
|
|
return_model = false,
|
|
|
|
return_model = false,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
milp_optimizer = lp_optimizer = optimizer
|
|
|
|
if lp_optimizer == nothing
|
|
|
|
|
|
|
|
if optimizer == nothing
|
|
|
|
|
|
|
|
# If neither is provided, use default LP optimizer.
|
|
|
|
|
|
|
|
lp_optimizer = _get_default_lp_optimizer()
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
# If only MIP optimizer is provided, use it as
|
|
|
|
|
|
|
|
# LP solver too.
|
|
|
|
|
|
|
|
lp_optimizer = optimizer
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
if optimizer == nothing
|
|
|
|
if optimizer == nothing
|
|
|
|
milp_optimizer = _get_default_milp_optimizer()
|
|
|
|
optimizer = _get_default_milp_optimizer()
|
|
|
|
lp_optimizer = _get_default_lp_optimizer()
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@info "Building graph..."
|
|
|
|
@info "Building graph..."
|
|
|
|
graph = RELOG.build_graph(instance)
|
|
|
|
graph = RELOG.build_graph(instance)
|
|
|
|
_print_graph_stats(instance, graph)
|
|
|
|
_print_graph_stats(instance, graph)
|
|
|
|
|
|
|
|
|
|
|
|
@info "Building optimization model..."
|
|
|
|
@info "Building optimization model..."
|
|
|
|
model = RELOG.build_model(instance, graph, milp_optimizer)
|
|
|
|
model = RELOG.build_model(instance, graph, optimizer)
|
|
|
|
|
|
|
|
|
|
|
|
@info "Optimizing MILP..."
|
|
|
|
@info "Optimizing MILP..."
|
|
|
|
JuMP.optimize!(model)
|
|
|
|
JuMP.optimize!(model)
|
|
|
|