First let’s create a new study with some areas and clusters:
path <- tempdir()
createStudy(path = path, study_name = "my-study")
#> Warning: Parameter 'horizon' is missing or inconsistent with 'january.1st' and 'leapyear'. Assume correct year is 2018.
#> To avoid this warning message in future simulations, open the study with Antares and go to the simulation tab, put a valid year number in the cell 'horizon' and use consistent values for parameters 'Leap year' and '1st january'.
# Set number of Monte-Carlo scenarios
updateGeneralSettings(nbyears = 10)
# First area
createArea("earth")
createCluster(area = "earth", cluster_name = "america", add_prefix = FALSE)
createCluster(area = "earth", cluster_name = "africa", add_prefix = FALSE)
createCluster(area = "earth", cluster_name = "europe", add_prefix = FALSE)
# Second one
createArea("moon")
createCluster(area = "moon", cluster_name = "tranquility", add_prefix = FALSE)
createCluster(area = "moon", cluster_name = "serenety", add_prefix = FALSE)
# More areas
createArea("titan")
createArea("ceres")
# Some links
createLink("earth", "moon")
createLink("moon", "titan")
createLink("moon", "ceres")
# Check what we have created
getAreas()
#> [1] "ceres" "earth" "moon" "titan"
readClusterDesc()
#> area group cluster co2 enabled fixed-cost gen-ts law.forced
#> <char> <char> <fctr> <num> <lgcl> <num> <char> <char>
#> 1: earth Other america 0 TRUE 0 Use Global Uniform
#> 2: earth Other africa 0 TRUE 0 Use Global Uniform
#> 3: earth Other europe 0 TRUE 0 Use Global Uniform
#> 4: moon Other tranquility 0 TRUE 0 Use Global Uniform
#> 5: moon Other serenety 0 TRUE 0 Use Global Uniform
#> law.planned marginal-cost market-bid-cost min-down-time min-stable-power
#> <char> <num> <num> <num> <num>
#> 1: Uniform 0 0 1 0
#> 2: Uniform 0 0 1 0
#> 3: Uniform 0 0 1 0
#> 4: Uniform 0 0 1 0
#> 5: Uniform 0 0 1 0
#> min-up-time must-run nominalcapacity spinning spread-cost startup-cost
#> <num> <lgcl> <num> <num> <num> <num>
#> 1: 1 FALSE 0 0 0 0
#> 2: 1 FALSE 0 0 0 0
#> 3: 1 FALSE 0 0 0 0
#> 4: 1 FALSE 0 0 0 0
#> 5: 1 FALSE 0 0 0 0
#> unitcount volatility.forced volatility.planned
#> <num> <num> <num>
#> 1: 1 0 0
#> 2: 1 0 0
#> 3: 1 0 0
#> 4: 1 0 0
#> 5: 1 0 0
We can read scenario builder data with:
Currently it’s empty. We need to create rules before updating data:
# All areas
scenarioBuilder(n_scenario = 3)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> ceres "1" "2" "3" "1" "2" "3" "1" "2" "3" "1"
#> earth "1" "2" "3" "1" "2" "3" "1" "2" "3" "1"
#> moon "1" "2" "3" "1" "2" "3" "1" "2" "3" "1"
#> titan "1" "2" "3" "1" "2" "3" "1" "2" "3" "1"
scenarioBuilder(n_scenario = 5)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> ceres "1" "2" "3" "4" "5" "1" "2" "3" "4" "5"
#> earth "1" "2" "3" "4" "5" "1" "2" "3" "4" "5"
#> moon "1" "2" "3" "4" "5" "1" "2" "3" "4" "5"
#> titan "1" "2" "3" "4" "5" "1" "2" "3" "4" "5"
# Specific area
scenarioBuilder(n_scenario = 3, areas = "earth")
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> earth "1" "2" "3" "1" "2" "3" "1" "2" "3" "1"
# Specify an area for which to use random values
scenarioBuilder(n_scenario = 3, areas_rand = "earth")
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> ceres "1" "2" "3" "1" "2" "3" "1" "2" "3" "1"
#> earth "rand" "rand" "rand" "rand" "rand" "rand" "rand" "rand" "rand" "rand"
#> moon "1" "2" "3" "1" "2" "3" "1" "2" "3" "1"
#> titan "1" "2" "3" "1" "2" "3" "1" "2" "3" "1"
Now we can update the scenario builder data:
my_scenario <- scenarioBuilder(n_scenario = 3)
# for load serie
updateScenarioBuilder(ldata = my_scenario, series = "load")
# equivalent as
updateScenarioBuilder(ldata = list(l = my_scenario))
Here we update data for serie load
only. To update
several series at once you can do:
my_scenario <- scenarioBuilder(n_scenario = 3)
updateScenarioBuilder(
ldata = my_scenario,
series = c("load", "hydro", "solar")
)
load_scenario <- scenarioBuilder(n_scenario = 3)
hydro_scenario <- scenarioBuilder(n_scenario = 4)
solar_scenario <- scenarioBuilder(n_scenario = 5)
updateScenarioBuilder(ldata = list(
l = load_scenario,
h = hydro_scenario,
s = solar_scenario
))
If you read scenario builder now, wet got:
readScenarioBuilder()
#> $h
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> ceres 1 2 3 4 1 2 3 4 1 2
#> earth 1 2 3 4 1 2 3 4 1 2
#> moon 1 2 3 4 1 2 3 4 1 2
#> titan 1 2 3 4 1 2 3 4 1 2
#>
#> $l
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> ceres 1 2 3 1 2 3 1 2 3 1
#> earth 1 2 3 1 2 3 1 2 3 1
#> moon 1 2 3 1 2 3 1 2 3 1
#> titan 1 2 3 1 2 3 1 2 3 1
For thermal and renewables series, default behavior is to set rules to each clusters in the area :
my_scenario <- scenarioBuilder(n_scenario = 3)
updateScenarioBuilder(
ldata = my_scenario,
series = "thermal"
)
readScenarioBuilder()$t
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> earth_africa 1 2 3 1 2 3 1 2 3 1
#> earth_america 1 2 3 1 2 3 1 2 3 1
#> earth_europe 1 2 3 1 2 3 1 2 3 1
#> moon_serenety 1 2 3 1 2 3 1 2 3 1
#> moon_tranquility 1 2 3 1 2 3 1 2 3 1
We can specify specific clusters with:
updateScenarioBuilder(
ldata = my_scenario,
series = "thermal",
clusters_areas = data.table::data.table(
area = c("earth", "earth"),
cluster = c("africa", "europe")
)
)
readScenarioBuilder()$t
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> earth_africa 1 2 3 1 2 3 1 2 3 1
#> earth_america NA NA NA NA NA NA NA NA NA NA
#> earth_europe 1 2 3 1 2 3 1 2 3 1
#> moon_serenety NA NA NA NA NA NA NA NA NA NA
#> moon_tranquility NA NA NA NA NA NA NA NA NA NA
For NTC serie (Antares >= 8.2.0), it writes the scenario for all links :
updateScenarioBuilder(
ldata = my_scenario,
series = "ntc"
)
readScenarioBuilder()$ntc
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> ceres%moon 1 2 3 1 2 3 1 2 3 1
#> earth%moon 1 2 3 1 2 3 1 2 3 1
#> moon%titan 1 2 3 1 2 3 1 2 3 1
For writing scenario for a specific link you can do:
updateScenarioBuilder(
ldata = my_scenario,
series = "ntc",
links = "moon%ceres"
)
readScenarioBuilder()$ntc
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> ceres%moon 1 2 3 1 2 3 1 2 3 1
Finally, you can remove all scenarios from a ruleset with: