00001 // IDMParameterSet.cpp : implementation file 00002 // 00003 00004 #include "stdafx.h" 00005 #include "EvolveTraffic.h" 00006 #include "IDMParameterSet.h" 00007 00008 #ifdef _DEBUG 00009 #define new DEBUG_NEW 00010 #undef THIS_FILE 00011 static char THIS_FILE[] = __FILE__; 00012 #endif 00013 00015 // CIDMParameterSet 00016 00017 IMPLEMENT_SERIAL(CIDMParameterSet, CObject, VERSION_NUMBER) 00018 00019 CIDMParameterSet::CIDMParameterSet() 00020 { 00021 buildParamSet(); 00022 } 00023 00024 CIDMParameterSet::CIDMParameterSet(WORD id) 00025 { 00026 m_VehicleTypeID = id; 00027 buildParamSet(); 00028 } 00029 00030 CIDMParameterSet::~CIDMParameterSet() 00031 { 00032 00033 } 00034 00035 CIDMParameterSet::CIDMParameterSet(const CIDMParameterSet& ParamSet) 00036 { 00037 setAll(ParamSet); 00038 } 00039 00041 // CIDMParameterSet diagnostics 00042 00043 #ifdef _DEBUG 00044 void CIDMParameterSet::AssertValid() const 00045 { 00046 CObject::AssertValid(); 00047 } 00048 00049 void CIDMParameterSet::Dump(CDumpContext& dc) const 00050 { 00051 CObject::Dump(dc); 00052 } 00053 #endif //_DEBUG 00054 00056 // CIDMParameterSet serialization 00057 00058 void CIDMParameterSet::Serialize(CArchive& ar) 00059 { 00060 m_T .Serialize(ar); 00061 m_A .Serialize(ar); 00062 m_B .Serialize(ar); 00063 m_S0 .Serialize(ar); 00064 m_S1 .Serialize(ar); 00065 m_V0 .Serialize(ar); 00066 m_Delta .Serialize(ar); 00067 m_Polite .Serialize(ar); 00068 m_Bias .Serialize(ar); 00069 m_DeltaAth .Serialize(ar); 00070 00071 if (ar.IsStoring()) 00072 ar << m_VehicleTypeID; 00073 else 00074 ar >> m_VehicleTypeID; 00075 } 00076 00078 // CIDMParameterSet implementation 00079 00080 // To avoid duplication of copy constructor and operator= functions 00081 void CIDMParameterSet::setAll(const CIDMParameterSet &ParamSet) 00082 { 00083 this->m_T = ParamSet.m_T; 00084 this->m_A = ParamSet.m_A; 00085 this->m_B = ParamSet.m_B; 00086 this->m_S0 = ParamSet.m_S0; 00087 this->m_S1 = ParamSet.m_S1; 00088 this->m_V0 = ParamSet.m_V0; 00089 this->m_Delta = ParamSet.m_Delta; 00090 this->m_Polite = ParamSet.m_Polite; 00091 this->m_Bias = ParamSet.m_Bias; 00092 this->m_DeltaAth= ParamSet.m_DeltaAth; 00093 00094 this->m_VehicleTypeID = ParamSet.getVehicleTypeID(); 00095 } 00096 00097 void CIDMParameterSet::buildParamSet() 00098 { 00099 // Set each of the parameters of the IDM model 00100 // Note appropriate default values are specified in the 00101 // CDistribution(WORD id) constructor 00102 m_T .setID(IDM_PARAM_T); 00103 m_A .setID(IDM_PARAM_A); 00104 m_B .setID(IDM_PARAM_B); 00105 m_S0 .setID(IDM_PARAM_S0); 00106 m_S1 .setID(IDM_PARAM_S1); 00107 m_V0 .setID(IDM_PARAM_V0); 00108 m_Delta .setID(IDM_PARAM_DELTA); 00109 m_Polite .setID(IDM_PARAM_POLITE); 00110 m_Bias .setID(IDM_PARAM_BIAS); 00111 m_DeltaAth .setID(IDM_PARAM_DELTAATH); 00112 } 00113 00114 CIDMParameterSet& CIDMParameterSet::operator=(const CIDMParameterSet &ParamSet) 00115 { 00116 setAll(ParamSet); 00117 return *this; 00118 } 00119 00120 void CIDMParameterSet::set_T(CParameter* param) 00121 { 00122 m_T = *param; 00123 } 00124 00125 CParameter* CIDMParameterSet::get_T() 00126 { 00127 return &m_T; 00128 } 00129 00130 void CIDMParameterSet::set_A(CParameter* param) 00131 { 00132 m_A = *param; 00133 } 00134 00135 CParameter* CIDMParameterSet::get_A() 00136 { 00137 return &m_A; 00138 } 00139 00140 void CIDMParameterSet::set_B(CParameter* param) 00141 { 00142 m_B = *param; 00143 } 00144 00145 CParameter* CIDMParameterSet::get_B() 00146 { 00147 return &m_B; 00148 } 00149 00150 void CIDMParameterSet::set_S0(CParameter* param) 00151 { 00152 m_S0 = *param; 00153 } 00154 00155 CParameter* CIDMParameterSet::get_S0() 00156 { 00157 return &m_S0; 00158 } 00159 00160 void CIDMParameterSet::set_S1(CParameter* param) 00161 { 00162 m_S1 = *param; 00163 } 00164 00165 CParameter* CIDMParameterSet::get_S1() 00166 { 00167 return &m_S1; 00168 } 00169 00170 void CIDMParameterSet::set_V0(CParameter* param) 00171 { 00172 m_V0 = *param; 00173 } 00174 00175 CParameter* CIDMParameterSet::get_V0() 00176 { 00177 return &m_V0; 00178 } 00179 00180 void CIDMParameterSet::set_Delta(CParameter* param) 00181 { 00182 m_Delta = *param; 00183 } 00184 00185 CParameter* CIDMParameterSet::get_Delta() 00186 { 00187 return &m_Delta; 00188 } 00189 00190 void CIDMParameterSet::set_Polite(CParameter* param) 00191 { 00192 m_Polite = *param; 00193 } 00194 00195 CParameter* CIDMParameterSet::get_Polite() 00196 { 00197 return &m_Polite; 00198 } 00199 00200 void CIDMParameterSet::set_Bias(CParameter* param) 00201 { 00202 m_Bias = *param; 00203 } 00204 00205 CParameter* CIDMParameterSet::get_Bias() 00206 { 00207 return &m_Bias; 00208 } 00209 00210 void CIDMParameterSet::set_DeltaAth(CParameter* param) 00211 { 00212 m_DeltaAth = *param; 00213 } 00214 00215 CParameter* CIDMParameterSet::get_DeltaAth() 00216 { 00217 return &m_DeltaAth; 00218 } 00219 00220 void CIDMParameterSet::setVehicleTypeID(int id) 00221 { 00222 m_VehicleTypeID = id; 00223 } 00224 00225 int CIDMParameterSet::getVehicleTypeID() const 00226 { 00227 return m_VehicleTypeID; 00228 } 00229 00230 // This function generates an IDM and returns it. 00231 // Usually to be called by a vehicle. 00232 IDM CIDMParameterSet::Generate() 00233 { 00234 IDM tempIDM; 00235 00236 tempIDM.set_T (m_T .Generate() ); 00237 tempIDM.set_A (m_A .Generate() ); 00238 tempIDM.set_B (m_B .Generate() ); 00239 tempIDM.set_S0 (m_S0 .Generate() ); 00240 tempIDM.set_S1 (m_S1 .Generate() ); 00241 tempIDM.set_V0 (m_V0 .Generate() ); 00242 tempIDM.set_Delta (m_Delta .Generate() ); 00243 tempIDM.set_Polite (m_Polite .Generate() ); 00244 tempIDM.set_Bias (m_Bias .Generate() ); 00245 tempIDM.set_DeltaAth(m_DeltaAth .Generate() ); 00246 00247 return tempIDM; 00248 }