Make compatible with MIPLearn 5b3a56f0; reformat source code

This commit is contained in:
2021-08-18 05:36:51 -05:00
parent 97b9fc9ad8
commit 39072a6290
18 changed files with 342 additions and 314 deletions

View File

@@ -15,14 +15,14 @@ function build_knapsack_model()
n = length(weights)
@variable(model, x[1:n], Bin)
@objective(model, Max, sum(x[i] * prices[i] for i in 1:n))
@constraint(model, c1, sum(x[i] * weights[i] for i in 1:n) <= capacity)
@objective(model, Max, sum(x[i] * prices[i] for i = 1:n))
@constraint(model, c1, sum(x[i] * weights[i] for i = 1:n) <= capacity)
# Add ML information to the model
@feature(model, [5.0])
@feature(c1, [1.0, 2.0, 3.0])
@category(c1, "c1")
for i in 1:n
for i = 1:n
@feature(x[i], [weights[i]; prices[i]])
@category(x[i], "type-$i")
end
@@ -36,7 +36,7 @@ function build_knapsack_model()
@test model.ext[:miplearn]["variable_categories"]["x[3]"] == "type-3"
@test model.ext[:miplearn]["constraint_features"]["c1"] == [1.0, 2.0, 3.0]
@test model.ext[:miplearn]["constraint_categories"]["c1"] == "c1"
@test model.ext[:miplearn]["instance_features"] == [5.0]
@test model.ext[:miplearn]["instance_features"] == [5.0]
return model
end

View File

@@ -23,6 +23,6 @@ using Cbc
solver = LearningSolver(Cbc.Optimizer)
solve!(solver, file_instance)
@test length(h5.get_vector("mip_var_values")) == 3
end
@test length(h5.get_array("mip_var_values")) == 3
end
end

View File

@@ -39,7 +39,7 @@ using MIPLearn
@testset "Discard output" begin
instance = build_knapsack_file_instance()
solver = LearningSolver(Cbc.Optimizer)
solve!(solver, instance, discard_output=true)
solve!(solver, instance, discard_output = true)
loaded = load_instance(instance.filename)
@test length(loaded.samples) == 0
end

View File

@@ -9,38 +9,24 @@ using DataFrames
@testset "BenchmarkRunner" begin
@info "Building training data..."
instances = [
build_knapsack_file_instance(),
build_knapsack_file_instance(),
]
stats = parallel_solve!(
LearningSolver(Cbc.Optimizer),
instances,
)
instances = [build_knapsack_file_instance(), build_knapsack_file_instance()]
stats = parallel_solve!(LearningSolver(Cbc.Optimizer), instances)
@test length(stats) == 2
@test stats[1] !== nothing
@test stats[2] !== nothing
benchmark = BenchmarkRunner(
solvers=Dict(
"baseline" => LearningSolver(
Cbc.Optimizer,
components=[],
),
"ml-exact" => LearningSolver(
Cbc.Optimizer,
),
"ml-heur" => LearningSolver(
Cbc.Optimizer,
mode="heuristic",
),
solvers = Dict(
"baseline" => LearningSolver(Cbc.Optimizer, components = []),
"ml-exact" => LearningSolver(Cbc.Optimizer),
"ml-heur" => LearningSolver(Cbc.Optimizer, mode = "heuristic"),
),
)
@info "Fitting..."
fit!(benchmark, instances)
@info "Benchmarking..."
parallel_solve!(benchmark, instances, n_trials=2)
parallel_solve!(benchmark, instances, n_trials = 2)
csv_filename = tempname()
write_csv!(benchmark, csv_filename)