From 16b0fec6cd5d7c92c3f6c3027392bcc5c76ea754 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 16 Apr 2022 10:11:33 -0500 Subject: [PATCH] Make tests completely silent; remove set_gap warnings on Cbc --- .../methods/XavQiuWanThi2019/optimize.jl | 13 ++++------ .../methods/XavQiuWanThi2019/structs.jl | 6 ++--- src/utils/log.jl | 26 ++++++++----------- test/model/formulations_test.jl | 7 ----- test/runtests.jl | 4 +-- test/transform/slice_test.jl | 3 --- 6 files changed, 20 insertions(+), 39 deletions(-) diff --git a/src/solution/methods/XavQiuWanThi2019/optimize.jl b/src/solution/methods/XavQiuWanThi2019/optimize.jl index b513bd1..78c8381 100644 --- a/src/solution/methods/XavQiuWanThi2019/optimize.jl +++ b/src/solution/methods/XavQiuWanThi2019/optimize.jl @@ -3,13 +3,12 @@ # Released under the modified BSD license. See COPYING.md for more details. function optimize!(model::JuMP.Model, method::XavQiuWanThi2019.Method)::Nothing + if !occursin("Gurobi", JuMP.solver_name(model)) + method.two_phase_gap = false + end function set_gap(gap) - try - JuMP.set_optimizer_attribute(model, "MIPGap", gap) - @info @sprintf("MIP gap tolerance set to %f", gap) - catch - @warn "Could not change MIP gap tolerance" - end + JuMP.set_optimizer_attribute(model, "MIPGap", gap) + @info @sprintf("MIP gap tolerance set to %f", gap) end initial_time = time() large_gap = false @@ -17,8 +16,6 @@ function optimize!(model::JuMP.Model, method::XavQiuWanThi2019.Method)::Nothing if has_transmission && method.two_phase_gap set_gap(1e-2) large_gap = true - else - set_gap(method.gap_limit) end while true time_elapsed = time() - initial_time diff --git a/src/solution/methods/XavQiuWanThi2019/structs.jl b/src/solution/methods/XavQiuWanThi2019/structs.jl index fc16383..4125563 100644 --- a/src/solution/methods/XavQiuWanThi2019/structs.jl +++ b/src/solution/methods/XavQiuWanThi2019/structs.jl @@ -13,7 +13,7 @@ Lazy constraint solution method described in: module XavQiuWanThi2019 import ..SolutionMethod """ - struct Method + mutable struct Method time_limit::Float64 gap_limit::Float64 two_phase_gap::Bool @@ -27,7 +27,7 @@ Fields - `time_limit`: the time limit over the entire optimization procedure. - `gap_limit`: - the desired relative optimality gap. + the desired relative optimality gap. Only used when `two_phase_gap=true`. - `two_phase_gap`: if true, solve the problem with large gap tolerance first, then reduce the gap tolerance when no further violated constraints are found. @@ -39,7 +39,7 @@ Fields formulation per time period. """ -struct Method <: SolutionMethod +mutable struct Method <: SolutionMethod time_limit::Float64 gap_limit::Float64 two_phase_gap::Bool diff --git a/src/utils/log.jl b/src/utils/log.jl index b69a7d5..1508156 100644 --- a/src/utils/log.jl +++ b/src/utils/log.jl @@ -5,20 +5,11 @@ import Logging: min_enabled_level, shouldlog, handle_message using Base.CoreLogging, Logging, Printf -struct TimeLogger <: AbstractLogger +Base.@kwdef struct TimeLogger <: AbstractLogger initial_time::Float64 - file::Union{Nothing,IOStream} - screen_log_level::Any - io_log_level::Any -end - -function TimeLogger(; - initial_time::Float64, - file::Union{Nothing,IOStream} = nothing, - screen_log_level = CoreLogging.Info, - io_log_level = CoreLogging.Info, -)::TimeLogger - return TimeLogger(initial_time, file, screen_log_level, io_log_level) + file::Union{Nothing,IOStream} = nothing + screen_log_level::Any = CoreLogging.Info + io_log_level::Any = CoreLogging.Info end min_enabled_level(logger::TimeLogger) = logger.io_log_level @@ -61,7 +52,12 @@ function handle_message( end end -function _setup_logger() +function _setup_logger(; level = CoreLogging.Info) initial_time = time() - return global_logger(TimeLogger(initial_time = initial_time)) + return global_logger( + TimeLogger( + initial_time = initial_time, + screen_log_level = level, + ) + ) end diff --git a/test/model/formulations_test.jl b/test/model/formulations_test.jl index f46717b..df86f09 100644 --- a/test/model/formulations_test.jl +++ b/test/model/formulations_test.jl @@ -72,26 +72,19 @@ function _test(formulation::Formulation)::Nothing end @testset "formulations" begin - @show "testset formulations" _test(Formulation()) - @show "ArrCon2000 ramping" _test(Formulation(ramping = ArrCon2000.Ramping())) # _test(Formulation(ramping = DamKucRajAta2016.Ramping())) - @show "MorLatRam2013 ramping" _test( Formulation( ramping = MorLatRam2013.Ramping(), startup_costs = MorLatRam2013.StartupCosts(), ), ) - @show "PanGua2016 ramping" _test(Formulation(ramping = PanGua2016.Ramping())) - @show "Gar1962 PwlCosts" _test(Formulation(pwl_costs = Gar1962.PwlCosts())) - @show "CarArr2006 PwlCosts" _test(Formulation(pwl_costs = CarArr2006.PwlCosts())) - @show "KnuOstWat2018 PwlCosts" _test(Formulation(pwl_costs = KnuOstWat2018.PwlCosts())) _small_test( Formulation(ramping = WanHob2016.Ramping()), diff --git a/test/runtests.jl b/test/runtests.jl index 66098e3..56cade9 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -6,12 +6,11 @@ using Test using UnitCommitment push!(Base.LOAD_PATH, @__DIR__) -UnitCommitment._setup_logger() +UnitCommitment._setup_logger(level = Base.CoreLogging.Error) const ENABLE_LARGE_TESTS = ("UCJL_LARGE_TESTS" in keys(ENV)) @testset "UnitCommitment" begin - @show "running runtests.jl" include("usage.jl") @testset "import" begin include("import/egret_test.jl") @@ -28,7 +27,6 @@ const ENABLE_LARGE_TESTS = ("UCJL_LARGE_TESTS" in keys(ENV)) include("solution/methods/XavQiuWanThi19/sensitivity_test.jl") end @testset "transform" begin - @show "beginning transform" include("transform/initcond_test.jl") include("transform/slice_test.jl") @testset "randomize" begin diff --git a/test/transform/slice_test.jl b/test/transform/slice_test.jl index 69b5fc4..49f8099 100644 --- a/test/transform/slice_test.jl +++ b/test/transform/slice_test.jl @@ -5,7 +5,6 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip @testset "slice" begin - @show "beginning slice" instance = UnitCommitment.read_benchmark("test/case14") modified = UnitCommitment.slice(instance, 1:2) @@ -36,8 +35,6 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip @test length(ps.demand) == 2 @test length(ps.revenue) == 2 end - @show "beginning building model under slice" - @show instance.reserves # Should be able to build model without errors optimizer = optimizer_with_attributes(Cbc.Optimizer, "logLevel" => 0) model = UnitCommitment.build_model(