Ejemplo n.º 1
0
def main():
    global NUM_PARTICLES, GBEST
    # try:
    NUM_ITERACOES = 1000
    num_Clientes = 25 if (len(sys.argv) == 1) else int(sys.argv[1])
    num_Arquivo = int(sys.argv[2])
    NUM_PARTICLES = 100

    # print(num_Clientes, num_Arquivo)

    num_Veiculos, veiculos_Capacidades, coords, demandas, coletas, time_Window, matriz_Distancia = LerArquivo(
    ).readFile("../entry-{}".format(num_Arquivo), num_Clientes)

    clientes = []
    for i in range(num_Clientes):
        clientes.append(
            Cliente(coords[i + 1], i + 1, demandas[i + 1], coletas[i + 1],
                    time_Window[i + 1]))

    Global.init(num_Veiculos, num_Clientes, veiculos_Capacidades, coords,
                demandas, coletas, time_Window, matriz_Distancia, clientes,
                NUM_PARTICLES, NUM_ITERACOES)

    particles = []
    for i in range(Global.NUM_PARTICLES):
        particles.append(Particle())

    GBEST = get_GBest(particles)

    for i in range(Global.NUM_PARTICLES):
        particles[i].set_GBest(GBEST)

    # print("Fitness atual: {}".format(GBEST.fitness))

    for itera in range(Global.NUM_ITERACOES):
        update = False
        for i in range(Global.NUM_PARTICLES):
            particles[i].update_Velocidade(itera)
            particles[i].update_Posicao()
            update = update or particles[i].update()
        if (update):
            GBEST = get_GBest(particles)
            for i in range(Global.NUM_PARTICLES):
                particles[i].set_GBest(GBEST)
            # print("Iteracao #{}".format(itera))
            # print("Melhor fitness: {}".format(particles[0].gbest.fitness))
    # finally:
    #     # for l in GBEST.rotas:
    #     #     print(' '.join([str(x.id) for x in l.clientes]))
    #     Graph().draw(GBEST.rotas)
    print(GBEST.fitness)
Ejemplo n.º 2
0
def main():
    global NUM_PARTICLES, GBEST

    NUM_ITERACOES = 1000
    num_Clientes = 25

    NUM_PARTICLES = num_Clientes

    num_Veiculos, capacidade, coords, demandas, time_Window, matriz_Distancia = LerArquivo(
    ).readFile("In/TW/{}C/C101.txt".format(num_Clientes), num_Clientes)

    clientes = []
    for i in range(num_Clientes):
        clientes.append(
            Cliente(coords[i + 1], i + 1, demandas[i + 1], time_Window[i + 1]))

    Global.init(num_Veiculos, num_Clientes, capacidade, coords, demandas,
                time_Window, matriz_Distancia, clientes, NUM_PARTICLES,
                NUM_ITERACOES)

    particles = []
    for i in range(Global.NUM_PARTICLES):
        particles.append(Particle())

    GBEST = get_GBest(particles)

    for i in range(Global.NUM_PARTICLES):
        particles[i].set_GBest(GBEST)

    for itera in range(Global.NUM_ITERACOES):
        update = False
        for i in range(Global.NUM_PARTICLES):
            particles[i].update_Velocidade(itera)
            particles[i].update_Posicao()
            update = update or particles[i].update()

        if (update):
            GBEST = get_GBest(particles)
            for i in range(Global.NUM_PARTICLES):
                particles[i].set_GBest(GBEST)
            print("Iteracao #{}".format(itera))
            print("Melhor fitness: {}".format(particles[0].gbest.fitness))

    # for i, particle in enumerate(particles):
    #     vel_Veiculo = particle.vel[Global.num_Clientes:]
    #     print("Particle #{} = {}".format(i + 1, vel_Veiculo))
    Graph().draw(GBEST.rotas)
Ejemplo n.º 3
0
def main():
    global NUM_PARTICLES, GBEST, tot

    tot = 0
    NUM_ITERACOES = 100
    num_Clientes = 25 if (len(sys.argv) == 1) else int(sys.argv[1])
    for _ in range(5):
        NUM_PARTICLES = 50

        num_Veiculos, capacidade, coords, demandas, coletas, time_Window, matriz_Distancia = LerArquivo(
        ).readFile("In/TWSPD/{}C/IC102.txt".format(num_Clientes), num_Clientes)

        clientes = []
        for i in range(num_Clientes):
            clientes.append(
                Cliente(coords[i + 1], i + 1, demandas[i + 1], coletas[i + 1],
                        time_Window[i + 1]))

        Global.init(num_Veiculos, num_Clientes, capacidade, coords, demandas,
                    coletas, time_Window, matriz_Distancia, clientes,
                    NUM_PARTICLES, NUM_ITERACOES)

        particles = []
        for i in range(Global.NUM_PARTICLES):
            particles.append(Particle())

        GBEST = get_GBest(particles)

        for i in range(Global.NUM_PARTICLES):
            particles[i].set_GBest(GBEST)

        for itera in range(Global.NUM_ITERACOES):
            update = False
            for i in range(Global.NUM_PARTICLES):
                particles[i].update_Velocidade(itera)
                particles[i].update_Posicao()
                update = update or particles[i].update()
            if (update):
                GBEST = get_GBest(particles)
                for i in range(Global.NUM_PARTICLES):
                    particles[i].set_GBest(GBEST)
                print("Melhor fitness #{}: {}".format(
                    itera, particles[0].gbest.fitness))
        print("Melhor fitness: {}".format(particles[0].gbest.fitness))
        tot += particles[0].gbest.fitness
Ejemplo n.º 4
0
def main():
	global NUM_PARTICLES, GBEST
	NUM_ITERACOES = 1000
	num_Clientes = 100
	NUM_PARTICLES = 100

	pastas = ["C101_Het_FC_0.95"]
	valores = [(0.95, 2.85)]
	# try:
	for (pasta, valor) in zip(pastas, valores):
		for arq in range(0, 11):
			with open("{}/{}_{}.txt".format(pasta, pasta, arq), "w") as file:
				num_Veiculos, veiculos_Capacidades, coords, demandas, coletas, time_Window, matriz_Distancia = LerArquivo().readFile("In/TWSPD/{}C/IC101.txt".format(num_Clientes), num_Clientes)

				clientes = []
				for i in range(num_Clientes):
					clientes.append(Cliente(coords[i + 1], i + 1, demandas[i + 1], coletas[i + 1], time_Window[i + 1]))

				Global.init(num_Veiculos, num_Clientes, veiculos_Capacidades, coords, demandas, coletas, time_Window, matriz_Distancia, clientes, NUM_PARTICLES, NUM_ITERACOES)

				particles = []
				for i in range(Global.NUM_PARTICLES):
					particles.append(Particle(1.0, valor[0], valor[1]))

				GBEST = get_GBest(particles)

				for i in range(Global.NUM_PARTICLES):
					particles[i].set_GBest(GBEST)

				print("Fitness atual: {}".format(GBEST.fitness))
				anterior = -1
				contador = 0
				for itera in range(Global.NUM_ITERACOES):
					update = False
					for i in range(Global.NUM_PARTICLES):
						particles[i].update_Velocidade(itera)
						particles[i].update_Posicao()
						temp_inicial = 10.0
						temp_final = 0.0000001
						A = 1 / (float(NUM_ITERACOES)) * math.log(temp_inicial / temp_final)
						t_atual = temp_inicial * math.exp(-A * (itera + 1))
						mapeado = t_atual / 10.0
						# print(itera, mapeado)
						update = update or particles[i].update(-1)
					if(update):
						GBEST = get_GBest(particles)
						for i in range(Global.NUM_PARTICLES):
							particles[i].set_GBest(GBEST)
					qtd_Veiculos = sum([1 for x in GBEST.rotas if len(x.clientes) > 2])
					file.write(str(itera) + ":" + str(particles[0].gbest.fitness) + ":" + str(qtd_Veiculos) + "\n")
					print("Iteracao #{}: {} com {} veiculos".format(itera, particles[0].gbest.fitness, qtd_Veiculos))
					if(particles[0].gbest.fitness <= 829.0):
						break
					if(particles[0].gbest.fitness == anterior):
						contador += 1
						if(contador >= 200):
							particles = []
							contador = 0
							for i in range(Global.NUM_PARTICLES):
								particles.append(Particle(1.0))
							GBEST = get_GBest(particles)
							for i in range(Global.NUM_PARTICLES):
								particles[i].set_GBest(GBEST)
					else:
						contador = 0
					anterior = particles[0].gbest.fitness