mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 00:08:52 -06:00
Make tests completely silent; remove set_gap warnings on Cbc
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user