diff --git a/examples/data/adaptation/input/damage_functions/all_road_types/hazard_severity_damage_fraction.csv b/examples/data/adaptation/input/damage_functions/all_road_types/hazard_severity_damage_fraction.csv new file mode 100644 index 000000000..2f76479ca --- /dev/null +++ b/examples/data/adaptation/input/damage_functions/all_road_types/hazard_severity_damage_fraction.csv @@ -0,0 +1,8 @@ +depth;damage +cm;% of total construction costs +0;0 +100;0.1 +200;0.2 +400;0.4 +800;0.8 +12000;1 diff --git a/examples/data/adaptation/input/damage_functions/all_road_types/max_damage_road_types.csv b/examples/data/adaptation/input/damage_functions/all_road_types/max_damage_road_types.csv new file mode 100644 index 000000000..6ba62f534 --- /dev/null +++ b/examples/data/adaptation/input/damage_functions/all_road_types/max_damage_road_types.csv @@ -0,0 +1,8 @@ +Road_type \ lanes;1;2;3;4;5 +unit;euro/m;euro/m;euro/m;euro/m;euro/m +tertiary_link;110;120;130;140;150 +tertiary;110;120;130;140;150 +secondary_link;11;12;13;14;15 +secondary;11;12;13;14;15 +residential;1100;1200;1300;1400;1500 +['tertiary', 'residential'];510;520;530;540;550 diff --git a/examples/data/adaptation/input/resilience_curve.csv b/examples/data/adaptation/input/resilience_curve.csv new file mode 100644 index 000000000..ff3039770 --- /dev/null +++ b/examples/data/adaptation/input/resilience_curve.csv @@ -0,0 +1,25 @@ +link_type_hazard_intensity;duration_steps;functionality_loss_ratio +secondary_0.0-0.2;[1.0];[0.05] +secondary_0.2-0.5;[1, 2.5];[0.125, 0.05] +secondary_0.5-1.5;[2.5, 5, 7.5];[0.375, 0.25, 0.125] +secondary_1.5-9999.0;[7.5, 9, 10];[0.5, 0.45, 0.375] +secondary_link_0.0-0.2;[1.0];[0.05] +secondary_link_0.2-0.5;[1, 2.5];[0.125, 0.05] +secondary_link_0.5-1.5;[2.5, 5, 7.5];[0.375, 0.25, 0.125] +secondary_link_1.5-9999.0;[7.5, 9, 10];[0.5, 0.45, 0.375] +tertiary_0.0-0.2;[2.0];[0.1] +tertiary_0.2-0.5;[2, 5];[0.25, 0.1] +tertiary_0.5-1.5;[5, 10, 15];[0.75, 0.5, 0.25] +tertiary_1.5-9999.0;[15, 18, 20];[1, 0.9, 0.75] +tertiary_link_0.0-0.2;[2.0];[0.1] +tertiary_link_0.2-0.5;[2, 5];[0.25, 0.1] +tertiary_link_0.5-1.5;[5, 10, 15];[0.75, 0.5, 0.25] +tertiary_link_1.5-9999.0;[15, 18, 20];[1, 0.9, 0.75] +trunk_0.0-0.2;[3.0];[0.2] +trunk_0.2-0.5;[3, 7.5];[0.5, 0.2] +trunk_0.5-1.5;[7.5, 15, 22.5];[0.7, 0.6, 0.5] +trunk_1.5-9999.0;[22.5, 27, 30];[1, 0.95, 0.7] +trunk_link_0.0-0.2;[3.0];[0.2] +trunk_link_0.2-0.5;[3, 7.5];[0.5, 0.2] +trunk_link_0.5-1.5;[7.5, 15, 22.5];[0.7, 0.6, 0.5] +trunk_link_1.5-9999.0;[22.5, 27, 30];[1, 0.95, 0.7] diff --git a/examples/data/adaptation/input/traffic_intensities.csv b/examples/data/adaptation/input/traffic_intensities.csv new file mode 100644 index 000000000..b4f419451 --- /dev/null +++ b/examples/data/adaptation/input/traffic_intensities.csv @@ -0,0 +1,273 @@ +ID,evening_peak_total,evening_peak_freight,evening_peak_commute,evening_peak_business,evening_peak_other,day_freight,day_commute,day_business,day_other,day_total +0,0,0,0,0,0,15,31,66,44,156 +1,0,0,0,0,0,90,22,95,98,305 +2,0,0,0,0,0,28,29,18,13,88 +3,0,0,0,0,0,41,92,64,52,249 +4,0,0,0,0,0,93,31,17,14,155 +5,0,0,0,0,0,47,53,39,49,188 +6,0,0,0,0,0,33,97,31,48,209 +7,0,0,0,0,0,40,98,82,41,261 +8,0,0,0,0,0,37,70,70,47,224 +9,0,0,0,0,0,18,24,93,54,189 +10,0,0,0,0,0,35,58,89,40,222 +11,0,0,0,0,0,58,67,80,31,236 +12,0,0,0,0,0,57,76,73,85,291 +13,0,0,0,0,0,30,94,98,51,273 +14,0,0,0,0,0,24,14,53,16,107 +15,0,0,0,0,0,74,66,21,24,185 +16,0,0,0,0,0,30,97,57,30,214 +17,0,0,0,0,0,69,30,99,19,217 +18,0,0,0,0,0,88,94,58,65,305 +19,0,0,0,0,0,22,71,85,80,258 +20,0,0,0,0,0,78,19,51,71,219 +21,0,0,0,0,0,88,83,76,100,347 +22,0,0,0,0,0,43,90,26,43,202 +23,0,0,0,0,0,34,89,15,52,190 +24,0,0,0,0,0,73,67,30,39,209 +25,0,0,0,0,0,32,22,29,67,150 +26,0,0,0,0,0,19,42,35,90,186 +27,0,0,0,0,0,82,17,76,93,268 +28,0,0,0,0,0,28,63,42,100,233 +29,0,0,0,0,0,76,27,57,88,248 +30,0,0,0,0,0,12,90,55,86,243 +31,0,0,0,0,0,17,15,63,45,140 +32,0,0,0,0,0,60,76,43,21,200 +33,0,0,0,0,0,77,26,34,26,163 +34,0,0,0,0,0,34,35,85,94,248 +35,0,0,0,0,0,72,22,34,49,177 +36,0,0,0,0,0,84,11,57,15,167 +37,0,0,0,0,0,59,53,19,34,165 +38,0,0,0,0,0,48,11,80,24,163 +39,0,0,0,0,0,38,77,47,40,202 +40,0,0,0,0,0,56,10,50,81,197 +41,0,0,0,0,0,36,64,44,89,233 +42,0,0,0,0,0,89,49,75,35,248 +43,0,0,0,0,0,73,12,39,75,199 +44,0,0,0,0,0,64,62,49,27,202 +45,0,0,0,0,0,38,29,10,38,115 +46,0,0,0,0,0,46,71,54,31,202 +47,0,0,0,0,0,54,35,56,11,156 +48,0,0,0,0,0,34,81,94,31,240 +49,0,0,0,0,0,31,89,30,51,201 +50,0,0,0,0,0,64,28,63,11,166 +51,0,0,0,0,0,85,86,45,24,240 +52,0,0,0,0,0,14,49,84,40,187 +53,0,0,0,0,0,42,39,45,38,164 +54,0,0,0,0,0,48,68,83,22,221 +55,0,0,0,0,0,77,77,82,73,309 +56,0,0,0,0,0,10,26,12,67,115 +57,0,0,0,0,0,37,73,54,80,244 +58,0,0,0,0,0,27,86,88,60,261 +59,0,0,0,0,0,36,51,38,69,194 +60,0,0,0,0,0,67,74,93,67,301 +61,0,0,0,0,0,53,96,45,26,220 +62,0,0,0,0,0,64,96,17,21,198 +63,0,0,0,0,0,31,22,84,94,231 +64,0,0,0,0,0,22,72,28,80,202 +65,0,0,0,0,0,72,51,86,89,298 +66,0,0,0,0,0,91,22,94,53,260 +67,0,0,0,0,0,95,23,92,99,309 +68,0,0,0,0,0,10,100,40,19,169 +69,0,0,0,0,0,82,56,49,99,286 +70,0,0,0,0,0,85,59,46,45,235 +71,0,0,0,0,0,22,63,12,90,187 +72,0,0,0,0,0,36,65,30,41,172 +73,0,0,0,0,0,38,33,93,64,228 +74,0,0,0,0,0,55,62,52,57,226 +75,0,0,0,0,0,36,99,18,48,201 +76,0,0,0,0,0,79,59,43,18,199 +77,0,0,0,0,0,19,51,99,25,194 +78,0,0,0,0,0,73,84,73,12,242 +79,0,0,0,0,0,20,96,36,65,217 +80,0,0,0,0,0,84,94,86,30,294 +81,0,0,0,0,0,62,43,17,92,214 +82,0,0,0,0,0,55,23,87,65,230 +83,0,0,0,0,0,37,62,53,39,191 +84,0,0,0,0,0,85,65,66,78,294 +85,0,0,0,0,0,56,39,53,48,196 +86,0,0,0,0,0,99,52,33,88,272 +87,0,0,0,0,0,64,94,29,76,263 +88,0,0,0,0,0,61,80,63,21,225 +89,0,0,0,0,0,85,85,61,63,294 +90,0,0,0,0,0,54,85,48,90,277 +91,0,0,0,0,0,70,16,74,78,238 +92,0,0,0,0,0,17,45,15,55,132 +93,0,0,0,0,0,90,95,26,75,286 +94,0,0,0,0,0,80,55,12,78,225 +95,0,0,0,0,0,38,71,48,87,244 +96,0,0,0,0,0,56,40,19,35,150 +97,0,0,0,0,0,63,21,81,74,239 +98,0,0,0,0,0,44,47,84,12,187 +99,0,0,0,0,0,78,24,97,52,251 +100,0,0,0,0,0,26,59,58,34,177 +101,0,0,0,0,0,73,48,33,46,200 +102,0,0,0,0,0,62,100,39,78,279 +103,0,0,0,0,0,63,78,39,51,231 +104,0,0,0,0,0,19,49,84,10,162 +105,0,0,0,0,0,44,65,28,52,189 +106,0,0,0,0,0,35,92,23,74,224 +107,0,0,0,0,0,48,56,71,66,241 +108,0,0,0,0,0,31,35,80,96,242 +109,0,0,0,0,0,39,26,79,77,221 +110,0,0,0,0,0,90,76,49,90,305 +111,0,0,0,0,0,35,68,36,79,218 +112,0,0,0,0,0,23,61,62,92,238 +113,0,0,0,0,0,49,36,32,96,213 +114,0,0,0,0,0,79,16,61,55,211 +115,0,0,0,0,0,35,17,28,61,141 +116,0,0,0,0,0,86,99,54,28,267 +117,0,0,0,0,0,87,99,80,50,316 +118,0,0,0,0,0,37,16,47,49,149 +119,0,0,0,0,0,80,63,43,30,216 +120,0,0,0,0,0,97,90,74,29,290 +121,0,0,0,0,0,89,83,13,41,226 +122,0,0,0,0,0,52,96,32,100,280 +123,0,0,0,0,0,11,86,39,98,234 +124,0,0,0,0,0,32,79,45,79,235 +125,0,0,0,0,0,39,37,56,99,231 +126,0,0,0,0,0,34,59,50,32,175 +127,0,0,0,0,0,34,63,30,45,172 +128,0,0,0,0,0,80,69,17,51,217 +129,0,0,0,0,0,60,73,71,94,298 +130,0,0,0,0,0,77,69,91,29,266 +131,0,0,0,0,0,40,60,13,47,160 +132,0,0,0,0,0,78,85,31,36,230 +133,0,0,0,0,0,14,65,68,30,177 +134,0,0,0,0,0,71,47,97,29,244 +135,0,0,0,0,0,26,96,78,31,231 +136,0,0,0,0,0,27,19,48,49,143 +137,0,0,0,0,0,18,36,34,80,168 +138,0,0,0,0,0,76,95,28,20,219 +139,0,0,0,0,0,14,81,66,88,249 +140,0,0,0,0,0,13,83,18,83,197 +141,0,0,0,0,0,53,83,23,96,255 +142,0,0,0,0,0,56,87,32,96,271 +143,0,0,0,0,0,30,79,69,89,267 +144,0,0,0,0,0,45,77,81,44,247 +145,0,0,0,0,0,23,73,84,20,200 +146,0,0,0,0,0,14,94,89,91,288 +147,0,0,0,0,0,10,90,18,38,156 +148,0,0,0,0,0,81,67,37,40,225 +149,0,0,0,0,0,32,31,44,15,122 +150,0,0,0,0,0,97,31,26,37,191 +151,0,0,0,0,0,31,21,25,42,119 +152,0,0,0,0,0,83,20,11,21,135 +153,0,0,0,0,0,44,11,82,94,231 +154,0,0,0,0,0,20,73,100,38,231 +155,0,0,0,0,0,61,36,53,93,243 +156,0,0,0,0,0,98,50,90,45,283 +157,0,0,0,0,0,79,36,38,15,168 +158,0,0,0,0,0,19,37,82,75,213 +159,0,0,0,0,0,100,84,30,41,255 +160,0,0,0,0,0,38,83,78,55,254 +161,0,0,0,0,0,41,40,65,52,198 +162,0,0,0,0,0,70,82,65,14,231 +163,0,0,0,0,0,94,23,28,96,241 +164,0,0,0,0,0,19,59,93,11,182 +165,0,0,0,0,0,54,81,72,94,301 +166,0,0,0,0,0,81,98,49,28,256 +167,0,0,0,0,0,28,71,86,94,279 +168,0,0,0,0,0,13,100,83,99,295 +169,0,0,0,0,0,37,52,64,16,169 +170,0,0,0,0,0,40,43,87,52,222 +171,0,0,0,0,0,33,55,36,70,194 +172,0,0,0,0,0,59,47,48,78,232 +173,0,0,0,0,0,70,57,26,26,179 +174,0,0,0,0,0,63,44,40,67,214 +175,0,0,0,0,0,14,25,28,87,154 +176,0,0,0,0,0,39,15,69,68,191 +177,0,0,0,0,0,14,21,100,38,173 +178,0,0,0,0,0,23,85,30,92,230 +179,0,0,0,0,0,48,16,12,67,143 +180,0,0,0,0,0,97,93,74,60,324 +181,0,0,0,0,0,53,17,86,94,250 +182,0,0,0,0,0,36,28,12,71,147 +183,0,0,0,0,0,86,11,89,28,214 +184,0,0,0,0,0,15,72,35,95,217 +185,0,0,0,0,0,21,100,37,58,216 +186,0,0,0,0,0,38,74,54,56,222 +187,0,0,0,0,0,87,63,70,97,317 +188,0,0,0,0,0,80,56,60,92,288 +189,0,0,0,0,0,54,77,76,15,222 +190,0,0,0,0,0,90,51,26,84,251 +191,0,0,0,0,0,55,44,49,31,179 +192,0,0,0,0,0,42,44,44,59,189 +193,0,0,0,0,0,90,88,93,33,304 +194,0,0,0,0,0,35,34,45,88,202 +195,0,0,0,0,0,38,60,15,36,149 +196,0,0,0,0,0,29,31,83,54,197 +197,0,0,0,0,0,67,62,70,40,239 +198,0,0,0,0,0,93,10,51,30,184 +199,0,0,0,0,0,73,61,94,38,266 +200,0,0,0,0,0,47,25,87,52,211 +201,0,0,0,0,0,27,34,71,22,154 +202,0,0,0,0,0,32,45,70,97,244 +203,0,0,0,0,0,47,62,29,58,196 +204,0,0,0,0,0,25,89,30,35,179 +205,0,0,0,0,0,37,12,39,69,157 +206,0,0,0,0,0,72,31,29,73,205 +207,0,0,0,0,0,62,99,13,31,205 +208,0,0,0,0,0,82,13,77,15,187 +209,0,0,0,0,0,66,98,34,53,251 +210,0,0,0,0,0,36,43,30,64,173 +211,0,0,0,0,0,61,86,47,85,279 +212,0,0,0,0,0,18,98,59,45,220 +213,0,0,0,0,0,95,83,52,26,256 +214,0,0,0,0,0,45,93,60,15,213 +215,0,0,0,0,0,87,17,40,57,201 +216,0,0,0,0,0,59,84,77,29,249 +217,0,0,0,0,0,10,92,47,59,208 +218,0,0,0,0,0,64,32,89,21,206 +219,0,0,0,0,0,92,23,61,38,214 +220,0,0,0,0,0,25,78,40,18,161 +221,0,0,0,0,0,81,85,86,62,314 +222,0,0,0,0,0,10,52,15,23,100 +223,0,0,0,0,0,78,33,15,81,207 +224,0,0,0,0,0,16,95,85,82,278 +225,0,0,0,0,0,100,18,40,27,185 +226,0,0,0,0,0,74,15,24,53,166 +227,0,0,0,0,0,29,23,15,39,106 +228,0,0,0,0,0,55,45,44,23,167 +229,0,0,0,0,0,31,69,56,28,184 +230,0,0,0,0,0,14,57,56,59,186 +231,0,0,0,0,0,61,62,51,37,211 +232,0,0,0,0,0,81,70,98,32,281 +233,0,0,0,0,0,42,90,68,24,224 +234,0,0,0,0,0,68,19,69,35,191 +235,0,0,0,0,0,59,100,34,44,237 +236,0,0,0,0,0,52,32,62,29,175 +237,0,0,0,0,0,68,97,31,40,236 +238,0,0,0,0,0,79,21,89,60,249 +239,0,0,0,0,0,72,53,81,76,282 +240,0,0,0,0,0,68,16,22,42,148 +241,0,0,0,0,0,38,19,15,11,83 +242,0,0,0,0,0,81,78,63,99,321 +243,0,0,0,0,0,50,95,85,17,247 +244,0,0,0,0,0,90,18,95,57,260 +245,0,0,0,0,0,64,48,35,85,232 +246,0,0,0,0,0,83,10,65,43,201 +247,0,0,0,0,0,59,58,48,14,179 +248,0,0,0,0,0,36,27,98,25,186 +249,0,0,0,0,0,25,61,52,62,200 +250,0,0,0,0,0,68,43,92,22,225 +251,0,0,0,0,0,44,85,54,42,225 +252,0,0,0,0,0,31,66,27,24,148 +253,0,0,0,0,0,63,34,45,89,231 +254,0,0,0,0,0,69,76,24,81,250 +255,0,0,0,0,0,83,73,72,28,256 +256,0,0,0,0,0,32,82,29,61,204 +257,0,0,0,0,0,10,54,92,73,229 +258,0,0,0,0,0,86,66,82,95,329 +259,0,0,0,0,0,43,43,59,31,176 +260,0,0,0,0,0,64,71,85,61,281 +261,0,0,0,0,0,43,50,10,79,182 +262,0,0,0,0,0,38,14,67,63,182 +263,0,0,0,0,0,42,77,83,35,237 +264,0,0,0,0,0,44,72,97,38,251 +265,0,0,0,0,0,74,26,90,96,286 +266,0,0,0,0,0,55,16,12,50,133 +267,0,0,0,0,0,53,99,76,42,270 +268,0,0,0,0,0,88,81,15,64,248 +269,0,0,0,0,0,46,70,37,37,190 +270,0,0,0,0,0,33,37,87,34,191 +271,0,0,0,0,0,30,40,90,30,190 diff --git a/examples/data/adaptation/input/values_of_time.csv b/examples/data/adaptation/input/values_of_time.csv new file mode 100644 index 000000000..a6d7cd6c1 --- /dev/null +++ b/examples/data/adaptation/input/values_of_time.csv @@ -0,0 +1,5 @@ +trip_types;value_of_time;occupants +business;20;2 +commute;10;3 +freight;200;1 +other;100;20 diff --git a/examples/example_adaptation.ipynb b/examples/example_adaptation.ipynb new file mode 100644 index 000000000..662f79341 --- /dev/null +++ b/examples/example_adaptation.ipynb @@ -0,0 +1,330 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## RA2CE Feature: adaptation measures" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook explains how users can create different adaptation options that will influence the calculated damages and losses on roads. It also performs a Cost-Benefit Analysis (CBA) for each of the adaptation option to explore the cost effectiveness of these options." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "from ra2ce.analysis.analysis_config_wrapper import AnalysisConfigWrapper\n", + "from ra2ce.analysis.analysis_input_wrapper import AnalysisInputWrapper\n", + "from ra2ce.ra2ce_handler import Ra2ceHandler\n", + "from ra2ce.network.network_config_data.enums.aggregate_wl_enum import AggregateWlEnum\n", + "from ra2ce.network.network_config_data.enums.source_enum import SourceEnum\n", + "from ra2ce.analysis.analysis_config_data.analysis_config_data import (\n", + " AnalysisConfigData,\n", + " AnalysisSectionAdaptation,\n", + " AnalysisSectionAdaptationOption,\n", + " AnalysisSectionDamages,\n", + " AnalysisSectionLosses,\n", + ")\n", + "from ra2ce.analysis.analysis_config_data.enums.analysis_damages_enum import (\n", + " AnalysisDamagesEnum,\n", + ")\n", + "from ra2ce.analysis.analysis_config_data.enums.analysis_enum import AnalysisEnum\n", + "from ra2ce.analysis.analysis_config_data.enums.analysis_losses_enum import (\n", + " AnalysisLossesEnum,\n", + ")\n", + "from ra2ce.analysis.analysis_config_data.enums.damage_curve_enum import DamageCurveEnum\n", + "from ra2ce.analysis.analysis_config_data.enums.event_type_enum import EventTypeEnum\n", + "from ra2ce.analysis.analysis_config_data.enums.traffic_period_enum import (\n", + " TrafficPeriodEnum,\n", + ")\n", + "from ra2ce.analysis.analysis_config_data.enums.trip_purpose_enum import TripPurposeEnum\n", + "from ra2ce.analysis.analysis_config_data.enums.weighing_enum import WeighingEnum\n", + "from ra2ce.analysis.analysis_config_wrapper import AnalysisConfigWrapper\n", + "from ra2ce.analysis.analysis_input_wrapper import AnalysisInputWrapper\n", + "from ra2ce.network.network_config_data.enums.aggregate_wl_enum import AggregateWlEnum\n", + "from ra2ce.network.network_config_data.network_config_data import (\n", + " HazardSection,\n", + " NetworkConfigData,\n", + " NetworkSection,\n", + ")\n", + "from ra2ce.network.network_config_wrapper import NetworkConfigWrapper\n", + "from ra2ce.analysis.adaptation.adaptation import Adaptation\n", + "from ra2ce.analysis.analysis_config_wrapper import AnalysisConfigWrapper\n", + "from ra2ce.analysis.analysis_input_wrapper import AnalysisInputWrapper\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "root_dir = Path(\"data\", \"adaptation\")\n", + "\n", + "static_path = root_dir.joinpath(\"static\")\n", + "hazard_path =static_path.joinpath(\"hazard\")\n", + "network_path = static_path.joinpath(\"network\")\n", + "output_path=root_dir.joinpath(\"output\")\n", + "\n", + "input_path = root_dir.joinpath(\"input\") # path of the data files for all adaptation options and reference option" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Network config\n", + "\n", + "The network must first be configured and overlaid with a hazard map. The current workflow only supports the following configurations:\n", + "\n", + "- AggregateWlENum: only MEAN \n", + "- SourceEnum must be set to SHAPEFILE. This is because we are running Losses which requires information about the traffic intensities, \n", + "- Adaptation is for now only event-based for a single hazard map. Therefore the name of the hazard map should not start with \"RP\" and should start the risk-based damage workflow will be triggered. The hazard name shoud start with a letter." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "_network_section = NetworkSection(\n", + " source= SourceEnum.SHAPEFILE, \n", + " primary_file = [network_path.joinpath(\"network.shp\")], \n", + " file_id = \"ID\",\n", + " link_type_column=\"highway\",\n", + " save_gpkg=True\n", + ")\n", + "\n", + "_hazard = HazardSection(\n", + " hazard_map=[Path(file) for file in hazard_path.glob(\"*.tif\")],\n", + " hazard_field_name= [\"waterdepth\"],\n", + " aggregate_wl = AggregateWlEnum.MEAN,\n", + " hazard_crs = \"EPSG:4326\",\n", + ")\n", + "\n", + "\n", + "_network_config_data = NetworkConfigData(\n", + " root_path=root_dir,\n", + " static_path=static_path,\n", + " output_path=output_path,\n", + " network=_network_section,\n", + " hazard=_hazard\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "handler = Ra2ceHandler.from_config(_network_config_data, None)\n", + "\n", + "handler.configure()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Losses and Damages configuration\n", + "\n", + "The configuration for the losses and damages analysis must be defined here. The general configurations of losses and damages are shared for all adaptation options! The only difference between the options are the \n", + "input files used: resilience_curve.csv, traffic_intensities.csv, values_of_time.csv, damage_curves.csv and max_damage_road_type.csv\n", + "\n", + "For example, it is (currenlty) NOT possible for Adaptation option 1 to have `production_loss_per_capita_per_hour=42` and for option 2: `production_loss_per_capita_per_hour=20`\n", + "\n", + "### Damages:\n", + "\n", + "- Since we are simulating the adaptation effects by modifying the hazard curves, only the Manual damage curve type is allowed: `DamageCurveEnum.MAN`\n", + "- `EventTypeEnum.EVENT` is mandatory since we are dealing with an event-base adaptation.\n", + "\n", + "### Losses:\n", + "\n", + "- Both single link and multi link losses are accepted: `AnalysisLossesEnum`\n", + "- `EventTypeEnum.EVENT` is mandatory since we are dealing with an event-base adaptation.\n", + "- All the other arguments can be modified " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "_damages_section = AnalysisSectionDamages(\n", + " analysis=AnalysisDamagesEnum.DAMAGES,\n", + " event_type=EventTypeEnum.EVENT,\n", + " damage_curve=DamageCurveEnum.MAN,\n", + " save_gpkg=True,\n", + " save_csv=True,\n", + " )\n", + "\n", + " # - losses\n", + "_multi_link_losses_section = AnalysisSectionLosses(\n", + " analysis=AnalysisLossesEnum.MULTI_LINK_LOSSES,\n", + " event_type=EventTypeEnum.EVENT,\n", + " weighing=WeighingEnum.TIME,\n", + " threshold=0,\n", + " production_loss_per_capita_per_hour=42,\n", + " hours_per_traffic_period=8,\n", + " traffic_period=TrafficPeriodEnum.DAY,\n", + " trip_purposes=[\n", + " TripPurposeEnum.BUSINESS,\n", + " TripPurposeEnum.COMMUTE,\n", + " TripPurposeEnum.FREIGHT,\n", + " TripPurposeEnum.OTHER,\n", + " ],\n", + " resilience_curves_file=input_path.joinpath(\"resilience_curve.csv\"),\n", + " traffic_intensities_file=input_path.joinpath(\"traffic_intensities.csv\"),\n", + " values_of_time_file=input_path.joinpath(\"values_of_time.csv\"),\n", + " save_gpkg=True,\n", + " save_csv=True,\n", + " )\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Adaptation options:\n", + "\n", + "The adaptation options can now be defined. \n", + "\n", + "1. The `AnalysisSectionAdaptation` must be filled with general inputs applicable to all adaptation options:\n", + " - type of losses analysis: single link or multi link\n", + " - discount rate: to account for inflation\n", + " - initial_frequency: this the frequency of occurence of the considered hazard map at year 0\n", + " - climate factor: accounting for the increase of likelihood over time fo the hazard map\n", + " - time horizon: numbers of years for the CBA\n", + "2. A collection of adaptation options is to be specified:\n", + " - Each adaptation option has an `id` which must match the input data structure in order to assign the input files correctly\n", + " - The first adaptation option represents the initial situation (Business As Usual) and only requires a `name` and `id`.\n", + " - The following adaptation options have extra required attributes to calculate the cost: `construction_cost`, `construction_interval`, 'maintenance_cost', 'maintenance_interval'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# - adaptation\n", + "_adaptation_options = [\n", + " AnalysisSectionAdaptationOption(\n", + " id=\"AO0\",\n", + " name=\"No adaptation\",\n", + " ),\n", + " AnalysisSectionAdaptationOption(\n", + " id=\"AO1\",\n", + " name=\"Cheap construction, expensive maintenance\",\n", + " construction_cost=1000.0,\n", + " construction_interval=10.0,\n", + " maintenance_cost=200.0,\n", + " maintenance_interval=3.0,\n", + " ),\n", + " AnalysisSectionAdaptationOption(\n", + " id=\"AO2\",\n", + " name=\"Expensive construction, cheap maintenance\",\n", + " construction_cost=5000.0,\n", + " construction_interval=100.0,\n", + " maintenance_cost=50.0,\n", + " maintenance_interval=3.0,\n", + " ),\n", + "]\n", + "_adaptation_section = AnalysisSectionAdaptation(\n", + " analysis=AnalysisEnum.ADAPTATION,\n", + " losses_analysis=AnalysisLossesEnum.MULTI_LINK_LOSSES,\n", + " adaptation_options=_adaptation_options,\n", + " discount_rate=0.025, # correcting inflation 0.025 = 2.5%\n", + " initial_frequency=0.001, # yearly frequency of occurrence of the event (hazard map)\n", + " climate_factor=0.000235, # factor to correct for the positive increase of the frequency of occurrence of the event\n", + " time_horizon=20, # time horizon in years for the CBA analysis\n", + " )\n", + "\n", + "_analysis_config_data = AnalysisConfigData(\n", + " root_path=root_dir,\n", + " input_path=input_path,\n", + " static_path=static_path,\n", + " output_path=output_path,\n", + " analyses=[\n", + " _damages_section,\n", + " _multi_link_losses_section,\n", + " _adaptation_section,\n", + " ],\n", + " aggregate_wl=AggregateWlEnum.MEAN,\n", + " )\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For this example. There are 2 adaptation options defined `AO1` and `AO2`, in addition to the reference case 'AO0'. The corresponding files structure should then be the following (assuming MultiLinkLosses and damages based on all road types)" + ] + }, + { + "attachments": { + "image-2.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![image-2.png](attachment:image-2.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "handler = Ra2ceHandler.from_config(_network_config_data, _analysis_config_data)\n", + "\n", + "handler.configure()\n", + "handler.run_analysis()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ra2ce_env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/ra2ce/analysis/adaptation/adaptation.py b/ra2ce/analysis/adaptation/adaptation.py index b2de15af9..08d274530 100644 --- a/ra2ce/analysis/adaptation/adaptation.py +++ b/ra2ce/analysis/adaptation/adaptation.py @@ -58,6 +58,7 @@ def __init__( self.adaptation_collection = AdaptationOptionCollection.from_config( analysis_config ) + self.output_path=analysis_input.output_path def execute(self) -> AnalysisResultWrapper: """