BenchmarkRunner: Ensure outputs are discarded

This commit is contained in:
2021-05-26 09:44:49 -05:00
parent 9689306876
commit 1bb2b48b7d
9 changed files with 54 additions and 22 deletions

View File

@@ -36,7 +36,7 @@
function load(self)
if self.loaded === nothing
self.loaded = load_jump_instance(self.filename)
self.loaded = load_instance(self.filename)
self.samples = self.loaded.py.samples
end
end

View File

@@ -111,7 +111,7 @@ function _check_miplearn_version(file)
end
function load_jump_instance(filename::AbstractString)::JuMPInstance
function load_instance(filename::AbstractString)::JuMPInstance
@info "Reading: $filename"
instance = nothing
time = @elapsed begin
@@ -155,4 +155,4 @@ function load_jump_instance(filename::AbstractString)::JuMPInstance
end
export JuMPInstance, save, load_jump_instance
export JuMPInstance, save, load_instance

View File

@@ -224,9 +224,10 @@ end
function solve_lp(data::JuMPSolverData; tee::Bool=false)
model, bin_vars = data.model, data.bin_vars
for var in bin_vars
JuMP.unset_binary(var)
JuMP.set_upper_bound(var, 1.0)
JuMP.set_lower_bound(var, 0.0)
~is_fixed(var) || continue
unset_binary(var)
set_upper_bound(var, 1.0)
set_lower_bound(var, 0.0)
end
wallclock_time = @elapsed begin
log = _optimize_and_capture_output!(model, tee=tee)
@@ -236,10 +237,11 @@ function solve_lp(data::JuMPSolverData; tee::Bool=false)
obj_value = nothing
else
_update_solution!(data)
obj_value = JuMP.objective_value(model)
obj_value = objective_value(model)
end
for var in bin_vars
JuMP.set_binary(var)
~is_fixed(var) || continue
set_binary(var)
end
return miplearn.solvers.internal.LPSolveStats(
lp_value=obj_value,

View File

@@ -35,8 +35,13 @@ function solve!(
solver::LearningSolver,
instance::Instance;
tee::Bool = false,
discard_output::Bool = false,
)
return @python_call solver.py.solve(instance.py, tee=tee)
return @python_call solver.py.solve(
instance.py,
tee=tee,
discard_output=discard_output,
)
end

View File

@@ -26,9 +26,11 @@ function parallel_solve!(
n_trials::Int = 3,
)::Nothing
for (solver_name, solver) in runner.solvers
@info "Benchmarking: $solver_name"
for i in 1:n_trials
for instance in instances
stats = solve!(solver, instance)
stats = solve!(solver, instance, discard_output=true)
instance.py.free()
stats["Solver"] = solver_name
stats = Dict(k => isnothing(v) ? missing : v for (k, v) in stats)
if runner.results === nothing