Show
Ignore:
Timestamp:
07/07/10 11:04:06 (14 years ago)
Author:
ondrak
Message:

very small code cleaning

+texty

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/doprava/traffic_agent_offset.h

    r1120 r1127  
    2424        vec next_exps; 
    2525 
     26        //! expectations recieved from neighbours 
    2627        RV rv_recieved_changes; 
    2728        vec recieved_changes; 
    2829 
    29         //! name of agent, whose change we have accepted 
    30         string accepted_from; 
    31  
    32         //TODO currently useless list of neighbours asking for expectations 
    33         list<string> seznam; 
     30        //! list of agents, who request expected cars 
     31        list<string> requesters; 
    3432         
    3533        double car_leaving; //s; how long is 1 car leaving queue 
     
    4038        bool send_requests; 
    4139        bool final_state; 
    42         //bool reset_negot_offset; 
    43  
     40         
     41        //! determines wheteher agent actively communicates 
    4442        int passive; 
    4543 
     
    5856                datalink exp2outputs; 
    5957                vec exp; 
     58                string group_name; 
     59                double green_time; 
     60                int index; 
    6061 
    6162                for (int i=0;i<lanes.length();i++) { 
    6263                        for (int j=0;j<lanes(i).outputs.length();j++) { 
    6364                                if (lanes(i).outputs(j)!="DUMMY_DET") { 
    64                                         string group = name+"_"+lanes(i).sg;            //e.g. 495_VA 
     65                                        group_name = name+"_"+lanes(i).sg;              //e.g. 495_VA 
    6566                                         
    66                                         int index=group_index(group); 
    67                                          
    68                                         double green_time=green_times(index)*cycle_length; 
    69  
    70                                         //ivec green_index=rv_inputs.dataind(RV(group,1)); 
    71                                         //vec green_time=inputs(green_index); 
    72  
    73                                         //cout << "Green time "<<green_time<<endl; 
     67                                        index=group_index(group_name); 
     68                                        green_time=green_times(index)*cycle_length; 
    7469 
    7570                                        rv_exp=RV(lanes(i).outputs(j)+"-"+name+"_"+to_string(i),3); 
    76  
    7771                                        exp.set_size(rv_exp._dsize()); 
    7872                                        exp2outputs.set_connection(rv_exp,rv_outputs); 
     
    8882                                        //TODO pushup az na konec 
    8983                                        exp2outputs.pushup(outputs,exp); 
    90  
    9184                                }                        
    9285                        } 
     
    9588 
    9689        //! counts planned rating using offset and recieved_exps 
    97         double count_rating(const int offset) { 
     90        double count_rating(const int offset, const vec recieved_exps, const RV rv_recieved_exps) { 
    9891                double virtual_queue; 
    9992                double t_green_begin; 
     
    10396                vec t_cars_end; 
    10497                bool found; 
     98                ivec ind; 
     99                string group_name; 
    105100 
    106101                double rating=0.0; 
    107  
    108                 RV rv_vector; 
    109                 vec vector; 
    110102 
    111103                for (int i=0;i<lanes.length();i++) { 
     
    113105                        //Finding, if we have some expectations 
    114106                        found=false; 
    115                          
    116107                        for (int k=0;k<lanes(i).inputs.length();k++) {  
    117108                                int l=0;                 
     
    125116                                                cars_count.set_size(l+1,true); 
    126117 
    127  
    128                                                 rv_vector = RV(rv_recieved_exps.name(j),3); 
    129                                                 ivec ind = rv_vector.dataind(rv_recieved_exps); 
     118                                                ind = RV(rv_recieved_exps.name(j),3).dataind(rv_recieved_exps); 
    130119 
    131120                                                cars_count(l)=recieved_exps(ind(0)); 
     
    137126                                        } 
    138127                                } 
    139  
    140128                        } 
    141129                        if (found) {                     
    142130 
    143131                                //counting rating 
    144                                 string group = name+"_"+lanes(i).sg;            //e.g. 495_VA 
    145                                 int index=group_index(group); 
     132                                group_name = name+"_"+lanes(i).sg;              //e.g. 495_VA 
     133                                int index=group_index(group_name); 
    146134 
    147135                                t_green_begin=green_starts(index) + offset; 
    148                                 double green_time=green_times(index)*cycle_length; 
    149                                 t_green_end=t_green_begin+green_time; 
     136                                t_green_end=t_green_begin + green_times(index)*cycle_length; 
    150137 
    151138                                /************** counting with all exps ****************/ 
     
    235222                int new_center; 
    236223 
    237                 rating_p=count_rating(center+interval); 
    238                 rating_c=count_rating(center); 
    239                 rating_n=count_rating(center-interval); 
     224                rating_p=count_rating(center+interval, recieved_exps, rv_recieved_exps); 
     225                rating_c=count_rating(center, recieved_exps, rv_recieved_exps); 
     226                rating_n=count_rating(center-interval, recieved_exps, rv_recieved_exps); 
    240227 
    241228                new_center=center; 
     
    260247        } 
    261248 
    262         //! finds if changing neighbour's offset could have positive effect, returns found offset change 
     249        //! finds if changing neighbour's offset could have positive effect, returns found offset change and stores chage of rating to rating_change 
    263250        int find_best_exps(const int offset_change, const string neighbour, double &rating_change) { 
    264251                //! expectations recieved from neighbour 
     
    268255                //! expactations after negative change of neighbour's offset 
    269256                vec negative_exps; 
    270                 //! rating if offset is rised 
     257                //! rating if offset is raised 
    271258                double rating_p; 
    272259                //! rating if offset is unchaged 
     
    285272                                ivec ind = RV(rv_recieved_exps.name(j),3).dataind(rv_recieved_exps); 
    286273 
    287                                 rating_n=count_rating(planned_offset); 
    288  
    289274                                positive_exps(ind(1))+=offset_change; 
    290275                                positive_exps(ind(2))+=offset_change; 
     
    295280                } 
    296281 
    297                 rating_c=count_rating(planned_offset); 
    298  
    299                 recieved_exps=positive_exps; 
    300                 rating_p=count_rating(planned_offset); 
    301  
    302                 recieved_exps=negative_exps; 
    303                 rating_n=count_rating(planned_offset); 
    304  
    305                 recieved_exps=original_exps; 
     282                rating_c=count_rating(planned_offset, recieved_exps, rv_recieved_exps); 
     283                rating_p=count_rating(planned_offset, positive_exps,  rv_recieved_exps); 
     284                rating_n=count_rating(planned_offset, negative_exps,  rv_recieved_exps); 
    306285 
    307286                int max_index=max_i_of_three(rating_p,rating_c,rating_n); 
     
    324303        } 
    325304 
    326         // pravdepodobne s chybou, momentalne se nepouziva 
    327         void split_exps() { 
    328                 ivec ind; 
    329                 RV rv_exp; 
    330                 datalink recieved2next; 
    331  
    332                 rv_next_exps=RV(); 
    333                 for (int i=0;i<rv_recieved_exps.length();i++) { 
    334                         if (rv_recieved_exps.size(i)==3) {               
    335                                 rv_exp=RV(rv_recieved_exps.name(i),3); 
    336                                 ind = rv_exp.dataind(rv_recieved_exps); 
    337                                 //cout << "ind " << ind << endl; 
    338  
    339                                 int next_cycle_end=2 * cycle_length - (actual_time % cycle_length); 
    340                                 if (recieved_exps(ind(1))>next_cycle_end) { 
    341                                         rv_next_exps.add(rv_exp); 
    342                                         next_exps.set_size(rv_next_exps._dsize()); 
    343                                          
    344                                         if (actual_time==630) { 
    345                                                 cout << "rv_next_exps " << rv_next_exps.to_string() << endl; 
    346                                                 cout << "rv_recived_exps " << rv_recieved_exps.to_string() << endl; 
    347                                         } 
    348  
    349                                         recieved2next.set_connection(rv_next_exps,rv_recieved_exps); 
    350                                         recieved2next.filldown(recieved_exps,next_exps); 
    351                                         rv_recieved_exps=rv_recieved_exps.subt(rv_exp); 
    352                                 } 
    353                                 else if (recieved_exps(ind(2))>next_cycle_end) { 
    354                                         rv_next_exps.add(rv_exp); 
    355                                         next_exps.set_size(rv_next_exps._dsize()); 
    356  
    357                                         ivec ind2=rv_exp.dataind(rv_next_exps); 
    358                                         next_exps(ind2(0))=recieved_exps(ind(0)); //TODO to neni spravne 
    359                                         next_exps(ind2(1))=next_cycle_end;  
    360                                         next_exps(ind2(2))=recieved_exps(ind(2)); 
    361                                         recieved_exps(ind(2))=next_cycle_end; 
    362                                 } 
    363                         } 
    364                 } 
    365         } 
    366  
    367         //! returns index of signal group group 
     305        //! returns index of signal group "group" 
    368306        int group_index(const string group) { 
    369307                for (int i=0;i<green_names.length();i++) { 
     
    404342        } 
    405343 
    406  
    407          
    408         //! returns value shifted to fit interval <0;cycle_length> 
    409         //currently not in use 
    410         template<class T> T normalize(T time) { 
    411                 while (time<0 && time<cycle_length) { 
    412                         if (time<0) { 
    413                                 time+=cycle_length; 
    414                         } 
    415                         else { 
    416                                 time-=cycle_length; 
    417                         } 
    418                 } 
    419                 return time; 
    420         } 
    421  
    422344        //! converts t to string 
    423345        template <class T> inline string to_string (const T& t) 
     
    462384        //! actual planned offset to set for next simulation step 
    463385        int planned_offset; 
    464         //! planned offset for cycle after next cycle 
    465         int planned_next_offset; 
    466386        //! rating of actual planned offset 
    467         double planned_rating; 
    468         //! rating of planned next offset 
    469         double planned_next_rating;      
     387        double planned_rating;   
    470388        //! avarage speed of cars 
    471389        int VP; 
    472390 
    473391        void validate() { 
    474                 rv_action = RV(name+"_offset", 1); // <======= example 
     392                rv_action = RV(name+"_offset", 1); 
    475393 
    476394                for (int i=0; i<green_names.length();i++) { 
     
    510428                        for (int i=0; i<neighbours.length(); i++){ 
    511429                                Setting &msg =set.add(Setting::TypeGroup); 
    512  
    513430                                UI::save ( neighbours(i), msg, "to"); 
    514431                                UI::save (name,msg,"from"); 
     
    519436 
    520437                // broadcast expected cars 
    521                 if (!seznam.empty()) { 
     438                if (!requesters.empty()) { 
    522439                        double a; 
    523440                        expected_cars(); 
    524441                        do { 
    525442                                Setting &msg =set.add(Setting::TypeGroup); 
    526                                 UI::save ( seznam.back(), msg, "to"); 
     443                                UI::save ( requesters.back(), msg, "to"); 
    527444                                UI::save ( name, msg, "from"); 
    528445                                UI::save ( (string)"new_expected_cars", msg, "what"); 
    529446                                UI::save ( &(rv_outputs), msg, "rv"); 
    530447                                UI::save ( outputs, msg, "value"); 
    531                                 seznam.pop_back(); 
     448                                requesters.pop_back(); 
    532449                                a=outputs (10); 
    533                                  
    534                         } while (!seznam.empty());                       
     450                        } while (!requesters.empty());                   
    535451                } 
    536452 
     
    542458                                UI::save ( neighbours(i), msg, "to"); 
    543459                                UI::save ( name, msg, "from"); 
    544                                 UI::save ( (string)"new_stable_state2", msg, "what"); 
     460                                UI::save ( (string)"stable_state", msg, "what"); 
    545461                                UI::save ( &(rv_outputs), msg, "rv"); 
    546462                                UI::save ( outputs, msg, "value"); 
     
    561477                        send_requests=false; 
    562478                } 
    563  
    564                 /*if (reset_negot_offset) { 
    565                         for (int i=0;i<neighbours.length();i++) { 
    566                                 Setting &msg = set.add(Setting::TypeGroup); 
    567                                 UI::save ( neighbours(i), msg, "to"); 
    568                                 UI::save ( name, msg, "from"); 
    569                                 UI::save ( (string)"reset_negot_offset", msg, "what"); 
    570                         } 
    571                 }*/ 
    572  
    573  
    574                  
    575                 // reached final offset. Log value? 
     479         
     480                // reached final offset. 
    576481                if (final_state) { 
    577                         cout << "Jmenuji se "<<name<< " a skoncil jsem na offsetu " << planned_offset << " s hodnocenim " << planned_rating <<endl; 
    578482                        final_state=false; 
    579483                } 
     
    583487                string what; 
    584488                string to; 
    585  
    586489                string from; 
    587490                vec value; 
     
    595498                 
    596499                if (what=="expected_times_request"){  
    597                         seznam.push_back(from); 
     500                        requesters.push_back(from); 
    598501                }  
    599502                else if (what=="new_expected_cars") { 
    600503                        rv_recieved_exps=*rv; 
    601504                        recieved_exps=value; 
    602                         //split_exps(); 
    603                          
    604505                         
    605506                        if (!passive) { 
    606                                 last_offset=planned_offset; 
    607507                                planned_offset=find_best_offset(planned_offset,8); 
    608508                                planned_offset=normalize_offset(planned_offset); 
    609509                        } 
     510 
     511                        planned_rating=count_rating(planned_offset, recieved_exps, rv_recieved_exps); 
    610512                         
    611  
    612                         /*if (planned_offset!=last_offset) { 
    613                                 reset_negot_offset=true; 
    614                         }*/ 
    615  
    616                         planned_rating=count_rating(planned_offset); 
    617513                        // we have new stable state to broadcast 
    618514                        new_stable_state=true; 
    619515                } 
    620                 else if (what=="new_stable_state2") { 
     516                else if (what=="stable_state") { 
    621517                        rv_recieved_exps=*rv; 
    622518                        recieved_exps=value; 
    623                         //split_exps(); 
    624                         planned_rating=count_rating(planned_offset); 
     519 
     520                        planned_rating=count_rating(planned_offset, recieved_exps, rv_recieved_exps); 
    625521 
    626522                        if (!passive) { 
    627  
    628523                                for (int i=0;i<neighbours.length();i++) { 
    629524                                        rv_change_request.add(RV(neighbours(i)+"_change",2)); 
    630525                                        change_request.set_size(rv_change_request._dsize());  
    631526                                        ivec ind=RV(neighbours(i)+"_change",2).dataind(rv_change_request); 
     527                                         
    632528                                        // offset change 
    633529                                        change_request(ind(0))=find_best_exps(negot_offset,neighbours(i),rating_change); 
     
    636532                                } 
    637533 
    638                                 if (negot_offset>negot_limit) {  
     534                                if (negot_offset>=negot_limit) {  
    639535                                        negot_offset/=2; 
    640536                                        send_requests=true; 
     
    642538                                else { 
    643539                                        final_state=true; 
    644  
    645540                                } 
    646541                        } 
     
    659554                                ivec ind=RV(rv_recieved_changes.name(i),2).dataind(rv_recieved_changes); 
    660555 
    661                                 final_rating_diff=-planned_rating+count_rating(planned_offset+(int)recieved_changes(ind(0)))+recieved_changes(ind(1)); 
     556                                final_rating_diff=-planned_rating+count_rating(planned_offset+(int)recieved_changes(ind(0)), recieved_exps, rv_recieved_exps)+recieved_changes(ind(1)); 
    662557                                if (final_rating_diff>=0) { 
    663558                                        planned_offset+=(int)recieved_changes(ind(0)); 
    664559                                        planned_offset=normalize_offset(planned_offset); 
    665560                                        planned_rating+=final_rating_diff; 
    666                                         accepted_from=from; 
    667                                 } 
    668                         } 
    669                         //need_exps=true;s 
     561                                } 
     562                        } 
     563 
    670564                        new_stable_state=true; 
    671565                } 
    672                 /*else if (what=="reset_negot_offset") { 
    673                         negot_offset=8; 
    674                 }*/ 
    675566                else { 
    676567                        BaseTrafficAgent::receive(msg); 
     
    684575 
    685576        void from_setting(const Setting &set) { 
     577                RV rv_exp; 
     578 
    686579                BaseTrafficAgent::from_setting(set); 
    687  
    688                 RV rv_exp; 
    689580 
    690581                car_leaving=2; 
     
    701592                passive=0; 
    702593                 
    703                 // load from file 
    704                 //UI::get(sgs, set, "sgs", UI::compulsory);      
    705  
    706                 //UI::get(green_starts, set, "green_starts", UI::compulsory); 
    707594                UI::get(last_offset, set, "offset", UI::compulsory); 
    708595                UI::get(passive, set, "passive", UI::optional); 
     
    723610        void act(vec &glob_ut){ 
    724611                if (negot_cycle==cycle_count) { 
    725                  
    726612                        vec action; 
    727613                        action.set_size(rv_action._dsize()); 
    728614                 
    729                         ivec index = rv_action.dataind(RV(name+"_offset",1)); 
     615                        ivec index = RV(name+"_offset",1).dataind(rv_action); 
    730616 
    731617                        action(index(0))=normalize_offset(total_offset/cycle_count, false); 
     
    734620                        total_offset=0; 
    735621                        negot_cycle=1; 
    736  
    737622                } 
    738623                else { 
    739624                        total_offset+=planned_offset; 
    740  
    741625                        negot_cycle++; 
    742626                } 
    743  
    744627                last_offset=planned_offset; 
     628        } 
     629 
     630        void step() { 
    745631                actual_time+=step_length; 
    746632        } 
     
    748634        void log_register(logger &l, const string &prefix){ 
    749635                if ( log_level[logoffset]){ 
    750                         l.add_vector ( log_level, logoffset, RV("mujoffset",1), prefix );       //TODO  
     636                        l.add_vector ( log_level, logoffset, RV("1",2), "x"+prefix );   //TODO  
    751637                } 
    752638        } 
    753639        void log_write() const { 
    754640                if (log_level[logoffset]){ 
    755                         vec offset_vec(1); 
    756                         offset_vec(0)=(double)planned_offset; 
    757                         log_level.store(logoffset, offset_vec); 
    758                         //log_level.store(logoffset, planned_rating); 
    759                 } 
    760         } 
     641                        vec offset_vec(2); 
     642                        offset_vec(0)=planned_offset; 
     643                        offset_vec(1)=planned_rating; 
     644                        log_level.store(logoffset, offset_vec);                  
     645                } 
     646        }  
    761647}; 
    762648UIREGISTER(GreenWaveTrafficAgent);