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

bugfix in count_rating

v textech rozpracován popis výpočtu hodnocení

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/doprava/traffic_agent_offset.h

    r1118 r1120  
    158158                                do { 
    159159                                        k=min_i(t_cars_begin); 
    160  
    161160                                        if (k!=-1) {                                             
    162                                                 double a=cars_count(k); 
    163                                                 double b=t_cars_begin(k); 
    164                                                 double c=t_cars_end(k); 
    165  
    166161                                                //in case there are cars comming before t_green begin 
    167162                                                if (t_cars_begin(k)<t_act) { 
     
    175170                                                        } 
    176171                                                        else { 
    177                                                                 double pomer=(t_cars_begin(k)-t_act)/(t_cars_end(k)-t_cars_begin(k)); 
    178                                                                 virtual_queue+=cars_count(k)*pomer; 
     172                                                                double frac=(t_cars_begin(k)-t_act)/(t_cars_end(k)-t_cars_begin(k)); 
     173                                                                virtual_queue+=cars_count(k)*frac; 
    179174                                                                t_cars_begin(k)=t_act; 
    180175                                                        } 
     
    184179                                                                virtual_queue+=cars_count(k)-(t_cars_end(k)-t_act)/car_leaving; 
    185180                                                                t_act=t_cars_end(k); 
    186  
    187                                                                 cars_count.del(k); 
    188                                                                 t_cars_begin.del(k); 
    189                                                                 t_cars_end.del(k); 
    190181                                                        } 
    191182                                                        //if t_cars_end>=t_green_end 
     
    193184                                                                virtual_queue+=cars_count(k)-(t_green_end-t_act)/car_leaving; 
    194185                                                                t_act=t_green_end; 
    195  
    196                                                                 cars_count.del(k); 
    197                                                                 t_cars_begin.del(k); 
    198                                                                 t_cars_end.del(k);                                                       
    199186                                                        } 
     187                                                        //more cars than cars_count(k) couldn't pass without stopping 
     188                                                        if (virtual_queue < -cars_count(k)) { 
     189                                                                virtual_queue = -cars_count(k); 
     190                                                        } 
     191                                                        cars_count.del(k); 
     192                                                        t_cars_begin.del(k); 
     193                                                        t_cars_end.del(k); 
    200194                                                } 
    201195                                                //if t_cars_begin(k)>=t_act 
    202196                                                else { 
    203                                                         if (t_cars_end(k)<t_green_end) { 
    204                                                                 virtual_queue-=(t_cars_end(k)-t_act)/car_leaving; 
    205                                                                 t_act=t_cars_end(k); 
     197                                                        if (t_cars_begin(k)<t_green_end) { 
     198                                                                virtual_queue-=(t_cars_begin(k)-t_act)/car_leaving; 
     199                                                                t_act=t_cars_begin(k); 
    206200                                                        } 
    207201                                                        else { 
    208202                                                                virtual_queue-=(t_green_end-t_act)/car_leaving; 
    209203                                                                t_act=t_green_end; 
     204                                                        } 
     205                                                        // in case we managed to empty whole queue 
     206                                                        if (virtual_queue<0) { 
     207                                                                virtual_queue=0; 
    210208                                                        } 
    211209                                                } 
     
    220218                                                virtual_queue=0; 
    221219                                        } 
    222  
    223220                                } while (t_act<t_green_end); 
    224221                        } 
     
    762759                } 
    763760        } 
    764  
    765  
    766  
    767761}; 
    768762UIREGISTER(GreenWaveTrafficAgent);