Preparing OptDataCEP
Here, we first describe how to load provided non-time-series dependent data or your non-time-series dependent data as OptDataCEP. We second describe the data types within the OptDataCEP and how to access it.
Loading Provided Data
load_cep_data_provided loads the non-time-series dependent data for the CEP and can take the following regions:
GER: GermanyCA: CaliforniaTX: Texas
CapacityExpansion.load_cep_data_provided — Functionload_cep_data_provided(region::String)Loading from .csv files in a the folder ../CEP/data/{region}/ Follow instructions preparing your own data: -region::String: name of state or region data belongs to -costs::OptVariable: costs[tech,node,year,account,impact] - annulized costs [USD in USD/MW_el, CO2 in kg-CO₂-eq./MW_el] -techs::OptVariable: techs[tech] - OptDataCEPTech -nodes::OptVariable: nodes[tech,node] - OptDataCEPNode -lines::OptVarible: lines[tech,line] - OptDataCEPLine for regions:
"GER_1": Germany 1 node"GER_18": Germany 18 nodes"CA_1": California 1 node"CA_14": California 14 nodes"TX_1": Texas 1 node
Loading Your Own Data
Use load_cep_data with data_path pointing to the folder with your cost, node, (line), and technology data.
CapacityExpansion.load_cep_data — Functionload_cep_data(data_path::String)Loading from .csv files in a the folder /data_path/ Follow instructions for the CSV-Files: -region::String: name of state or region data belongs to -costs::OptVariable: costs[tech,node,year,account,impact] - annulized costs [USD in USD/MWel, CO2 in kg-CO₂-eq./MWel]-techs::OptVariable: techs[tech] - OptDataCEPTech - -nodes::OptVariable: nodes[tech,node] - OptDataCEPNode -lines::OptVarible`: lines[tech,line] - OptDataCEPLine
Data Types
CapacityExpansion.OptVariable — TypeOptVariable{T,N,Ax,L<:NTuple{N,Dict}} <: AbstractArray{T,N}{
data::Array{T,N},
axes::Ax,
lookup::L,
axes_names::Array{String,1}}
type::StringOptVariable is a structure that allows to have a multi-dimensional data-Array that can be indexed using keys. An examplary lookup can be done the following way: optvar['key1','key2']=value. The value can be of any type like e.g. Float64. The OptVariable is used both for data input and output.
data::Array- includes the optimization variable output in form of an arrayaxes_names::Array{String,1}` - includes the names of the different axes and is equivalent to the sets in the optimization formulationaxes::Tuple- includes the values of the different axes of the optimization variablestype::String- defines the type of the variable being cv - cost variable - dv -design variable - ov - operating variable - sv - slack variable
CapacityExpansion.OptDataCEP — Type OptDataCEP{region::String,
costs::OptVariable,
techs::OptVariable,
nodes::OptVariable,
lines::OptVariabl} <: OptDataAll not timeseries depending data for the CapacityExpansionProblem is stored in an OptDataCEP struct. OptVariable structs are used to index an element of e.g. .costs['pv','germany',2016,'var','EUR']=value. Depending on the field the value has another type like Number, OptDataCEPLine,...
region::String: name of state or region data belongs tocosts::OptVariable: costs[tech,node,year,account,impact] -Numbertechs::OptVariable: techs[tech] -OptDataCEPTechnodes::OptVariable: nodes[tech, node] -OptDataCEPNodelines::OptVariable: lines[tech, line] -OptDataCEPLine
CapacityExpansion.OptDataCEPTech — Type OptDataCEPTech{name::String
tech_group::Array{String,1}
unit::String
structure::String
plant_lifetime::Number
financial_lifetime::Number
discount_rate::Number
annuityfactor::Number
input::Dict
output::Dict
constraints::Dict} <: OptDataThe information of the single tech is stored in an OptDataCEPTech struct:
name: A detailed name of the technologytech_group: technology-groups that the technology belongs to. Groups can be:all,demand,generation,dispatchable_generation,non_dispatchable_generation,storage,conversion,transmissionplant_lifetime: the lifetime of this technologies plant [a]financial_lifetime: financial time to break even [a]annuityfactor: the annuityfactor is calculated based on the discountrate and the plantlifetimediscount_rate: discount rate for technology [a]structure:nodeorlinedepending on the structure of the technologyunit: the unit that the capacity of the technology scales with. It can bepower[MW] orenergy[MWh]input: the input can be acarrierlike e.g. electricity"carrier" => electricity, atimeserieslike e.g."timeseries"=> demand_electricity, or afuellike e.g.fuel: gas`constraints: a dictionary with information like anefficiencylike e.g."efficiency"=> 0.53orcap_eq(e.g. discharge capacity is same as charge capacity)"cap_eq" => "bat_in"
returns techs::OptVariable techs[tech] - OptDataCEPTech
CapacityExpansion.OptDataCEPNode — Type OptDataCEPNode{name::String,
value::Number,
lat::Number,
lon::Number} <: OptDataThe information about the nodes in stored in an OptDataCEPNode struct:
namepower_exexisting capacity [MW or MWh (tech_e)]power_limcapacity limit [MW or MWh (tech_e)]regionlatlonhold geolocation information [°,°]
CapacityExpansion.OptDataCEPLine — Type OptDataCEPLine{name::String,
node_start::String,
node_end::String,
reactance::Number,
resistance::Number,
power::Number,
circuits::Int,
voltage::Number,
length::Number} <: OptDataThe information of the single lines is stored in an OptDataCEPLine struct:
name: Name of the linenode_startNode where line startsnode_endNode where line endsreactanceresistance[Ω]power_ex: existing power limit [MW]power_lim: limit power limit [MW]circuits[-]voltage[V]length[km]eff[-]
Examples
Example loading CEP Data
using CapacityExpansion
state="GER_1"
# load ts-input-data
cep_data = load_cep_data_provided(state)
cep_data.costs5-dimensional OptVariable{Number,5,...} of type fv with index sets:
Dimension 1 - tech, Any["bat_in", "bat_out", "bat_e", "h2_in", "pv", "trans", "coal", "gas", "demand", "wind", "oil", "h2_e", "h2_out"]
Dimension 2 - node, ["germany"]
Dimension 3 - year, [2015]
Dimension 4 - account, ["cap_fix", "var"]
Dimension 5 - impact, ["EUR", "CO2"]
And data, a 13×1×1×2×2 Array{Number,5}:
[:, :, 2015, "cap_fix", "EUR"] =
8961.67479
0.0
25653.7085
479782.071
136926.376
51.0061474
153702.673
29964.5882
0.0
168417.541
38429.5834
68.4962783
0.0
[:, :, 2015, "var", "EUR"] =
0.01
0.0
0.0
1.9
0.0
0.0
10.708
86.564
0.0
0.0
153.586
0.0
0.0
[:, :, 2015, "cap_fix", "CO2"] =
0.0
0.0
1658.35472
96666.6667
160.233933
3.3275
13.8595556
1.2334
0.0
36.75
8.25
0.0
0.0
[:, :, 2015, "var", "CO2"] =
0.0
0.0
0.0
0.0
0.0
0.0
1217.49
728.71
0.0
0.0
874.6
0.0
0.0 Example indexing OptVariables
Indexing is provided similar to Arrays:
cep_data.costs["pv","germany",2015,"cap_fix","EUR"]136926.376The axes are named, and the axes can be called using the basic axes function and providing the sets name:
axes(cep_data.costs,"tech")13-element Array{Any,1}:
"bat_in"
"bat_out"
"bat_e"
"h2_in"
"pv"
"trans"
"coal"
"gas"
"demand"
"wind"
"oil"
"h2_e"
"h2_out"