# UnitCommitment.jl: Optimization Package for Security-Constrained Unit Commitment # Copyright (C) 2020-2021, UChicago Argonne, LLC. All rights reserved. # Released under the modified BSD license. See COPYING.md for more details. using Distributions function randomize_unit_costs!( instance::UnitCommitmentInstance; distribution = Uniform(0.95, 1.05), )::Nothing for unit in instance.units α = rand(distribution) unit.min_power_cost *= α for k in unit.cost_segments k.cost *= α end for s in unit.startup_categories s.cost *= α end end return end function randomize_load_distribution!( instance::UnitCommitmentInstance; distribution = Uniform(0.90, 1.10), )::Nothing α = rand(distribution, length(instance.buses)) for t in 1:instance.time total = sum(bus.load[t] for bus in instance.buses) den = sum( bus.load[t] / total * α[i] for (i, bus) in enumerate(instance.buses) ) for (i, bus) in enumerate(instance.buses) bus.load[t] *= α[i] / den end end return end function randomize_peak_load!( instance::UnitCommitmentInstance; distribution = Uniform(0.925, 1.075), )::Nothing α = rand(distribution) for bus in instance.buses bus.load *= α end return end export randomize_unit_costs!, randomize_load_distribution!, randomize_peak_load!