Minor changes

feature/replay^2
Alinson S. Xavier 1 year ago
parent 627952a083
commit 5728098614
Signed by: isoron
GPG Key ID: 0DA8E4B9E1109DCA

@ -52,14 +52,14 @@ function collect_gmi_dual(
@timeit "Read problem" begin @timeit "Read problem" begin
model = read_from_file(mps_filename) model = read_from_file(mps_filename)
or_obj_f = objective_function(model) set_optimizer(model, optimizer)
revised_obj = objective_function(model) obj_original = objective_function(model)
end end
for round = 1:max_rounds for round = 1:max_rounds
@info "Round $(round)..." @info "Round $(round)..."
@timeit "Convert to standard form" begin @timeit "Convert model to standard form" begin
# Extract problem data # Extract problem data
data = ProblemData(model) data = ProblemData(model)
@ -83,7 +83,8 @@ function collect_gmi_dual(
assert_eq(data_s.constr_lhs * sol_opt_s, data_s.constr_lb) assert_eq(data_s.constr_lhs * sol_opt_s, data_s.constr_lb)
end end
@timeit "Optimize standard form" begin @timeit "Optimize standard model" begin
@info "Optimizing standard model..."
optimize!(model_s) optimize!(model_s)
if round == 1 if round == 1
obj = objective_value(model_s) + data_s.obj_offset obj = objective_value(model_s) + data_s.obj_offset
@ -128,7 +129,7 @@ function collect_gmi_dual(
end end
end end
@timeit "Add GMI cuts to original problem" begin @timeit "Add GMI cuts to original model" begin
# Convert cuts # Convert cuts
cuts = backwards(transforms, cuts_s) cuts = backwards(transforms, cuts_s)
@ -150,28 +151,23 @@ function collect_gmi_dual(
constrs, gmi_exps = add_constraint_set_dual_v2(model, all_cuts) constrs, gmi_exps = add_constraint_set_dual_v2(model, all_cuts)
end end
@timeit "Optimize original form" begin @timeit "Optimize original model" begin
set_objective_function(model, or_obj_f) set_objective_function(model, obj_original)
set_optimizer(model, optimizer)
undo_relax = relax_integrality(model) undo_relax = relax_integrality(model)
@info "Optimizing original model (constr)..."
optimize!(model) optimize!(model)
obj = objective_value(model) obj1 = objective_value(model)
push!(stats_obj, obj) push!(stats_obj, obj1)
push!(stats_gap, gap(obj)) push!(stats_gap, gap(obj1))
sp = [shadow_price(c) for c in constrs]
end end
@timeit "Reoptimize with updated obj function" begin @timeit "Reoptimize with updated obj function" begin
revised_obj = (
or_obj_f - sum(
shadow_price(c) * gmi_exps[iz] for (iz, c) in enumerate(constrs)
)
)
delete.(model, constrs) delete.(model, constrs)
set_objective_function(model, revised_obj) set_objective_function(
set_optimizer(model, optimizer) model,
optimize!(model) obj_original - sum(sp[i] * gmi_exps[i] for (i, c) in enumerate(constrs)),
n_obj = objective_value(model) )
assert_eq(obj, n_obj, atol = 0.01)
end end
undo_relax() undo_relax()
end end
@ -403,10 +399,7 @@ function _dualgmi_set_callback(model, all_cuts)
end end
function KnnDualGmiComponent_fit(data::_KnnDualGmiData, train_h5) function KnnDualGmiComponent_fit(data::_KnnDualGmiData, train_h5)
x = hcat([ x = hcat([_dualgmi_features(filename, data.extractor) for filename in train_h5]...)'
_dualgmi_features(filename, data.extractor)
for filename in train_h5
]...)'
model = pyimport("sklearn.neighbors").NearestNeighbors(n_neighbors = data.k) model = pyimport("sklearn.neighbors").NearestNeighbors(n_neighbors = data.k)
model.fit(x) model.fit(x)
data.model = model data.model = model

Loading…
Cancel
Save