root/applications/doprava/traffic_agent_cycle_time.h @ 1122

Revision 1076, 3.8 kB (checked in by jabu, 14 years ago)

Agent nastavujici delku cyklu

Line 
1#include "traffic_agent.cpp"
2const string testMessage = "test_message";
3
4class TrafficAgentCycleTime : public BaseTrafficAgent {
5private:
6        static double measurement_cycle_time; // s
7        static double saturated_stream; // car/s
8        static double Tc;
9        int cycle_counter;
10        Array <int> lane_sum;
11
12        void sum_lanes() {
13                for ( int i = 0; i < lane_sum.length(); i ++ ) {
14                        if ( inputs(2*i) > 0 ) {
15                                lane_sum(i) = lane_sum(i) + inputs(2*i);
16                        }
17                }
18        }
19
20        void echo ( string message ) {
21                cout << name << " hlasi: " << message << endl;         
22        }
23
24        void send2neighbour( Setting &set, int i, string messageName, double messageValue ) {           
25                if ( i < neighbours.length() ) {
26                        Setting &msg =set.add(Setting::TypeGroup);
27                        UI::save( neighbours(i), msg, "to" );
28                        UI::save (name,msg,"from");
29                        UI::save( messageName, msg, "what" );
30                        UI::save( messageValue, msg, "value" );
31                }
32                else {
33                        //throw new Exception("soused "+((string)i)+" neexistuje");
34                        //cout << endl << endl << "soused " << i << mimo
35                        std::stringstream out;
36                        out << "soused " << i << " neexistuje";
37                        //throw out.str();
38                        cout << out.str();
39                }
40        }
41
42        void printVector ( RV rv_vector, vec vector, string description ) {
43                cout << endl << description << " " << name << endl;
44                int k = 0;
45                for ( int i = 0; i < rv_vector.length(); i ++ ) {
46                        cout << rv_vector.name(i) << " : ";
47                        for ( int j = 0; j < rv_vector.size(i); j ++ ) {                               
48                                cout << vector(k) << " ";
49                                k ++;
50                        }
51                        cout << endl;
52                }
53                cout << endl;
54        }
55
56       
57
58public:
59        void from_setting( Setting &set ) {
60                BaseTrafficAgent::from_setting(set);
61                TrafficAgentCycleTime::measurement_cycle_time = 90; //s
62                TrafficAgentCycleTime::saturated_stream = 0.5;
63                TrafficAgentCycleTime::Tc = 80;
64        }
65
66        void broadcast(Setting &set){
67                //BaseTrafficAgent::broadcast(set);
68                try {
69                        for ( int i = 0; i < neighbours.length(); i ++ ) {
70                                send2neighbour( set, i, testMessage, 2.3 );                             
71                        }
72                } catch ( string s ) {
73                        cout << s << endl;
74                }               
75        }
76
77        void receive(const Setting& msg){
78                string what;
79                string from;
80                string to;
81                double val;
82                try {
83                        UI::get(what, msg, "what", UI::compulsory);
84                        UI::get(from, msg, "from", UI::compulsory);
85                        UI::get(to, msg, "to", UI::compulsory);
86                        UI::get(val, msg, "value");
87                        if ( what == testMessage ) {
88                                //cout << endl << name << ": OD: " << from << " CO: " << what << " KOLIK: " << val <<endl;
89                        }
90                        if ( what == "new_stable_state" ) {
91                                //echo("new_stable_state");
92                                BaseTrafficAgent::receive(msg);         
93                        }
94
95                       
96                } catch ( UISettingException e ) {
97                        echo(e.what());
98                }
99        }
100
101        void validate (){
102                BaseTrafficAgent::validate();
103                lane_sum.set_size( rv_inputs.length() );
104                for ( int i = 0; i < lane_sum.length(); i ++ ) {
105                        lane_sum(i) = 0;
106                        cout << endl << endl << "lane_sum initialization " << name << " " << lane_sum(i) <<endl << endl ;
107                }
108                echo("validate");
109        }
110
111        void adapt (const vec &glob_dt) {
112                sum_lanes();
113                //printVector( rv_queues, queues, "queues" );
114                printVector( rv_inputs, inputs, "inputs" );
115                for ( int i = 0; i < lane_sum.length(); i ++ ) {
116                        cout << lane_sum(i) << endl;
117                }
118                cout << endl << endl;
119                //printVector( green_names, green_times, "inputs" );
120                //cout << endl << name << "green times: " << endl;
121                for ( int i = 0; i < green_times.length(); i ++ ) {
122                        //cout << green_names(i) << " " << green_starts(i) << " " << green_times(i) << endl;
123                }
124
125               
126/*
127                for ( int i = 0; i < outputs.length(); i ++ ) {
128                        cout << name << " outputs " << outputs(i) << endl;
129                }
130
131                for ( int i = 0; i < rv_outputs.length(); i ++ ) {
132                        cout << name << " rv_outputs " << rv_outputs.name(i) << endl;
133                }
134
135        */     
136
137                BaseTrafficAgent::adapt(glob_dt);
138                //echo("adapted");
139        }
140
141        void act (vec &glob_ut){
142               
143        }
144       
145
146};
147UIREGISTER(TrafficAgentCycleTime);
Note: See TracBrowser for help on using the browser.