simuleren van een kijkfile · jeroen van der gun . jeroen van der gun 4 van 70 samenvatting het...
TRANSCRIPT
Simuleren van een kijkfile Eindrapport Bacheloreindwerk
Jeroen van der Gun ███████
Jeroen van der Gun 2 van 70
Omslag: bewerkt screenshot uit Need For Speed Road Challenge, Electronic Arts
Jeroen van der Gun 3 van 70
Voorwoord
Voor u ligt het eindrapport van mijn Bacheloreindwerk waar ik het afgelopen
kwartaal aan heb gewerkt. Ik wil graag een aantal mensen bedanken die dat
mede mogelijk hebben gemaakt.
In de eerste plaats wil ik mijn begeleiders Rob van Nes en Ramon Landman
bedanken. De wekelijkse bijeenkomsten waren waardevol om te controleren
of ik nog steeds een goede weg was ingeslagen. Dank gaat verder uit naar
Winnie Daamen voor het bedenken van de opdracht en naar Victor Knoop
voor het beschikbaar stellen van alle gegevens en het beantwoorden van
vragen daarover. Naar alle bovenstaande personen gaat bovendien dank uit
voor de nuttige tussentijdse hulp, waarvoor ik meestal zonder afspraak hun
kantoor binnenviel.
Delft, 20 juni 2011
Jeroen van der Gun
Jeroen van der Gun 4 van 70
Samenvatting
Het microscopische simulatiemodel Fosim kent momenteel niet
direct een mogelijkheid om kijkfiles te simuleren. Om deze
mogelijkheid wel te krijgen, is gekeken naar het gedrag van
bestuurders bij een ongeval op de A1 bij Apeldoorn en in
mindere mate een ongeval op de A15 bij Gorinchem. Dit is
gebeurd met door een helikopter geregistreerde
voertuigtrajectoriën. Hierbij is gekeken naar gewenste
volgafstanden, reactietijden en wenssnelheden.
Omdat, met uitzondering van wenssnelheden, het gedrag van
bestuurders in Fosim niet op een bepaalde locatie is aan te
passen, moest enigszins worden geïmproviseerd om de
aanpassingen te valideren. In de eerste plaats zijn er
fundamentele diagrammen opgesteld, waaruit bleek dat de
aanpassingen een sterk verbeterde beschrijving van het verkeer
in congestie vormen. Daarnaast is er, omdat er een filegolf op
lussen bovenstrooms van de file werd waargenomen,
gecontroleerd of er door de aanpassing filegolven kunnen
ontstaan: dit bleek wel het geval, maar pas bij een te hoge
verkeersintensiteit. Tot slot bleek uit een simulatie van het
afrijden van het verkeer uit de filekop dat het lokaal
aangepaste gedrag een betere nabootsing van de praktijk
oplevert.
De belangrijkste aanbevelingen zijn om Fosim zo aan te passen
dat bestuurders lokaal van rijgedrag kunnen veranderen en dat
de reactietijd verder kan worden verhoogd dan nu. Vervolgens
wordt aangeraden om een volledige simulatie van het ongeval
bij Apeldoorn uit te voeren, waarin bestuurders inderdaad op
die manier lokaal van gedrag veranderen.
Jeroen van der Gun 5 van 70
Inhoudsopgave
Voorwoord .................................................................................................... 3
Samenvatting ................................................................................................ 4
Inhoudsopgave .............................................................................................. 5
1 Inleiding ................................................................................................ 7
1.1 Bottlenecks in Fosim ....................................................................... 7
1.2 Doelstelling .................................................................................... 8
1.3 Leeswijzer ...................................................................................... 8
2 Beschikbare gegevens ............................................................................ 9
2.1 Beschrijving van de ongevallen ....................................................... 9
2.1.1 Ongeval bij Apeldoorn ............................................................. 9
2.1.2 Ongeval bij Gorinchem .......................................................... 12
2.2 Trajectoriedata .............................................................................. 12
2.2.1 Rekenmethoden ...................................................................... 13
2.2.2 Visualisaties ........................................................................... 14
2.3 Lusdata ......................................................................................... 19
3 Kalibratie ............................................................................................. 22
3.1 Gewenste volgtijd ......................................................................... 22
3.1.1 Detectie van ‘volggebeurtenissen’ .......................................... 22
3.1.2 Berekening van modelparameters ........................................... 23
3.1.3 Indeling in voertuigbestuurdercombinaties .............................. 24
3.2 Reactietijden ................................................................................. 26
3.3 Wenssnelheden .............................................................................. 26
3.3.1 Bepaling aangepaste wenssnelheid .......................................... 27
3.3.2 Implementatie in Fosim .......................................................... 28
4 Validatie .............................................................................................. 29
4.1 Fundamentele diagrammen ............................................................ 29
4.1.1 Methodiek .............................................................................. 29
4.1.2 Problemen door hogere reactietijd .......................................... 30
4.1.3 Theoretische berekening van de congestietak .......................... 31
4.1.4 Resultaten .............................................................................. 32
4.2 Gevoeligheid voor verstoringen ..................................................... 34
4.3 Afrijsimulatie ................................................................................ 36
5 Conclusies en aanbevelingen ................................................................ 38
5.1 Conclusies .................................................................................... 38
5.2 Aanbevelingen .............................................................................. 38
5.2.1 ‘Gedragsonderdrukkingsgebied’ ............................................. 38
5.2.2 Verhoging van de reactietijd ................................................... 38
5.2.3 Variatie in wenssnelheid en reactietijd .................................... 39
5.2.4 Gevonden bugs ....................................................................... 39
Jeroen van der Gun 6 van 70
6 Evaluatie ............................................................................................. 40
Referenties ................................................................................................. 41
Algemene kennis ..................................................................................... 41
Onderzoeken ........................................................................................... 41
Informatie over Fosim ............................................................................. 41
Data ........................................................................................................ 41
Bijlage A: dataverwerkingsprogramma’s ..................................................... 42
Kern: analyse.m ...................................................................................... 42
Functie: lussen.m .................................................................................... 52
Functie: fosimgenerator.m ....................................................................... 55
Kern: gorinchem.m .................................................................................. 55
Hulpprogramma: route.m ......................................................................... 58
Functie: plotxpos.m ................................................................................. 60
Simulatie fundamenteel diagram: analyse.php .......................................... 60
Afrijsimulaties: analyse.php .................................................................... 62
Bijlage B: effecten van Fosim-bottlenecks ................................................... 64
Snelheidsonderdrukkingsgebied ............................................................... 64
Verkeerslichten ........................................................................................ 66
Tijdelijke blokkade .................................................................................. 68
Bijlage C: macroscopische acceleratie ......................................................... 69
Jeroen van der Gun 7 van 70
1 Inleiding
Verkeersongelukken zijn een belangrijke oorzaak van files. Enerzijds komt dit
doordat rijstroken worden geblokkeerd, maar anderzijds doordat bestuurders
worden afgeleid en minder op het overige verkeer letten, waardoor ook de
capaciteit per overblijvende rijstrook daalt. Het verkeersaanbod kan hierdoor
groter worden dan de capaciteit, waardoor bij het ongeval een file wordt
gevormd.
Om op het niveau van de individuele automobilist simulaties uit te voeren,
kan het model Fosim worden gebruikt. Dit model is gekalibreerd voor
normale omstandigheden op Nederlandse autosnelwegen. Door veel
individuele voertuigen te simuleren komt met Fosim macroscopische
informatie over een weggedeelte naar voren, zoals de capaciteit. Ui teindelijk
zegt dit iets over de functionele kwaliteit van de infrastructuur, waardoor
bijvoorbeeld zwakke plekken in een verkeersnetwerk kunnen worden
blootgelegd. Voor een partij als Rijkswaterstaat is dat natuurlijk nuttig om te
weten.
1.1 Bottlenecks in Fosim
Het is echter maar de vraag of Fosim ook bruikbaar is in het geval van een
ongeluk. Om een bottleneck in Fosim te maken, kan simpelweg een rijstrook
worden beëindigd. Fosim bevat daarnaast gelukkig ook enkele fijnmazigere
methoden waarmee het effect van de bottleneck zelf is af te stellen. Dit zijn:
Een snelheidsonderdrukkingsgebied: een wegvak waarin de
wenssnelheden van de voertuigen met een bepaalde factor worden
gereduceerd.
Een tijdelijke blokkade: een verzameling stroken die van een bepaalde
tijd tot een bepaalde tijd geblokkeerd is.
Een verkeerslichteninstallatie.
Al deze maatregelen kunnen worden gebruikt om het verkeer geheel of
gedeeltelijk af te remmen. De precieze effecten die deze maatregelen op een
voertuig hebben, worden beschreven in bijlage B.
De hierboven genoemde maatregelen zijn echter fysieke obstakels. Dat is heel
aardig indien een ongeval daadwerkelijk een rijstrook blokkeert, maar
hierdoor ontbreekt er wel een psychologisch obstakel doordat bestuurders
naar het ongeval kijken in plaats van op het autorijden concentreren. Deze
psychologische bottleneck is de oorzaak van de beruchte kijkfile , waarbij de
volle rijbaan beschikbaar is, maar er toch een file ontstaat omdat de
bestuurders zijn afgeleid.
Jeroen van der Gun 8 van 70
Wat betreft het gedrag van bestuurders, is het van belang te weten dat Fosim
beschikt over vijf zogenaamde voertuigbestuurdercombinaties. Zoals de naam
al suggereert, zijn dit combinaties van voertuigkenmerken en
gedragskenmerken van de bestuurder die dat voertuig bestuurt. De
combinaties 4 en 5 zijn voor vrachtwagens; 1, 2 en 3 zijn voor gewone
voertuigen. Er kan in Fosim worden ingesteld welke aandelen elke combinatie
in de totale verkeersstroom moet hebben.
1.2 Doelstelling
Het gebrek aan psychologische bottlenecks in Fosim heeft tot gevolg dat het
gedrag van individuele voertuigen nabij een ongeluk niet goed kan worden
voorspeld, waardoor bijvoorbeeld de capaciteit in die situatie onduidelijk is.
Omdat ongelukken een belangrijke oorzaak van files zijn, is het echter
belangrijk om de verkeersafwikkeling ook in die situatie te kunnen
voorspellen.
Het doel van dit Bacheloreindwerk is om te onderzoeken op welke manier
Fosim moet worden aangepast om de psychologische bottleneck te
introduceren die een kijkfile kan verklaren. Hiervoor zullen concrete
gegevens van ongevallen uit de praktijk worden geanalyseerd, zoals gewenste
snelheden en volgafstanden en reactietijden.
1.3 Leeswijzer
In het hoofdstuk ‘Beschikbare gegevens’ zal de te gebruiken informatie op
een rij worden gezet en zullen de eerste analyses hierop worden losgelaten.
Het hoofdstuk ‘Kalibratie’ beschrijft vervolgens hoe die informatie omgezet
kan worden in concrete parameters voor Fosim.
In het hoofdstuk ‘Validatie’ zullen methoden worden bedacht en toegepast om
te controleren of de kalibratie inderdaad een positief effect heeft op het
realiteitsgehalte van de simulatie.
Tot slot volgen de hoofdstukken ‘Conclusies en aanbevelingen’ en
‘Evaluatie’.
Door het hele document heen zal informatie vanwege de complexiteit op de
computer worden bewerkt tot het gewenste resultaat. In de hoofdstukken zelf
wordt dan steeds in woorden – eventueel ondersteund door wiskundige
vergelijkingen – uitgelegd wat de computer doet. In bijlage A kan telkens de
precieze computerprogrammatuur worden gevonden.
Jeroen van der Gun 9 van 70
2 Beschikbare gegevens
Om het rijgedrag in kijkfiles te onderzoeken, zullen gegevens van twee
ongevallen worden gebruikt. De ongevallen en de beschikbare data zullen
hieronder worden beschreven.
2.1 Beschrijving van de ongevallen
Figuur 1: kaart met locaties van de ongevallen (kaartmateriaal: Rijkswaterstaat)
2.1.1 Ongeval bij Apeldoorn
Het is 5 juni 20071, kwart over negen ’s ochtends, als er op de A1 richting
Apeldoorn een voertuig in de middenberm strandt. Dit gebeurt vlak na het
Harm van de Veen-ecoduct bij Kootwijk, bij hectometerpaal 71,7. In beide
richtingen ondervindt het verkeer hier hinder van.
1 Volgens het onderzoek van Knoop, Van Zuylen en Hoogendoorn is de datum 6 juni 2007,
maar dat is onjuist.
Jeroen van der Gun 10 van 70
Figuur 2: still uit helikopterbeelden van het incident bij Apeldoorn
In de oostelijke richting (rechterrrijbaan, richting Apeldoorn) blokkeren
voertuigen van hulpdiensten de linker van de twee rijstroken. Het verkeer
wordt afgewikkeld over de rechterstrook en de vluchtstrook. Omdat een
gedeelte van het verkeer de vluchtstrook mijdt, ontstaat een rare verdeling
over de twee stroken, waardoor het verkeer moeilijk te modelleren is.
In de westelijke richting (linkerrijbaan) is er geen enkele fysieke belemmering
voor het verkeer aanwezig: de twee rijstroken zijn volledig beschikbaar.
Desondanks ontstaat hier wel congestie. Dit kan bij een intensiteit van rond
de 2 5 0 0 v t g / h uitsluitend aan het kijkgedrag verklaard worden: er is sprake
van een pure kijkfile.
Met behulp van Google Streetview is na te gaan hoe goed het zicht op het
ongeval vanaf verschillende plaatsen op de linkerrijbaan is. Ondanks de brede
middenberm moet het ongeval door het gebrek aan hoge begroeiing goed
zichtbaar zijn geweest.
Figuur 3: zicht vanaf Li 71,90 (beeld: Google Streetview)
Bij hectometerpaal 71,9 zit het ongeval achter de middenondersteuning van
het viaduct. Zo rond de 71,85 zal het ongeluk zichtbaar worden, hoewel het
dan nog 1 5 0 m ver weg is.
Jeroen van der Gun 11 van 70
Figuur 4: zicht vanaf Li 71,80 (beeld: Google Streetview)
Figuur 5: zicht vanaf Li 71,75 (beeld: Google Streetview)
Jeroen van der Gun 12 van 70
Figuur 6: zicht vanaf Li 71,65 (beeld: Google Streetview)
Tussen hectometerpaaltjes 71,7, naast het gestrande voertuig, en 71,65
verdwijnt de rechterrijbaan achter hogere begroeiing, later gevolgd door de
binnenkant van het ecoduct.
2.1.2 Ongeval bij Gorinchem
Op dezelfde dag is op de A15 een ongeluk gebeurd. Dit was net ten westen
van knooppunt Gorinchem met de A27. Hierbij waren meerdere voertuigen
betrokken, waardoor in westelijke richting zowel de vluchtstrook als de
rechterrijstrook was geblokkeerd, waardoor er nog maar één rijstrook
overbleef.
In oostelijke richting waren daarentegen geen rijstroken geblokkeerd en was
de verkeersintensiteit ongeveer 1 2 0 0 v t g / h . Hoewel de voertuigen afremden
om naar de andere rijbaan te kijken, bleek deze intensiteit onvoldoende om
congestie te veroorzaken.
2.2 Trajectoriedata
Van beide incidenten zijn helikopterbeelden gemaakt. Voor het onderzoek van
Knoop, Van Zuylen en Hoogendoorn zijn gedeeltes hiervan geanalyseerd en
omgezet in een verzameling voertuigtrajectoriën.
Het betreft hierbij een fragment van vijf minuten met 199 voertuigen voor het
verkeer in westelijke richting bij Apeldoorn en een fragment van tien minuten
met 193 voertuigen voor het verkeer in oostelijke richting bij Gorinchem. Bij
Apeldoorn zijn van de rechterrijstrook tevens de voertuiglengtes beschikbaar,
Jeroen van der Gun 13 van 70
waarmee vastgesteld kan worden dat het vrachtwagenpercentage 1 7 , 6 %
bedraagt. Van het verkeer in westelijke richting bij Gorinchem is eveneens
een trajectorieverzameling opgesteld, maar deze is voor dit onderzoek niet
gebruikt.
Alle voertuigen zijn door Knoop, Van Zuylen en Hoogendoorn voorzien van
informatie over wie de voorligger is. Opgemerkt dient te worden dat hierbij
enkele van strook wisselende voertuigen uit de verzamelingen zijn
verwijderd.
2.2.1 Rekenmethoden
Na bewerking van de gegevens in het onderzoek van Knoop, Van Zuylen en
Hoogendoorn, is van elk voertuig elke 0 , 1 s een x-coördinaat en een y-
coördinaat bekend. Zij hebben deze gegevens als volgt omgezet in bruikbare
informatie:
2 2
1 1
1
n n
n n n n
n
n n
s f x
x x y y
v
t t
Hierin is s de coördinaat langs de weg en v de snelheid. De functie f is
gebaseerd op de punten 2 2
1 1
1
,
n
n i i i i
i
x x x y y
van alle voertuigen
uit de betreffende rijstrook.
De versnelling hadden zij ook uitgerekend, maar hier bleken grote uitschieters
in te zitten. Dit blijkt te verklaren door voortplanting van de meetfout. In dit
onderzoek is daarom een andere formule voor de acceleratie gebruikt, en wel
de volgende:
2 2
2 2
n n
n
n n
v va
t t
In deze centraledifferentieformule staat een 2 i.p.v. een 1 om de noemer te
vergroten, waardoor de meetfouten minder invloed hebben. De afbreekfout
( 2
O t ) wordt hierdoor wel 2
2 4 keer zo groot, maar dit lijkt niet voor
problemen te zorgen. Door deze nieuwe acceleratieformule zijn de
acceleratiekrommes van voertuigen een stuk vloeiender. Hieronder zijn beide
methoden voor één voertuig vergeleken:
Jeroen van der Gun 14 van 70
234 236 238 240 242 244 246 248 250-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Tijd (s)
Accele
ratie (
m/s
2)
Origineel
Verbeterd
Figuur 7: de acceleratieformules vergeleken voor voertuig 1 bij Apeldoorn
2.2.2 Visualisaties
Nadat de trajectoriën met bovengenoemde rekenmethoden zijn opgesteld,
kunnen deze worden gevisualiseerd. De simpelste manier hiervoor is om ze in
het ,s t -vlak te tekenen. Dit is hieronder gedaan voor beide locaties.
Omdat de situatie bij Apeldoorn het uitvoerigst zal worden gebruikt, is hier de
interne s -coördinaat van de dataset (bij benadering) omgerekend naar de
coördinaat volgens de hectometerpaaltjes. Omdat het de linkerrijbaan betreft,
is de plaatscoördinaat aflopend.
Om een betere indruk te krijgen van de verkeerssituatie, is het nuttig om
snelheidscontouren op te stellen. Een mogelijke manier om dit te doen is elke
5 m een ‘virtuele detectielus’ onder de trajectoriën te leggen die van de
passerende voertuigen de snelheid registreren. Door van elk tijdvak van 3 0 s
een (harmonisch) gemiddelde snelheid uitrekenen, ontstaat een beeld van de
snelheid als functie van ruimte en tijd, waarvan contouren geschetst kunnen
worden. De begrenzingen van de figuren in ruimte en tijd zijn zodanig
geprobeerd te kiezen dat alle soorten trajectoriën overal voldoende
vertegenwoordigd zijn; dit om plaatselijke bias te vermijden.
Alle figuren staan op de hierna volgende pagina’s. Er is duidelijk te zien dat
de verkeerssituatie niet stationair is.
Jeroen van der Gun 15 van 70
Figuur 8: trajectoriën bij Apeldoorn in westelijke richting
71.5
571.6
71.6
571.7
71.7
571.8
71.8
50
50
100
150
200
250
300
Pla
ats
(km
)
Tijd (s)
Lin
kers
trook
Rechte
rstr
ook
Jeroen van der Gun 16 van 70
Figuur 9: trajectoriën bij Gorinchem in oostelijke richting
100
150
200
250
300
350
400
450
500
0
100
200
300
400
500
600
Pla
ats
(m
)
Tijd (s)
Lin
kers
trook
Rechte
rstr
ook
Jeroen van der Gun 17 van 70
Figuur 10: snelheidscontouren bij Apeldoorn in westelijke richting
25
25
25
25
25
30
30
30
30
35
35
35
35
40
40
40
40
45
45
45
45
50
50
50
50
50
55
55
55
55
55
60
60
65
Snelh
eid
sconto
ure
n (
km
/h)
Pla
ats
(km
)
Tijd (s)
71.6
271.6
471.6
671.6
871.7
71.7
271.7
471.7
671.7
825
55
85
115
145
175
205
235
265
Jeroen van der Gun 18 van 70
Figuur 11: snelheidscontouren bij Gorinchem in oostelijke richting
70
70
70
70
70
70
70
70
70
70
70
70
80
80
80
80
80
80
80
80
80
80
80
80
80
80
80
808
0
80
80
90
90
90
90
90 9
090
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
90
10
0
100
10
010
0
10
0
100
100
10
010
0
10
0
11
0
11
0
11
011
0
11
0
12
0
Snelh
eid
sconto
ure
n (
km
/h)
Pla
ats
(km
)
Tijd (s)
160
180
200
220
240
260
280
300
320
340
360
380
25
55
85
115
145
175
205
235
265
295
325
355
385
415
445
475
505
535
565
Jeroen van der Gun 19 van 70
2.3 Lusdata
Er liggen natuurlijk ook gewoon echte detectielussen in de weg. Voor het
incident bij Apeldoorn zijn de gegevens hiervan in dit onderzoek gebruikt.
Hieronder wordt een overzicht gegeven van de plaatsen waarop ten tijde van
het ongeval de lussen lagen (inmiddels liggen er meer).
Figuur 12: locaties van inductielussen bij het incident bij Apeldoorn (achtergrond:
Google Maps)
De lussen tellen per minuut per rijstrook het aantal voertuigen en registreren
tevens de gemiddelde snelheid van deze voertuigen.
Er zijn twee manieren om gemiddelde snelheden te definiëren: een tijd -
gemiddelde of lokale snelheid L
u en een ruimtelijk-gemiddelde of momentane
snelheid M
u . Met de snelheden in een doorsnede is de momentane snelheid te
benaderen door het harmonisch gemiddelde van de snelheden in de doorsnede.
De formules zijn als volgt:
1
1
1
n
i
i
L
M n
i i
v
u
n
nu
v
Rijkswaterstaat meet simpelweg tijd-gemiddelde snelheden. Om een correct
fundamenteel diagram op te stellen, is echter een ruimtelijk-gemiddelde
snelheid nodig – bij een tijd-gemiddelde snelheid worden snelle voertuigen
oververtegenwoordigd in de resultaten en is de dichtheid niet met /k q u uit
te rekenen.
Benedenstroomse
inductielussen
Li 70,800
Ongeval
Re 71,7
Benzinestation
‘De Hucht’
Li 77,9 Inductielussen
Li 74,970
Bovenstroomse
inductielussen
Li 78,730
0,9 km
3,3 km
Jeroen van der Gun 20 van 70
In een artikel van Knoop, Hoogendoorn en Van Zuylen wordt een empirisch
verband gegeven om M
u uit L
u te schatten. Dit verband is in onderstaande
figuur weergegeven. Met lineaire interpolatie hiervan kunnen de snelheden
alsnog worden gebruikt in een fundamenteel diagram.
10 sec
60 sec
900 sec
0 20 40 60 80 100 120 1400.5
0.6
0.7
0.8
0.9
1
time mean speed (km/h)
spac
e m
ean s
pee
d /
tim
e m
ean s
pee
d
0 20 40 60 80 100 120 1400
2040
6080
100
120140
160180200
220240
density using time mean speed (veh/km/lane)
den
sity
usi
ng s
pac
e m
ean s
pee
d (
veh
/km
/lane)
Figuur 13: empirisch verband tussen ruimtelijk-gemiddelde en tijd-gemiddelde
snelheid voor verschillende aggregatie-intervallen; de blauwe lijn is tien seconden, de
stippellijn een minuut en de rode lijn een kwartier (bron: Knoop, Hoogendoorn en Van
Zuylen)
Op de volgende pagina staan de meetgegevens van deze drie sets lussen. De
gegevens van de twee rijstroken zijn hierin samengevoegd. De snelheden zijn
schattingen van de ruimtelijk-gemiddelde snelheid. Er valt direct op dat rond
9:40u een filegolf de lussen 3 , 3 k m bovenstrooms passeert.
Aan de rechterkant zijn ook de gegevens uit de trajectoriën toegevoegd , per
halve minuut geaggregeerd. Deze konden helaas niet in de figuur zelf worden
geplaatst, omdat van het tijdstip waarop de helikopterbeelden zijn gemaakt
niet meer bekend is dan dat de vijf minuten ergens tussen 9:39u en 10:15u
moeten hebben gelegen. Omdat er elke 5 m een virtuele lus ligt, moet worden
gekozen welke gegevens uiteindelijk worden gebruikt:
Voor de intensiteit is de gemiddelde intensiteit van alle lussen die alle
voertuigen detecteren uitgerekend.
Voor de snelheid is elk tijdstip de lus met de laagst gemeten snelheid
gekozen. Alle virtuele lussen gebruiken harmonische gemiddelden.
De dichtheden op de lussen zijn geschat met /k q u . De dichtheid tussen de
twee lussen rondom het ongeval is geschat met behulp van de wet van behoud
van voertuigen. Omdat lusintensiteiten behoorlijke fouten kunnen bevatten,
zoals beschreven in een onderzoek van Ou, was het nodig om hier een
correctie op uit te voeren: hier is simpelweg c o r r e c t i e
k t A t B bij de
dichtheid opgeteld, waarbij A en B zodanig zijn gekozen dat de dichtheden
in de buurt van 8:00u en 12:00u kloppen met de dichtheden op de lussen. Het
resultaat moet slechts als een globale indicatie worden beschouwd.
Jeroen van der Gun 21 van 70
Figuur 14: lusgegevens
8:0
08:3
09:0
09:3
010:0
010:3
011:0
011:3
012:0
00
1000
2000
3000
4000
5000
Intensiteit (vtg/h)Lusdata
0300
0
1000
2000
3000
4000
5000
Tra
jecto
riedata
8:0
08:3
09:0
09:3
010:0
010:3
011:0
011:3
012:0
00
50
100
150
Snelheid (km/h)
0300
0
50
100
150
8:0
08:3
09:0
09:3
010:0
010:3
011:0
011:3
012:0
00
50
100
150
Dichtheid (vtg/km)
Tijd
stip
0300
0
50
100
150
Tijd
(s)
7,0
km
bove
nstr
oom
s (
per
60 s
)
3,3
km
bove
nstr
oom
s (
per
60 s
)
Bij
het
ongeva
l (p
er
30 s
)
0,9
km
benedenstr
oom
s (
per
60 s
)
Gem
iddeld
e o
ver
4,1
7 k
m r
ondom
ongeva
l
Jeroen van der Gun 22 van 70
3 Kalibratie
Het is duidelijk dat bestuurders zich anders gaan gedragen als er een ongeval
in zicht is. Om uit te vinden hoe deze gedragsverandering in Fosim kan
worden toegepast, zullen drie gedragskenmerken onderzocht worden: de
gewenste volgtijd, de reactietijd en de wenssnelheid.
Tenzij anders vermeld, worden de gegevens van het incident bij Apeldoorn
gebruikt, waar het verkeer niet vrij wordt afgewikkeld.
3.1 Gewenste volgtijd
In Fosim is de gewenste volgafstand 2
1 2 3d z z v z v afhankelijk van de snelheid v en
de positieve modelparameters 1
z , 2
z en 3
z ,
waarbij standaard 2
z verschilt per voertuigtype.
De gewenste volgtijd is 1 2 3
/ /d v z v z z v .
Aangenomen wordt dat aan de kop van een
kijkfile bij dezelfde snelheid een grotere
volgafstand wordt aangehouden dan onder
normale omstandigheden. Om dit te kwantificeren,
zijn de i
z -waarden opnieuw gekalibreerd aan de hand van de trajectoriën.
3.1.1 Detectie van ‘volggebeurtenissen’
Ten behoeve van de kalibratie is een programma geschreven dat
‘volggebeurtenissen’ uit de trajectoriën afleidt. Een ‘volggebeurtenis’ is
hierbij een tijdsspanne waarin de acceleratie van een voertuig en zijn
voorligger in absolute zin kleiner blijft dan 2
0 ,5 m / s . In elke gedetecteerde
volggebeurtenis worden vervolgens de gemiddelde volgafstand en snelheid
worden berekend.
Aan alle volggebeurtenissen is de eis gesteld dat zij minimaal 1 s duren, om
toevallige gebeurtenissen te elimineren. Daarnaast is geëist dat tijdens de
volggebeurtenis het volgende voertuig zicht heeft op het ongeval ; het model
moet immers worden gekalibreerd voor kijkgedrag. Alleen bij het naderen van
het ecoduct wordt het zicht door de middenberm geblokkeerd. Omdat de
voertuigen op dit punt wegrijden uit de kijkfile en dus accelereren, blijkt de
laatste eis nauwelijks invloed te hebben op de resultaten.
In herinnering wordt gebracht dat alleen van de rechterrijstrook de
voertuiglengtes bekend zijn. Zonder voertuiglengtes is het niet mogelijk om
v
d
Figuur 15: volgafstand
als functie van snelheid
Jeroen van der Gun 23 van 70
de netto-volgafstand d , het gat tussen twee voertuigen, te berekenen. Omdat
Fosim met netto-volgafstanden werkt, moet er een aanname worden gedaan.
Mede gelet op het inhaalverbod voor vrachtwagens worden alle voertuigen op
de linkerstrook daarom verondersteld een lengte van 4 m te hebben.
In onderstaande figuur zijn de resulterende volggebeurtenissen aangegeven.
10 20 30 40 50 60 700
10
20
30
40
50
60
Snelheid (km/h)
Volg
afs
tand (
m)
10 20 30 40 50 60 700
10
20
30
40
50
60
Snelheid (km/h)
Volg
afs
tand (
m)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Volg
tijd
(s)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Volg
tijd
(s)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Para
mete
r z
2 (
s)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Para
mete
r z
2 (
s)
Linkerstrook
Rechterstrook
Vrachtwagens
Linkerstrook
Rechterstrook
Vrachtwagens
Type 1
Type 2
Type 3
Type 4
Type 5
Figuur 16: gevonden volggebeurtenissen
3.1.2 Berekening van modelparameters
Vanwege de grote spreiding in de resultaten, is het nogal moeilijk om
parabolen met drie vrijheidsgraden door de data te tekenen. Om de
verwerking te vereenvoudigen, wordt aangenomen dat 1
z en 3
z niet
veranderen door het kijkgedrag. Deze twee parameters bepalen het
snelheidsafhankelijke deel van de volgtijd 1 2 3
/z v z z v . Normaliter
verschillen deze parameters ook niet per voertuigbestuurdercombinatie, wat
een aanwijzing is dat ze niet sterk afhangen van het rijgedrag. In het geval
van 1
z is tevens intuïtief aan te voelen dat deze waarde niet verandert in een
kijkfile: dit is immers de ‘volgafstand’ bij stilstand.
Als voor 1
z en 3
z de standaardwaarden van 3 m respectievelijk 2
0 ,5 s / m
worden aangehouden, dan kan elke volggebeurtenis worden omgezet in een
2z -waarde. In onderstaande figuur is dat gedaan door eerst de volgafstanden
naar volgtijden om te zetten en hier vervolgens het snelheidsafhankelijke deel
vanaf te trekken.
Jeroen van der Gun 24 van 70
10 20 30 40 50 60 700
10
20
30
40
50
60
Snelheid (km/h)
Volg
afs
tand (
m)
10 20 30 40 50 60 700
10
20
30
40
50
60
Snelheid (km/h)
Volg
afs
tand (
m)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Volg
tijd
(s)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Volg
tijd
(s)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Para
mete
r z
2 (
s)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Para
mete
r z
2 (
s)
Linkerstrook
Rechterstrook
Vrachtwagens
Linkerstrook
Rechterstrook
Vrachtwagens
Type 1
Type 2
Type 3
Type 4
Type 5
Figuur 17: volggebeurtenissen omgezet in de modelparameter
3.1.3 Indeling in voertuigbestuurdercombinaties
In de voorgaande figuur is een grote spreiding te zien in 2
z -waarden. Het is
mogelijk de voertuigen die minimaal één volggebeurtenis hebben, te sorteren
op de gemiddelde 2
z van hun volggebeurtenissen. Door de vrachtwagens
vervolgens in twee subgroepen (4 en 5) en de niet-vrachtwagens in drie
subgroepen (1, 2 en 3) in te delen, kunnen 2
z -waarden voor elke
voertuigbestuurdercombinatie. De grootste 2
z -waarde is hierbij telkens aan de
langzaamste voertuigbestuurdercombinatie gegeven. Het resultaat staat in
onderstaande figuur.
Jeroen van der Gun 25 van 70
10 20 30 40 50 60 700
10
20
30
40
50
60
Snelheid (km/h)
Volg
afs
tand (
m)
10 20 30 40 50 60 700
10
20
30
40
50
60
Snelheid (km/h)
Volg
afs
tand (
m)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Volg
tijd
(s)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Volg
tijd
(s)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Para
mete
r z
2 (
s)
10 20 30 40 50 60 700
1
2
3
4
5
6
Snelheid (km/h)
Para
mete
r z
2 (
s)
Linkerstrook
Rechterstrook
Vrachtwagens
Linkerstrook
Rechterstrook
Vrachtwagens
Type 1
Type 2
Type 3
Type 4
Type 5
Figuur 18: voertuigbestuurdercombinaties opnieuw gekalibreerd
De gevonden 2
z -waarden zijn hiermee als volgt:
Type Waargenomen 2
z Normale 2
z
1 0 , 6 1 s 0 , 5 6 s
2 1 , 1 5 s 0 , 7 2 s
3 2 , 1 6 s 1 , 2 8 s
4 0 , 9 0 s 2 , 0 8 s
5 2 , 8 7 s 2 , 2 3 s
Tabel 1: waargenomen parameters vergeleken met de standaardinstelling van Fosim
per voertuigbestuurdercombinatie op volgorde van aflopende voertuigsnelheid; de
vrachtwagens zijn types 4 en 5
Jeroen van der Gun 26 van 70
Opmerkelijk is dat type 4 een aanzienlijk lagere 2
z heeft dan normaal.
Blijkbaar gaat een deel van de vrachtwagens in kijkfiles sneller over tot
bumperkleven dan onder normale omstandigheden.
Bij de overige voertuigbestuurdercombinaties neemt 2
z conform de
verwachting toe door het kijkgedrag.
3.2 Reactietijden
In Fosim is een reactietijd de tijd tussen het nemen van een besluit en het
uitvoeren ervan; de tijd voorafgaand aan de beslissing wordt niet
meegerekend. Er zijn reactietijden voor accelereren en decelereren; deze
mogen niet variëren per voertuigbestuurdercombinatie. De standaardwaarden
zijn 0 , 3 s voor accelereren en 0 , 2 s voor decelereren.
Omdat voertuigen in een kijkfile afgeleid
zijn, ligt het voor de hand om de reactietijd
voor het accelereren te verhogen om het
afrijden uit de file beter te simuleren. Het is
hierbij belangrijk op te merken dat Fosim
geen reactietijden groter dan 2 , 0 s
accepteert. Als voor precies 2 , 0 s wordt
gekozen, dan blijkt de simulatie redelijk snel
om onbekende reden met nevenstaande
foutmelding te crashen. In de praktijk is de
hoogst instelbare reactietijd hierdoor 1 , 9 s . Tot slot ontstaat er een ander soort
crashes, namelijk aanrijdingen, als de reactietijd voor decelereren te hoog
wordt opgegeven.
Het onderzoek van Knoop, Van Zuylen en Hoogendoorn geeft gemiddelde
reactietijden van 2 , 9 s voor de linkerstrook en 3 , 9 s voor de rechterstrook.
Als normaal voor Nederland wordt 1 , 3 s genoemd. De reactietijden zijn dus
1 , 6 s respectievelijk 2 , 6 s hoger dan normaal. Als deze verhoging wordt
opgeteld bij de Fosim-reactietijd voor accelereren, komt men op 1 , 9 s
respectievelijk 2 , 9 s uit. Daar 1 , 9 s het hoogst instelbare is, zal dit worden
gekozen, hoewel de gemiddelde reactietijd in werkelijkheid nog hoger ligt.
3.3 Wenssnelheden
Met een vrachtwagenpercentage van 1 8 % bedraagt de gemiddelde
wenssnelheid in de standaardconfiguratie van Fosim 1 0 9 k m / h . Tot nu toe is
alleen gekeken naar volg- en reactietijden. Echter, het is te verwachten dat
ook op een rustig moment bestuurders het gas loslaten om naar de andere
Figuur 19: vreemde foutmelding
bij twee seconden reactietijd
Jeroen van der Gun 27 van 70
rijbaan te kijken. Dit zou betekenen dat de wenssnelheden plaatselijk naar
beneden moeten worden bijgesteld.
3.3.1 Bepaling aangepaste wenssnelheid
Bij het ongeval nabij Apeldoorn is het druk genoeg om congestie te laten
ontstaan. Hier is de wenssnelheid dus niet in de trajectoriën terug te zien. Uit
het onderzoek van Knoop, Van Zuylen en Hoogendoorn zijn echter ook nog
gegevens van een ongeval bij Gorinchem bekend, waarbij de
verkeersintensiteit lager was.
Hoewel zaken als het zicht op het ongeval en het vrachtwagenpercentage
natuurlijk kunnen variëren, kan dit gebruikt worden om een indruk van de
wenssnelheid te krijgen. Ook voor de situatie van Apeldoorn zijn
wenssnelheden interessant, aangezien deze licht kunnen werpen op het
ontstaan van de congestie. Uiteindelijk moet ook de bij Apeldoorn
waargenomen congestie begonnen zijn met vertragende voertuigen en een
reductie in de wenssnelheid kan daar een oorzaak van zijn.
Uit de snelheidscontouren blijkt dat tussen 1 5 0 s en 3 9 0 s de beginsnelheden
redelijk hoog liggen. Over die periode blijkt de gemiddelde intensiteit
1 2 0 6 v t g / h te bedragen en staan de macroscopische snelheden in onderstaande
figuur. De macroscopische acceleratie is eveneens weergegeven; de
gehanteerde definitie hiervan staat in bijlage C.
150 200 250 300 350 40080
85
90
95
100
Snelh
eid
(km
/h)
150 200 250 300 350 400-1.5
-1
-0.5
0
0.5
Plaats (m)
Vers
nelli
ng (
m/s
2)
Figuur 20: deceleratie bij Gorinchem
Het minimum van de snelheid blijkt 8 2 k m / h te zijn. Als wordt aangenomen
dat dit de wenssnelheid is, betekent dit toegepast op Apeldoorn dat de
Jeroen van der Gun 28 van 70
wenssnelheid bij kijkgedrag ongeveer 7 5 % van de normale wenssnelheid
bedraagt.
3.3.2 Implementatie in Fosim
In Fosim verschilt de wenssnelheid per voertuigtype. Het is daardoor niet
ondenkbaar dat de reductie in wenssnelheid ook per voertuigtype verschilt.
Het onderzoek van Knoop, Van Zuylen en Hoogendoorn meldt bijvoorbeeld
dat vrachtwagens een constantere snelheid aanhouden (wat ook interessant is
gezien de lage volgtijden die een deel van de vrachtwagens kiest bij
Apeldoorn, zie de kalibratie van de volgtijd).
Voor de eenvoud – en omdat deze dataset geen kloppende voertuiglengtes
bevat – zal er hier echter voor worden gekozen om voor alle voertuigtypen
met een reductie van 2 5 % te rekenen; dit biedt tevens als voordeel dat deze
plaatselijke reductie met de huidige versie van Fosim met een
snelheidsonderdrukkingsgebied is na te bootsen. De deceleratie blijkt
gemiddeld zo’n 2
0 ,5 m / s te bedragen. Dit komt mooi overeen met de
maximale volgdeceleratie van Fosim die bij het binnenrijden van een
snelheidsonderdrukkingsgebied wordt toegepast.
De afstand die een gemiddeld voertuig nodig heeft om de eindsnelheid te
halen, is uit te rekenen met een formule uit bijlage B:
0 0
2
1 0 9 k m / h 8 2 k m / h 1 0 9 k m / h 8 2 k m / hˆ 4 0 0 m
2 2 0 , 5 m / s
w wv v v v
x
a
Aangezien er bij Apeldoorn slechts 1 5 0 m zicht is op het ongeval, zal –
voordat het verkeer in congestie raakt – de eindsnelheid van 8 2 k m / h niet
worden gehaald. Het verschil in afstand kan worden verklaard uit een lagere
aanvangssnelheid bij Gorinchem en uit het feit dat bij Gorinchem de
bestuurders zowel naar een ongeval als naar een file kunnen kijken, waar bij
Apeldoorn de file achter het ongeval onzichtbaar is door het ecoduct.
De werkelijke eindsnelheid voor de situatie in Apeldoorn is, onder de
aanname dat de snelheid aanvankelijk gelijk is aan de wenssnelheid, als volgt
te berekenen:
02
0 0
2
2 2
2
2
2 0 , 5 m / s 1 5 0 m1 0 9 k m / h 1 0 0 k m / h
1 0 9 k m / h 1 0 9 k m / h 2 0 , 5 m / s 1 5 0 m
e
a xv v
v v a x
Als de beginsnelheid lager is, dan wordt de eindsnelheid in deze opzet
uiteraard ook lager, met als minimum 8 2 k m / h (tenzij de beginsnelheid nog
lager wordt).
Jeroen van der Gun 29 van 70
4 Validatie
Om te controleren of de aanpassingen aan
Fosim daadwerkelijk zinnig zijn, moeten de
gekalibreerde parameters worden
gevalideerd. Het ligt voor de hand om
hiervoor simpelweg bovenstroomse lussen op
de Fosim-verkeersgenerator aan te sluiten en
de resultaten te vergelijken met de
beschikbare macroscopische gegevens over
de werkelijke situatie. Hierbij is er echter een
belangrijk probleem: volg- en reactietijden
kunnen in de huidige versie van Fosim niet
lokaal worden aangepast. Daarnaast is geen
van de aanpassingen tijdsafhankelijk te
maken. Zie de figuur hiernaast.
In feite is hierdoor een model gekalibreerd
dat nog niet is geprogrammeerd. Het kost
daarom moeite te zoeken naar mogelijkheden
om toch uitspraken te kunnen doen over de
validiteit van dat model.
Uiteindelijk zijn er drie werkbare
invalshoeken gevonden om de aanpassingen toch te valideren: er zal worden
gekeken naar veranderingen van het fundamenteel diagram, de mate waarin
het aangepaste gedrag files veroorzaakt en het afrijden uit de filekop.
In alle validatiepogingen is voor de verkeerssamenstelling de methode ‘fractie
vrachtverkeer’ gebruikt. Dit wil zeggen dat het vrachtwagenpercentage
(1 7 , 6 % ) gelijk is verdeeld over de vrachtwagen-
voertuigbestuurdercombinaties 4 en 5 en dat de rest is verdeeld over de niet -
vrachtwagen-voertuigbestuurdercombinaties 1, 2 en 3.
4.1 Fundamentele diagrammen
Om een indruk te geven van de effecten van de gewijzigde parameters, is het
een goed idee om fundamentele diagrammen te bekijken. In Fosim zijn
dergelijke simulaties eenvoudig uit te voeren. De resultaten kunnen worden
vergeleken met de lusdata en de trajectoriedata.
4.1.1 Methodiek
Het bepalen van een fundamenteel diagram van het normale en het aangepaste
rijgedrag wordt opgedeeld in drie stappen:
x
t
normaal gedrag
aange-
past
gedrag
x
t
aange-
past
gedrag
aange-
past
gedrag
m.u.v.
wens-
snelheid
Figuur 21: gewenste
aanpassing van Fosim (boven)
en de best mogelijke
aanpassing (onder)
Jeroen van der Gun 30 van 70
k
q
0u
0u
Figuur 22: schematische weergave
van de werking van een
stroomafwaarts gelegen
snelheidsonderdrukkingsgebied
om een punt van de congestietak
van het fundamenteel diagram te
bepalen
Het capaciteitspunt. De intensiteit op de weg wordt geleidelijk
opgevoerd (met 2
9 0 v tg /h ) totdat de verkeersgenerator een foutmelding
geeft. De capaciteit wordt zo benaderd vanuit de congestievrije tak. Uit
een detector (aggregatie per vijf minuten) wordt de hoogst gemeten
intensiteit met bijbehorende snelheid geregistreerd. Deze procedure
wordt vijfmaal herhaald met verschillende randomseeds, waarna het
gemiddelde wordt genomen.
De congestietak. De intensiteit
wordt iets ( 1 0 0 v t g / h ) onder de
capaciteit ingesteld om
foutmeldingen van de generator te
voorkomen. Vervolgens wordt
stroomafwaarts van de detector een
snelheidsonderdrukkingsgebied
geplaatst. Dit gebied vormt een
bottleneck door de lagere
wenssnelheid: nadat de eerste
voertuigen dit gebied bereiken,
slaat een schokgolf terug over de
detector, waarna de detector een
punt van de congestietak kan
meten, zoals geïllustreerd in de figuur hiernaast. Na de insteltijd loopt
deze simulatie honderd minuten. De detector geeft een combinatie van
intensiteit en snelheid. Door in het snelheidsonderdrukkingsgebied de
onderdrukkingsfactor, in de figuur , te variëren, worden
verschillende punten gevonden; er is op gelet dat de intensiteit niet te
dicht bij de capaciteit komt, waardoor die 1 0 0 v t g / h een rol kunnen
gaan spelen.
De congestievrije tak. Voor elk punt wordt een constante intensiteit
gekozen. Na de insteltijd loopt deze simulatie honderd minuten. Uit de
detector wordt de bij de intensiteit behorende gemiddelde snelheid
afgelezen.
Bij het aanpassen van de wenssnelheden is het eind van het
snelheidsonderdrukkingsgebied van 1 5 0 m , zoals voorgesteld in de kalibratie,
tegen de detector geplaatst. Bij het meten van de congestietak is de
wenssnelheidsaanpassing voor de eenvoud weggelaten.
4.1.2 Problemen door hogere reactietijd
De hierboven genoemde methoden blijken goed te werken, zolang de
reactietijd voor accelereren niet wordt verhoogd.
De methode om de congestietak te meten blijkt te falen bij de verhoogde
reactietijd indien 2 0 % . In het snelheidsonderdrukkingsgebied blijken dan
Jeroen van der Gun 31 van 70
kleine schommelingen in de snelheid op te treden die langzaam
stroomopwaarts verplaatsen. Zodra deze schommelingen het begin van het
snelheidsonderdrukkingsgebied zijn gepasseerd, wordt de acceleratie in de
schommelingen een stuk agressiever vanwege de hogere wenssnelheid,
waardoor ook de deceleratie heftiger wordt. Hierdoor ontstaat een cyclische
situatie met continu grote golfbewegingen in de snelheid, waardoor het punt
van het fundamenteel diagram niet meer te meten is.
Een enkele keer ontstaat hierbij zelfs een aanrijding. Een mogelijke oorzaak
hiervoor is dat voertuigtype 4 door de aanpassing wel een kleinere
volgafstand heeft gekregen, maar geen grotere remcapaciteit. In herinnering
wordt geroepen dat de reactietijd voor decelereren niet is aangepast.
Ook de methode om de capaciteit te bepalen is niet feilloos. Vanaf circa
3 0 5 0 v t g / h blijken er filegolven te kunnen ontstaan. Hier zal verderop
uitgebreider op worden ingegaan.
4.1.3 Theoretische berekening van de congestietak
De congestietak in Fosim kan ook theoretisch worden uitgerekend, onder de
aanname dat alle voertuigen de gewenste volgafstand aanhouden. Hiervoor
zijn slechts enkele Fosim-parameters nodig.
Laat V de verzameling voertuigbestuurdercombinaties zijn, n het aandeel
voertuigen van een combinatie ( 1ii V
n
), l de voertuiglengte en z een
parameter voor de gewenste volgafstand. Definieer hiermee de volgende
hulpvariabelen:
1 1
2 2
3 3
i i i
i V
i i
i V
i i
i V
Z n l z
Z n z
Z n z
Laat s en h de bruto-volgafstand respectievelijk -tijd zijn. De dichtheid k en
de intensiteit q zijn nu als functies van de snelheid u te schrijven, waarmee
de congestietak van het fundamenteel diagram is vastgelegd:
Jeroen van der Gun 32 van 70
2
1 2 3
2
1 2 3
2
1 2 3
1
2 3
1
2 3
1
2 3
1 1 1
1 1 1
i i i i i
g e m i i
i V
g e m i i
i V
i i i
i i i
i i
i V
g e m i i
i V
g e m i i i i
i V i V
s l z z u z u
s n s Z Z u Z u
k
s n s Z Z u Z u
s l zh z z u
u u
n sZ
h n h Z Z u
u u
uq
Zh n h n sZ Z u
u
Deze theoretische kennis biedt een nuttige aanvulling op de eerder beschreven
empirische methode. De empirische methode staat namelijk niet toe dat
1 0 % , omdat dit wordt geweigerd door Fosim. Bovendien zorgt bij kleine
u een kleine onzekerheid in u voor een grote onzekerheid in /k q u , wat bij
een weergave van het fundamenteel diagram met de dichtheid erin tot
afwijkingen kan leiden. Hier staat tegenover dat de theoretische formule geen
rekening houdt met mogelijke afwijkingen van de volgafstand ten opzichte
van de gewenste volgafstand, bijvoorbeeld door reactietijden.
4.1.4 Resultaten
Op de volgende pagina staan de fundamentele diagrammen afgebeeld. Hierin
zijn ook de punten van de lusgegevens opgenomen. Vanwege eerder genoemde
mogelijke fouten in /k q u , is het aan te bevelen naar de ,u q -figuur te
kijken.
Jeroen van der Gun 33 van 70
Figuur 23: fundamentele diagrammen van de verschillende verkeerssituat ies
050
100
150
200
250
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
Dic
hth
eid
(vt
g/k
m)
Intensiteit (vtg/h)
050
100
150
200
250
0
20
40
60
80
100
120
140
Dic
hth
eid
(vt
g/k
m)
Snelheid (km/h)
0500
1000
1500
2000
2500
3000
3500
4000
4500
5000
0
20
40
60
80
100
120
140
Inte
nsiteit (
vtg/h
)Snelheid (km/h)
Lusdata
(60 s
-aggre
gatie)
Tra
jecto
riedata
(30 s
-aggre
gatie)
Fosim
-uitkom
ste
n
Theore
tische c
ongestieta
k
Norm
aal
Aangepaste
wenssnelh
eden e
n v
olg
tijd
en
Aangepaste
wenssnelh
eden,
volg
- en r
eactietijd
en
Jeroen van der Gun 34 van 70
De capaciteit van het normale gedrag blijkt 4 6 9 0 v t g / h te zijn; bij aanpassing
van wenssnelheid en volgtijd blijkt dit terug te lopen tot 3 8 4 0 v t g / h .
Uit het diagram kunnen de volgende conclusies worden getrokken:
De theoretische congestietak komt goed overeen met de empirische.
Voor zover het fundamenteel diagram met aangepaste reactietijd op de
beschreven manier bepaald kan worden, komt dit overeen met het
fundamenteel diagram zonder aangepaste reactietijd.
Wanneer de filegolf de lussen 3 , 3 k m bovenstrooms passeert, vindt een
overgang naar de congestietak plaats, daalt de snelheid verder over de
congestietak en vindt een overgang terug naar de congestievrije tak
plaats.
De wenssnelheden voor de normale configuratie van Fosim lijken wat
aan de lage kant.
De aanpassing van de gewenste volgtijd zorgt voor een aanzienlijke
verbetering van de ligging van de congestietak. Drie punten van de
trajectoriedata lijken ernaast te liggen, maar dit kan worden ve rklaard
door te kijken naar de snelheidscontouren: de file begint in de laatste
drie tijdvakken van 3 0 s op te lossen, waardoor dit als een overgang
naar de congestievrije tak kan worden verklaard.
4.2 Gevoeligheid voor verstoringen
In de trajectoriedata is een file ter hoogte van het ongeluk waar te nemen , die
na enige tijd oplost. Daarnaast is in de lusdata te zien dat
3 , 3 k m bovenstrooms een filegolf de lussen passeert, waarbij de snelheid ter
plaatse korte tijd sterk terugvalt. De vraag is in hoeverre dit is na te bootsen
in Fosim.
Om aan bovenstaande eisen te voldoen, moet er een zekere mate van chaos in
de aangepaste Fosim-simulaties zit.
In onderstaande tabel staan Fosim-snelheidscontouren met het aangepaste
rijgedrag bij verschillende aangeboden verkeersintensiteiten in de opstelling
die hierboven gebruikt werd om de vrije tak van het fundamenteel diagram te
bepalen. Het snelheidsonderdrukkingsgebied dat de wenssnelheden aanpast,
bevindt zich op 1 8 5 0 m 2 0 0 0 mx . Vanwege het stochastische karakter zijn
telkens twee verschillende randomseeds gebruikt.
3 0 0 0 v t g / h
Jeroen van der Gun 35 van 70
3 0 2 5 v t g / h
3 0 5 0 v t g / h
3 1 0 0 v t g / h
3 2 5 0 v t g / h
3 5 0 0 v t g / h
Tabel 2: snelheidscontouren uit Fosim tonen instabiliteit van het verkeersbeeld
In de figuren is te zien dat vanaf circa 3 0 5 0 v t g / h filegolven kunnen ontstaan
bij het snelheidsonderdrukkingsgebied. Wanneer deze ontstaan heeft een
stochastisch karakter, maar de kans dat ze binnen een bepaalde tijd
verschijnen, neemt toe met de intensiteit.
Men zou kunnen stellen dat de capaciteit ongeveer 3 0 5 0 v t g / h is, hoewel met
enig geluk gedurende beperkte tijd ook hogere intensiteiten haalbaar zijn. In
alle gevallen is die beperkte tijd minder dan een uur. De capaciteit van
3 8 4 0 v t g / h zonder verhoogde reactietijd is in elk geval niet volledig te
benutten.
Jeroen van der Gun 36 van 70
Uiteraard ligt ook deze gereduceerde capaciteit boven de waargenomen
intensiteit van circa 2 5 0 0 v t g / h . Een mogelijke verklaring hiervoor is dat de
reactietijd te laag was ingesteld vanwege een beperking van Fosim. Een
verdere verhoging van de reactietijd lost dit verschil wellicht op.
Uit het feit dat de filegolven niet op willekeurige plaatsen ontstaan, maar
telkens bij het snelheidsonderdrukkingsgebied, kan worden geconcludeerd dat
de verlaging van de wenssnelheden een wezenlijke toevoeging aan het
aangepaste rijgedrag is.
Aan de voortplanting van de filegolf in deze figuren, moet niet te veel waarde
worden gehecht. Bovenstrooms geldt het aangepaste rijgedrag immers niet en
het normale rijgedrag kan anders reageren op de passerende filegolf . Hoewel
de wenssnelheden lokaal zijn aangepast met een
snelheidsonderdrukkingsgebied, gelden de aanpassingen van de volg- en
reactietijden voor de hele simulatie: zoals eerder gezegd is het in de huidige
versie van Fosim niet mogelijk om dit lokaal te veranderen.
4.3 Afrijsimulatie
Uit de snelheidscontouren van de trajectoriedata blijkt dat gedurende de eerste
1 6 0 s van de meting, de kop van de file redelijk op dezelfde plaats blijft.
Door in Fosim een combinatie van verkeersgenerator en een
snelheidsonderdrukkingsgebied te plaatsen om een verkeersstroom met de
gewenste intensiteit en snelheid te genereren, kan vanaf dit punt het afrijden
uit de file worden gesimuleerd.
Door in Fosim elke 5 m detectoren te plaatsen, kunnen de resultaten hiervan
eenvoudig worden vergeleken met de virtuele detectoren van de
trajectoriedata. In de volgende figuur staan de resultaten van de verschillende
Fosim-configuraties, gecombineerd met de eerste 1 6 0 s trajectoriedata. In de
figuur is behalve de macroscopische snelheid ook een hiervan afgeleide
macroscopische acceleratie te zien (zie bijlage C).
Jeroen van der Gun 37 van 70
70.870.97171.171.271.371.471.571.671.771.820
30
40
50
60
70
80
90
100
Snelh
eid
(km
/h)
70.870.97171.171.271.371.471.571.671.771.8-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Vers
nelli
ng (
m/s
2)
Plaats (km)
Trajectoriedata
Fosim normaal
Fosim met aangepaste volgtijden
Fosim met aangepaste volg- en reactietijden
Figuur 24: afrijden uit filekop
Met de normale Fosim-configuratie is in het begin de acceleratie te hoog,
waardoor het verkeer te snel optrekt. De aangepaste volgtijden brengen hier
nauwelijks verandering in. Indien de reactietijden ook worden aangepast,
wordt het afrijden aanvankelijk erg goed gesimuleerd, maar op den duur
wordt de snelheid te laag.
De oplossing lijkt te zitten in het halverwege wijzigen van het aangepaste
rijgedrag naar het normale rijgedrag. In de figuur is daarom een nieuwe
afrijsimulatie gestart met de normale instellingen om het stokje vanaf 71,68
over te nemen. Deze plek komt goed overeen met de plek waar het ongeval uit
het zicht verdwijnt. Hierdoor krijgt de acceleratie als het ware een nieuwe
impuls. Het resultaat komt nu goed overeen met de informatie uit de
trajectoriën.
De snelheid bij hectometerpaaltje 70,8 is ongeveer 9 3 k m / h , wat laag is ten
opzichte van de gegevens van de lussen ter plekke, maar wel voorkomt in een
uitschieter. Het effect van de aangepaste acceleratie lijkt op die afstand van
het ongeluk echter uitgedempt, aangezien met normale acceleratie vanaf het
begin een nauwelijks hogere snelheid wordt gehaald.
Jeroen van der Gun 38 van 70
5 Conclusies en aanbevelingen
5.1 Conclusies
Fosim is standaard niet goed in staat om kijkfiles te simuleren. Met een
snelheidsonderdrukkingsgebied is weliswaar de wenssnelheid aan te passen,
maar dit is slechts een deel van de oplossing. Door andere volg- en
reactietijden te hanteren, is het volggedrag zowel in de filekop zelf als bij het
wegrijden hieruit een heel stuk beter na te bootsen.
Om deze verbetering door te voeren, is echter wel een aanpassing in de
programmatuur van Fosim nodig, namelijk om de volg- en reactietijden lokaal
te kunnen wijzigen. Pas als dit is gedaan, is een echte ‘overall-validatie’
mogelijk in aanvulling op de nu uitgevoerde validaties op deelaspecten.
Dit gebied met aangepast gedrag zou voor het incident in Apeldoorn een
lengte van circa 1 5 0 m moeten hebben, waarbij het einde samenvalt met het
punt waarop de andere rijbaan niet meer te zien is, te weten 71,68 volgens de
hectometrering.
5.2 Aanbevelingen
5.2.1 ‘Gedragsonderdrukkingsgebied’
De belangrijkste aanbeveling is om de snelheidsonderdrukkingsgebieden van
Fosim uit te breiden tot meer algemene ‘gedragsonderdrukkingsgebieden’,
waarmee lokaal elke gedragsparameter van elke voertuigbestuurdercombinatie
kan worden gewijzigd. Als deze gedragsonderdrukkingsgebieden tevens
tijdafhankelijk worden gemaakt, kunnen bovendien eventuele intreedeffecten
worden onderzocht.
Deze aanbeveling is essentieel om in de praktijk een kijkfile te kunnen
simuleren in Fosim. Hiermee kan tevens het experiment worden uitgevoerd
dat aan het begin van het validatiehoofdstuk is beschreven; het wordt sterk
aanbevolen om dat ook te doen.
5.2.2 Verhoging van de reactietijd
De reactietijd is nu gekalibreerd op 1 , 9 s , wat de voor de rechterstrook
bedoelde waarde was, omdat hogere waarden onmogelijk waren. Voor de
linkerstrook was echter een waarde van 2 , 9 s bedoeld. Aanbevolen wordt om
in Fosim hogere reactietijden toe te staan en de stroken vervolgens
gezamenlijk te fitten om de juiste hogere waarde te vinden.
Jeroen van der Gun 39 van 70
De validatie voor de gevoeligheid voor verstoringen dient dan opnieuw te
worden uitgevoerd. Als alles goed is, moeten de filegolven dan ook op gaan
treden bij intensiteiten rond de 2 5 0 0 v t g / h .
5.2.3 Variatie in wenssnelheid en reactietijd
Op dit moment hebben alle voertuigbestuurdercombinaties dezelfde
wenssnelheidsreductie en reactietijd. Aangezien dit best kan verschillen per
bestuurder – het onderzoek van Knoop, Van Zuylen en Hoogendoorn meldt
bijvoorbeeld standaardafwijkingen van maar liefst 1 , 5 s in de reactietijd –
wordt aanbevolen een mogelijkheid in Fosim daarvoor te maken en
vervolgens te onderzoeken wat het effect op de verkeersafwikkeling is.
5.2.4 Gevonden bugs
Tot slot zijn er nog enkele kleine fouten in Fosim, die ook de moeite waard
zijn om op te lossen als men geen ambitie heeft om kijkfiles in Fosim te
simuleren:
Bij het opslaan van wegontwerpen wordt de reductiefactor van
snelheidsonderdrukking onterecht afgerond op tientallen procenten.
Bij een reactietijd van 2 , 0 s crasht het simulatieproces omdat ergens
door nul wordt gedeeld. (Zie kalibratie van reactietijden.)
Verkeerslichten en tijdelijke blokkades hebben een verborgen
parameter 1 0 s die de grootte van het invloedsgebied van de
obstakels bepalen. (Zie bijlage B.) Deze parameter zou gewoon in de
kalibratie aangepast moeten kunnen worden.
Een geel verkeerslicht doet momenteel precies hetzelfde als een rood
verkeerslicht. (Zie bijlage B.) Dit zou in de handleiding duidelijk
vermeld moeten worden. Voor de duidelijkheid zou overwogen moeten
worden om het gele licht te verwijderen.
Jeroen van der Gun 40 van 70
6 Evaluatie
██████████████████████████████████████████████
████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
███████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
███████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
██████████████
██████████████████████████████████████████████
██████████████████████████████████████████████
████████
Jeroen van der Gun 41 van 70
Referenties
Algemene kennis
R. van Nes, F.M. Sanders, J.W.C. van Lint, P.B.L. Wiggenraad, 2010,
Dictaat CT2710: Transport & Planning
Onderzoeken
V.L. Knoop, 2009, Road Incidents and Network Dynamics: Effects on
driving behaviour and traffic congestion (hoofdstuk 3: V.L. Knoop, H.J.
van Zuylen en S.P. Hoogendoorn, Microscopic traffic behaviour around
incidents)
V.L. Knoop, S.P. Hoogendoorn en H.J. van Zuylen, 2007, Empirical
Differences between Time Mean Speed and Space Mean Speed
Q. Ou, 2011, Fusing Heterogeneous Traffic Data: Parsimonious
Approaches using Data-Data Consistency (paragraaf 2.3.2: Loop data)
Informatie over Fosim
T. Dijker, P. Knoppers, 2006, FOSIM 5.1: Gebruikershandleiding
FOSIM 5.1 Help
S.P. Hoogendoorn, 2011, Reader CT4821: Traffic Flow Theory and
Simulation
Data
De trajectorie- en lusdata zijn voor dit onderzoek beschikbaar gesteld door
V.L. Knoop.
Jeroen van der Gun 42 van 70
Bijlage A: dataverwerkingsprogramma’s
In deze bijlage zal de broncode van de programma’s worden gegeven die
nodig waren om alle data te verwerken.
Alle programmatuur die nodig was om de trajectoriedata te verwerken, is
geschreven in Matlab. De tekstbestanden met lusdata hadden enige
voorbewerking nodig – meerdere spaties tussen kolommen moesten worden
vervangen door een enkele spatie – maar kunnen daarna ook door het Matlab-
programma worden gelezen.
Fosim heeft een optie om simulatieresultaten op te slaan in een bestand. Die
bestanden zijn verwerkt door een PHP-script. De uitvoer daarvan is, naast
soms wat gegevens op het scherm, een Matlab-script dat door andere Matlab-
scripts wordt aangeroepen om bijvoorbeeld grafieken van de resultaten te
maken, eventueel vermengd met andere data.
Hieronder volgt de code.
Kern: analyse.m
Dit is het hoofdscript dat bijna alles doet.
clc; clear; format shortG;
% PARAMETERS
lengte_linkerrijstrook = 4;
min_lengte_vrachtwagen = 6;
min_lengte_lange_vrachtwagen = 11;
fracties = {[1/3, 1/3, 1/3], [1/2, 1/2]};
kleuren = 'gcbyr';
max_abs_volgacceleratie = 0.5;
min_volgduur = 1;
min_x_gebied = 1900;
z1 = 3;
z3 = 0.005;
doorsnedes = 71.61:0.005:71.785;
tijden = 10:30:280; % gebruik dit bij algemene analyse
%tijden = [0, 160, 300]; % gebruik dit bij afrijsimulatie
% BEREKENINGEN
load('apeldoorn3lane1metleiders.mat');
vtg_rechts = vtg;
load('apeldoorn3lane2metleiders.mat');
for i = 1:length(vtg)
Jeroen van der Gun 43 van 70
vtg(i).length = zeros(1, length(vtg(i).time)) +
lengte_linkerrijstrook;
vtg(i).length_leader = vtg(i).length;
vtg(i).nr = vtg(i).nr + length(vtg_rechts);
vtg(i).leader = vtg(i).leader + length(vtg_rechts);
vtg(i).follower = vtg(i).follower + length(vtg_rechts);
vtg(i).net_headway_m = vtg(i).gross_headway_m -
lengte_linkerrijstrook;
vtg(i).net_headway_s = vtg(i).net_headway_m ./ vtg(i).speed;
end; clear i;
vtg = [vtg_rechts, vtg];
clear vtg_rechts;
subtypes = zeros(1, length(fracties));
for i = 1:length(fracties)
subtypes(i) = length(fracties{i});
end;
hoofdtypes = length(subtypes);
aandeel_vrachtwagens = 0;
for i = 1:length(vtg)
vtg(i).strook = 3 - vtg(i).lane(1);
vtg(i).lengte = vtg(i).length(1);
vtg(i).vrachtwagen = vtg(i).lengte > min_lengte_vrachtwagen;
aandeel_vrachtwagens = aandeel_vrachtwagens + vtg(i).vrachtwagen
/ length(vtg);
% laatste tijdstap blijkt snelheid altijd hetzelfde
% te zijn als een-na-laatste tijdstap (fout in dataset)
vtg(i).acceleratie = [NaN, NaN, (vtg(i).speed(5:end-1) -
vtg(i).speed(1:end-5)) ./ (vtg(i).time(5:end-1) - vtg(i).time(1:end-
5)), NaN, NaN, NaN];
vtg(i).max_acceleratie = max(vtg(i).acceleratie);
vtg(i).max_deceleratie = min(vtg(i).acceleratie);
vtg(i).plaats = 71.8-(vtg(i).xpos+224)/1000;
if vtg(i).vrachtwagen
if(vtg(i).lengte > min_lengte_lange_vrachtwagen)
vtg(i).hoofdtype = 3;
else
vtg(i).hoofdtype = 2;
end;
else
vtg(i).hoofdtype = 1;
end;
vtg(i).hoofdtype = min(vtg(i).hoofdtype, hoofdtypes);
end; clear i;
for i = 1:length(vtg)
vtg(i).leider_acceleratie = zeros(1,length(vtg(i).leader));
for j = 1:length(vtg(i).leader)
if isnan(vtg(i).leader(j))
vtg(i).leider_acceleratie(j) = NaN;
else
k = find(vtg(vtg(i).leader(j)).time == vtg(i).time(j));
if isempty(k)
vtg(i).leider_acceleratie(j) = NaN;
else
vtg(i).leider_acceleratie(j) =
vtg(vtg(i).leader(j)).acceleratie(k(1));
end;
Jeroen van der Gun 44 van 70
end;
end; clear j;
end; clear i;
hoofdtype_v = cell(1, hoofdtypes);
hoofdtype_d = cell(1, hoofdtypes);
hoofdtype_h = cell(1, hoofdtypes);
hoofdtype_z2 = cell(1, hoofdtypes);
hoofdtype_t = cell(1, hoofdtypes);
hoofdtype_vtg = cell(1, hoofdtypes);
hoofdtype_strook = cell(1, hoofdtypes);
bestuurders_per_hoofdtype = cell(1, hoofdtypes);
for i = 1:length(vtg)
vtg(i).z2 = [];
j = 3;
while j < length(vtg(i).leader) - 2
if isnan(vtg(i).leader(j)) || vtg(i).net_headway_m(j) < 0 ||
abs(vtg(i).acceleratie(j)) > max_abs_volgacceleratie ||
abs(vtg(i).leider_acceleratie(j)) > max_abs_volgacceleratie ||
vtg(i).xworld(j) < min_x_gebied
j = j + 1;
else
k = j + 1;
while k < length(vtg(i).leader) - 2
if vtg(i).leader(k) == vtg(i).leader(j) &&
abs(vtg(i).acceleratie(k)) <= max_abs_volgacceleratie &&
abs(vtg(i).leider_acceleratie(k)) <= max_abs_volgacceleratie &&
vtg(i).xworld(j) >= min_x_gebied
k = k + 1;
else
if vtg(i).time(k-1) - vtg(i).time(j) >=
min_volgduur
v = mean(vtg(i).speed(j:k-1));
h = mean(vtg(i).net_headway_s(j:k-1));
z2 = h - z1/v - z3*v;
vtg(i).z2 = [vtg(i).z2, z2];
hoofdtype_v{vtg(i).hoofdtype} =
[hoofdtype_v{vtg(i).hoofdtype}, v];
hoofdtype_d{vtg(i).hoofdtype} =
[hoofdtype_d{vtg(i).hoofdtype}, mean(vtg(i).net_headway_m(j:k-1))];
hoofdtype_h{vtg(i).hoofdtype} =
[hoofdtype_h{vtg(i).hoofdtype}, h];
hoofdtype_z2{vtg(i).hoofdtype} =
[hoofdtype_z2{vtg(i).hoofdtype}, z2];
hoofdtype_t{vtg(i).hoofdtype} =
[hoofdtype_t{vtg(i).hoofdtype}, vtg(i).time(k-1) - vtg(i).time(j)];
hoofdtype_vtg{vtg(i).hoofdtype} =
[hoofdtype_vtg{vtg(i).hoofdtype}, i];
hoofdtype_strook{vtg(i).hoofdtype} =
[hoofdtype_strook{vtg(i).hoofdtype}, vtg(i).strook];
%plot(vtg(i).time(j:k-1),
vtg(i).net_headway_s(j:k-1));
%pause;
clear v;
clear h;
clear z2;
end;
break;
end;
end;
j = k;
Jeroen van der Gun 45 van 70
clear k;
end;
end;
clear j;
vtg(i).z2_gem = mean(vtg(i).z2);
bestuurders_per_hoofdtype{vtg(i).hoofdtype} =
[bestuurders_per_hoofdtype{vtg(i).hoofdtype}; i, vtg(i).z2_gem];
vtg(i).z2_momentaan = vtg(i).net_headway_s - z1./vtg(i).speed -
z3*vtg(i).speed;
end; clear i;
types = 0;
bestuurders_per_type = cell(1, sum(subtypes));
for i = 1:hoofdtypes
bestuurders_per_hoofdtype{i} =
sortrows(bestuurders_per_hoofdtype{i}, 2);
aantal = size(bestuurders_per_hoofdtype{i}, 1) -
sum(isnan(bestuurders_per_hoofdtype{i}(:,2)));
ingedeeld = 0;
if subtypes(i) > 1
for j = 1:subtypes(i)-1
indelen = round(aantal * fracties{i}(j));
types = types + 1;
bestuurders_per_type{types} =
bestuurders_per_hoofdtype{i}(ingedeeld+1:ingedeeld+indelen,1);
ingedeeld = ingedeeld + indelen;
end; clear j;
end;
types = types + 1;
bestuurders_per_type{types} =
bestuurders_per_hoofdtype{i}(ingedeeld+1:aantal,1);
clear aantal;
clear indelen;
clear ingedeeld;
end; clear i;
for i = 1:types
for j = 1:length(bestuurders_per_type{i})
vtg(bestuurders_per_type{i}(j)).type = i;
end; clear j;
end; clear i;
type_v = cell(1, types);
type_d = cell(1, types);
type_h = cell(1, types);
type_z2 = cell(1, types);
type_t = cell(1, types);
type_vtg = cell(1, types);
type_strook = cell(1, types);
for i = 1:hoofdtypes
for j = 1:length(hoofdtype_vtg{i})
t = vtg(hoofdtype_vtg{i}(j)).type;
type_v{t} = [type_v{t}, hoofdtype_v{i}(j)];
type_d{t} = [type_d{t}, hoofdtype_d{i}(j)];
type_h{t} = [type_h{t}, hoofdtype_h{i}(j)];
type_z2{t} = [type_z2{t}, hoofdtype_z2{i}(j)];
type_t{t} = [type_t{t}, hoofdtype_t{i}(j)];
type_vtg{t} = [type_vtg{t}, hoofdtype_vtg{i}(j)];
type_strook{t} = [type_strook{t}, hoofdtype_strook{i}(j)];
clear t;
end; clear j;
Jeroen van der Gun 46 van 70
end; clear i;
z2_gemiddeld = zeros(1, types);
for i = 1:types
z2_gemiddeld(i) = type_t{i} * type_z2{i}' / sum(type_t{i});
end; clear i;
strook_hoofdtype_v = {cell(1, hoofdtypes), cell(1, hoofdtypes)};
strook_hoofdtype_d = {cell(1, hoofdtypes), cell(1, hoofdtypes)};
strook_hoofdtype_h = {cell(1, hoofdtypes), cell(1, hoofdtypes)};
strook_hoofdtype_z2 = {cell(1, hoofdtypes), cell(1, hoofdtypes)};
strook_hoofdtype_t = {cell(1, hoofdtypes), cell(1, hoofdtypes)};
strook_hoofdtype_vtg = {cell(1, hoofdtypes), cell(1, hoofdtypes)};
for i=1:hoofdtypes
for j=1:length(hoofdtype_vtg{i})
s = vtg(hoofdtype_vtg{i}(j)).strook;
strook_hoofdtype_v{s}{i} = [strook_hoofdtype_v{s}{i},
hoofdtype_v{i}(j)];
strook_hoofdtype_d{s}{i} = [strook_hoofdtype_d{s}{i},
hoofdtype_d{i}(j)];
strook_hoofdtype_h{s}{i} = [strook_hoofdtype_h{s}{i},
hoofdtype_h{i}(j)];
strook_hoofdtype_z2{s}{i} = [strook_hoofdtype_z2{s}{i},
hoofdtype_z2{i}(j)];
strook_hoofdtype_t{s}{i} = [strook_hoofdtype_t{s}{i},
hoofdtype_t{i}(j)];
strook_hoofdtype_vtg{s}{i} = [strook_hoofdtype_vtg{s}{i},
hoofdtype_vtg{i}(j)];
clear s;
end; clear j;
end; clear i;
strook_type_v = {cell(1, types), cell(1, types)};
strook_type_d = {cell(1, types), cell(1, types)};
strook_type_h = {cell(1, types), cell(1, types)};
strook_type_z2 = {cell(1, types), cell(1, types)};
strook_type_t = {cell(1, types), cell(1, types)};
strook_type_vtg = {cell(1, types), cell(1, types)};
for i=1:types
for j=1:length(type_vtg{i})
s = vtg(type_vtg{i}(j)).strook;
strook_type_v{s}{i} = [strook_type_v{s}{i}, type_v{i}(j)];
strook_type_d{s}{i} = [strook_type_d{s}{i}, type_d{i}(j)];
strook_type_h{s}{i} = [strook_type_h{s}{i}, type_h{i}(j)];
strook_type_z2{s}{i} = [strook_type_z2{s}{i}, type_z2{i}(j)];
strook_type_t{s}{i} = [strook_type_t{s}{i}, type_t{i}(j)];
strook_type_vtg{s}{i} = [strook_type_vtg{s}{i},
type_vtg{i}(j)];
clear s;
end; clear j;
end; clear i;
detector_v = cell(1,length(doorsnedes));
tijddetector_v = cell(length(tijden)-1,length(doorsnedes));
detector_passages = cell(1,length(doorsnedes));
tijddetector_n = zeros(length(tijden)-1,length(doorsnedes));
for i=1:length(vtg)
positie = sum(doorsnedes < vtg(i).plaats(1));
tijd = sum(tijden < vtg(i).time(1));
for j=2:length(vtg(i).time)
positie_nieuw = sum(doorsnedes < vtg(i).plaats(j));
Jeroen van der Gun 47 van 70
while positie_nieuw < positie
v = mean(vtg(i).speed(j-1:j));
detector_v{positie} = [detector_v{positie}, v];
if tijd > 0 && tijd < length(tijden)
tijddetector_v{tijd, positie} = [tijddetector_v{tijd,
positie}, v];
end;
clear v;
t = mean(vtg(i).time(j-1:j));
detector_passages{positie} = [detector_passages{positie},
t];
if tijd > 0 && tijd < length(tijden)
tijddetector_n(tijd, positie) = tijddetector_n(tijd,
positie) + 1;
end;
clear t;
positie = positie - 1;
end;
clear positie_nieuw;
tijd = sum(tijden < vtg(i).time(j));
end; clear j;
clear positie;
clear tijd;
end; clear i;
detector_u = zeros(1,length(doorsnedes));
detector_n = zeros(1,length(doorsnedes));
detector_q = zeros(1,length(doorsnedes));
for i=1:length(doorsnedes)
detector_u(i) = 1 / mean(1 ./ detector_v{i});
detector_n(i) = length(detector_passages{i});
detector_q(i) = (detector_n(i) - 1) / (max(detector_passages{i})
- min(detector_passages{i}));
end; clear i;
intensiteit = mean(detector_q(detector_n == max(detector_n)));
snelheid = min(detector_u);
detector_k = intensiteit ./ detector_u;
dichtheid = max(detector_k);
tijddetector_u = zeros(length(tijden)-1,length(doorsnedes));
tijddetector_q = tijddetector_n / mean(diff(tijden));
for i=1:length(tijden)-1
for j=1:length(doorsnedes)
tijddetector_u(i,j) = 1 / mean(1 ./ tijddetector_v{i,j});
end; clear j;
end; clear i;
tijdintensiteit = mean(tijddetector_q(:,detector_n ==
max(detector_n)), 2);
tijdsnelheid = min(tijddetector_u, [], 2);
tijddetector_k = zeros(length(tijden)-1,length(doorsnedes));
for i=1:length(tijden)-1
for j=1:length(doorsnedes)
tijddetector_k(i,j) = tijdintensiteit(i) /
tijddetector_u(i,j);
end; clear j;
end; clear i;
tijddichtheid = max(tijddetector_k, [], 2);
% UITVOER
figure(1);
Jeroen van der Gun 48 van 70
markers = 'xo';
hoofdkleuren = cell(0);
for i = 1:hoofdtypes
hoofdkleuren = [hoofdkleuren, kleuren(sum(subtypes(1:i)))];
end; clear i;
schaal = 25;
subplot(3,2,1);
for i = 1:hoofdtypes
for s = 1:2
scatter(3.6*strook_hoofdtype_v{s}{i},
strook_hoofdtype_d{s}{i}, schaal*strook_hoofdtype_t{s}{i},
hoofdkleuren{i}, markers(s));
hold on;
end; clear s;
end; clear i;
xlabel('Snelheid (km/h)');
ylabel('Volgafstand (m)');
legend('Linkerstrook', 'Rechterstrook', 'Vrachtwagens', 'Location',
'NorthWest');
hold off;
%title('Voertuigtypes','FontWeight','Bold');
subplot(3,2,2);
for i = 1:types
for s = 1:2
scatter(3.6*strook_type_v{s}{i}, strook_type_d{s}{i},
schaal*strook_type_t{s}{i}, kleuren(i), markers(s));
hold on;
end; clear s;
end; clear i;
tick = get(gca,'XTick');
v = (min(tick):1:max(tick))/3.6;
tick = get(gca,'YTick');
ylim([min(tick), max(tick)]);
clear tick;
for i = 1:types
plot(3.6*v, z1+z2_gemiddeld(i).*v+z3.*v.*v, ['-',kleuren(i)]);
end; clear i;
xlabel('Snelheid (km/h)');
ylabel('Volgafstand (m)');
hold off;
%title('Voertuigbestuurdercombinaties','FontWeight','Bold');
subplot(3,2,3);
for i = 1:hoofdtypes
for s = 1:2
scatter(3.6*strook_hoofdtype_v{s}{i},
strook_hoofdtype_h{s}{i}, schaal*strook_hoofdtype_t{s}{i},
hoofdkleuren{i}, markers(s));
hold on;
end; clear s;
end; clear i;
plot(3.6*v, z1./v+z3.*v, 'Color', [.8,.8,.8], 'LineStyle', '--');
xlabel('Snelheid (km/h)');
ylabel('Volgtijd (s)');
hold off;
subplot(3,2,4);
for i = 1:types
for s = 1:2
scatter(3.6*strook_type_v{s}{i}, strook_type_h{s}{i},
schaal*strook_type_t{s}{i}, kleuren(i), markers(s));
hold on;
Jeroen van der Gun 49 van 70
end; clear s;
end; clear i;
for i = 1:types
plot(3.6*v, z1./v+z2_gemiddeld(i)+z3.*v, ['-',kleuren(i)]);
end; clear i;
plot(3.6*v, z1./v+z3.*v, 'Color', [.8,.8,.8], 'LineStyle', '--');
xlabel('Snelheid (km/h)');
ylabel('Volgtijd (s)');
hold off;
subplot(3,2,5);
for i = 1:hoofdtypes
for s = 1:2
scatter(3.6*strook_hoofdtype_v{s}{i},
strook_hoofdtype_z2{s}{i}, schaal*strook_hoofdtype_t{s}{i},
hoofdkleuren{i}, markers(s));
hold on;
end; clear s;
end; clear i;
xlabel('Snelheid (km/h)');
ylabel('Parameter z_2 (s)');
legend('Linkerstrook', 'Rechterstrook', 'Vrachtwagens', 'Location',
'NorthEast');
hold off;
subplot(3,2,6);
for i = 1:types % voor de legenda
plot(60, 5, ['-',kleuren(i)]);
hold on;
end; clear i;
for i = 1:types
for s = 1:2
scatter(3.6*strook_type_v{s}{i}, strook_type_z2{s}{i},
schaal*strook_type_t{s}{i}, kleuren(i), markers(s));
hold on;
end; clear s;
end; clear i;
for i = 1:types % om lijnen op voogrond te krijgen
plot(3.6*v, zeros(length(v))+z2_gemiddeld(i), ['-',kleuren(i)]);
end; clear i;
clear v;
xlabel('Snelheid (km/h)');
ylabel('Parameter z_2 (s)');
set(gca, 'Box', 'off');
legend('Type 1', 'Type 2', 'Type 3', 'Type 4', 'Type 5', 'Location',
'NorthEast');
hold off;
clear markers;
clear hoofdkleuren;
clear schaal;
disp(' Combinatie z2 (s)');
disp([(1:types)', z2_gemiddeld']);
disp(' Detector u (km/h) q (vtg/h) k (vtg/km) n
(vtg)');
disp([(1:length(doorsnedes))', 3.6*detector_u',
zeros(length(doorsnedes),1)+3600*intensiteit, 1000*detector_k',
detector_n']);
figure(2);
subplot(1,1,1);
Jeroen van der Gun 50 van 70
strookkleuren = 'kr';
lijnen = zeros(1,2);
for i = 1:length(vtg)
lijnen(vtg(i).strook) = plot(vtg(i).plaats, vtg(i).time,
strookkleuren(vtg(i).strook));
hold on;
end; clear i;
clear strookkleuren;
set(gca, 'XDir', 'reverse');
xlabel('Plaats (km)');
ylabel('Tijd (s)');
legend(lijnen, {'Linkerstrook', 'Rechterstrook'}, 'Location',
'Best');
clear lijnen;
hold off;
figure(3);
subplot(1,1,1);
midtijden = tijden(1:length(tijden)-1)+diff(tijden)/2;
[x, t] = meshgrid(doorsnedes, midtijden);
u = linspace(min(min(tijddetector_u)), max(max(tijddetector_u)), 85);
[C, h] = contourf(x, t, 3.6*tijddetector_u, 3.6*u);
set(h, 'LineColor', 'none');
clear C;
clear h;
hold on;
[C, h] = contour(x, t, 3.6*tijddetector_u, '-k');
clear x;
clear t;
clear u;
set(h, 'ShowText', 'on');
clear C;
clear h;
tinten = hsv(255);
colormap(tinten(1:85,:));
clear tinten;
set(gca, 'YTick', midtijden);
set(gca, 'XDir', 'reverse');
title('Snelheidscontouren (km/h)');
xlabel('Plaats (km)');
ylabel('Tijd (s)');
hold off;
lussen(midtijden, 1000*tijddichtheid, 3600*tijdintensiteit,
3.6*tijdsnelheid);
n = [zeros(1,3) + 1/3 * (1-aandeel_vrachtwagens), zeros(1,2) + 1/2 *
aandeel_vrachtwagens];
l = [4.5, 4, 4, 8, 14];
z1_bruto = l*n' + z1;
z2_normaal = [0.56, 0.72, 1.28, 2.08, 2.23];
u = 0:.5:25;
k_gemiddeld = 2 ./ (n*z2_gemiddeld'*u + z3*u.^2 + z1_bruto);
k_normaal = 2 ./ (n*z2_normaal'*u + z3*u.^2 + z1_bruto);
q_gemiddeld = 2 ./ (z1_bruto./u + z3*u +
n*z2_gemiddeld'*ones(1,length(u)));
q_normaal = 2 ./ (z1_bruto./u + z3*u +
n*z2_normaal'*ones(1,length(u)));
subplot(2,2,1);
plot(1000*k_normaal, 3600*q_normaal, '-.b');
plot(1000*k_gemiddeld, 3600*q_gemiddeld, '-.m');
scatter(1000*tijddichtheid, 3600*tijdintensiteit, 25, 'y', 'filled');
Jeroen van der Gun 51 van 70
hold off;
subplot(2,2,2);
scatter(1, 1, [], 'g', 'filled');
hold on;
scatter(1, 1, [], 'y', 'filled');
plot(1, 1, '-k', 'Marker', '*');
plot(1, 1, '-.k');
plot(1, 1, '-b');
plot(1, 1, '-m');
plot(1, 1, '-r');
set(gca, 'YLim', [0, 5]);
legend('Lusdata (60 s-aggregatie)', 'Trajectoriedata (30 s-
aggregatie)', 'Fosim-uitkomsten', 'Theoretische congestietak',
'Normaal', 'Aangepaste wenssnelheden en volgtijden', 'Aangepaste
wenssnelheden, volg- en reactietijden', 'Location', 'South');
set(gca, 'Visible', 'off');
hold off;
subplot(2,2,3);
plot(1000*k_normaal, 3.6*u, '-.b');
plot(1000*k_gemiddeld, 3.6*u, '-.m');
scatter(1000*tijddichtheid, 3.6*tijdsnelheid, 25, 'y', 'filled');
hold off;
subplot(2,2,4);
plot(3600*q_normaal, 3.6*u, '-.b');
plot(3600*q_gemiddeld, 3.6*u, '-.m');
scatter(3600*tijdintensiteit, 3.6*tijdsnelheid, 25, 'y', 'filled');
hold off;
clear u;
clear k_gemiddeld;
clear k_normaal;
clear q_gemiddeld;
clear q_normaal;
figure(6);
subplot(2,1,1);
plot(doorsnedes, 3.6*tijddetector_u(1,:), '-k');
hold on;
run '../Afrijsimulaties/analyse.m';
plot(afrij_normaal_x, afrij_normaal_u, '-b');
plot(afrij_volgtijd_x, afrij_volgtijd_u, '-m');
plot(afrij_aangepast_x, afrij_aangepast_u, '-r');
plot(afrij_hersteld_x, afrij_hersteld_u, '-b');
set(gca, 'XDir', 'reverse');
hold off;
ylabel('Snelheid (km/h)');
legend('Trajectoriedata', 'Fosim normaal', 'Fosim met aangepaste
volgtijden', 'Fosim met aangepaste volg- en reactietijden',
'Location', 'SouthEast');
subplot(2,1,2);
plot(doorsnedes(3:end-2), (tijddetector_u(1,1:end-4).^2 -
tijddetector_u(1,5:end).^2) ./ (2 * 1000 * (doorsnedes(5:end) -
doorsnedes(1:end-4))), '-k');
hold on;
plot(afrij_normaal_x(3:end-2), (afrij_normaal_u(1:end-4).^2 -
afrij_normaal_u(5:end).^2) ./ (3.6^2 * 2 * 1000 *
(afrij_normaal_x(5:end) - afrij_normaal_x(1:end-4))), '-b');
plot(afrij_volgtijd_x(3:end-2), (afrij_volgtijd_u(1:end-4).^2 -
afrij_volgtijd_u(5:end).^2) ./ (3.6^2 * 2 * 1000 *
(afrij_volgtijd_x(5:end) - afrij_volgtijd_x(1:end-4))), '-m');
Jeroen van der Gun 52 van 70
plot(afrij_aangepast_x(3:end-2), (afrij_aangepast_u(1:end-4).^2 -
afrij_aangepast_u(5:end).^2) ./ (3.6^2 * 2 * 1000 *
(afrij_aangepast_x(5:end) - afrij_aangepast_x(1:end-4))), '-r');
plot(afrij_hersteld_x(3:end-2), (afrij_hersteld_u(1:end-4).^2 -
afrij_hersteld_u(5:end).^2) ./ (3.6^2 * 2 * 1000 *
(afrij_hersteld_x(5:end) - afrij_hersteld_x(1:end-4))), '-b');
set(gca, 'XDir', 'reverse');
hold off;
ylabel('Versnelling (m/s^2)');
xlabel('Plaats (km)');
disp(' ');
disp('Laagste snelheid (km/h):');
disp(3.6*tijdsnelheid(1));
disp('Schatting snelheidsonderdrukkingsfactor:');
disp(3.6*tijdsnelheid(1)/109.133333);
disp('Locatie laagste snelheid (km):');
startplaats = doorsnedes(tijddetector_u(1,:) == tijdsnelheid(1));
% startplaats bepaalt de gegenereerde Fosim-codes voor de
afrijsimulatie
% kies een andere waarde om niet op punt met minimale snelheid te
beginnen
disp(startplaats);
disp('Codes voor Fosim:');
afrijeind = round(2000 + (startplaats - 70.80) * 1000);
code = ['sections: 2000 ', int2str(afrijeind), ' ',
int2str(afrijeind + 500)];
disp(code);
code = 'detector positions:';
for i = 2000:5:afrijeind
code = [code, ' ', int2str(i)];
end; clear i;
disp(code);
code = ['flow 0: 0|0', int2str(3600*tijdintensiteit(1))];
disp(code);
code = ['vehicle probabilities 0: ', num2str(n(1)), ' ',
num2str(n(2)), ' ', num2str(n(3)), ' ', num2str(n(4)), ' ',
num2str(n(5))];
disp(code);
clear code;
figure(7);
plot(vtg(1).time, vtg(1).acc, 'r', vtg(1).time(3:end-3),
vtg(1).acceleratie(3:end-3), 'b');
xlabel('Tijd (s)');
ylabel('Acceleratie (m/s^2)');
legend('Origineel', 'Verbeterd');
Functie: lussen.m
Dit script wordt aangeroepen door het hoofdscript om de lusdata te lezen.
function lussen(Heli_t, Heli_k, Heli_q, Heli_u)
Q = dlmread('intensiteiten.txt',' '); U = dlmread('snelheden.txt',' ');
Jeroen van der Gun 53 van 70
C =
[0.788402179960077,0.580998922039733,0.724386045258881,0.934290036326
839,0.984796381057232,0.988616703092799,0.981669656383553]; for i=1:size(U,1) for j=1:size(U,2) if U(i,j)>=0 u1 = min(floor(U(i,j)/20)*20,100); u2 = u1+20; c1 = C(u1/20+1); c2 = C(u2/20+1); U(i,j) = ((U(i,j)-u2)/(u1-u2)*c1+(U(i,j)-u1)/(u2-u1)*c2)
* U(i,j); clear u1; clear u2; clear c1; clear c2; end; end; clear j; end; clear i; t = Q(:,1)*60+Q(:,2); qs = Q(:,17)+Q(:,18); us = qs./(Q(:,17)./U(:,17)+Q(:,18)./U(:,18)); ks = qs./us; qv = Q(:,15)+Q(:,16); uv = qv./(Q(:,15)./U(:,15)+Q(:,16)./U(:,16)); kv = qv./uv; qn = Q(:,13)+Q(:,14); un = qn./(Q(:,13)./U(:,13)+Q(:,14)./U(:,14)); kn = qn./un;
Kg = cumsum(qv-qn)/60/4.17; kb = mean([mean(kv(1:30)),mean(kn(1:30))]); ke = mean([mean(kv(length(kv)-29:end)),mean(kn(length(kn)-29:end))]); kg = Kg+linspace(kb,ke-Kg(end),length(Kg))';
figure(4); w=7; subplot(3,w+1,1:w); plot(t,qs,'-m',t,qv,'-b',t,qn,'-g'); ylabel('Intensiteit (vtg/h)'); title('Lusdata'); tb=[0,300]; xb=[min(t),max(t)]; xt=xb(1):30:xb(2); xl=cell(1,length(xt)); for i=1:length(xt)
xl{i}=[int2str(floor(xt(i)/60)),':',int2str(mod(xt(i),60)/10),'0']; end; clear i; set(gca,'XLim',xb); set(gca,'XTick',xt); set(gca,'XTickLabel',xl); p=get(gca,'Position'); spp=(60*diff(xb))/p(3); qb=get(gca,'YLim'); subplot(3,w+1,w+1); plot(Heli_t,Heli_q,'-r'); p=get(gca,'Position'); Tb=[mean(tb)-spp*p(3)/2,mean(tb)+spp*p(3)/2]; set(gca,'XLim',Tb); set(gca,'XTick',tb);
Jeroen van der Gun 54 van 70
set(gca,'YLim',qb); title('Trajectoriedata'); subplot(3,w+1,w+2:2*w+1); plot(t,us,'-m',t,uv,'-b',0,0,'-r',t,un,'-g',0,0,'-k'); ylabel('Snelheid (km/h)'); legend('7,0 km bovenstrooms (per 60 s)','3,3 km bovenstrooms (per 60
s)','Bij het ongeval (per 30 s)','0,9 km benedenstrooms (per 60
s)','Gemiddelde over 4,17 km rondom ongeval','Location','SouthEast'); set(gca,'XLim',xb); set(gca,'XTick',xt); set(gca,'XTickLabel',xl); ub=get(gca,'YLim'); subplot(3,w+1,2*w+2); plot(Heli_t,Heli_u,'-r'); set(gca,'XLim',Tb); set(gca,'XTick',tb); set(gca,'YLim',ub); subplot(3,w+1,2*w+3:3*w+2); plot(t,ks,'-m',t,kv,'-b',t,kn,'-g',t,kg,'-k'); ylabel('Dichtheid (vtg/km)'); xlabel('Tijdstip'); set(gca,'XLim',xb); set(gca,'XTick',xt); set(gca,'XTickLabel',xl); kb=get(gca,'YLim'); subplot(3,w+1,3*w+3); plot(Heli_t,Heli_k,'-r'); set(gca,'XLim',Tb); set(gca,'XTick',tb); set(gca,'YLim',kb); xlabel('Tijd (s)');
figure(5); subplot(2,2,1); scatter([ks;kv;kn],[qs;qv;qn],25,'g','filled'); hold on; run '..\Capaciteitstests\analyse.m'; plot(Normaal_k,Normaal_q,'-b','Marker','*','MarkerSize',5); plot(Volgtijd_k,Volgtijd_q,'-m','Marker','*','MarkerSize',5); plot(Aangepast_k(1:Aangepast_gat),Aangepast_q(1:Aangepast_gat),'-
r',Aangepast_k(Aangepast_gat+1:end),Aangepast_q(Aangepast_gat+1:end),
'-r','Marker','*','MarkerSize',5); xlabel('Dichtheid (vtg/km)'); ylabel('Intensiteit (vtg/h)'); subplot(2,2,3); scatter([kv;kn],[uv;un],25,'g','filled'); hold on; plot(Normaal_k,Normaal_u,'-b','Marker','*','MarkerSize',5); plot(Volgtijd_k,Volgtijd_u,'-m','Marker','*','MarkerSize',5); plot(Aangepast_k(1:Aangepast_gat),Aangepast_u(1:Aangepast_gat),'-
r',Aangepast_k(Aangepast_gat+1:end),Aangepast_u(Aangepast_gat+1:end),
'-r','Marker','*','MarkerSize',5); xlabel('Dichtheid (vtg/km)'); ylabel('Snelheid (km/h)'); subplot(2,2,4); scatter([qv;qn],[uv;un],25,'g','filled'); hold on; plot(Normaal_q,Normaal_u,'-b','Marker','*','MarkerSize',5); plot(Volgtijd_q,Volgtijd_u,'-m','Marker','*','MarkerSize',5);
Jeroen van der Gun 55 van 70
plot(Aangepast_q(1:Aangepast_gat),Aangepast_u(1:Aangepast_gat),'-
r',Aangepast_q(Aangepast_gat+1:end),Aangepast_u(Aangepast_gat+1:end),
'-r','Marker','*','MarkerSize',5); xlabel('Intensiteit (vtg/h)'); ylabel('Snelheid (km/h)');
disp(' x (hm) q (vtg/h)') disp([-70, mean(qs); -33, mean(qv); 9, mean(qn)]);
fosimgenerator(qv);
Functie: fosimgenerator.m
Dit script zet lusdata om in een code voor de Fosim-verkeersgenerator die in
Fosim-bestanden kan worden geplaatst.
function fosimgenerator(q) code = 'flow 0:'; for i = 61:151 tijd = int2str(60*(i-61)); while length(tijd) < 6 tijd = [' ', tijd]; end; intensiteit = int2str(q(i)); while length(intensiteit) < 5 intensiteit = ['0', intensiteit]; end; code = [code, tijd, '|', intensiteit]; clear tijd; clear intensiteit; end; clear i; disp(code);
Kern: gorinchem.m
Dit script doet de (beperkte) analyse voor de data uit Gorinchem.
clc; clear; format shortG;
% PARAMETERS
doorsnedes = 160:5:380; tijden = 10:30:580; % gebruik dit bij algemene analyse %tijden = [0, 150, 390, 600]; % gebruik dit bij bepalen wenssnelheid
% BEREKENINGEN
load('gorinchem2lane1metleiders.mat');
Jeroen van der Gun 56 van 70
vtg_rechts = vtg; load('gorinchem2lane2metleiders.mat'); for i = 1:length(vtg) vtg(i).nr = vtg(i).nr + length(vtg_rechts); vtg(i).leader = vtg(i).leader + length(vtg_rechts); vtg(i).follower = vtg(i).follower + length(vtg_rechts); end; clear i; vtg = [vtg_rechts, vtg]; clear vtg_rechts;
for i = 1:length(vtg) vtg(i).strook = 3 - vtg(i).lane(1); end;
detector_v = cell(1,length(doorsnedes)); tijddetector_v = cell(length(tijden)-1,length(doorsnedes)); detector_passages = cell(1,length(doorsnedes)); tijddetector_n = zeros(length(tijden)-1,length(doorsnedes)); for i=1:length(vtg) positie = sum(doorsnedes < vtg(i).xpos(1)); tijd = sum(tijden < vtg(i).time(1)); for j=2:length(vtg(i).time) positie_nieuw = sum(doorsnedes < vtg(i).xpos(j)); while positie_nieuw > positie positie = positie + 1; v = mean(vtg(i).speed(j-1:j)); detector_v{positie} = [detector_v{positie}, v]; if tijd > 0 && tijd < length(tijden) tijddetector_v{tijd, positie} = [tijddetector_v{tijd,
positie}, v]; end; clear v; t = mean(vtg(i).time(j-1:j)); detector_passages{positie} = [detector_passages{positie},
t]; if tijd > 0 && tijd < length(tijden) tijddetector_n(tijd, positie) = tijddetector_n(tijd,
positie) + 1; end; clear t; end; clear positie_nieuw; tijd = sum(tijden < vtg(i).time(j)); end; clear j; clear positie; end; clear i; detector_u = zeros(1,length(doorsnedes)); detector_n = zeros(1,length(doorsnedes)); detector_q = zeros(1,length(doorsnedes)); for i=1:length(doorsnedes) detector_u(i) = 1 / mean(1 ./ detector_v{i}); detector_n(i) = length(detector_passages{i}); detector_q(i) = (detector_n(i) - 1) / (max(detector_passages{i})
- min(detector_passages{i})); end; clear i; intensiteit = mean(detector_q(detector_n == max(detector_n))); snelheid = min(detector_u); detector_k = intensiteit ./ detector_u; dichtheid = max(detector_k); tijddetector_u = zeros(length(tijden)-1,length(doorsnedes)); tijddetector_q = tijddetector_n / mean(diff(tijden));
Jeroen van der Gun 57 van 70
for i=1:length(tijden)-1 for j=1:length(doorsnedes) tijddetector_u(i,j) = 1 / mean(1 ./ tijddetector_v{i,j}); end; clear j; end; clear i; tijdintensiteit = mean(tijddetector_q(:,detector_n ==
max(detector_n)), 2); tijdsnelheid = min(tijddetector_u, [], 2); tijddetector_k = zeros(length(tijden)-1,length(doorsnedes)); for i=1:length(tijden)-1 for j=1:length(doorsnedes) tijddetector_k(i,j) = tijdintensiteit(i) /
tijddetector_u(i,j); end; clear j; end; clear i; tijddichtheid = max(tijddetector_k, [], 2);
% UITVOER
figure(11); strookkleuren = 'kr'; lijnen = zeros(1,2); for i = 1:length(vtg) lijnen(vtg(i).strook) = plot(vtg(i).xpos, vtg(i).time,
strookkleuren(vtg(i).strook)); hold on; end; clear i; clear strookkleuren; xlabel('Plaats (m)'); ylabel('Tijd (s)'); legend(lijnen, {'Linkerstrook', 'Rechterstrook'}, 'Location',
'Best'); clear lijnen; hold off;
figure(12); midtijden = tijden(1:length(tijden)-1)+diff(tijden)/2; [x, t] = meshgrid(doorsnedes, midtijden); u = linspace(min(min(tijddetector_u)), max(max(tijddetector_u)), 85); [C, h] = contourf(x, t, 3.6*tijddetector_u, 3.6*u); set(h, 'LineColor', 'none'); clear C; clear h; hold on; [C, h] = contour(x, t, 3.6*tijddetector_u, '-k'); clear x; clear t; clear u; set(h, 'ShowText', 'on'); clear C; clear h; tinten = hsv(255); colormap(tinten(1:85,:)); clear tinten; set(gca, 'YTick', midtijden); title('Snelheidscontouren (km/h)'); xlabel('Plaats (km)'); ylabel('Tijd (s)');
Jeroen van der Gun 58 van 70
hold off;
figure(13); plot(midtijden, tijdintensiteit*3600); xlabel('Tijd (s)'); ylabel('Intensiteit (vtg/h)');
figure(14); subplot(2,1,1); plot(doorsnedes, tijddetector_u(2,:)*3.6, 'k'); ylabel('Snelheid (km/h)'); subplot(2,1,2); plot(doorsnedes(3:end-2), (tijddetector_u(2,5:end).^2 -
tijddetector_u(2,1:end-4).^2) ./ (2 * (doorsnedes(5:end) -
doorsnedes(1:end-4))), 'k'); xlabel('Plaats (m)'); ylabel('Versnelling (m/s^2)');
disp(['Aantal voertuigen: ', int2str(tijddetector_n(2,:)), ' vtg']); disp(['Intensiteit: ', int2str(tijdintensiteit(2)*3600), ' vtg/h']); disp(['Snelheid: ', int2str(tijdsnelheid(2)*3.6), ' km/h']);
Hulpprogramma: route.m
Dit hulpprogramma is gebruikt om inzicht te krijgen in de verschillende
coördinatenstelsels van de dataset van Apeldoorn. Dit heeft onder meer
onderstaande ‘wereldkaart’ opgeleverd (de plaatsing van de luchtfoto is bij
benadering).
Jeroen van der Gun 59 van 70
Figuur 25: wereldkaart met assenstelsels (achtergrond: Google Maps)
clc; clear; format shortG;
% subplot(3,2,[1,2]) figure(4); subplot(1,1,1); laag = []; laagTijd = []; hoog = []; hoogTijd = [];
load('apeldoorn3lane1metleiders.mat'); for i=1:length(vtg) plot(vtg(i).xworld, vtg(i).yworld, '-blue'); laag = [laag, min(vtg(i).xworld)]; laagTijd = [laagTijd, max(vtg(i).time)]; hoog = [hoog, max(vtg(i).xworld)]; hoogTijd = [hoogTijd, min(vtg(i).time)]; hold on; plotxpos(vtg(i)); end; clear i;
load('apeldoorn3lane2metleiders.mat'); for i=1:length(vtg) plot(vtg(i).xworld, vtg(i).yworld, '-red'); laag = [laag, min(vtg(i).xworld)]; laagTijd = [laagTijd, max(vtg(i).time)]; hoog = [hoog, max(vtg(i).xworld)]; hoogTijd = [hoogTijd, min(vtg(i).time)]; hold on; plotxpos(vtg(i));
Jeroen van der Gun 60 van 70
end; clear i;
set(gca, 'XTick', 1820:20:2040); axis equal; title('Afgelegde routes'); hold off;
% subplot(3,2,3); % hist(laag, 15); % title('Eindpunten'); % subplot(3,2,4); % hist(hoog, 15); % title('Beginpunten'); % % subplot(3,2,5); % scatter(laag, laagTijd); % subplot(3,2,6); % scatter(hoog, hoogTijd);
Functie: plotxpos.m
Functie van het bovengenoemde hulpprogramma.
function plotxpos(vtg) doorsnedes = -224; positie = sum(doorsnedes > vtg.xpos(1)); for j=2:length(vtg.time) positie_nieuw = sum(doorsnedes > vtg.xpos(j)); while positie_nieuw < positie scatter(mean(vtg.xworld(j-1:j)), mean(vtg.yworld(j-1:j)),
'y'); positie = positie - 1; end; clear positie_nieuw; end; clear j; clear positie;
Simulatie fundamenteel diagram: analyse.php
Dit script leest de resulterende Fosim-bestanden van de bepaling van het
fundamenteel diagram en zet de resultaten om in Matlab-code.
<?php
ob_start();
$matlab = '';
foreach(array('Normaal' => 'b', 'Volgtijd' => 'm', 'Aangepast'
=> 'r') as $situatie => $kleur)
{
if($situatie != 'Aangepast')
{
$capaciteiten = $dichtheden = $snelheden = array();
foreach(glob($situatie.'/*.FSR') as $bestand)
{
$capaciteit = 0;
Jeroen van der Gun 61 van 70
foreach(file($bestand, FILE_IGNORE_NEW_LINES) as $nr => $reg
el)
if($nr > 1)
{
$velden = explode("\t", $regel);
switch($velden[2])
{
case 'q':
$intensiteit = $velden[3];
break;
case 'u':
$rijsnelheid = $velden[3];
break;
case 'k':
if($intensiteit > $capaciteit)
{
$capaciteit = $intensiteit;
$snelheid = $rijsnelheid;
$dichtheid = $velden[3];
}
}
}
$capaciteiten[] = $capaciteit;
$snelheden[] = $snelheid;
$dichtheden[] = $dichtheid;
}
$capaciteitResultaat = array_sum($capaciteiten) / count($capa
citeiten);
$dichtheidResultaat = array_sum($dichtheden) / count($dichthe
den);
$snelheidResultaat = array_sum($snelheden) / count($snelheden
);
}
$intensiteitenVrijResultaat = $dichthedenVrijResultaat = array
();
foreach(glob($situatie.'/Vrij/*.FSR') as $bestand)
{
$intensiteitenVrij = $dichthedenVrij = array();
foreach(file($bestand, FILE_IGNORE_NEW_LINES) as $nr => $rege
l)
if($nr > 1)
{
$velden = explode("\t", $regel);
if($velden[0] > 900)
switch($velden[2])
{
case 'q':
$intensiteitenVrij[] = $velden[3];
break;
case 'k':
$dichthedenVrij[] = $velden[3];
}
}
$intensiteitenVrijResultaat[] = array_sum($intensiteitenVrij)
/ count($intensiteitenVrij);
$dichthedenVrijResultaat[] = array_sum($dichthedenVrij) / cou
nt($dichthedenVrij);
}
$intensiteitenCongestieResultaat = $dichthedenCongestieResulta
at = array();
foreach(array_reverse(glob($situatie.'/File/*.FSR')) as $besta
Jeroen van der Gun 62 van 70
nd)
{
$intensiteitenCongestie = $dichthedenCongestie = array();
foreach(file($bestand, FILE_IGNORE_NEW_LINES) as $nr => $rege
l)
if($nr > 1)
{
$velden = explode("\t", $regel);
if($velden[0] > 900)
switch($velden[2])
{
case 'q':
$intensiteitenCongestie[] = $velden[3];
break;
case 'k':
$dichthedenCongestie[] = $velden[3];
}
}
$intensiteitenCongestieResultaat[] = array_sum($intensiteiten
Congestie) / count($intensiteitenCongestie);
$dichthedenCongestieResultaat[] = array_sum($dichthedenConges
tie) / count($dichthedenCongestie);
}
if($situatie != 'Aangepast')
echo "
", $situatie, "
Capaciteit: " . round($capaciteitResultaat) . " vtg/h
Dichtheid bij capaciteit: " . round($dichtheidResultaat) . " vt
g/km
Snelheid bij capaciteit: " . round($snelheidResultaat) . " km/h
";
$matlab .= '
'.$situatie.'_k=['.implode(',',$dichthedenVrijResultaat).','.((
$situatie=='Aangepast')?'':$dichtheidResultaat.',').implode(','
,$dichthedenCongestieResultaat).'];
'.$situatie.'_q=['.implode(',',$intensiteitenVrijResultaat).','
.(($situatie=='Aangepast')?'':$capaciteitResultaat.',').implode
(',',$intensiteitenCongestieResultaat).'];
'.$situatie.'_u='.$situatie.'_q./'.$situatie.'_k;';
if($situatie == 'Aangepast')
$matlab .= '
Aangepast_gat='.count($intensiteitenVrijResultaat).';';
}
file_put_contents('analyse.m', $matlab);
$resultaat = ob_get_contents();
ob_end_flush();
file_put_contents('analyse.txt', $resultaat);
exec('pause');
?>
Afrijsimulaties: analyse.php
Dit script leest de Fosim-resultaatbestanden van de afrijsimulaties en zet het
om in Matlab-code.
Jeroen van der Gun 63 van 70
<?php
ob_start();
$matlab = '';
foreach(array('Normaal', 'Volgtijd', 'Aangepast', 'Hersteld') a
s $situatie)
{
foreach(glob($situatie.'.fsr') as $bestand)
{
$plaatsen = $snelheden = $intensiteiten = array();
foreach(file($bestand, FILE_IGNORE_NEW_LINES) as $nr => $rege
l)
if($nr > 1)
{
$velden = explode("\t", $regel);
if($velden[0] == '43800')
switch($velden[2])
{
case 'u':
$plaatsen[] = 70.800 + 0.005 * ($velden[1] - 1);
$snelheden[] = $velden[3];
break;
case 'q':
$intensiteiten[] = $velden[3];
}
}
}
$matlab .= '
afrij_'.strtolower($situatie).'_x=['.implode(',',$plaatsen).'];
afrij_'.strtolower($situatie).'_u=['.implode(',',$snelheden).']
;';
echo "
", $situatie, "
Verwerkte intensiteit: " . round(array_sum($intensiteiten) / co
unt($intensiteiten)) . " vtg/h";
}
file_put_contents('analyse.m', $matlab);
$resultaat = ob_get_contents();
ob_end_flush();
file_put_contents('analyse.txt', $resultaat);
exec('pause');
?>
Jeroen van der Gun 64 van 70
Bijlage B: effecten van Fosim-bottlenecks
In deze bijlage zal wiskundig worden afgeleid wat in Fosim het effect van een
snelheidsonderdrukkingsgebied, een verkeerslichteninstallatie en een
tijdelijke blokkade op een individueel voertuig is. De mogelijke invloeden
van andere voertuigen, zoals een remmende voorligger, is hierin niet
meegenomen.
Alle benodigde informatie over hoe Fosim intern werkt, is gehaald uit de
Gebruikershandleiding van Dijker en Knoppers.
Snelheidsonderdrukkingsgebied
De volgende symbolen zullen worden gebruikt:
x lengte snelheidsonderdrukkingsgebied
snelheidsonderdrukkingsfactor
w
v wenssnelheid exclusief onderdrukking
0
v beginsnelheid
e
v eindsnelheid
g e m
v gemiddelde snelheid
a maximale volgdeceleratie ( 2
0 ,5 m / s )
t verblijftijd in snelheidsonderdrukkingsgebied
x̂ benodigde afstand om nieuwe wenssnelheid te bereiken
t̂ benodigde tijd om nieuwe wenssnelheid te bereiken
Hieronder volgt de afleiding, waarbij wordt aangenomen dat 0 w
v v :
0
0
ˆa l s m a x ,
ˆa l s e w
w
v a t t tv v a t v
v t t
(1)
0ˆ wv v
t
a
(2)
g e m
xt
v
(3)
Met (2) is de gemiddelde snelheid als volgt te schrijven:
Jeroen van der Gun 65 van 70
1
0 2
1 1
0 02 2
01
0 2
2
00 0 0
0
ˆa l s
ˆ ˆ ˆ ˆ ˆ
ˆa l s
a l s
a l s
2 2
g e mw w
w w
w
ww w w
w w w
v a t t t
v v a t t v t t v a t v t
v v t t
t t
v vv a t t
a
v vv v v v v vv v v v t
a t a t a
Door (3) in te vullen kan de tijd worden geëlimineerd:
2 1
0 2
2
0
2
0 0
2
0
ˆ0 a l s
ˆ1 a l s
2
2ˆa l s
2
ˆa l s
1
2
g e m g e m
w
g e m w
g e mw
w
v v v a x x x
v vv v x x
a x
v v a xx x
v vx x
v v
a x
Door (3) nogmaals te gebruiken wordt de verblijftijd in het
snelheidsonderdrukkingsgebied gevonden:
2
0 0
2
0
2ˆa l s
2
1ˆa l s
2
w
w
xx x
v v a x
t
v vx x x
v a
Nu kan (1) worden ingevuld:
0
2
0 0
2ˆa l s
2
ˆa l s
e
w
a xv x x
v v v a x
v x x
(4)
Voor x̂ geldt:
0
0
0 0
ˆ2ˆ
ˆ
2
w
w
w w
v v xt
a v v
v v v vx
a
(5)
Jeroen van der Gun 66 van 70
Hiermee is de eindconclusie over de eindsnelheid en het snelheidsverlies,
waaraan nu ook de situatie 0 w
v v is toegevoegd:
0 0
0 02
0 0
0 0
0
0 0
0 0
02
0 0
00 0
0 0
0
2a l s
22
a l s
2
a l s
2a l s
22
a l s
2
0 a l s
w w
w
ew w
w w
w
w w
w
ew w
w w
w
v v v va xv v v x
av v a x
vv v v v
v v v x
a
v v v
v v v va xv v x
av v a x
v vv v v v
v v v v x
a
v v
Verkeerslichten
De volgende symbolen zullen worden gebruikt:
t niet-groentijd per cyclus
x lengte invloedsgebied
invloedsgebied omgerekend naar tijd met beginsnelheid (1 0 s )
0
v beginsnelheid
e
v eindsnelheid
a maximale deceleratie bij verkeerslichten
a gekozen deceleratie
x̂ benodigde stopafstand
t̂ benodigde stoptijd bij gekozen deceleratie
Fosim-bestuurders kijken pas naar een verkeerslicht als ze binnen 1 0 s
stroomopwaarts van het verkeerslicht zijn. Dit is niet herkalibreerbaar. Voor
de lengte van dit invloedsgebied geldt:
0
x v (6)
Als een andere lichtkleur dan groen wordt waargenomen, moet het voertuig
kiezen om wel of niet te remmen. Door in (5) en (2) als nieuwe wenssnelheid
0w
v in te vullen, zijn de stopafstand en de stoptijd te vinden:
2
0
0
ˆ
2
ˆ
vx
a
vt
a
(7)
Jeroen van der Gun 67 van 70
Als de benodigde stopafstand niet beschikbaar is, remt het voertuig in het
geheel niet. Als dat wel het geval is, maar het verkeerslicht tijdens het
remmen weer op groen springt, remt het voertuig onvolledig. Merk op dat er
in Fosim dus geen verschil zit tussen geel en rood licht, ook al moet de
geeltijd wel apart worden ingevoerd. Deze opvallende constatering is
experimenteel geverifieerd. Daarnaast is het noemenswaardig dat elk voertuig
elke kleurverandering met een niet-herkalibreerbare vertraging van 1 s
waarneemt; omdat dit altijd hetzelfde is, heeft dit geen invloed op de
doorstroming.
Ter vereenvoudiging ten opzichte van Fosim wordt hier aangenomen dat de
beslissing om wel of niet te stoppen aan het begin van het invloedsgebied
wordt genomen. Als het voertuig besluit te remmen, is dit de gekozen
deceleratie:
2
0 0
2 2
v va
x
(8)
Hieruit volgt voor de eindsnelheid:
0
0
0
0
ˆm a x , 0 a l s
ˆa l s
ˆˆ0 a l s
ˆˆa l s
ˆa l s
e
v a t x xv
v x x
x x t t
v a t x x t t
v x x
Uit (7) en (8) volgt bovendien:
ˆ 2t (9)
Door (6), (7), (8) en (9) in te vullen, ontstaan de volgende uitdrukkingen voor
eindsnelheid en snelheidsverschil:
Jeroen van der Gun 68 van 70
0
0 0
0
0
0
0
0
0
0
0
0
0 0
0
0 a l s 2
2
a l s 2
2 2
a l s
2
0 a l s 2 2
1 a l s 2 2
2
1 a l s 2
1 a l s 2 2
a l s 2 2
2
0 a l s 2
e
e
vt
a
v t vv v t
a
vv
a
vt
a
vtv t
a
v
a
vt
a
vtv v v t
a
v
a
Hierin is de groentijd als parameter beschikbaar om het aantal voertuigen dat
moet remmen te laten variëren. Merk op dat voertuigen ook kunnen moeten
remmen omdat hun voorligger voor het verkeerslicht remt.
Bij het beperken van de capaciteit, is het niet wenselijk dat voertuigen
volledig tot stilstand komen en ook niet dat alle voertuigen hun volledige
snelheid behouden. Hiervoor moeten zowel de beginsnelheid gedeeld door de
maximale deceleratie en de niet-groentijd kleiner zijn dan 2 2 0 s . De
eindsnelheid is dan 0
/ 2v t . De maximale deceleratie mag dus niet te gering
zijn, want dan wordt het verkeerslicht bij hoge snelheden genegeerd.
Tijdelijke blokkade
De tijdelijke blokkade (over alle stroken) werkt in principe hetzelfde als een
eenmalig rood verkeerslicht. Er zijn wel enkele variabelen veranderd:
t tijd die de blokkade blijft staan
a maximale deceleratie (in nood)
De rest van de variabelen en alle formules blijven hetzelfde. Het verschil is
dus dat het verkeer een stuk harder remt.
Jeroen van der Gun 69 van 70
Bijlage C: macroscopische acceleratie
Door in een doorsnede de gemeten snelheden te aggregeren, ontstaat een
macroscopische snelheid. In deze bijlage zal een bijbehorende
macroscopische acceleratie worden geïntroduceerd. Dit begrip kan toegepast
worden als alternatieve visualisatiemogelijkheid van de gegevens van kort op
elkaar geplaatste virtuele lussen onder de trajectoriedata en in Fosim.
De macroscopische acceleratie wordt gedefinieerd als de constante
versnelling u die een voertuig in een wegvak met lengte x nodig heeft om
zijn snelheid te veranderen van de macroscopische snelheid 1
u aan het begin
in de macroscopische snelheid 2
u aan het eind.
Het eerste geval uit vergelijking (4) van de vorige bijlage, waarin de
eindsnelheid nog niet bereikt is, biedt een handvat om de macroscopische
acceleratie te berekenen. Hiermee kan vanuit de macroscopische eindsnelheid
2u met de macroscopische acceleratie u op de plaats van a de
macroscopische beginsnelheid 1
u worden teruggerekend:
1 2
2
2 2
2
2
u xu u
u u u x
Andersom kan het uiteraard ook, maar dan moet u als a worden gekozen.
Dit kan worden omgeschreven naar een dimensieloze vorm met twee
grootheden:
2
1 2
2
2
2
1 2
2
2
2
2
21 1
2
1
21 1
u x
uu u
u x
u
u x
u u
u u x
u
Maple vindt voor deze vergelijking de volgende oplossing:
2
1
2
2 2
21
uu x
u u
Hieruit volgt direct de macroscopische acceleratie:
Jeroen van der Gun 70 van 70
2 212 2 2
22 1 2 1
2
1
2 2
uu u u uu
x u x x
In de limiet 0x wordt gevonden:
2 21 1
2 2d u d ud u d u d u
u
d t d x d u d x d x
In het geval van eindige differentie, kan met behulp van centrale differentie
de volgende formule worden toegepast:
2 2
21 1
4
n n
n
u uu O x
x
Om de voortplanting van de meetfout in de snelheid te reduceren, kan ook een
grotere stapgrootte worden genomen. Hierdoor neemt wel de afbreekfout toe.
De breuk wordt dan:
2 2
2 2
8
n nu u
x