/*! \file \brief Distributed Traffic light Control Scenario \author Vasek Smidl */ #include "base/user_info.h" #include "base/loggers.h" #include "aimsun_bdm/aimsun_ds.h" #include "traffic_agent.h" using namespace bdm; int main ( int argc, char* argv[] ) { const char *fname; if ( argc>1 ) {fname = argv[1]; } else { cout << "Missing configuration file.\n Usage: \n $> estimator config_file.cfg"< > Ags; UI::get ( Ags,Cfg, "agents" ); // LOGGER shared_ptr L = UI::build ( Cfg, "logger" ); if (!L) {L=new stdlog();} // DEFAULT LOGGER <== poor choice, use better ones Config MsgStore; MsgStore.setAutoConvert(true); Setting& Queue = MsgStore.getRoot().add("queue", Setting::TypeList); // REGISTER ACTIVE OBJECTS IN LOGGER Ds.log_register ( *L, "DS" ); for ( int i=0; ilog_register ( *L,Ags(i)->_name() ); // estimate Ags ( i )->ds_register(Ds); // allows agents to update their datalinks } L->init(); vec glob_dt(Ds._drv()._dsize() ); vec glob_ut(Ds._urv()._dsize() ); for ( int tK=0;tK adapt(glob_dt); } for ( int i=0; i broadcast(Queue); } // parse message queue for ( int m=Queue.getLength()-1; m>=0; m-- ) { // go backwards - last mesages are discarded for ( int i=0; i_name()) { Ags(i)->receive(msg); Queue.remove(m); break; // message delivered; } } } if (Queue.getLength()>0){bdm_error("undelivered messages - probably unknown neighbours");} for ( int i=0; i act(glob_ut); } L->step(); Ds.write(glob_ut); Ds.step(); // simulator step for ( int i=0; i step(); } } L->finalize(); return 0; }