Hoe wiskunde een vastgelopen rekenmodel weer vlottrok
In deze blogserie laten we zien dat onze wiskundige kracht 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 Thea, die samen met haar collega Bas en toenmalig collega Alouette een leuk project voor Boskalis uitvoerde.
Bij Boskalis gebeuren natuurlijk heel veel verschillende dingen. Waar heb jij precies aan gewerkt?
Boskalis werkt veel met zettingsmodellen: rekenmodellen die voorspellen hoe opgespoten zand zich in de loop van de tijd gedraagt. Dat is cruciaal voor projecten zoals terreinophoging of landaanwinning. De klant rekende de modellen door in Excel, maar dat was erg complex en niet gebruiksvriendelijk. De lange formules waren moeilijk beheersbaar en daardoor was het heel moeilijk om nieuwe opties toe te voegen of wijzigingen in de berekening aan te brengen. Wij werden gevraagd om het proces sneller en betrouwbaarder te maken.
Was meteen al duidelijk dat je hier met wiskunde aan de slag zou gaan?
Nee, eigenlijk niet. Een medewerker van Boskalis was op eigen initiatief begonnen aan de implementatie van een numerieke oplossing in Python, maar liep hierbij vast op de rekentijd. Zijn vraag was: “Kunnen jullie helpen het sneller te maken?” Toen we eenmaal met het project begonnen waren bleek hier een wiskundige bottleneck te zitten.
Hoe kwam het dat de modellen zoveel rekentijd nodig hadden?
De tijdsintegratie was te eenvoudig voor het type processen dat gesimuleerd werd. Hierdoor moest de tijdsstap heel klein blijven (minuten in plaats van dagen) om numeriek stabiel te blijven. Dat leidde tot gigantisch veel tijdsstappen voor simulaties die jaren bestrijken.
Hoe zijn jullie te werk gegaan?
We begonnen met het losweken van de tijdsintegratie uit de rest van de code, zodat we überhaupt andere methoden konden proberen. Tegelijkertijd hebben we tests en Continuous Integration (CI) opgezet zodat de resultaten na elke aanpassing correct bleven. Daarnaast hebben we een plan gemaakt om een impliciete tijdsintegratiemethode (de impliciete Eulermethode, zie kader) toe te passen. Dit is een wiskundige techniek die namelijk veel grotere tijdsstappen toelaat. In de tweede fase van het project hebben we dit idee verder uitgewerkt door de vergelijking te lineariseren en de benodigde Jacobiaan te berekenen. Vervolgens konden we de nieuwe integratiemethode implementeren.
En, scheelde dat in rekentijd?
Ja, enorm. De rekentijd ging van “praktisch onbruikbaar” naar “ruimschoots snel genoeg”. Daardoor werd de Pythonversie ook geschikt voor complexere scenario’s.
Je klinkt echt enthousiast over de gebruikte wiskundige technieken!
Absoluut! Dit project begon met een vraag over Pythonoptimalisatie, maar uiteindelijk bleken juist de rekenkundige keuzes het verschil te maken. Zo kunnen we ook collega’s laten zien hoe je dit soort wiskundige inzichten structureel kunt toepassen in projecten.
Was de klant ook tevreden?
Zeker! Boskalis zag duidelijk de meerwaarde van onze aanpak. Door natuurwetenschappelijke kennis te combineren met wiskunde én software-engineering, konden we een oplossing bouwen waar zij volledig op vertrouwen. Zo zie je maar: de combinatie van wiskunde en programmeren leidt tot oplossingen die afzonderlijk niet haalbaar zijn.
De wiskundige details
Om de impliciete Eulermethode te kunnen gebruiken, moet een Jacobiaan berekend worden. In het ideale geval reken je met een analytische Jacobiaan, . Daarom is ervoor gekozen een Jacobiaan via eindige differenties te berekenen. De rekentijd werd hiermee voldoende ingekort om het model in de praktijk te kunnen gebruiken.