def rate_observed(self) :
     # convenience
     horizon = self.horizon
     recorder = self.recorder
     dispatch = self.dispatch
     
     arrivalrate = totalrate( self.rategraph )
     total_demands = len( self.DEMANDS )
     nleft = len( dispatch.demands )
     
     print 'arrival rate (simulated, observed): %f, %f' % ( arrivalrate, total_demands / horizon )
     
     if True :
         # see what this does
         rate_observed = sum([ veh.notches for veh in self.vehicles ]) / self.horizon
     else :
         #overrate_est = float( nleft - preload ) / horizon
         take_only_last = .25 * horizon
         take_num = int( np.ceil( take_only_last / recorder.T ) )
         DY = float( self.tape[-1] - self.tape[-take_num] )
         DT = take_num * recorder.T
         overrate_est = float( DY ) / DT
         rate_observed = arrivalrate - overrate_est
     
     return rate_observed
        normrategraph.add_edge( 'LEFT', 'RIGHT', rate=1. )
        

    probe = RoadmapEMD()
    probe.horizon = 10000.
    
    complexity_computed = []
    complexity_estimated = []
    
    def showresults() :
        plt.scatter( complexity_computed, complexity_estimated )
        
    for t in range(1) :
        roadnet, rategraph = get_sim_setting( mu=2. )
        
        R = totalrate( rategraph )
        n_rategraph = scale_rates( rategraph, 1. / R )
        
        enroute_velocity = carryMileageRate( roadnet, n_rategraph )
        balance_velocity = fetchMileageRate( roadnet, n_rategraph )
        complexity = enroute_velocity + balance_velocity
        #complexity = moverscomplexity( roadnet, n_rategraph )
        
        
        for k in range(1) :
            numveh = np.random.randint(1,5+1)
            
            rate_predicted = convert_complexity_and_servicerate( complexity, numveh )
            simrates = scale_rates( n_rategraph, .99 * rate_predicted )
            
            probe.scenario( roadnet, simrates, numveh, 1. )