First of all, I would like to give mydeepest and sincerest thanks to myadvisor, Dr.
Sherif Ishak, for his brilliant guidance, encouragement and support. Thank you for
always being there to help meand support my study. I am also grateful to Dr. Ishak for
funding methroughout my study for a Master’s degree. I would like to give myspecial
thanks to Dr. Chester Wilmot and Dr. Brian Wolshon for their suggestions and advice.
Deep appreciation goes to mycolleague, Ciprian Alecsandru, who developed the
programcode much needed for this study. Thank you for your unselfishand timely help.
I also want to acknowledge Srikanth Chakravarthy for his precious assistance. Thanks
are due also to all myfriends, Jiao, Hong, Xuyong and Erick. Thank you for listening to
meand for your words of encouragement. Your support meant the world to me
157 trang |
Chia sẻ: banmai | Lượt xem: 1888 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Scalability of car - Following and lane-changing models in, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
vph 1.007791 4.459921 9.732963
111
Table 5-8 Difference in RADE (%) Between the Sub-Optimal and Optimal Conditions
(GM3)
Downsampling
Ratio Flow Rate( )
pq 100=pN 200=pN 300=pN
pq =500 vph
2.14373 1.93592 1.73916
pq =1000 vph
0.07148 0.36328 0.67487
pq =1500 vph
0.06835 0.33390 0.59805
r = 2
1
pq =2000 vph
0.06688 0.32092 0.56584
pq =500 vph
2.90725 2.65144 2.42068
pq =1000 vph
0.04729 0.09194 0.10567
pq =1500 vph
0.04522 0.08450 0.09364
r = 3
1
pq =2000 vph
0.04425 0.08122 0.08860
pq =500 vph
2.93205 1.36536 1.36976
pq =1000 vph
0.07705 0.12655 0.13278
pq =1500 vph
0.07367 0.11632 0.11766
r = 4
1
pq =2000 vph
0.07209 0.11180 0.11133
pq =500 vph
3.58337 1.06436 1.11337
pq =1000 vph
0.11192 0.16236 0.18468
pq =1500 vph
0.10701 0.14923 0.16366
r = 5
1
pq =2000 vph
0.10472 0.14343 0.15484
112
Table 5-9 Difference in RADE (%) Between the Sub-Optimal and Optimal Conditions
(NETSIM)
Downsampling
Ratio Flow Rate( )
pq 100=pN 200=pN 300=pN
pq =500 vph
0.040146 1.866038 1.492833
pq =1000 vph
0.033422 1.870139 3.851581
pq =1500 vph
0.031654 1.813345 3.366434
r = 2
1
pq =2000 vph
0.030839 1.860245 3.259776
pq =500 vph
0.035817 3.119727 2.175121
pq =1000 vph
0.029818 2.510704 7.096332
pq =1500 vph
0.028241 2.401876 6.016322
r = 3
1
pq =2000 vph
0.027513 2.276815 5.548989
pq =500 vph
0.033326 2.229266 1.226555
pq =1000 vph
0.027744 2.487014 7.217328
pq =1500 vph
0.026277 2.396912 6.35734
r = 4
1
pq =2000 vph
0.0256 2.50879 6.154581
pq =500 vph
0.043291 1.766006 0.588678
pq =1000 vph
0.03604 2.21534 4.604711
pq =1500 vph
0.034134 2.358581 3.829099
r = 5
1
pq =2000 vph
0.033254 2.235774 3.663914
113
Table 5-10 Difference in RADE (%) Between the Sub-Optimal and Optimal Conditions
(FRESIM)
Downsampling
Ratio Flow Rate( )
pq 100=pN 200=pN 300=pN
pq =500 vph
1.791775 5.009369 5.489826
pq =1000 vph
1.22289 1.822739 2.61554
pq =1500 vph
1.014391 2.403917 3.393606
r = 2
1
pq =2000 vph
0.883935 3.169654 4.934439
pq =500 vph
0.34333 2.26227 2.258947
pq =1000 vph
0.133655 1.894196 3.997258
pq =1500 vph
0.022709 1.691904 3.44029
r = 3
1
pq =2000 vph
0.010139 1.608808 3.616812
pq =500 vph
0.013341 2.424764 2.409173
pq =1000 vph
0.011114 1.832118 4.780815
pq =1500 vph
0.010528 1.632683 3.987672
r = 4
1
pq =2000 vph
0.010258 1.548408 3.682229
pq =500 vph
0.013969 1.484109 1.474577
pq =1000 vph
0.011638 1.205125 3.447919
pq =1500 vph
0.011024 1.073942 2.875905
r = 5
1
pq =2000 vph
0.010741 1.018507 2.65562
114
work for the FRESIM car-following model. This table suggests that using the linear
downsampling procedure will cause a range of 0.010139% to 5.489826% accuracy loss, in
terms of RADE, comparing to the optimal solutions. Generally seeking for a balance
between simulation performance and computational resources, the linear downsampling
procedure can be used instead of the optimal solutions for the three car-following models.
The level of accuracy loss varies according to the different models.
Figure 5-24 shows the overall sub-optimal downsampling performance of each
car-following model discussed above. In this figure, the upper and lower bounds of
RADE (%) for each downsampling ratio r=1/2, 1/3, 1/4, and 1/5 cases.
From all the three car-following models’ observations, the sub-optimal downsampling
performance improves with the increase of the downsampling ratio. And the difference
between the upper and lower bounds decrease with the increase of the downsampling ratio.
This observation confirms that lower downsampling ratios lead to more information loss.
And it is consistent with all the three models results.
In terms of the lowest relative average vehicular delay error (%), the GM3
car-following model results in a best sub-optimal downsampling performance, while the
FRESIM car-following model gets a highest relative error. More research needs to
conduct on the downsampling performance in the CORSIM (NESTIM and FRESIM)
model with more operation parameters, like more number of vehicles, more flow rate, and
a more accurate and wider range of sensitivity and adaptation parameters in microcosm
115
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
0.2 0.25 0.33 0.5r
R
AD
E
(%
)
(a) GM3
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6
6.5
7
7.5
8
8.5
0.2 0.25 0.33 0.5
r
R
A
D
E
(%
)
(b) NETSIM
0
1
2
3
4
5
6
7
8
9
10
11
12
13
0.2 0.25 0.33 0.5
r
R
A
D
E
(%
)
(d) FRESIM
Figure 5-24: Overall Sub-Optimal Downsampling Performance
116
environment ( andmα mT∆ ).
5.5. COMPUTATIONAL EFFICIENCY
The approach presented in this research attempts to gain computational efficiency of
microscopic traffic simulation processes through reducing the network size and the number
of simulated entities; as opposed to increasing the system updating time in the prototype
environment. Although the latter approach is feasible, it has limitations and consequences
as well. This is because the simulated entities maintain the same state during the system
scan time (e.g. vehicle accelerations or decelerations). Therefore, the drivers are assumed
to have no response to any stimulus in the driving environment that might be triggered
within the system scan time. This imposes a limitation on the maximum feasible system
scan time. Also, of particular concern is the impact of increasing the system scan time on
local and asymptotic traffic stability.
Based on some preliminary results, the downsampling procedure led to an equivalent
adaptation time in the microcosm environment that is larger than that in the prototype
environment (i.e. 10
m
rT∆ ≈ ∆ pT ). If the maximum system scan time is set equal to the
driver adaptation time, then the downsampling procedure will allow the maximum system
scan time in the microcosm environment to increase by the ratio 1r . As a result of
increasing the system scan time by 1r , and simultaneously decreasing the number of
simulated entities by the ratio , the computational savings could potentially increase by
the ratio . Mathematically, if we are simulating vehicles in the prototype
r
2r pN
117
environment for time period T with system update time t , then the number of
computations used to update one parameter (e.g. acceleration) can be roughly estimated as
p p
p p
p
N T
t
. In the downsampled network, that number of computations can be estimated
similarly from m m
m
N T
t
. Since m pN rN= , 1mt r= pt p, and mT T= , the ratio between the
number of computations in both environments will be equal to . Since the product of 2r
the optimal sensitivity parameter and the adaptation time in the microcosm environment
will not change, local and asymptotic stability in the downsampled network will be
preserved.
118
6. SUMMARY AND CONCLUSIONS
6.1. STUDY SUMMARY
This study presented an approach to reduce the computational requirements of
car-following and lane-changing models in microscopic traffic simulation systems. To
achieve this goal, a downsampling procedure was developed to create a geometrically,
kinematically, and behaviorally representative microcosm environment. A methodology
was developed to optimize the behavior of vehicles in the microcosm environment by
minimizing the trajectory errors and relative average vehicular delay errors. The
mathematical formulation was derived exclusively for one-lane operation and deterministic
driving conditions to seek optimal solutions that would facilitate optimization under
stochastic conditions in subsequent research studies.
Experimental work was conducted to examine the behavioral scalability for one-lane
freeway segment under different operating conditions. The Microscopic Traffic
Simulation (SMTS) module was developed to perform the experimental work. The
experimental work was carried out under different traffic flow conditions and
downsampling ratios for the GM-3, NETSIM and FRESIM car-following models.
Trajectory based RMSE and relative average vehicular delay error (RADE) were used as
the performance measures to assess the efficiency of the downsampling process. The
experimental work based on GM3was conducted to determine an optimal solution for the
two behavioral parameters (sensitivity and adaptation time) in the microcosm environment.
119
For each performance measure, trajectory based RMSE and RADE, the experimental work
includes a total of 48*3=144 cases under different traffic flow conditions and
downsampling ratios, in three scenarios respectively. The experiment conducted on the
NETSIM and FRESIM car-following models used the same operation conditions to
determine the optimal solution for the two behavioral parameters (sensitivity and
adaptation time) in the microcosm environment. The experimental work was conducted
under trajectory scenario 3 only for NETSIM and FRESIM. And the performance was
measured by RADE for NETSIM and FRESIM. Finally, the over all sub-optimal
downsampling performance including all the car-following models used in this study was
discussed.
6.2. CONCLUSIONS
A mathematical approach was developed to simulate a reduced scale system
(microcosm environment) with fewer entities to improve the computational efficiency of
microscopic simulation of large transportation networks. An objective function with a set
of constraints was defined to explain the behavioral scalability of traffic simulation
processes.
Experimental analysis was conducted on the three car-following models: GM3,
NETSIM and FRESIM to test the approach performance under different traffic conditions.
The results of the GM3 experimental work show that for each downsampling ratio (r=1/2,
1/3, 1/4, and 1/5), the optimal values of the sensitivity parameter, in terms of RMSE, are
120
consistent with the corresponding downsampling ratios, which confirms that p
m
α
α0 =r.
The optimal values of adaptation time, however, increased by their corresponding protype
values and the gets an approximate relationship 5553.00315.3 rT
T
p
m ≈∆∆ . Also, the ratio
of the average vehicular delays in the microcosm and the prototype environments for each
case was very close to 1.0, which suggests that the effect of information loss caused by
downsampling was relatively insignificant and also that the optimization procedure was
successful in preserving one of the most important macroscopic characteristics in
simulation processes. The results of the experimental work based on NETSIM and
FRESIM were shown in terms of RADE. The optimal values in this work were not
exactly consistent with their corresponding downsampling ratios as results in the GM3
work. But the over all sub-optimal downsampling performance shows that the range of
the relative average vehicular delay errors in NESIM and FRESIM car-following models
are only 0.600996% to 7.951548% and 0.804925% to 12.04206%. This suggests that the
linear scalability of NETSIM and FRESIM car-following models can exist by scarifying a
range of accuracy in terms of RADE. The ratio of the average vehicular delays in the
microcosm and the prototype environments for each model was also very close to 1.0,
which is consistently with the result in GM3 car-following model. The over all
sub-optimal downsampling performance including all the car-following models used in
this study was expressed at the end. The sub-optimal downsampling performance
121
improves with the increase of the downsampling ratio in all of the three car-following
models. This observation confirms that lower downsampling ratios lead to more
information loss.
Microscopic simulation of the reduced scale system (microcosm environment) ensures
higher computational efficiency and quicker results that are extremely useful while
evaluating large scale transportation network systems in real-time. The developed
approach also finds applications in emergency evacuation procedures and in coarse
analysis, such as planning. The success of this approach will have a tremendous impact
on the capabilities of next generation traffic simulation models. Further research is
necessary to test this approach in stochastic conditions along with more different
car-following and lane-changing models.
6.3. FUTURE RESEARCH
In this research, GM-3 and CORSIM car-following models were used to test the
ability to downsample large-scale simulation systems while preserving most of the
behavioral characteristics. The findings of this basic research will have cross-disciplinary
impact since the concept of simulation scalability may be applicable to areas beyond
transportation applications where microsimulation modeling is of particular relevance.
Different car-following models can be used to inform the applicability of this research. A
wider range of operation conditions can be selected to conduct the experimental work in
CORSIM car-following model to get more accurate and realistic results.
122
REFERENCES
Ahmed. A, R. Khanal, and P. Rust (2002) “Evaluation of Freeway Diversion Route Plans
Using Microscopic Simulation and Real-Time Data: The Case of Idaho’s Treasure Valley
Corridor.” Transportation Research Board Annual Meeting in Washington D.C.
Ahmed K.I., Ben-Akiva M., Koutsopoulos H.N. and Mishalani R.G. (1996) “Models of
Freeway Lane Changing and Gap Acceptance Behavior”, in Proceedings of the 13th
International Symposium on the Theory of Traffic Flow and Transportation, pp. 501-515.
Ahmed K.I. (1999) “Modeling Drivers’ Acceleration and Lane Changing Behavior”, PhD
Dissertation, Department of Civil and Environmental Engineering, MIT.
Aycin, M., and R. Benekohal (1999) “Comparison of Car-Following Models for
Simulation”, Transportation Research Record 1678, pp. 116-127
Aycin, M. F., and R. F. Benekohal. Linear Acceleration Car-Following Model
Development and Validation. Transportation Research Record 1644, TRB, National
Research Council, Washington, D.C., 1998,
Benekohal R.F., Treiterer J. CARSIM:Car-following Model fro Simulation of Traffic in
Normal and Stop-and-Go Conditions. Transportation Research Record 1194, 1988
Brackstone, M. and M. McDonald (1999) “Car-following: A Historical Review”,
Transportation Research Part F, Vol.2, Issue 4, pp 181-196.
Bullock, D., and A. Catarella (1998) “A real-time simulation environment for evaluating
traffic signal systems”, Transportation Research Record 1634, pp 130-135.
Chakravarthy S. (2003) “Exploring Geometric, Kinematic, and Behavioral Scalability of
Microscopic Traffic Simulation Systems”, Master’s thesis, Department of Civil and
Environmental Engineering , Louisiana State University.
Chandler, R.E, R. Herman and E. W. Montroll (1958) “Traffic Dynamics: Studies in
Car-Following”, Operations Research, 6, 165-184.
Cheu,R., Recker W., Ritchie S., ‘‘Calibration of INTRAS for Simulation of 30-sec Loop
Detector Output’’, TRR 1457, 1994 pp 208-215.
123
Chundury, S., and B. Wolshon (2000) “Evaluation of the CORSIM Car-Following
Model Using GPS Field Data” Transportation Research Record, No. 1710.
Chung, J., and K. Goulias (1997) “Travel Demand Forecasting Using Microsimulation:
Initial Results from Case Study in Pennsylvania”, Transportation Research Record 1607,
pp 24-30
Daganzo, C. (1994). "Cell Transmission Model: A Dynamic Representation of Highway
Traffic Consistent with the Hydrodynamic Theory", Transportation Research, Vol. 28B,
No. 4, pp. 269-287.
Dia, H. (2002) “An Agent-Based Approach to Modeling Driver Route Choice Behavior
Under the Influence of Real-Time Information”, Transportation Research Part C, pp
331-349.
FHWA (1998) “CORSIM User Manual (1.04 ed.)”, Federal Highway Administration, US
Department of Transportation, McLean, Virginia.
Gartner, N.,C. Messer, and A. Rathi (eds.), “Traffic Flow Theory”, Transportation
Research Board Special Report 165.
Gipps, P.G. (1986) “A Model For The Structure of Lane-Changing Decisions,”
Transportation research, Vol. 20 B, No. 5, 1986, pp. 403-414.
Greenburg,H. , ‘‘An Analysis of Traffic Flow’’, Operations Research 7(I),pp,255-275.
Hasan. M, M. Jha, and M. Ben-Akiva, “Evaluation of Ramp Control Algorithms Using
Microscopic Traffic Simulation”, Transportation Research Part C, 2002, Vol. 10, Issue 3,
pp 229-256.
Hatipkarasulu, Y., B. Wolshon, and C. Quiroga (2000) “A GPS Based Approach for the
Analysis of Car Following Behavior.” ASCE Journal of Transportation Engineering, Vol.
126. No. 4, p 324-331.
Hawas, Y. (2002) “Calibrating Simulation Models for Advanced Traveler Information
Systems/Advanced Traffic Management Systems Applications”, ASCE Journal of
Transportation Engineering, Vol. 128, No. 1, pp. 80-88
Hidas, Peter (2002) “A Microscopic Study of Lane Changing Behavior”, paper presented
124
at the 24th CAITR conference
Ishak, S. (2003) "A Methodology for Downsampling Microscopic Simulation Processes of
Large-Scale Transportation Networks", Submitted for publication in Transportation
Research Part B, 2003.
Ishak, S., C. Alecsandru and S. Chakravarthy (2004) "Exploring Geometric, Kinematic,
and Behavioral Scalability of Microscopic Traffic Simulation Systems: A Case Study"
Submitted for publication in the IEEE Transactions on ITS 2004.
Ishak, S., S. Chakravarthy and C. Alecsandru (2004) "Performance versus Scalability of
Microscopic Traffic Simulation Systems." Preprint CD-ROM of the 83rd Annual
Meeting of TRB, National Research Council, Washington D.C., 2004.
Ishak, S., C. Alecsandru, and S. Chakravarthy. (2004) "Scalability Concepts of
Microscopic Traffic Simulation Processes" Submitted for publication in the ASCE Journal
of Transportation Engineering.
Jayakrishnan, R., J. Oh and A. Sahraoui (2001) "Calibration and Path Dynamics Issues in
Microscopic Simulation for Advanced Traffic Management and Information Systems,"
Transportation Research Record 1771 pp. 9-17
Kwon, E., B. Choi, B, and H. Park (1999) “A Personal Computer-Based Parallel
Simulation System for On-Line Assessement of Freeway Operational Strategies.”
Transportation Research Board Annual Meeting in Washington D.C.
Lahiri, S., A. C. Gan, and Q. Shen (2002) “Using Simulation to Estimate Speed
Improvements from Simple Ramp Metering at On-Ramp Junctions.” Transportation
Research Board Annual Meeting in Washington D.C.
Levison, W. (1998) “Interactive Highway Safety Design Model Issues Related to Driver
Modeling”, Transportation Research Record 1631, pp 20-27
Levison, W., O. Simsek, A. Bittner, Jr., and S. Hunn (2001) “Computational Techniques
Used in the Driver Performance Model of the Interactive Highway Safety Design Model”,
Transportation Research Record 1779, pp. 17-15
Leonard II, J., “An Overview of Simulation Models in Transportation”, Simulation
Technology, Vol. 5, No. 1b, September 2001.
125
Logi, Filippo, Craig R. Rindt, Michael G. McNally and Stephen G. Ritchie.
"TRICEPS-CARTESIUS: Advanced Transportation Management System Test Bed for
Evaluation of Interjurisdictional Traffic Management Strategies," Transportation Research
Record 1748, 2001, pp. 125-131.
May, A. (1990) “Traffic Flow Fundamentals”, Prentice Hall, Englewood Cliffs, New
Jersey.
Narupiti, S., Taylor W. C., Abdel-Rahim, A. S. (1996) “Impact of ATMS and ATIS
Control Strategies on Incident Congestion: A Simulation Study.” ITS world congress
conference proceedings.
Nakayama, S., R. Kitamura, and S Fujii (1999) “Drivers’ Learning and Network Behavior:
Dynamic Analysis of the Driver-Network System as a Complex System”, Transportation
Research Record 1676, pp 30-36
Nilson, L.B. (1998) Teaching at its Best. Anker Publishing Company, Inc., Bolton,
MA.
Park, B., N. Rouphail, and J. Sacks (2001) “Assessment of Stochastic Signal Optimization
Method Using Microsimulation”, Transportation Research Record 1748, pp 40-45.
Rakha, H., M. Van Aerde, L. Bloomberg, and X. Huang (1998) “Construction and
calibration of Large-Scale Microsimulation Model of the Salt Lake Area”, Transportation
Research Record 1644, pp 93-102.
Revised Monograph on Traffic Flow Theory (1997) Special Report by the Transportation
Research Board.
Rilett, L. (2001) “Transportation Planning and TRANSIMS Microsimulation Model:
Preparing for the Transition”, Transportation Research Record 1777, pp 84-92
Rilett, L., K. Kim, and B. Raney (2000) “Comparison of Low-Fidelity TRANSIMS and
High-Fidelity CORSIM Highway Simulation Models with Intelligent Transportation
System Data”, Transportation Research Record 1739-0678
Sarosh Khan, Pawan Maini, and Kittichai Thanasupsin (2000) “Car-Following and
Collision Constraint Models for Uninterrupted Traffic: Reexamination Using
High-Precision Global Positioning System Data”, Transportation Research Record 1710,
126
pp. 37-46
Sarvi, M., M. Kuwahara, and A. Ceder (2002) “Developing Control Strategies for Freeway
Merging Points under Congested Traffic Situations Using Modeling and a Simulation
Approach.” Transportation Research Board Annual Meeting in Washington D.C.
Trapp, R. (2002) “Microscopic Traffic Flow Modeling of Large Urban Networks.”
Transportation Research Board Annual Meeting in Washington D.C.
Velan, S. M., and M. Van Aerde (1996) “Gap Acceptance and Approach Capacity at
Unsignalized Intersections”, ITE Journal, Vol. 66, No. 3, pp. 40-45.
Wang, Y. and P. Prevedouros (1998) “Comparison of INTEGRATION, TSIS/CORSIM
and WATSim in Replicating Volumes and Speeds on Three Small Networks”
Transportation Research Board Annual Meeting in Washington D.C.
Wicks, D.A., Andrews B.J. ‘‘Development and Testing of INTRAS, a Microscopic
Freeway Simulation Model’’, Vol. 1: Pregram Design, Parameter Calibration and Freeway
Dynamics Component Development. Report FHWA/RD-80/106. FHA, U.S. Department
of Transportation, 1980.
Wolshon, B., and Y. Hatipkarasulu (2000) “Results of Car Following Analyses Using
Global Positioning System” ASCE Journal of Transportation Engineering, Vol. 126, No. 4,
pp 324-331
Yang, Q., H. Koutsopoulos, and M. Ben-Akiva (2000) “A Simulation Laboratory for
Evaluating Dynamic Traffic Management Systems.” Transportation Research Board
Annual Meeting in Washington D.C.
Zhang, Y, L. Owen, and J. Clark (1998) “Multiregime Approach for Microscopic Traffic
Simulation”, Transportation Research Record 1631, pp. 103-112
Ziliaskopoulos, A.K. and Lee, S. (1997). "A Cell Transmission Based
Assignment-Simulation Model for Integrated Freeway/Surface Street Systems",
Transportation Research Record, No.1701, pp. 12-23.
Ziliaskopoulos, A.K. and Waller, S.T. (2000). "An Internet-based Geographical
Information System that Integrates Data, Models and Users for Transportation
Applications", Transportation Research, Vol. 8C, No. 1, pp. 427-444.
127
APPENDIX – SIMULATION PROGRAM MODULE
// CarFollowModel.h: interface for the CCarFollowModel class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CARFOLLOWMODEL_H__8C3D3347_D8FC_4E4B_913E_F748BA
948453__INCLUDED_)
#define
AFX_CARFOLLOWMODEL_H__8C3D3347_D8FC_4E4B_913E_F748BA948453__IN
CLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Vehicle.h"
#include
//////////////////
#define PI 3.1415926535
#define LOOP_LENGTH 264000.//165876.09211//2.*PI*5*5280. // 5 miles radius [ft]741
#define DETECTOR_SIZE 150 // [ft]
#define MIN_SPEED 0 //[ft/sec]
#define MAX_SPEED 110.//(75mph*5280ft/mile/3600sec/hour) //[ft/sec]
#define MIN_ACC -10. //[ft/sec2]
#define MAX_ACC 10. //[ft/sec2]
#define MAX_ACC_CHANGE_RATE 15. //[ft/sec/sec]
#define CRUISE_ACC 2 //acceleration used to get to the cruise(free flow, max)
speed
#define VEH_LENGTH 24. //[ft] - vehicle length
#define MAX_DISTANCE 396000.//5280.*75. //(75 miles )[ft] max distance for the
space snap-shot to check point densities
#define DELAY_SPACE_INTERVAL 39600. //(100-th of a mile) [ft] distance interval
for the space snap-shot to check point delays ('energies')
#define DENSITY_SPACE_INTERVAL 5280. //(10-th of a mile) [ft] distance interval
for the space snap-shot to check point densities
#define DENSITY_TIME_INTERVAL 60. //(1min)[sec] time interval to take density
128
snap-shots
#define FEET_INA_MILE 5280.
#define INFLUENCE_ZONE 200. // limit for which the car-following model is engaged
//#define DENSITY_TIME_SLICE 60 // [sec] - for density measures computation
along the specified
//#define DENSITY_SECTION_LENGTH 20 //DENSITY_SECTION_LEGTH
//calculate different errors (delay, trajectory, etc.) for microcosm validation
#define AVG_DELAY 0x0001
#define AVG_DEL 0x1000
#define AVG_DENSITY 0x0002
#define AVG_TRAJECT 0x0004
#define REC_TRAJECT 0x0008
class CCarFollowModel
{
protected:
public:
CCarFollowModel();
//CCarFollowModel(paramSMTS *params);
virtual ~CCarFollowModel();
// offset=0 works for prototype by default
static void ComputeNextVehicle(int carfol_model, paramSMTS params, CVehicle*
leader, CVehicle* follower,
double **density, double *delay, int idx, int lag, double headway, int id, double
alphaVal, double ratio) {
switch (carfol_model) {
case CARFOLLOW_GM1:
ComputeNextVehicleGM1(params, leader, follower, density, delay, idx, lag,
headway, id, alphaVal, ratio);
break;
case CARFOLLOW_GM3:
ComputeNextVehicleGM3(params, leader, follower, density, delay, idx, lag,
headway, id, alphaVal, ratio);
break;
129
case CARFOLLOW_NETSIM:
ComputeNextVehicleNETSIM(params, leader, follower, density, delay, idx,
lag, headway, id, alphaVal, ratio);
break;
case CARFOLLOW_FRESIM:
ComputeNextVehicleFRESIM(params, leader, follower, density, delay, idx,
lag, headway, id, alphaVal, ratio);
break;
}
}
//lagOffset - to accomodate the same function for the variation of lag in microcosm
//ratio is always less than 1, so we can also distinguish between vehicles in prototype
and microcosm
static void ComputeNextVehicleGM1(paramSMTS params, CVehicle* leader,
CVehicle* follower,
double **density, double *delay, int idx, int lag, double headway, int id, double
alphaVal, double ratio) {
//pick the random variables of the vehicle
//stochastic components if their variance is > 0
if (params.alphaVar >0) {
alphaVal = follower->GetAlpha();
}
if (params.deltaTVar >0) {
lag = follower->GetLag();
}
//do not apply the model yet, if the vehicle didn' enter the system
//- an equal(for the beginning) arrival headway is assumed
if (idx*params.updatingTime <= id*headway) {
idx = (idx > params.maxlag) ? params.maxlag : idx;
follower->SetPosition(0, idx);
follower->SetSpeed(0, idx);
follower->SetAcceleration(0, idx);
}
else {
//lv, fv - leading/follower vehicle
130
//Lag - value at some lag ago
//Crt - current value
//Prv - last(previous) values
double lvLagS;
double fvLagS;
double lvCrtS, lvCrtP, lvPrvP;
double fvCrtA, fvCrtS, fvCrtP;
double fvPrvA, fvPrvS, fvPrvP;
//get previouslyc computed values for leading car
lvLagS = leader->GetSpeed(params.maxlag - leader->GetLag());
lvCrtS = leader->GetSpeed(params.maxlag);
lvCrtP = leader->GetPosition(params.maxlag);
lvPrvP = leader->GetPosition(params.maxlag-1);
//get previously computed values for following car
fvLagS = follower->GetSpeed(params.maxlag - lag);
fvPrvS = follower->GetSpeed(params.maxlag - 1);
fvPrvA = follower->GetAcceleration(params.maxlag - 1);
fvPrvP = follower->GetPosition(params.maxlag - 1);
/*** loop trajectory not implemented yet *********
//adjust the vehicle position for the loop case
// if the vehicle previously passed the loop (2*PI*R)
// then add loop lenght to its current position
if (leader->GetLoopFlag()) {
if (lvPrvP > lvCrtP) {
lvPrvP += LOOP_LENGTH;
}
lvCrtP += LOOP_LENGTH;
}
//use gm1 model if in the influence zone
//if (1 || (lvPrvP - fvPrvP) <= INFLUENCE_ZONE*ratio) {
if (1 || (lvPrvP - fvPrvP) GetInfluenceZone()*ratio) {
fvCrtA = alphaVal* (lvLagS - fvLagS);
}
131
else {
// fvCrtA = fvPrvA;
fvCrtA = follower->GetAcc2CruiseSpeed();
}
**************/
//use CF gm1 model
fvCrtA = alphaVal* (lvLagS - fvLagS);
//CHECK AGAINST MAX RATE OF CHANGE IN ACCELERATION
(SAY MAX 15 FT/SEC/SEC => [e.g. 1.5FT/SEC/0.1SEC])
if (abs(fvPrvA-fvCrtA) >
MAX_ACC_CHANGE_RATE*params.updatingTime) {
fvCrtA = fvPrvA +
( fvCrtA<fvPrvA ?(-1):(+1))*MAX_ACC_CHANGE_RATE*params.updatingTime;
}
//to be on the safe side constraint for acceleration
fvCrtA = (fvPrvS >= MAX_SPEED*ratio && fvCrtA > 0) ? 0 : fvCrtA;
//acc boundary check could be redundant for GM1
fvCrtA = (fvCrtA = MIN_ACC*ratio) ?
fvCrtA : MIN_ACC*ratio) : MAX_ACC*ratio;
fvCrtS = fvPrvS + 0.5*params.updatingTime*(fvPrvA + fvCrtA);
//speed boundary check could be redundant for GM1
fvCrtS = (fvCrtS = MIN_SPEED*ratio) ?
fvCrtS : MIN_SPEED*ratio) : MAX_SPEED*ratio;
/*** loop trajectory not implemented yet *********
// reset the flag for the leading veh
// if the following veh passed the loop too
// also, set the flag for the following vehicle
if (fvPrvP > LOOP_LENGTH) {
leader->SetLoopFlag(false);
fvPrvP -= LOOP_LENGTH;
follower->SetLoopFlag(true);
}
//check against minimum spacing
132
if (0 && fvCrtP+VEH_LENGTH > lvCrtP) {
fvCrtP = lvCrtP - VEH_LENGTH;
fvCrtS = (fvCrtP-fvPrvP)/(0.5*params.updatingTime) - fvPrvS;
fvCrtA = (fvCrtS-fvPrvS)/(0.5*params.updatingTime) - fvPrvA;
}
***************/
fvCrtP = fvPrvP + 0.5*params.updatingTime*(fvPrvS + fvCrtS);
//position boundary check could be redundant for GM1
fvCrtP = (fvCrtP < 0) ? 0 : fvCrtP;
//set the vehicular parameters for the following veh
follower->SetPosition(fvCrtP, params.maxlag);
follower->SetSpeed(fvCrtS, params.maxlag);
follower->SetAcceleration(fvCrtA, params.maxlag);
//check for a snap-shot density
if ((idx % (long)(DENSITY_TIME_INTERVAL / params.updatingTime)) ==
0) {
computeDensity(fvCrtP, int(idx/(DENSITY_TIME_INTERVAL /
params.updatingTime)), density, ratio);
}
//check for a snap-shot delay
//but first get the updated position of the vehicle
fvCrtP = follower->GetPosition(params.maxlag);
if (fvCrtP >=
follower->GetDelaySnapCount()*DELAY_SPACE_INTERVAL*ratio
|| (idx+1) == params.endSimTime) {
if (follower->GetDelaySnapCount() > 10) {
//not good
AfxMessageBox("known error, please let me know (GM1)! --
ciprian");
exit(0);
idx += 0;
}
delay[follower->GetDelaySnapCount()] = idx*params.updatingTime -
fvCrtP/(MAX_SPEED*ratio) - id*headway;
133
follower->AddDelaySnapCount();
}
}
}
//// END OF gm1 CAR-FOLLOWING MODEL
//lagOffset - to accomodate the same function for the variation of lag in microcosm
//ratio is always less than 1, so we can also distinguish between vehicles in prototype
and microcosm
static void ComputeNextVehicleGM3(paramSMTS params, CVehicle* leader,
CVehicle* follower,
double **density, double *delay, int idx, int lag, double headway, int id, double
alphaVal, double ratio) {
//pick the random variables of the vehicle
//stochastic components if their variance is > 0
if (params.alphaVar >0) {
alphaVal = follower->GetAlpha();
}
if (params.deltaTVar >0) {
lag = follower->GetLag();
}
//do not apply the model yet, if the vehicle didn' enter the system
//- an equal(for the beginning) arrival headway is assumed
if (idx*params.updatingTime <= id*headway) {
idx = (idx > params.maxlag) ? params.maxlag : idx;
follower->SetPosition(0, idx);
follower->SetSpeed(0, idx);
follower->SetAcceleration(0, idx);
}
else {
//lv, fv - leading/follower vehicle
//Lag - value at some lag ago
//Crt - current value
//Prv - last(previous) values
double lvLagS, lvLagP;
double fvLagS, fvLagP;
134
double lvCrtS, lvCrtP, lvPrvP;
double fvCrtA, fvCrtS, fvCrtP;
double fvPrvA, fvPrvS, fvPrvP;
//get previouslyc computed values for leading car
lvLagS = leader->GetSpeed(params.maxlag - leader->GetLag());
lvLagP = leader->GetPosition(params.maxlag - leader->GetLag());
lvCrtS = leader->GetSpeed(params.maxlag);
lvCrtP = leader->GetPosition(params.maxlag);
lvPrvP = leader->GetPosition(params.maxlag-1);
//get previously computed values for following car
fvLagS = follower->GetSpeed(params.maxlag - lag);
fvLagP = follower->GetPosition(params.maxlag - lag);
fvPrvS = follower->GetSpeed(params.maxlag - 1);
fvPrvA = follower->GetAcceleration(params.maxlag - 1);
fvPrvP = follower->GetPosition(params.maxlag - 1);
/*** loop trajectory not implemented yet *********
//adjust the vehicle position for the loop case
// if the vehicle previously passed the loop (2*PI*R)
// then add loop lenght to its current position
if (leader->GetLoopFlag()) {
if (lvPrvP > lvCrtP) {
lvPrvP += LOOP_LENGTH;
}
lvCrtP += LOOP_LENGTH;
}
//use gm1 model if in the influence zone
//if (1 || (lvPrvP - fvPrvP) <= INFLUENCE_ZONE*ratio) {
if (1 || (lvPrvP - fvPrvP) GetInfluenceZone()*ratio) {
fvCrtA = alphaVal* (lvLagS - fvLagS);
}
else {
// fvCrtA = fvPrvA;
fvCrtA = follower->GetAcc2CruiseSpeed();
135
}
**************/
//use gm3 model
if (lvLagP - fvLagP > 3*VEH_LENGTH) {
fvCrtA = (alphaVal/(lvLagP - fvLagP))*(lvLagS - fvLagS);
}
else {
fvCrtA = 0;
}
/*/CHECK AGAINST MAX RATE OF CHANGE IN ACCELERATION
(SAY MAX 15 FT/SEC/SEC => [e.g. 1.5FT/SEC/0.1SEC])
if (abs(fvPrvA-fvCrtA) >
MAX_ACC_CHANGE_RATE*params.updatingTime) {
fvCrtA = fvPrvA +
( fvCrtA<fvPrvA ?(-1):(+1))*MAX_ACC_CHANGE_RATE*params.updatingTime;
}*/
//to be on the safe side constraint for acceleration
fvCrtA = (fvPrvS >= MAX_SPEED*ratio && fvCrtA > 0) ? 0 : fvCrtA;
//acc boundary check could be redundant for GM1
fvCrtA = (fvCrtA = MIN_ACC*ratio) ?
fvCrtA : MIN_ACC*ratio) : MAX_ACC*ratio;
fvCrtS = fvPrvS + 0.5*params.updatingTime*(fvPrvA + fvCrtA);
//speed boundary check could be redundant for GM1
fvCrtS = (fvCrtS = MIN_SPEED*ratio) ?
fvCrtS : MIN_SPEED*ratio) : MAX_SPEED*ratio;
/*** loop trajectory not implemented yet *********
// reset the flag for the leading veh
// if the following veh passed the loop too
// also, set the flag for the following vehicle
if (fvPrvP > LOOP_LENGTH) {
leader->SetLoopFlag(false);
fvPrvP -= LOOP_LENGTH;
follower->SetLoopFlag(true);
136
}
//check against minimum spacing
if (0 && fvCrtP+VEH_LENGTH > lvCrtP) {
fvCrtP = lvCrtP - VEH_LENGTH;
fvCrtS = (fvCrtP-fvPrvP)/(0.5*params.updatingTime) - fvPrvS;
fvCrtA = (fvCrtS-fvPrvS)/(0.5*params.updatingTime) - fvPrvA;
}
***************/
fvCrtP = fvPrvP + 0.5*params.updatingTime*(fvPrvS + fvCrtS);
//position boundary check could be redundant for GM1
fvCrtP = (fvCrtP < 0) ? 0 : fvCrtP;
//set the vehicular parameters for the following veh
follower->SetPosition(fvCrtP, params.maxlag);
follower->SetSpeed(fvCrtS, params.maxlag);
follower->SetAcceleration(fvCrtA, params.maxlag);
//check for a snap-shot density
if ((idx % (long)(DENSITY_TIME_INTERVAL / params.updatingTime)) ==
0) {
computeDensity(fvCrtP, int(idx/(DENSITY_TIME_INTERVAL /
params.updatingTime)), density, ratio);
}
//check for a snap-shot delay
//but first get the updated position of the vehicle
fvCrtP = follower->GetPosition(params.maxlag);
if (fvCrtP >=
follower->GetDelaySnapCount()*DELAY_SPACE_INTERVAL*ratio
|| (idx+1) == params.endSimTime) {
if (follower->GetDelaySnapCount() > 10) {
//not good
AfxMessageBox("known error, please let me know(GM3)! --
ciprian");
exit(0);
idx += 0;
}
137
delay[follower->GetDelaySnapCount()] = idx*params.updatingTime -
fvCrtP/(MAX_SPEED*ratio) - id*headway;
follower->AddDelaySnapCount();
}
}
}
//// END OF gm3 CAR-FOLLOWING MODEL
//lagOffset - to accomodate the same function for the variation of lag in microcosm
//ratio is always less than 1, so we can also distinguish between vehicles in prototype
and microcosm
static void ComputeNextVehicleNETSIM(paramSMTS params, CVehicle* leader,
CVehicle* follower,
double **density, double *delay, int idx, int lag, double headway, int id, double
alphaVal, double ratio) {
//pick the random variables of the vehicle
//stochastic components if their variance is > 0
if (params.alphaVar >0) {
alphaVal = follower->GetAlpha();
}
if (params.deltaTVar >0) {
lag = follower->GetLag();
}
//do not apply the model yet, if the vehicle didn' enter the system
//- an equal(for the beginning) arrival headway is assumed
if (idx*params.updatingTime <= id*headway) {
idx = (idx > params.maxlag) ? params.maxlag : idx;
follower->SetPosition(0, idx);
follower->SetSpeed(0, idx);
follower->SetAcceleration(0, idx);
}
else {
//lv, fv - leading/follower vehicle
//Lag - values at some time lag ago
//Crt - current values (to be set)
//Prv - previously(one updatimg time step ago) calculated values
138
double lvLagS;
double fvLagS;
double lvCrtS, lvCrtP, lvPrvP;
double fvCrtA, fvCrtS, fvCrtP;
double fvPrvA, fvPrvS, fvPrvP;
//get previouslyc computed values for leading car
lvLagS = leader->GetSpeed(params.maxlag - leader->GetLag());
lvCrtS = leader->GetSpeed(params.maxlag);
lvCrtP = leader->GetPosition(params.maxlag);
lvPrvP = leader->GetPosition(params.maxlag-1);
//get previously computed values for following car
fvLagS = follower->GetSpeed(params.maxlag - lag);
fvPrvS = follower->GetSpeed(params.maxlag - 1);
fvPrvA = follower->GetAcceleration(params.maxlag - 1);
fvPrvP = follower->GetPosition(params.maxlag - 1);
/*** loop trajectory not implemented yet *********
//adjust the vehicle position for the loop case
// if the vehicle previously passed the loop (2*PI*R)
// then add loop lenght to its current position
if (leader->GetLoopFlag()) {
if (lvPrvP > lvCrtP) {
lvPrvP += LOOP_LENGTH;
}
lvCrtP += LOOP_LENGTH;
}
//use gm1 model if in the influence zone
//if (1 || (lvPrvP - fvPrvP) <= INFLUENCE_ZONE*ratio) {
if (1 || (lvPrvP - fvPrvP) GetInfluenceZone()*ratio) {
fvCrtA = alphaVal* (lvLagS - fvLagS);
}
else {
// fvCrtA = fvPrvA;
fvCrtA = follower->GetAcc2CruiseSpeed();
139
}
**************/
//use NETSIMs model
double lvDecel = alphaVal;//leader->GetAlpha()*ratio;
double fvDecel = alphaVal;//follower->GetAlpha()*ratio;
double s = lvCrtP-fvPrvP - VEH_LENGTH;//<0)? 1:(lvCrtP-fvPrvP -
VEH_LENGTH);
if (s<0) {
fvCrtA = fvPrvA;
}
else {
double F1 = 2*(s -
fvPrvS*(1+lag*params.updatingTime))*fvDecel*ratio+pow(lvCrtS,2.)*fvDecel/lvDecel-p
ow(fvPrvS,2.);
double F2 = fvDecel*ratio*(2*lag*params.updatingTime+1)+2*fvPrvS;
fvCrtA = F1/(F2);//*params.updatingTime);
}
/*/CHECK AGAINST MAX RATE OF CHANGE IN ACCELERATION
(SAY MAX 15 FT/SEC/SEC => [e.g. 1.5FT/SEC/0.1SEC])
if (abs(fvPrvA-fvCrtA) >
MAX_ACC_CHANGE_RATE*params.updatingTime) {
fvCrtA = fvPrvA +
( fvCrtA<fvPrvA ?(-1):(+1))*MAX_ACC_CHANGE_RATE*params.updatingTime;
}*/
//to be on the safe side constraint for acceleration
fvCrtA = ((fvPrvS >= MAX_SPEED*ratio && fvCrtA > 0) || (fvPrvS <=
1e-6 && fvCrtA < 0)) ? 0 : fvCrtA;
//acc boundary check could be redundant for GM1
fvCrtA = (fvCrtA = MIN_ACC*ratio) ?
fvCrtA : MIN_ACC*ratio) : MAX_ACC*ratio;
fvCrtS = fvPrvS + 0.5*params.updatingTime*(fvPrvA + fvCrtA);
//speed boundary check could be redundant for GM1
fvCrtS = (fvCrtS = MIN_SPEED*ratio) ?
fvCrtS : MIN_SPEED*ratio) : MAX_SPEED*ratio;
// need to check for speed constraints (if the lv stops then we force stopping
140
the fv
// after the default time lag (adaptation time)
// speed should be zeor if no pozitive accelearation is currently employed
fvCrtS = (lvLagS == 0 && fvCrtA>=0) ? 0 : fvCrtS;
/*** loop trajectory not implemented yet *********
// reset the flag for the leading veh
// if the following veh passed the loop too
// also, set the flag for the following vehicle
if (fvPrvP > LOOP_LENGTH) {
leader->SetLoopFlag(false);
fvPrvP -= LOOP_LENGTH;
follower->SetLoopFlag(true);
}
//check against minimum spacing
if (0 && fvCrtP+VEH_LENGTH > lvCrtP) {
fvCrtP = lvCrtP - VEH_LENGTH;
fvCrtS = (fvCrtP-fvPrvP)/(0.5*params.updatingTime) - fvPrvS;
fvCrtA = (fvCrtS-fvPrvS)/(0.5*params.updatingTime) - fvPrvA;
}
***************/
fvCrtP = fvPrvP + 0.5*params.updatingTime*(fvPrvS + fvCrtS);
//position boundary check
fvCrtP = (fvCrtP < 0) ? 0 : fvCrtP;
fvCrtP = (fvCrtP < fvPrvP) ? fvPrvP : fvCrtP;
//set the vehicular parameters for the following veh
follower->SetPosition(fvCrtP, params.maxlag);
follower->SetSpeed(fvCrtS, params.maxlag);
follower->SetAcceleration(fvCrtA, params.maxlag);
//check for a snap-shot density
if ((idx % (long)(DENSITY_TIME_INTERVAL / params.updatingTime)) ==
0) {
computeDensity(fvCrtP, int(idx/(DENSITY_TIME_INTERVAL /
141
params.updatingTime)), density, ratio);
}
//check for a snap-shot delay
//but first get the updated position of the vehicle
fvCrtP = follower->GetPosition(params.maxlag);
if (fvCrtP >=
follower->GetDelaySnapCount()*DELAY_SPACE_INTERVAL*ratio
|| (idx+1) == params.endSimTime) {
if (follower->GetDelaySnapCount() > 10) {
//not good
AfxMessageBox("known error, please let me know(NETSIM)!
-- ciprian");
exit(0);
idx += 0;
}
delay[follower->GetDelaySnapCount()] = idx*params.updatingTime -
fvCrtP/(MAX_SPEED*ratio) - id*headway;
follower->AddDelaySnapCount();
}
}
}
//// END OF netsim CAR-FOLLOWING MODEL
//lagOffset - to accomodate the same function for the variation of lag in microcosm
//ratio is always less than 1, so we can also distinguish between vehicles in prototype
and microcosm
static void ComputeNextVehicleFRESIM(paramSMTS params, CVehicle* leader,
CVehicle* follower,
double **density, double *delay, int idx, int lag, double headway, int id, double
alphaVal, double ratio) {
//pick the random variables of the vehicle
//stochastic components if their variance is > 0
if (params.alphaVar >0) {
alphaVal = follower->GetAlpha();
}
if (params.deltaTVar >0) {
142
lag = follower->GetLag();
}
//do not apply the model yet, if the vehicle didn' enter the system
//- an equal(for the beginning) arrival headway is assumed
if (idx*params.updatingTime <= id*headway) {
idx = (idx > params.maxlag) ? params.maxlag : idx;
follower->SetPosition(0, idx);
follower->SetSpeed(0, idx);
follower->SetAcceleration(0, idx);
}
else {
//lv, fv - leading/follower vehicle
//Lag - value at some lag ago
//Crt - current value
//Prv - last(previous) values
double lvLagS;
double fvLagS;
double lvCrtS, lvCrtP, lvPrvP, lvPrvS;
double fvCrtA, fvCrtS, fvCrtP;
double fvPrvA, fvPrvS, fvPrvP;
//get previouslyc computed values for leading car
lvLagS = leader->GetSpeed(params.maxlag - leader->GetLag());
lvCrtS = leader->GetSpeed(params.maxlag);
lvCrtP = leader->GetPosition(params.maxlag);
lvPrvP = leader->GetPosition(params.maxlag-1);
lvPrvS = leader->GetSpeed(params.maxlag-1);
//get previously computed values for following car
fvLagS = follower->GetSpeed(params.maxlag - lag);
fvPrvS = follower->GetSpeed(params.maxlag - 1);
fvPrvA = follower->GetAcceleration(params.maxlag - 1);
fvPrvP = follower->GetPosition(params.maxlag - 1);
/*** loop trajectory not implemented yet *********
//adjust the vehicle position for the loop case
143
// if the vehicle previously passed the loop (2*PI*R)
// then add loop lenght to its current position
if (leader->GetLoopFlag()) {
if (lvPrvP > lvCrtP) {
lvPrvP += LOOP_LENGTH;
}
lvCrtP += LOOP_LENGTH;
}
//use gm1 model if in the influence zone
//if (1 || (lvPrvP - fvPrvP) <= INFLUENCE_ZONE*ratio) {
if (1 || (lvPrvP - fvPrvP) GetInfluenceZone()*ratio) {
fvCrtA = alphaVal* (lvLagS - fvLagS);
}
else {
// fvCrtA = fvPrvA;
fvCrtA = follower->GetAcc2CruiseSpeed();
}
**************/
//use FRESIMs model
double b=0.1;
if (lvPrvS-fvPrvS > 10*ratio) {
b=0;
}
double s = (lvCrtP-fvPrvP - VEH_LENGTH - 10*ratio);//relative spacing
double F1 = 2*(s - fvPrvS*(alphaVal+lag*params.updatingTime)
- b*alphaVal*pow((lvCrtS-fvPrvS),2));
double F2 = (pow(lag*params.updatingTime,2) +
2*alphaVal*lag*params.updatingTime);
fvCrtA = F1/F2;
//CHECK AGAINST MAX RATE OF CHANGE IN ACCELERATION
(SAY MAX 15 FT/SEC/SEC => [e.g. 1.5FT/SEC/0.1SEC])
/*
if (abs(fvPrvA-fvCrtA) >
MAX_ACC_CHANGE_RATE*params.updatingTime) {
fvCrtA = fvPrvA +
144
( fvCrtA<fvPrvA ?(-1):(+1))*MAX_ACC_CHANGE_RATE*params.updatingTime;
}*/
//to be on the safe side constraint for acceleration
fvCrtA = ((fvPrvS >= MAX_SPEED*ratio && fvCrtA > 0) || (fvPrvS <=1e-6
&& fvCrtA < 0)) ? 0 : fvCrtA;
fvCrtA = (fvCrtA = MIN_ACC*ratio) ?
fvCrtA : MIN_ACC*ratio) : MAX_ACC*ratio;
fvCrtS = fvPrvS + 0.5*params.updatingTime*(fvPrvA + fvCrtA);
//speed boundary check could be redundant for GM1
fvCrtS = (fvCrtS = MIN_SPEED*ratio) ?
fvCrtS : MIN_SPEED*ratio) : MAX_SPEED*ratio;
/*** loop trajectory not implemented yet *********
// reset the flag for the leading veh
// if the following veh passed the loop too
// also, set the flag for the following vehicle
if (fvPrvP > LOOP_LENGTH) {
leader->SetLoopFlag(false);
fvPrvP -= LOOP_LENGTH;
follower->SetLoopFlag(true);
}
//check against minimum spacing
if (0 && fvCrtP+VEH_LENGTH > lvCrtP) {
fvCrtP = lvCrtP - VEH_LENGTH;
fvCrtS = (fvCrtP-fvPrvP)/(0.5*params.updatingTime) - fvPrvS;
fvCrtA = (fvCrtS-fvPrvS)/(0.5*params.updatingTime) - fvPrvA;
}
***************/
fvCrtP = fvPrvP + 0.5*params.updatingTime*(fvPrvS + fvCrtS);
//position boundary check
fvCrtP = (fvCrtP < 0) ? 0 : fvCrtP;
fvCrtP = (fvCrtP < fvPrvP) ? fvPrvP : fvCrtP;
//set the vehicular parameters for the following veh
145
follower->SetPosition(fvCrtP, params.maxlag);
follower->SetSpeed(fvCrtS, params.maxlag);
follower->SetAcceleration(fvCrtA, params.maxlag);
//check for a snap-shot density
if ((idx % (long)(DENSITY_TIME_INTERVAL / params.updatingTime)) ==
0) {
computeDensity(fvCrtP, int(idx/(DENSITY_TIME_INTERVAL /
params.updatingTime)), density, ratio);
}
//check for a snap-shot delay
//but first get the updated position of the vehicle
fvCrtP = follower->GetPosition(params.maxlag);
if (fvCrtP >=
follower->GetDelaySnapCount()*DELAY_SPACE_INTERVAL*ratio
|| (idx+1) == params.endSimTime) {
if (follower->GetDelaySnapCount() > 10) {
//not good
AfxMessageBox("known error, please let me know(FRESIM)! --
ciprian");
exit(0);
idx += 0;
}
delay[follower->GetDelaySnapCount()] = idx*params.updatingTime -
fvCrtP/(MAX_SPEED*ratio) - id*headway;
follower->AddDelaySnapCount();
}
}
}
//// END OF fresim CAR-FOLLOWING MODEL
static void computeDensity (double pos, int idx, double **density, double ratio) {
for (double i = 0; i <= (int)(MAX_DISTANCE*ratio); i +=
DENSITY_SPACE_INTERVAL*ratio) {
if (pos > i && pos <= i+DENSITY_SPACE_INTERVAL*ratio) {
/*this becomes to big, trajectory too long*/
146
density[(int)(i/(DENSITY_SPACE_INTERVAL*ratio))][idx-1] += 1;
}
}
}
/*private static void computeDensityP {
my ($position, $t, $scenario, $k_p) = @_;
for (my $i = 0; $i<=$::maxDistance; $i += $::densitySpaceInterval) {
if ($position > $i && $position <= $i+$::densitySpaceInterval) {
$$k_p[$scenario][($i/$::densitySpaceInterval)][$t-1] += 1;
}
}
}
private static void computeDensityM {
my ($position, $t, $config, $scenario, $k_m) = @_;
for (my $i = 0; $i<=$::maxDistance; $i += $::densitySpaceInterval*$::ratio) {
if ($position > $i && $position <= $i+$::densitySpaceInterval*$::ratio) {
$$k_m[$scenario][$config][($i/($::densitySpaceInterval*$::ratio))][$t-1]
+= 1;
}
}
}*/
};
#endif
// !defined(AFX_CARFOLLOWMODEL_H__8C3D3347_D8FC_4E4B_913E_F748BA9
48453__INCLUDED_)
147
148
VITA
Yan Zhang is from Nanjing, Jiangsu, People’s Republic of China. She completed her
bachelor’s degree in transportation engineering in June 2002 from Southeast University,
Nanjing, Jiangsu, People’s Republic of China. She joined the master’s program in civil
engineering at Louisiana State University in August 2002. In August 2004, she will
receive the degree of Master of Science in Civil Engineering under the guidance of Dr.
Sherif Ishak.
Các file đính kèm theo tài liệu này:
- 111.pdf