root/applications/doprava/main_loop.cpp @ 901

Revision 901, 2.7 kB (checked in by smidl, 14 years ago)

compile

Line 
1
2/*!
3\file
4\brief Distributed Traffic light Control Scenario
5\author Vasek Smidl
6
7 */
8
9#include "base/user_info.h"
10#include "base/loggers.h"
11#ifdef _WIN32
12#include "aimsun_bdm/aimsun_ds.h"
13#else
14#include "aimsun_bdm/aimsun_fake.h"
15#endif
16#include "traffic_agent.h"
17
18using namespace bdm;
19
20int main ( int argc, char* argv[] ) {
21        const char *fname;
22        if ( argc>1 ) {fname = argv[1]; }
23        else { cout << "Missing configuration file.\n Usage: \n $> estimator config_file.cfg"<<endl; abort(); }
24        UIFile Cfg ( fname );
25
26        // SYSTEM TO CONTROL
27        AimsunDS Ds;
28        UI::get(Ds, Cfg, UI::compulsory ); // Mostly hard-coded so far
29        Ds.validate();
30
31        // AGENTS
32        Array<shared_ptr<Participant> > Ags;
33        UI::get ( Ags,Cfg, "agents" );
34
35        // LOGGER
36        shared_ptr<logger> L = UI::build <logger>( Cfg, "logger" );
37        if (!L) {L=new stdlog();} // DEFAULT LOGGER <== poor choice, use better ones
38
39        Config MsgStore;
40        MsgStore.setAutoConvert(true);
41        Setting& Queue = MsgStore.getRoot().add("queue", Setting::TypeList);
42
43        // REGISTER ACTIVE OBJECTS IN LOGGER
44        Ds.log_register ( *L, "DS" );
45        for ( int i=0; i<Ags.length(); i++ ) {
46                Ags ( i )->log_register ( *L,Ags(i)->_name() ); // estimate
47                Ags ( i )->ds_register(Ds);            // allows agents to update their datalinks
48        }
49        L->init();
50
51        vec glob_dt(Ds._drv()._dsize() );
52        vec glob_ut(Ds._urv()._dsize() );
53
54        // INITIALISATION OF UT
55        glob_ut[ 0] = 80; // cycle time
56        glob_ut[ 1] = 60; // offset 495
57        glob_ut[ 2] = 30; // ut[2]+ut[3]+ut[4] has to sum up to ut[0]
58        glob_ut[ 3] = 30;
59        glob_ut[ 4] = 20;
60    glob_ut[ 8] = 40; // offset 601
61        glob_ut[ 9] = 30; // ut[9]+ut[10]+ut[11] has to sum up to ut[0]
62        glob_ut[10] = 30;
63        glob_ut[11] = 20;
64
65        for ( int tK=0; tK < Ds.max_length(); tK++ ) {
66                Ds.log_write ( ); // write stuff to
67                Ds.getdata(glob_dt);
68               
69                for ( int i=0; i<Ags.length(); i++ ) {
70                        Ags(i) -> adapt(glob_dt);
71                }
72                for ( int i=0; i<Ags.length(); i++ ) {
73                        Ags(i) -> broadcast(Queue);
74                }
75                //DBG
76                MsgStore.writeFile("xxx");
77                // parse message queue
78                for ( int m=Queue.getLength()-1; m>=0; m-- ) { // go backwards - last mesages are discarded
79                        for ( int i=0; i<Ags.length(); i++ ) {
80                                Setting& msg=Queue[m];
81                                string m_to=msg["to"];
82                                if (m_to==Ags(i)->_name()) {
83                                        Ags(i)->receive(msg);
84                                        Queue.remove(m);
85                                        break;
86                                        // message delivered;
87                                }
88                        }
89                }
90                if (Queue.getLength()>0){bdm_error("undelivered messages - probably unknown neighbours");}
91               
92                for ( int i=0; i<Ags.length(); i++ ) {
93                        Ags(i) -> act(glob_ut);
94                }
95               
96                L->step();
97                Ds.write(glob_ut);
98                Ds.step();                                                      // simulator step
99               
100                for ( int i=0; i<Ags.length(); i++ ) {
101                        Ags(i) -> log_write();
102                        Ags(i) -> step();
103                }
104               
105        }
106
107        L->finalize();
108
109        return 0;
110}
Note: See TracBrowser for help on using the browser.