Exemplo n.º 1
0
def vecindario(tabla):
    j = int(aleatorios.generaAleatorio(9))  #cuadrante
    k = int(aleatorios.generaAleatorio(9))  #casilla 1
    a = int(aleatorios.generaAleatorio(9))  #casilla 2
    if tabla[j][k][1] == False:
        if tabla[j][a][1] == False:
            aux = tabla[j][k][0]
            tabla[j][k][0] = tabla[j][a][0]
            tabla[j][a][0] = aux
    return tabla
def evolucionDiferencial(n,nTuplas,intervalo,criterioP,funcion,padresV):
	c = 0
	hijosV = iniciaHijo(4,5)
	while criterioP > c:
		mutantesV = mutantes(n,nTuplas,padresV,intervalo)

		for j in range(n):
			for i in range(nTuplas):
				r = aleatorios.generaAleatorio(1)
				if r < cR:
					hijosV[j][i]=copy.deepcopy(mutantesV[j][i])
				else:
					hijosV[j][i]=copy.deepcopy(padresV[j][i])	

		for i in range(n):
			fP = funcionDePrueba(funcion,padresV[i])
			fH = funcionDePrueba(funcion,hijosV[i])
			if fH < fP:
				padresV[i]=copy.deepcopy(hijosV[i])
			else:
				padresV[i]=padresV[i]

			#print(i,"valor funcion =  ", round(aleatorios.funSchwefel(padresV[i]),2))
		c=c+1
	return padresV
Exemplo n.º 3
0
def mutantes(n, nTuplas, padresV, intervalo):
    mutante = []
    mutantesV = []
    for j in range(n):
        for i in range(nTuplas):
            aleP = []
            while len(aleP) < nTuplas:
                rnd = int(aleatorios.generaAleatorio(nTuplas))
                if rnd not in aleP:
                    aleP.append(rnd)

            aleP.remove(i)
            m = padresV[j][aleP[0]] + f * (padresV[j][aleP[1]] -
                                           padresV[j][aleP[2]])
            if m > intervalo:
                m = intervalo
            elif m < -intervalo:
                m = -intervalo
            mutante.append(m)
        mutantesV.append(mutante)
        mutante = []

    for i in range(n):
        mutantesV[i]
    return mutantesV
Exemplo n.º 4
0
def metropoli(tablaA, tabla, t):
    fS = penalizacion(tabla)
    fo = penalizacion(tablaA)
    r = aleatorios.generaAleatorio(1)
    e = math.exp((-1 * (fS - fo)) / t)
    if (r < e):
        return tabla
    else:
        return tablaA
def seleccionaCentroide(datos):
    i = 0
    centroides = []
    while i < nGrupos:
        r = int(aleatorios.generaAleatorio(lineas))
        if r not in centroides:
            centroides.append(r)
            i = i + 1
    for i in range(len(centroides)):
        centroides[i] = datos[centroides[i]]

    return centroides
Exemplo n.º 6
0
def solucionInicial(tabla):
    for j in range(len(tabla)):
        b = []
        while len(b) < 9:
            r = int(aleatorios.generaAleatorio(9)) + 1
            if r not in b:
                b.append(r)
        for i in range(len(tabla[j])):
            if tabla[j][i][0] in b:
                b.remove(tabla[j][i][0])
        for i in range(len(tabla[j])):
            if tabla[j][i][1] == False:
                if len(b) > 0:
                    tabla[j][i][0] = b.pop()

    return tabla
def ruleta(costos):
	costor = copy.deepcopy(costos)
	for i in range(5):
		fitness=0.0
		mini=costos[0]

		for j in range(1,5):
			if mini > costos[j]:
				mini = costos[j]

		mini=mini+1
		for j in range(5):
		    costor[j]=mini-costos[j]
		    fitness=fitness+costor[j]

		r=aleatorios.generaAleatorio(1)
		x=0
		fitnessparcial=costor[0]/fitness
		while (r>fitnessparcial):
		    x=x+1
		    fitnessparcial=fitnessparcial+(costor[x]/fitness)
		j=x
	return j
def inicio():
	aleatorios.nuevaSemilla(45454)
	padres = []
	padresB = []
	costo = []
	for i in range(5):
		padre = []
		for k in range(3):
			x = ''
			for j in range(11):
				r = aleatorios.generaAleatorio(1)
				if r < 0.5:
					x = x +'0'
				else:
					x = x + '1'
			padre.append(x)
		padres.append(padre)
	padresB = copy.deepcopy(padres)
	for i in range(5):
		for j in range(3):
			padresB[i][j] = areal(padres[i][j])	
	
	for i in range(5):
		costo.append(aleatorios.funMulGriewank(padresB[i]))
def inicio():
    centroidesM = []
    soluciones = []
    mejorSolucion = 0
    peorSolucion = 0
    semillero = aleatorios.semillero(6, 30)  #inicia semillero
    aleatorios.nuevaSemilla(semillero[0])  #inicia semilla
    datos = []
    print("Clostering con ABK")
    datos = recolectaDatos()  # recolectar los datos de txt
    #en este punto ya tenemos nuestor 3 gurpos en poblacion inicial

    for c in range(30):
        global llamadasALaFoncion
        llamadasALaFoncion = 0
        aleatorios.nuevaSemilla(semillero[c])
        generaciones = 0
        for i in range(cantidadDeFuenteAlimento):
            fuentesDeAlimento.append(seleccionaCentroide(datos))
            costoDeFuenteAlimento.append(aptitud(datos, fuentesDeAlimento[i]))
            costoR.append(aptitud(datos, fuentesDeAlimento[i]))
            cambio.append(0)

        mejorConocida = fuentesDeAlimento[0]
        mejorCosto = aptitud(datos, mejorConocida)
        FuenteVecina = seleccionaCentroide(datos)

        while llamadasALaFoncion <= 10000:
            #abejas empleadas
            for i in range(cantidadDeFuenteAlimento):
                j = i
                while j == i:
                    j = int(
                        aleatorios.generaAleatorio(cantidadDeFuenteAlimento))
                for k in range(nGrupos):
                    resultado = []
                    signo = aleatorios.generaAleatorio(1)
                    r = aleatorios.generaAleatorio(1)
                    if signo > 0.5:
                        r = r * -1
                    resX = fuentesDeAlimento[i][k][0] + r * (
                        fuentesDeAlimento[i][k][0] -
                        fuentesDeAlimento[j][k][0])
                    resY = fuentesDeAlimento[i][k][1] + r * (
                        fuentesDeAlimento[i][k][1] -
                        fuentesDeAlimento[j][k][1])
                    resultado.append(resX)
                    resultado.append(resY)
                    FuenteVecina[k] = resultado
                    cost = aptitud(datos, FuenteVecina)
                    if (costoDeFuenteAlimento[i] >= cost):
                        fuentesDeAlimento[i] = FuenteVecina
                        costoDeFuenteAlimento[i] = cost
                        cambio[i] = 0
                        if (mejorCosto >= cost):
                            mejorCosto = cost
                            mejorConocida = FuenteVecina
                        FuenteVecina = seleccionaCentroide(datos)
                    else:
                        cambio[i] = cambio[i] + 1
            #terminas las abejas empleadas
            #abejas observadoras
            for i in range(cantidadDeFuenteAlimento):
                fitness = 0.0
                maximo = max(costoDeFuenteAlimento)
                for i in range(cantidadDeFuenteAlimento):
                    costoR[i] = maximo - costoDeFuenteAlimento[i]
                pi = costoR[i] / sum(costoR)
                r = aleatorios.generaAleatorio(1)
                if r < pi:
                    j = i
                    while j == i:
                        j = int(
                            aleatorios.generaAleatorio(
                                cantidadDeFuenteAlimento))
                    for k in range(nGrupos):
                        resultado = []
                        signo = aleatorios.generaAleatorio(1)
                        r = aleatorios.generaAleatorio(1)
                        if signo > 0.5:
                            r = r * -1
                        resX = fuentesDeAlimento[i][k][0] + r * (
                            fuentesDeAlimento[i][k][0] -
                            fuentesDeAlimento[j][k][0])
                        resY = fuentesDeAlimento[i][k][1] + r * (
                            fuentesDeAlimento[i][k][1] -
                            fuentesDeAlimento[j][k][1])
                        resultado.append(resX)
                        resultado.append(resY)
                        FuenteVecina[k] = resultado
                        cost = aptitud(datos, FuenteVecina)
                        if (costoDeFuenteAlimento[i] >= cost):
                            fuentesDeAlimento[i] = FuenteVecina
                            costoDeFuenteAlimento[i] = cost
                            cambio[i] = 0
                            if (mejorCosto >= cost):
                                mejorCosto = cost
                                mejorConocida = FuenteVecina
                            FuenteVecina = seleccionaCentroide(datos)
                        else:
                            cambio[i] = cambio[i] + 1
            #terminanObservadoras

            #inician exploradoras
            for i in range(cantidadDeFuenteAlimento):
                if cambio[i] >= limitecambios:
                    fuentesDeAlimento[i] = seleccionaCentroide(datos)
                    costoDeFuenteAlimento[i] = aptitud(datos,
                                                       fuentesDeAlimento[i])
                    cambio[i] = 0
            generaciones = generaciones + 1
    #terminan generaciones
        centroidesM.append(mejorConocida)
        soluciones.append(aptitud(datos, mejorConocida))
        print("Semilla = ", semillero[c], "Mejor Solucion = ",
              aptitud(datos, mejorConocida))
        #print("llamadas a la funcion = : ",llamadasALaFoncion)
    indice = soluciones.index(min(soluciones))
    print("Mejor solucion ", min(soluciones))
    print("Peor solucion", max(soluciones))
    print("promedio = ", sum(soluciones) / 30)
    print("indice de la mejorSolucion", indice)

    clusteringFinal = K_Means(datos, centroidesM[indice])
    for i in range(nGrupos):
        for j in range(len(clusteringFinal[i])):
            for k in range(dimencion):
                print(clusteringFinal[i][j][k], end=' ')
            print()