Changeset 1146 for applications/doprava

Show
Ignore:
Timestamp:
07/21/10 00:43:16 (14 years ago)
Author:
ondrak
Message:

bugfix - average speed conversion
bugfix - negot_offset now correctly resets every cycle
now agent don't act in first cycles, before getting correct values from detectors
final version used in thesis (including cfg file)

Location:
applications/doprava
Files:
1 removed
2 modified

Legend:

Unmodified
Added
Removed
  • applications/doprava/Zlicingw.cfg

    r1136 r1146  
    1818        stage_names = ("495_F1","495_F2","495_F3"); 
    1919        stage_times = [30,30,20]; 
    20         passive=0; 
    21         VP=40;                                  //average speed of cars 
     20        passive=1; 
     21        VP=45;                                  //average speed of cars 
    2222        car_leaving_time=2;     //time cars need to leave queue 
    2323        cycle_count=5;                  //number of complete negotiation cycles before making avarage offset and sending it to Aimsun 
     
    4747        stage_names = ("601_F1","601_F2","601_F3"); 
    4848        stage_times = [30,30,20]; 
    49         passive=1; 
    50         VP=40;                                  //average speed of cars 
     49        passive=0; 
     50        VP=45;                                  //average speed of cars 
    5151        car_leaving_time=2;     //time cars need to leave queue 
    5252        cycle_count=5;                  //number of complete negotiation cycles before making avarage offset and sending it to Aimsun 
  • applications/doprava/traffic_agent_offset.h

    r1136 r1146  
    88        double rating_change; 
    99        int negot_start; 
     10        int negot_offset; 
    1011        int negot_limit; 
    1112 
     
    8889                                        exp(0)=lanehs(i)->expected_output(green_time)*lanes(i).alpha(j) / green_time;    
    8990 
    90                                         start_time = green_starts(group_index(name+"_"+lanes(i).sg)) + lanes(i).output_distances(j)/VP + planned_offset; 
     91                                        start_time = green_starts(group_index(name+"_"+lanes(i).sg)) + (3.6*lanes(i).output_distances(j))/(VP) + planned_offset; 
    9192                                        //first car arrive time 
    9293                                        exp(1)=start_time; 
     
    324325 
    325326                rating_c=count_rating(planned_offset, recieved_exps, rv_recieved_exps); 
    326                 rating_p=count_rating(planned_offset, positive_exps,  rv_recieved_exps); 
    327                 rating_n=count_rating(planned_offset, negative_exps,  rv_recieved_exps); 
    328  
     327                rating_p=count_rating(planned_offset, positive_exps, rv_recieved_exps); 
     328                rating_n=count_rating(planned_offset, negative_exps, rv_recieved_exps); 
     329                 
    329330                int max_index=max_i_of_three(rating_p,rating_c,rating_n); 
    330331                switch (max_index) { 
     
    464465 
    465466                planned_offset=last_offset; 
     467                planned_rating=0; 
    466468                 
    467469                //set state variables to default values 
     
    470472                send_requests=false; 
    471473                need_exps=true; 
    472                 negot_start=4; 
     474                negot_offset=negot_start; 
     475 
     476                if (actual_time/cycle_length<2) { 
     477                        need_exps=false; 
     478                        final_state=true;                
     479                } 
    473480        } 
    474481 
     
    488495                // broadcast expected cars 
    489496                if (!requesters.empty()) { 
    490                         double a; 
    491497                        expected_cars(); 
    492498                        do { 
     
    498504                                UI::save ( outputs, msg, "value"); 
    499505                                requesters.pop_back(); 
    500                                 a=outputs (10); 
    501506                        } while (!requesters.empty());                   
    502507                } 
     
    578583                                         
    579584                                        // offset change 
    580                                         change_request(ind(0))=find_best_exps(negot_start,neighbours(i),rating_change); 
     585                                        change_request(ind(0))=find_best_exps(negot_offset,neighbours(i),rating_change); 
    581586                                        // rating change 
    582587                                        change_request(ind(1))=rating_change; 
    583588                                } 
    584589 
    585                                 if (negot_start>=negot_limit) {  
    586                                         negot_start/=2; 
     590                                if (negot_offset>negot_limit) {  
     591                                        negot_offset/=2; 
    587592                                        send_requests=true; 
    588593                                } 
     
    597602                else if (what=="offset_change_request") { 
    598603                        double final_rating_diff; 
     604                         
     605                        planned_rating=count_rating(planned_offset, recieved_exps, rv_recieved_exps); 
    599606 
    600607                        rv_recieved_changes=*rv; 
     
    602609 
    603610                        for (int i=0;i<rv_recieved_changes.length();i++) { 
    604  
    605611                                ivec ind=RV(rv_recieved_changes.name(i),2).dataind(rv_recieved_changes); 
    606  
    607612                                final_rating_diff=-planned_rating+count_rating(planned_offset+(int)recieved_changes(ind(0)), recieved_exps, rv_recieved_exps)+recieved_changes(ind(1)); 
     613 
    608614                                if (final_rating_diff>=0) { 
    609615                                        planned_offset+=(int)recieved_changes(ind(0)); 
     
    612618                                } 
    613619                        } 
    614  
    615620                        new_stable_state=true; 
    616621                } 
     
    648653                 
    649654                UI::get(last_offset, set, "offset", UI::compulsory); 
     655                 
     656                //optional reading parameters from config 
    650657                UI::get(passive, set, "passive", UI::optional); 
    651                 UI::get(car_leaving_time, set, "car_leaving_time", UI::compulsory); 
     658                UI::get(car_leaving_time, set, "car_leaving_time", UI::optional); 
    652659                UI::get(VP, set, "VP", UI::optional); 
    653660                UI::get(cycle_count, set, "cycle_count", UI::optional); 
     
    697704        void log_register(logger &l, const string &prefix){ 
    698705                if ( log_level[logoffset]){ 
    699                         l.add_vector ( log_level, logoffset, RV("1",2), "x"+prefix );   //TODO  
     706                        l.add_vector ( log_level, logoffset, RV("a",2), "x"+prefix ); 
    700707                } 
    701708        }