Пример #1
0
def simulacion(tmax, smax, dt, lambd, params, paramsInho):
    ids = 0

    numt = np.arange(0, tmax, dt).size + 1 
    nums = np.ceil(smax/(params[0] + params[4]))
    
    Nmax = int(np.ceil(tmax*lambd)) #Nº máximo de posibles llegadas 
    
    arrivaltimes = getLlegadas(Nmax, dt, lambd)
                
    llegadas = np.zeros((numt))
    
    stv_gt = np.zeros((numt*nums*lambd,5))

    A = np.array([[-1, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

    j = 0
    k = 0
    
    account = 0
    ta = arrivaltimes[account]
    complete = False

    times = np.linspace(0,tmax,numt)

    for t in times:
        #Llegadas Poissonianas, parámetro lambda             
        if ta <= t and (not complete):
            account += 1
            if account <= (len(arrivaltimes) - 1):    #Nuevo tiempo de acceso
                ta += arrivaltimes[account] 
            else:
                complete = True
                
            if (np.size(A,0) == 1):    #Primer Vehículo
                A = np.vstack((np.array([[ids, 0, t, params[5], 0, A[0,1], 0, params[0], params[1], params[5], params[2], params[3], params[4]]]), A))
                llegadas[k] = 1
            elif (A[0,1] > (params[0] +  params[4])): # Resto de vehículos
                ids += 1
                v_temp = vin(A[0,3],A[0,1]-params[4], params)
                A = np.vstack((np.array([[ids, 0, t, v_temp, 0, A[0,1]- params[4], v_temp-A[0,3],  params[0], params[1], params[5], params[2], params[3], params[4]]]), A))
                llegadas[k] = 1
                
        k += 1
        
        #Paso de simulación
        A = TM.idm(A, dt)
 #       print A
        #Inhomogeneidad Timehead (T)
        I1 = A[:,1] > paramsInho[2];
        A[I1,8] = np.minimum(Tin(A[I1,1], paramsInho),paramsInho[3])
        
        #Elimina coches de la carretera cuando alcanzan el final 
        A = A[np.logical_or(A[:,1] <= smax, A[:,0] < 0),:]
        
        #Guarda en el campo
        stv_gt[j:j+np.size(A,0)-1,:] = A[0:-1,0:5]
        j = j+np.size(A,0) - 1

    return stv_gt
Пример #2
0
 def getFitness(self, overallSignalProgramms,vehcleInputs,HGVInputs):
     #x = self.bin2int(self.bits)
     #print 'x', x
     #exec(expr)
     #self.fitness = y
     #print 'y', y
     weightFactorForWaitingTime = 0
     weightFactorForStops = 1
     self.decode(overallSignalProgramms)
     #print 'call Traffic Models>>'
     (overallWaitingTime, overallStops) = TrafficModels.maintest(self.tobeEvaluatedSps,vehcleInputs,HGVInputs)
     self.fitness = -overallWaitingTime*weightFactorForWaitingTime - weightFactorForStops*overallStops
Пример #3
0
def simulacion(tmax, smax, dt, lambd, params, paramsInho):
	
	numt = int(mt.ceil(tmax/dt + 1)) #Nº máximo de iteracciones
	Nmax = int(mt.ceil(tmax*lambd)) #Nº máximo de posibles llegadas 
	
	#Obtener las llegadas Poissonianas
	arrivaltimes = getLlegadas(Nmax, dt, lambd)
            
	llegadas = []	# Para tener un registro de las llegadas a la vía
	stv_gt = [] #lista de listas, contiene toda los estados de los vehículos mientras están circulando por el tramo de la vía, ordenada en tiempo
	A = {} #Hash, estructura de datos de la simulación, Key(id) -> últimos valores del vehículo
	
	#A [id, s, t, v, a, Dx, Dv, s0, T, v0, a, ab, l]
	A[-1] = [-1, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
	
	ids = -1
	deletes = 0
	account = 0
	ta = arrivaltimes[account] #Tiempo de llegada del primer vehículo
	complete = False
	la = 0 #Contador de vehículos eliminados

	for n in range(numt):
		t = dt * n 
		#Añadir un nuevo vehículo  
		if ta <= t and (not complete):
			account += 1
			if account <= (len(arrivaltimes) - 1):	#Nuevo tiempo de acceso	
				ta += arrivaltimes[account] 
			else:
				complete = True
				
			if (len(A) == 1):	#Primer Vehículo
				ids += 1
				A[ids] = [ids, 0, t, params[5], 0, A[-1][1], 0, params[0], params[1], params[5], params[2], params[3], params[4]]
				llegadas.append(1)
			elif A[ids][1] > (params[0] +  params[4]): # Resto de vehículos
				ids += 1
				v_temp = vin(A[ids - 1][3],A[ids - 1][1]-params[4], params)
				A[ids] = [ids, 0, t, v_temp, 0, A[ids - 1][1]- params[4], v_temp-A[ids - 1][3], params[0], params[1], params[5], params[2], params[3], params[4]] #mantiene el id para que en la impresión podamos identificarlo
				llegadas.append(1)
			else:
				llegadas.append(0)
				la += 1			
		else:	
			llegadas.append(0)	    


		#Paso de simulacion
		A = TM.idm(A, dt, deletes)

	
		for i in range(len(A) -1 + deletes): #-1 por el vector dummies
			#Inhomogeneidad Timehead (T)
			if (i >= deletes):
				if ((A[i][1] > paramsInho[2]) and (A[i][8] < paramsInho[3])):
					#Para evitar que tras haber pasado sih +lih siga haciendo esta comparacion ya que es constante
					A[i][8] = min(Tin(A[i][1], paramsInho),paramsInho[3])

	    		#Elimina coches de la carretera cuando alcanzan el final 
				if (A[i][1] >= smax):
					del A[i]		
					deletes = i+1
	    
	    	#Guarda en el campo
			if (i >= deletes):
				#Necesario para que no se sobreesbriba el valor en la función idm ya que modificamos el valor al que apunta, por tanto se modifica también el valor de stv_gt
				p = [A[i][0],A[i][1],A[i][2],A[i][3], A[i][4]]
				stv_gt.append(p)

	return stv_gt