Show
Ignore:
Timestamp:
05/14/10 01:35:51 (14 years ago)
Author:
ondrak
Message:

greenwave agents sending and receiving some expectations
very basic expected_output counting in Lane_Handler

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/doprava/traffic_agent_offset.h

    r927 r941  
     1#include <map> 
     2 
    13class GreenWaveTrafficAgent : public BaseTrafficAgent { 
    24protected: 
    35        double stable_state_loss; 
     6        double best_offset; 
     7        map<string,double> expected; 
     8        map<string,double>::iterator expected_i; 
    49         
    5         double best_offset; 
     10        //counts all expected cars to "dest" 
     11        double expected_cars(const string dest) { 
     12 
     13                double expected=0.0; 
     14 
     15                //finds lanes which lead to "dest" 
     16                for (int i=0;i<lanes.length();i++) { 
     17                        for (int j=0;j<lanes(i).outputs.length();j++) { 
     18                                if (lanes(i).outputs(j).substr(0,3)==dest) { 
     19                                        //we have some matching outputs, count cars 
     20                                        string group = name+"_"+lanes(i).sg; 
     21                                        ivec index=rv_greentimes.dataind(RV(group,1)); 
     22                                        vec green_time=greentimes(index); 
     23 
     24                                        expected+=lanehs(i)->expected_output(green_time(0)); 
     25                                         
     26                                } 
     27                        } 
     28                } 
     29                return expected; 
     30        } 
     31 
    632public: 
     33        datalink ds2greentimes; 
     34        vec greentimes; 
     35        RV rv_greentimes; 
     36         
     37        //! array of existing signal groups 
     38        Array<string> sgs; 
     39 
    740        void validate() { 
    841                BaseTrafficAgent::validate(); 
    942                action_rv = RV(name+"_offset", 1); // <======= example 
     43 
     44                for (int i=0; i<sgs.length();i++) { 
     45                        rv_greentimes.add(RV(name+"_"+sgs(i),1)); 
     46                } 
    1047        } 
    11         void GreeWaveTrafficAgent(); 
     48 
     49        void adapt(const vec &glob_dt) { 
     50                BaseTrafficAgent::adapt(glob_dt); 
     51                                 
     52                ds2greentimes.filldown(glob_dt,greentimes); 
     53        } 
     54 
     55        void broadcast(Setting& set){ 
     56                         
     57                //ask neighbours for exptected arrive times 
     58                if (true) { 
     59                        for (int i=0; i<neighbours.length(); i++){ 
     60                                Setting &msg =set.add(Setting::TypeGroup); 
     61 
     62                                UI::save ( neighbours(i), msg, "to"); 
     63                                UI::save (name,msg,"from"); 
     64                                UI::save ( (string)"expected_times_request", msg, "what"); 
     65                        } 
     66                } 
     67 
     68 
     69                // broadcast expected cars 
     70                while (!expected.empty()) { 
     71                        expected_i=expected.begin(); 
     72 
     73                        Setting &msg =set.add(Setting::TypeGroup); 
     74 
     75                        UI::save ( expected_i->first, msg, "to"); 
     76                        UI::save ( name, msg, "from"); 
     77                        UI::save ( (string)"new_expected_cars", msg, "what"); 
     78                        //UI::save ( &(rv_neighbours_out(i)), msg, "rv"); 
     79                        UI::save(expected_i->second, msg, "value"); 
     80                        expected.erase(expected_i); 
     81                } 
     82 
     83        } 
     84 
     85        void receive(const Setting &msg){ 
     86                string what; 
     87                string to; 
     88                string from; 
     89                double value; 
     90                 
     91 
     92                UI::get(what, msg, "what", UI::compulsory); 
     93                UI::get(to, msg, "to", UI::compulsory); 
     94                UI::get(from, msg, "from"); 
     95                UI::get(value, msg, "value"); 
     96                if (what=="expected_times_request"){   
     97                        expected[from]=expected_cars(from); 
     98                }  
     99                else if (what=="new_expected_cars") { 
     100                        cout << "Jsem "<< name << " a dostal jsem od "<< from << " predpoklad: " << value << endl; 
     101                        //expected=0; 
     102                } 
     103                else { 
     104                        BaseTrafficAgent::receive(msg); 
     105                } 
     106        } 
     107         
     108        void ds_register(const DS &ds) { 
     109                BaseTrafficAgent::ds_register(ds); 
     110                ds2greentimes.set_connection(rv_greentimes, ds._drv()); 
     111        } 
     112 
     113        void from_setting(const Setting &set) { 
     114                BaseTrafficAgent::from_setting(set); 
     115                        // load from file 
     116                 
     117                UI::get(sgs, set, "sgs", UI::compulsory);        
     118         
     119        } 
    12120}; 
    13121UIREGISTER(GreenWaveTrafficAgent);