Het optimalisatieprobleem achter netcongestie

In deze blogserie laten we zien dat onze wiskundige kracht echt een belangrijke aanvulling is op onze programmeervaardigheden.  Met een wiskundige aanpak brengen we oplossingen die je met alleen programmeren niet bereikt.

De blogs zijn gebaseerd op interviews met collega’s die recent een project hebben gedaan waar wiskunde een doorslaggevende rol in speelde.

In deze tweede bijdrage spreken we met Max en Bas, die samen een leuk project voor TenneT uitvoerden. “Door netcongestie kunnen veel bedrijven niet de elektriciteit krijgen die ze nodig hebben. Het doel van dit project was te voorspellen hoeveel capaciteit van het hoogspanningsnet beschikbaar is, en hoe je die eerlijk kunt toekennen. Je wilt niet alle capaciteit alleen aan grote partijen toekennen, maar ook niet alleen aan kleine. Zo wordt aan klanten perspectief geboden op het einde van de effecten van netcongestie.”

Wat leuk dat je hieraan meewerkte, Max. Hoe werd de capaciteit van het hoogspanningsnet oorspronkelijk over de partijen verdeeld?

“Het bestaande algoritme was een poging om een handmatige, pragmatische aanpak van de netstrategen in software te verwerken. Op deze manier werd een eerlijke stroomverdeling berekend maar nog zonder wiskundige onderbouwing.  Helaas gaf dit algoritme soms verkeerde resultaten. Dat is natuurlijk lastig als je wilt zorgen voor eerlijkheid en transparantie.”

Wat was jullie aanpak?

“Mijn collega Bas heeft het probleem uitgebreid geanalyseerd en wiskundig geformuleerd als een optimaliseringsprobleem. Daarmee kun je automatisch de best mogelijke verdeling berekenen, op basis van heldere spelregels. Zo kun je een lastig te onderhouden algoritme vervangen door een transparante en robuuste rekenmethode.

Hoe heb je dit optimaliseringsprobleem vertaald naar een concreet programma?

“Hiervoor hebben we gebruik gemaakt van bestaande rekenbibliotheken zoals SciPy.  Dit scheelt aanzienlijk in de hoeveelheid code die moet worden onderhouden. Zo konden wij ons richten op wat echt telt: de wiskundige logica achter het probleem. Wij gebruikten dit om met de klant te discussiëren over de optimale stroomverdeling.”

Wat leverde dit op?

“We slaagden erin om het probleem betrouwbaar en efficiënt op te lossen. Dankzij onze wiskundige kennis konden we de rekenprestaties flink verbeteren, bijvoorbeeld door gebruik te maken van technieken die alleen werken als je het achterliggende wiskundige model goed begrijpt.

Daarnaast voegden we slimme controles en diagnose toe: het systeem laat nu ook zien waarom een bepaalde oplossing goed is, of waar er nog ruimte is voor verbetering. Dat maakt het makkelijker voor onze klant om vertrouwen te hebben in de uitkomst én om beslissingen te onderbouwen.”

Op welke manier keken de domeinexperts met jullie mee?

Bas: “Gedurende het project werkten we intensief samen met de domeinexperts van de netbeheerder. Zij konden aangeven welke uitkomsten in de praktijk niet wenselijk waren, en samen pasten we het model daarop aan. Denk aan situaties waarbij bepaalde klanten altijd voorrang moeten krijgen, of regels die garanderen dat niemand erop achteruitgaat ten opzichte van het vorige jaar.”

Wat vond de klant van de uitwerking van het project?

Max: “In eerste instantie was het even wennen voor de klant, omdat het een heel nieuw idee was.  Maar toen we lieten zien dat de nieuwe aanpak niet alleen betere resultaten opleverde, maar ook veel eenvoudiger te onderhouden was, waren ze overtuigd.”

Bas: “Ook na de tweede fase van dit project is de klant erg tevreden, maar er blijven nog altijd wensen waar we mee verder zouden kunnen gaan.”

Waarom zouden ook andere klanten VORtech om hulp moeten vragen?

Veel organisaties worstelen met vraagstukken waarin iets eerlijk, optimaal of efficiënt verdeeld moet worden. Daar komt vaak wiskunde bij kijken, en dáár kunnen wij helpen. Het bijzondere van VORtech is dat we zowel goed zijn in toegepaste wiskunde als in het maken van efficiënte programmatuur voor de berekeningen. Die combinatie zorgt voor oplossingen die verder gaan dan een prototype en daadwerkelijk gebruikt kunnen worden om een vraagstuk aan te pakken.

Hoe kunnen ze met jullie in contact komen?

Het handigst is om het contactformulier in te vullen. We nemen dan direct contact op om te zien of we kunnen helpen.

De wiskundige details

De oorspronkelijke verdeling van netcapaciteit was gebaseerd op een handmatig ontworpen algoritme, waarin veel domeinkennis zat. Helaas leidde dit soms tot onwenselijke resultaten.

Wij hebben het probleem geherformuleerd als een wiskundig optimaliseringsprobleem. Daarbij gebruikte we SciPy, maar de standaardroutines binnen deze bibliotheek waren te traag. Door onder andere een sparse Jacobiaan te gebruiken, konden we de rekentijd flink verlagen.

Ook de toleranties vereisten aandacht. Strengere toleranties gaven soms betere resultaten zonder dat de doelfunctie zichtbaar veranderde. Dit bleek te liggen aan de structuur van de doelfunctie. We voegden een voorbewerking toe die bepaalde oplossingen al vooraf uitsluit, wat de solver ontlast en het effect van toleranties verkleint.

De doelfunctie zelf bleek een singulariteit bij nul te hebben (wanneer een partij er niets bij krijgt ten opzichte van de huidige situatie). Daarom construeerden we beginwaarden waarbij alle partijen een heel klein beetje capaciteit boven de huidige situatie ontvangen, terwijl toch aan alle randvoorwaarden voldaan wordt.
Daarnaast voegden we diagnostiek toe: per oplossing wordt aangegeven waarom die niet nog beter kan zijn, of hoe ver men van een optimum afzit.

Tot slot hebben we meerdere keren de methode bijgesteld waarmee we monotoniciteit garanderen: alle klanten ontvangen jaarlijks minstens zoveel capaciteit als het jaar ervoor.