# UnitCommitment.jl: Optimization Package for Security-Constrained Unit Commitment # Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved. # Released under the modified BSD license. See COPYING.md for more details. using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON @testset "usage" begin instance = UnitCommitment.read("$FIXTURES/case14.json.gz") for sc in instance.scenarios sc.power_balance_penalty = [100000 for _ in 1:instance.time] end for sc in instance.scenarios for line in sc.lines, t in 1:4 line.normal_flow_limit[t] = 10.0 end end optimizer = optimizer_with_attributes(Cbc.Optimizer, "logLevel" => 0) model = UnitCommitment.build_model( instance = instance, optimizer = optimizer, variable_names = true, ) @test name(model[:is_on]["g1", 1]) == "is_on[g1,1]" # Optimize and retrieve solution UnitCommitment.optimize!(model) solution = UnitCommitment.solution(model) # Write solution to a file filename = tempname() UnitCommitment.write(filename, solution) loaded = JSON.parsefile(filename) @test length(loaded["Is on"]) == 6 # Verify solution @test UnitCommitment.validate(instance, solution) # Reoptimize with fixed solution UnitCommitment.fix!(model, solution) UnitCommitment.optimize!(model) @test UnitCommitment.validate(instance, solution) end