Ingrepen verschuiven¶
In de handleiding om maatregelen te bundelen wordt met een set instellingen een optimalisatiemodel ingezet om per beheerobject (sluiskolk) het onderhoud te bundelen.
Deze gegroepeerde maatregelen, ofwel "ingrepen", zijn maatregelen die samenvallen op hetzelfde object in hetzelfde jaar.
Na deze bundeling is het ook nog mogelijk om ingrepen in zijn geheel te verschuiven, op basis van een overkoepelende analyse.
Het script lijkt daarmee behoorlijk op wat we voor de maatregelen gezien hebben.
RwsProject inladen¶
Allereerst laden we het RwsProject in zoals die bij het maatregelen bundelen is gemaakt:
from raplan_rws.project import Horizon, RwsProject
# Een horizon van 2026 tot 2050 om de maatregelen te filteren.
horizon = Horizon(start=2026, end=2050)
# Laad het RWS project in vanaf een Excel.
suffix = "per_kolk_met_instellingen"
rws_project = RwsProject.van_excel_bestand(
# Bestandspad naar de maatregelplanning
f"./generated/irene_marijke_{suffix}.xlsx",
# Projectnaam (mag alles zijn)
naam="Irene -en Marijkesluis",
# Horizon van 2026 tot 2050
horizon=horizon,
# Maximale uitstel wordt genomen als factor maal het uiterst advies-uitstel
vervroeging_factor=0.25,
# Bonus t.o.v. uiterst advies jaar
later_dan_uiterst=0,
# Maximaal aantal jaar naar voren
max_vervroeging=1,
# Maximaal aantal jaar naar achter
max_uitstel=5,
)
Verschuiven van ingrepen¶
Voor het verschuiven van de ingrepen zijn de MaatregelVerschuiving instellingen wederom van belang, omdat het verschuiven van een ingreep betekent dat alle onderliggende maatregelen dus een jaar worden opgeschoven.
Daarnaast kunnen enkele instellingen worden opgegeven die betrekking hebben op de voorkeur voor het plannen per sluiscomplex en zijn er wederom "overrides" mogelijk om specifieke gevallen uit te sluiten, aan te moedigen en af te raden. Hier zijn weer wat hulpfuncties voor om dit in te stellen.
Er is nog te weinig andere informatie beschikbaar om kolkoverstijgende optimalisatie met een meer praktische toepassing mogelijk te maken. Hier dient nog meer onderzoek naar te worden gedaan. De onderstaande cellen illustreren de mogelijke functionaliteit en met de "overrides" kan eventueel zelf geƫxperimenteerd worden met aanvullende informatie.
Ingrepen binnen hetzelfde complex¶
Hieronder een optimalisatie die het kan aanmoedigen, ontmoedigen of uitsluiten dat er twee ingrepen op hetzelfde complex in hetzelfde jaar staan ingepland.
# Maak een kopie om in te werken met de optimalisatie.
from raplan_rws.model import IngreepInstellingen, MaatregelVerschuiving, ModelInstellingen
optim = rws_project.maak_kopie()
instellingen = ModelInstellingen(
ingreep_instellingen=IngreepInstellingen(
# Aanmoediging (negatieve waarde voor kostfunctie)
# of ontmoediging (positieve waarde voor de kostfunctie)
# voor het uitvoeren van twee ingrepen in hetzelfde jaar op verschillende kolken maar
# op hetzelfde complex,
jaar_zelfde_complex=1.0,
# Een setting om ingrepen op verschillende kolken maar op hetzelfde complex volledig te
# verbieden.
verbied_zelfde_complex=False,
# Vul hier specifieke combinaties van ingreep UUID's in waarvoor een specifieke
# beloning (<0) of straf (>0) voor moet gelden voor de kostenfunctie.
specifieke_combis={
# frozenset(uuid_a, uuid_b)): 0.05,
},
# Vul hier specifieke combinaties van ingreep UUID's in die niet gelijktijdig mogen
# plaatsvinden.
uitgesloten_combis={
frozenset(()) # frozenset((uuid_a, uuid_b))
},
),
# TIP: neem hier je eerdere MaatregelVerschuiving instellingen over van het bundelen per kolk.
maatregel_verschuiving=MaatregelVerschuiving(
gratis_naar_voren=False,
vaste_factor=0,
kosten_per_jaar_factor=0,
frequentie_factor=0,
specifiek={},
),
model_output=True, # Zet op `True` om meer tussentijdse output te zien van de solver.
)
# Optimaliseer de ingrepen!
optim.plan_ingrepen(instellingen=instellingen)
# Schrijf de gebundelde planning weer weg naar Excel.
suffix = "optim_ingrepen_zelfde_complex"
optim.naar_excel_bestand(f"./generated/irene_marijke_{suffix}.xlsx")
Inspecteren en visualiseren¶
Kijk naar de visualisatie handleiding hoe je de aangepaste planning kunt visualiseren.
Of, voor de exactere reviews: inspecteer de Excel en bekijk de nieuwe planning.
De samenstelling van de ingrepen an-sich zou onveranderd moeten zijn, maar de ingrepen in zijn geheel hebben mogen schuiven als de constituerende maatregelen dat toestaan.
Gevorderd: specifieke waarden opgeven¶
Ook voor de ingreep-optimalisatie is het mogelijk om specifieke waarden op te geven voor sommige ingrepen waarbij voor de overige ingrepen de standaardimplementatie blijft gelden.
Eventueel kunnen de volgende hulp-functies worden gebruikt om de instellingen aan te passen:
RwsProject.sluit_specifieke_ingreep_combi_uit: Deze functie kan gebruikt worden om eenModelInstellingenobject zo te updaten dat een verboden combinatie van ingrepen in hetzelfde jaar wordt toegevoegd.RwsProject.stel_specifieke_ingreep_combi_in: Deze functie kan gebruikt worden om eenModelInstellingenobject zo te updaten dat een specifieke combinatie zijn eigen beloning (<0) of straf (>0) krijgt.
Gevorderd: dynamische functies voor RwsProject.plan_ingrepen¶
Ook voor de ingreep-optimalisatie is het mogelijk om de standaardimplementatie welke werkt met de ModelInstellingen (deels) te vervangen voor wat anders via de dynamische_... functies.
De functie RwsProject.plan_ingrepen accepteert hier de volgende functie-parameters voor:
dynamische_maatregel_verschuiving: Optie om een 'custom' verschuivingsfunctie op te geven die de standaardimplementatie via deMaatregelVerschuivinginstellingen vervangt.- De functie ontvangt steeds een UUID (unieke identifier) van een maatregel en de delta (in jaren) dat hij verschoven zou worden.
- De functie dient dan de kostenfunctiebijdrage terug te geven voor die maatregel en verschuiving.
- Wanneer deze functie
Noneteruggeeft wordt alsnog de standaardimplementatie geraadpleegd. dynamische_ingreep_combis: Optie om een 'custom' combinatie-functie op te geven die de standaardimplementatie via deIngreepInstellingeninstellingen vervangt.- De functie ontvangt steeds een uniek paar UUID's (unieke identifiers) van ingrepen.
- De functie dient dan een kostenfunctiebijdrage te geven voor wanneer deze ingrepen 1 jaar zouden samenvallen.
- Wanneer deze functie
Noneteruggeeft wordt alsnog de standaardimplementatie geraadpleegd. dynamische_ingreep_uitsluiting: Optie om een 'custom' combinatie-functie op te geven die de standaardimplementatie via deIngreepInstellingeninstellingen vervangt.- De functie ontvangt steeds een uniek paar UUID's (unieke identifiers) van ingrepen.
- De functie wordt geacht om altijd een
True/Falseantwoord te geven op de vraag of deze combinatie moet worden uitgesloten.