Tredes

De trede is de ontwerpcomponent van de geschiktheid: de volgorde waarin locatietypen aan bod komen, naar analogie met de Ladder voor Duurzame Verstedelijking. Waar de empirische component zegt hoe aantrekkelijk een plek is, zegt de ladder welke soort plek eerst aan de beurt is. Deze pagina beschrijft hoe een ladder is opgebouwd, welke assen er zijn, wat de allocatie ermee doet en waar je op moet letten als je er een aanpast.

De empirische kant staat op Geschiktheid, de allocatie zelf op Allocatie procedure in formules.


Wat een trede doet in de allocatie

Tredes en empirische geschiktheid

De ladder deelt de cellen in genummerde klassen in, van hoge naar lage voorrang. In de allocatie wordt de empirische geschiktheid per subsector eerst omgezet in een rangnummer, en dat rangnummer wordt opgeteld bij een offset die per trede verschilt:

Geschiktheid_totaal = Trede_offset x bereik + rangnummer(Empirische_geschiktheid)

De offset is zo gekozen dat hij het rangnummer altijd overstemt. De ordening is daarmee strikt lexicografisch: een cel in een hogere trede gaat altijd voor op elke cel in een lagere trede, hoe hoog de empirische score daar ook is. Pas binnen een trede geeft de empirie de doorslag, en dan alleen als rangorde en niet als hoogte.

Dat maakt de ladder het zwaarste sturingsmiddel in het model. Bij wonen bezetten de harde plannen de bovenste 54 van de 324 treden van de BAU-ladder, en bij nijverheid en logistiek bestaat de ladder van twaalf treden uit niet meer dan plancapaciteit met stimuli en bouwterrein.

Twee dingen doet de ladder niet. Hij weegt niet: er is geen gewicht waarmee een hoge empirische score een trede kan compenseren. En hij is niet vergelijkbaar tussen subsectoren: het aantal treden verschilt per subsector, dus een tredescore van de ene subsector zegt niets over die van de andere. Waar subsectoren om dezelfde cel strijden wordt daarom op iets anders beslist, bij wonen op de hoogte van het exploitatiesaldo en bij werken op een uniforme prioriteit van bestaande dominante cel, plancapaciteit en stimuli die aan de kans voorafgaat. Zie Geschiktheid.

Hoe een ladder is opgebouwd

Een ladder is een cartesisch product van assen. Elke as is een klassenlijst, en elke klasse draagt een expressie (RefSrc) die per cel zegt of de klasse van toepassing is. De ladders staan per sector en subsector in VariantParameters/Tredes, de gedeelde assen in VariantParameters/Tredes/impl en een sectoreigen as bij de sector zelf, en de vlaggen waarnaar de expressies verwijzen in Templates/VariantData_T/Trede.dms onder src.

Per cel wordt op elke as de eerste klasse gekozen waarvan de vlag waar is, en die asindices worden samengevoegd tot een klassenummer. De volgorde van de assen in de combine is de prioriteitsvolgorde: het eerste argument telt het zwaarst.

Voor wonen in de BAU-ladder zijn de assen:

  1. Herontwikkeling (2): de cellen van de percelen die de Herontwikkelingskans in dit zichtjaar heeft vrijgelaten, en de rest
  2. Plancapaciteit en stimuli (6 klassen): binnen hard plan, binnen zacht plan, binnen harde stimuli, binnen middelstimuli, binnen zachte stimuli, daarbuiten
  3. Bestaand bebouwd gebied (3): binnen, aansluitend aan een woonkern, verder weg
  4. OV-bereikbaarheid (3): zeer nabij, nabij, rest
  5. Grondgebruik (2): bouwterrein, rest

Samen 216 klassen. De bovenste as zorgt dat de allocatie een vrijgekomen perceel bebouwt voordat zij elders uitbreidt: zonder die as wint een uitbreidingslocatie zonder verwervingskosten bijna altijd op saldo en blijft het perceel liggen, terwijl de kans de economische afweging al in zich heeft en de allocatie op zo’n perceel alleen nog het pakket hoeft te kiezen (#869). Let op dat de plancapaciteitsas geen kruisproduct van plan en stimuli is maar een aaneenschakeling van zes klassen op volgorde: een cel valt in de eerste klasse die op haar van toepassing is, dus een cel binnen een hard plan komt in klasse 0 ongeacht de stimuli, en een cel in een harde en een zachte stimulus valt in de harde. Welke stimuli meedoen bepaalt VariantK/StimuliVariant_Wonen; een klasse die niet meedoet of in de levering geen cellen heeft, blijft leeg en schuift niets op, want de geschiktheid sorteert per trede.

De as bestaand bebouwd gebied zet de uitbreiding aan de kernrand voor het open land verderop. Aansluitend is een cel buiten het bebouwd gebied maar binnen ModelParameters/Wonen/Uitbreiding/AansluitStraal van een BRT-woonkern. Zonder die trede kiest het saldo per hectare het open land bij dorpen, waar de grond goedkoop is en de prijzen redelijk, terwijl de nieuwbouw in de BAG bijna geheel in of vlak bij een woonkern staat (#862). Omdat de treden voor het saldo gaan, vult de kernrand eerst en is het open land verderop overloop. De schijf wordt gemeten vanaf de woonkern en niet vanaf het bebouwd gebied, want dat omvat ook linten en losse bebouwing, zodat open land ver van een kern dan toch als aansluitend zou tellen. De straal staat standaard op 250 meter, geijkt op de afstand van de BAG-nieuwbouw tot de woonkernen. Wat ook de aansluitende trede niet voorkomt: als de treden rond de kernen van een regio vol zijn, landt de rest van de claim toch in het open land.

Elke as dekt elke cel, met een klasse Totaal als sluitstuk of met een laatste klasse die het complement van de eerdere is; elke cel valt zo op elke as in precies een klasse. Dat is geen nettigheid maar een eis: valt een cel op een as in geen enkele klasse, dan heeft ze geen trede en kan ze niet worden gealloceerd. Op de tredescore in de allocatie staat een IntegrityCheck die bewaakt dat het klassenummer onder de cardinaliteit van de ladder blijft.

De ladder beslist op cellen van 25 meter, dezelfde cellen waarop de allocatie kiest; de toeleverende lagen in BaseData staan op dezelfde resolutie.

De assen

As Klassen Wat hij leest
herontwikkeling 2 de percelen die de herontwikkelingskans van wonen in dit zichtjaar vrij laat, en de rest
plancapaciteit, in veertien varianten 1 tot 3 de harde en zachte plankaarten per sector, voor werken per subsector KanOp-gefilterd
stimuli 4 de harde, middel- en zachte stimuli per sector, in die volgorde, en de rest
plancapaciteit plus stimuli 6 de harde en zachte plannen en de stimuli achter elkaar, als een reeks en niet als kruisproduct
bestaand bebouwd gebied 2 de begrenzing bebouwd gebied
bebouwd gebied plus aansluitend 3 idem, met de schijf rond de BRT-woonkernen ertussen (#862)
bebouwd gebied plus kansrijke woningbouw 3 idem, met de zoekgebieden woningbouw uit het landschapstype rivieren ertussen (#620)
OV-bereikbaarheid 3 reistijd naar een railhalte, rond een kern van 20.000 inwoners of meer
grondgebruik 2 bouwterrein volgens het grondgebruik van het basisjaar
grondgebruik voor energie 2 de primaire waterkeringen; de rijkswegen staan wel in de naam van de vlag, maar worden niet gelezen
bouwregime 4 de overstromingsgevaarzonering, en uitdrukkelijk niet de landschapstypen
belevingswaarde landschap 2 tot 4 de belevingskaart van het Nederlandse landschap
slappe bodem 2 de kaart met te slappe bodems uit Op Waterbasis
hoog of laag Nederland 2 de pleistocene tegen de holocene helft
woongebied of kom 2 of 3 bebouwd gebied of de schijf rond bestaand woongebied (#710); voor overheid en kwartaire diensten met de bestaande instelling als klasse ervoor (#668)
bestaand kantoorgebied 2 cellen waar kantoor de werkstand domineert (#668)
wel of geen wind in het basisjaar 2 de turbinestand
zonneladder 5 de treden van de zonneladder die daadwerkelijk alloceren, plus een restklasse
Totaal 1 de catch-all die alles vangt

De bouwregime-as leest bewust alleen de overstromingskant en niet de landschapstypen: de trede zou anders van betekenis veranderen op cellen die de zeef toch al heeft weggehaald. De as komt alleen voor in de ladders Intensiveren en Transformeren en in enkele andere; BAU en NbSGenuanceerd gebruiken hem niet.

De ladders die er zijn

Per sector en subsector staat er een unit per trede-variant. Welke een toepassing kiest bepaalt Trede_Variant in VariantK.dms, per variant. De namen in de tabel hieronder zijn variantnamen uit de toepassingen waarin die ladders zijn gebouwd, dus voorbeelden en geen modeleigenschap: BAU, Intensiveren en Transformeren komen uit de Ruimtelijke Verkenningen 2023, NbSGenuanceerd uit een latere toepassing met natuurlijke maatregelen. Wat wel een modeleigenschap is, is dat de ladders per sector en subsector worden gedefinieerd en dat een sector alleen kan draaien als er voor de gekozen variantnaam een unit bestaat.

Sector en subsector Beschikbare trede-varianten Klassen in de BAU-ladder
wonen, vier subsectoren BAU, Intensiveren, Transformeren, NbSGenuanceerd, plus twee andere 216, ook in NbSGenuanceerd
werken, nijverheid en logistiek BAU, Intensiveren, Transformeren, NbSGenuanceerd, plus drie andere 12
werken, zakelijke dienstverlening BAU, NbSGenuanceerd 144
werken, detailhandel en overige consumentendiensten BAU, NbSGenuanceerd 144, en 216 in NbSGenuanceerd
werken, overheid en kwartaire diensten BAU, NbSGenuanceerd 216, en 324 in NbSGenuanceerd
verblijfsrecreatie BAU, Intensiveren, Transformeren, en twee andere 6
zon BAU en vier aliassen daarvan onder andere namen 60
wind BAU en vier aliassen daarvan onder andere namen 96
waterberging BAU en NbSGenuanceerd, beide leeg 1
landbouw alleen de lege ladder 1

Waar een variant hetzelfde wil als BAU staat er een alias, bijvoorbeeld NbSGenuanceerd := BAU. Waterberging en landbouw hebben geen ladder: bij waterberging valt alles in een enkele klasse en beslist de empirische geschiktheid alleen, en de landbouwallocatie leest de trede niet.

Let op de asymmetrie in die tabel. De ladders voor wonen en werken kennen de variantnamen van meerdere toepassingen; die voor verblijfsrecreatie, zon en wind alleen de namen van de toepassingen waarvoor ze zijn gemaakt. Wie zo’n sector aanzet onder een variantnaam waarvoor geen unit bestaat, moet die eerst toevoegen, desnoods als alias van een bestaande.

Welke assen met de tijd meebewegen

De meeste assen zijn op het basisjaar geankerd: ze lezen kaarten van het basisjaar en worden niet bijgewerkt met wat het model zelf bouwt. Drie assen bewegen wel mee, elk op een eigen manier: de herontwikkeling, de plancapaciteit en het bebouwd gebied. Bij wonen zijn dat drie van de vijf assen; de werken-ladders dragen er twee van, de plancapaciteit en het bebouwd gebied, en bewegen op dezelfde manier mee, want de dynamiek zit in de bron van de vlaggen en niet in de ladder.

De herontwikkelingsas wordt per zichtjaar gezet uit de herontwikkelingskans: welke percelen vrij zijn hangt aan het zichtjaar, dus de vlag AanDeBeurt is in de variantdata nergens waar en wordt in Templates/Allocatie/Zichtjaar_T per zichtjaar ingevuld, net als de contourvlaggen. Een perceel dat eenmaal vrij is blijft vrij, dus de as kan alleen groeien.

De plancapaciteit-as vervalt na PlancapaciteitGeldigTotEnMet in ModelParameters/Advanced, dezelfde datum als de vrijstelling in de zeef: een cel binnen een plan zakt daarna naar een stimulitrede of de restcategorie. Vervallen in de zeef alleen zou daarvoor niet genoeg zijn. De zeef bepaalt alleen of een cel beschikbaar is, terwijl de plancapaciteit-as vooraan in de ladder staat en daardoor zwaarder weegt; een cel in een verlopen plan zou anders bovenaan blijven staan. Bij werken leest ook de prioriteit in de subsectorkeuze na die datum de bron waarin geen cel meer in een plan ligt, zodat die terugvalt op de stimuli en op de bestaande kantoorcel of instelling.

De as bestaand bebouwd gebied wordt per zichtjaar opnieuw opgebouwd, als het bebouwd gebied van het basisjaar verenigd met een schijf van 100 meter rond de cellen die het model in eerdere zichtjaren voor wonen of werken heeft gealloceerd (#749). De ingreep moet om de omgeving van gebouwde cellen gaan en niet om die cellen zelf: een cel die het model eenmaal alloceert komt de rest van de reeks niet meer in de allocatie, dus haar aan het bebouwd gebied toevoegen verandert niets. De schijf is 100 meter, vier cellen van het allocatiegrid, dus direct aangrenzend; ruimer werkt niet, want een schijf van 500 meter zou bijna tweemaal het bebouwde gebied zelf toevoegen, en dan betekent binnenstedelijk niets meer. Deze opbouw staat in het zichtjaar zelf, in Templates/Allocatie/Zichtjaar_T/TredeDynamischeUrbanContour, want alleen daar is de stand van het vorige zichtjaar beschikbaar; in het eerste zichtjaar is er nog niets gebouwd. Alleen wonen en werken laten het bebouwd gebied aangroeien, want de andere sectoren bouwen geen kom. De aansluitende trede groeit op dezelfde manier mee: haar schijf ligt rond de woonkernen samen met die schijf van 100 meter rond de modelnieuwbouw.

De OV-bereikbaarheid en het bouwterrein bewegen niet mee. Voor de eerste is er geen bron die zegt hoe die zich ontwikkelt, en dat is een aanname die bij de resultaten hoort te worden benoemd. Voor de tweede hoeft het niet, om dezelfde reden als hierboven.

De buffers rond kernen naar inwonertal, waarop de OV-as leest, staan op de begrenzing bebouwd gebied met het inwonertal uit de CBS-vierkanten. Die bron reikt verder dan de trede alleen: dezelfde buffers voeden de OV-klassen en de dichtheidsfactoren per kerngrootte.

Om de vervaldatum van de plancapaciteit toe te kunnen passen worden de ladders in twee smaken opgebouwd: met de plancapaciteit en zonder. De ladder zelf is in beide dezelfde; wat verschilt is de bron, waarin de plancapaciteitsvlaggen zijn platgelegd. Per zichtjaar kiest de allocatie welke van de twee ze leest (IterSubsector_T/TredeContainer), net zoals de zichtjaarzeef kiest tussen de twee uitkomsten van de basisjaarzeef.

Hoe de ladder wordt gerekend

Het sjabloon Templates/VariantData/Trede_T leest de assen uit de combine-unit zelf, bouwt per as een kaart van een byte met de eerste ware klasse, en telt die asindices met een mixed-radix som samen in combine-volgorde. Dat is rekenkundig hetzelfde als per klasse een kaart maken met het klassenummer waar alle asvlaggen waar zijn en daarover de laagste nemen, want de klassenconjuncties zijn per constructie het cartesisch product van de asvlaggen. Het scheelt wel veel: een kaart per klasse zou op 25 meter honderden kaarten van ruim 145 miljoen cellen per ladder betekenen, per zichtjaar opnieuw, terwijl de opbouw per as een handvol kaarten van een byte per cel kost. Een kaart per klasse bestaat alleen voor de visualisatie.

Twee details van die constructie zijn het onthouden waard. Een alias als NbSGenuanceerd := BAU heeft de subitems van de combine niet zelf; het sjabloon volgt de alias tot twee niveaus diep om alsnog bij de assen te komen. En een unit zonder first_rel is geen combine en is dan zelf de enige as, wat de ladders met een enkele as opvangt.

Valkuilen bij het aanpassen

Elke as moet elke cel dekken. Zonder sluitstuk valt een cel buiten de ladder en doet ze niet mee.

De volgorde van de assen is de prioriteitsvolgorde. Een as verplaatsen is geen cosmetische ingreep maar een andere ladder.

Een as toevoegen of een klasse aan een as toevoegen vermenigvuldigt de cardinaliteit. Van 216 naar 324 klassen kost niets bijzonders, maar de ladder is wel de plek waar dat zich opstapelt.

Een nieuwe variantnaam vraagt een unit per sector en subsector die de allocatie draait. Ontbreekt hij, dan faalt de configuratie op een niet bestaand item.

En een as mag geen alias van een classificatie-unit zijn. De verwijzing die het sjabloon volgt loopt dan door tot de classificatie zelf, en daar staat geen RefSrc. Om die reden dragen de assen bestaand bebouwd gebied en bouwregime hun eigen klassenlijst met dezelfde namen als de classificatie.