diff --git a/example_systems/10_IEEE_9_bus_DC_OPF/system/Network.csv b/example_systems/10_IEEE_9_bus_DC_OPF/system/Network.csv index 0677a9450a..f75feb06cc 100644 --- a/example_systems/10_IEEE_9_bus_DC_OPF/system/Network.csv +++ b/example_systems/10_IEEE_9_bus_DC_OPF/system/Network.csv @@ -1,11 +1,11 @@ -,Network_zones,Network_Lines,Start_Zone,End_Zone,Line_Max_Flow_MW,transmission_path_name,distance_mile,Line_Loss_Percentage,Line_Max_Reinforcement_MW,Line_Reinforcement_Cost_per_MWyr,DerateCapRes_1,CapRes_Excl_1,Angle_Limit_Rad,Line_Voltage_kV,Line_Resistance_Ohms,Line_Reactance_Ohms -BUS1,z1,1,1,4,250,BUS1_to_BUS4,0.5,0.015,500,12000,0.95,0,0.785398,345,0,68.5584 -BUS2,z2,2,4,5,250,BUS4_to_BUS5,0.5,0.015,500,12000,0.95,0,0.785398,345,20.23425,109.503 -BUS3,z3,3,5,6,150,BUS5_to_BUS6,0.5,0.015,500,12000,0.95,0,0.785398,345,46.41975,202.3425 -BUS4,z4,4,3,6,300,BUS3_to_BUS6,0.5,0.015,500,12000,0.95,0,0.785398,345,0,69.74865 -BUS5,z5,5,6,7,150,BUS6_to_BUS7,0.5,0.015,500,12000,0.95,0,0.785398,345,14.163975,119.9772 -BUS6,z6,6,7,8,250,BUS7_to_BUS8,0.5,0.015,500,12000,0.95,0,0.785398,345,10.117125,85.698 -BUS7,z7,7,8,2,250,BUS8_to_BUS2,0.5,0.015,500,12000,0.95,0,0.785398,345,0,74.390625 -BUS8,z8,8,8,9,250,BUS8_to_BUS9,0.5,0.015,500,12000,0.95,0,0.785398,345,38.088,191.63025 -BUS9,z9,9,9,4,250,BUS9_to_BUS4,0.5,0.015,500,12000,0.95,0,0.785398,345,11.9025,101.17125 -,,10,1,6,250,BUS1_to_BUS6,0.5,0.015,500,12000,0.95,0,0.785398,345,11.9025,101.17125 \ No newline at end of file +,Network_zones,Network_Lines,Start_Zone,End_Zone,Line_Max_Flow_MW,transmission_path_name,distance_mile,Line_Loss_Percentage,Line_Max_Reinforcement_MW,Line_Reinforcement_Cost_per_MWyr,DerateCapRes_1,CapRes_Excl_1,Angle_Limit_Rad,Line_Voltage_kV,Line_Resistance_Ohms,Line_Reactance_Ohms,Line_Hurdle_Rates +BUS1,z1,1,1,4,250,BUS1_to_BUS4,0.5,0.015,500,12000,0.95,0,0.785398,345,0,68.5584,10 +BUS2,z2,2,4,5,250,BUS4_to_BUS5,0.5,0.015,500,12000,0.95,0,0.785398,345,20.23425,109.503,10 +BUS3,z3,3,5,6,150,BUS5_to_BUS6,0.5,0.015,500,12000,0.95,0,0.785398,345,46.41975,202.3425,10 +BUS4,z4,4,3,6,300,BUS3_to_BUS6,0.5,0.015,500,12000,0.95,0,0.785398,345,0,69.74865,10 +BUS5,z5,5,6,7,150,BUS6_to_BUS7,0.5,0.015,500,12000,0.95,0,0.785398,345,14.163975,119.9772,10 +BUS6,z6,6,7,8,250,BUS7_to_BUS8,0.5,0.015,500,12000,0.95,0,0.785398,345,10.117125,85.698,10 +BUS7,z7,7,8,2,250,BUS8_to_BUS2,0.5,0.015,500,12000,0.95,0,0.785398,345,0,74.390625,10 +BUS8,z8,8,8,9,250,BUS8_to_BUS9,0.5,0.015,500,12000,0.95,0,0.785398,345,38.088,191.63025,10 +BUS9,z9,9,9,4,250,BUS9_to_BUS4,0.5,0.015,500,12000,0.95,0,0.785398,345,11.9025,101.17125,10 +,,10,1,6,250,BUS1_to_BUS6,0.5,0.015,500,12000,0.95,0,0.785398,345,11.9025,101.17125,10 \ No newline at end of file diff --git a/src/load_inputs/load_network_data.jl b/src/load_inputs/load_network_data.jl index ac7f2b1c8c..bc50d73477 100644 --- a/src/load_inputs/load_network_data.jl +++ b/src/load_inputs/load_network_data.jl @@ -25,6 +25,15 @@ function load_network_data!(setup::Dict, path::AbstractString, inputs_nw::Dict) # Transmission capacity of the network (in MW) inputs_nw["pTrans_Max"] = to_floats(:Line_Max_Flow_MW) / scale_factor # convert to GW + # Transmission line Hurdle rates (in $/MW) + # This is the cost of using the transmission line, which is added to the cost of + # the generator at the start zone of the line. + # It is used in the objective function to calculate the total cost of the system. + inputs_nw["pTrans_Hurdles"] = zeros(Float64, L) + if :Line_Hurdle_Rate in names(network_var) + inputs_nw["pTrans_Hurdles"] = to_floats(:Line_Hurdle_Rate) .* scale_factor # convert to million $/GW + end + if setup["Trans_Loss_Segments"] == 1 # Line percentage Loss - valid for case when modeling losses as a fixed percent of absolute value of power flows inputs_nw["pPercent_Loss"] = to_floats(:Line_Loss_Percentage) diff --git a/src/model/core/transmission/investment_transmission.jl b/src/model/core/transmission/investment_transmission.jl index f80b898e9a..9819b8ccb6 100644 --- a/src/model/core/transmission/investment_transmission.jl +++ b/src/model/core/transmission/investment_transmission.jl @@ -75,7 +75,8 @@ function investment_transmission!(EP::Model, inputs::Dict, setup::Dict) @expression(EP, eTotalCNetworkExp, sum(vNEW_TRANS_CAP[l] * inputs["pC_Line_Reinforcement"][l] - for l in EXPANSION_LINES)) + for l in EXPANSION_LINES)+sum(eAvail_Trans_Cap[l] * inputs["pTrans_Hurdles"][l] + for l in 1:L)) if MultiStage == 1 # OPEX multiplier to count multiple years between two model stages @@ -85,6 +86,11 @@ function investment_transmission!(EP::Model, inputs::Dict, setup::Dict) else add_to_expression!(EP[:eObj], eTotalCNetworkExp) end + else + # If no network expansion, we only add the hurdle costs to the objective function + @expression(EP, eTotalCNetworkExp, + sum(inputs["pTrans_Hurdles"][l] * eAvail_Trans_Cap[l] for l in 1:L)) + add_to_expression!(EP[:eObj], eTotalCNetworkExp) end ## End Objective Function Expressions ##