Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- # Representação do ótimo = [(0, 2, 0, 0), (0, 0, 0, 1), (0, 2, 0, 0), (0, 0, 0, 1), (2, 0, 0, 0), (0, 0, 1, 1), (2, 0, 0, 0), (0, 0, 0, 1), (0, 2, 0, 0), (0, 0, 0, 1), (0, 2, 0, 0)]
- def apt(movimentos):
- missionarios = 3
- canibais = 3
- for move in movimentos:
- missionarios -= move[0] - move[2]
- canibais -= move[1] - move[3]
- if (missionarios < canibais and (abs(missionarios - 3) < abs(canibais - 3))):
- return -1
- if (missionarios > 3 or canibais > 3 or missionarios < 0 or canibais < 0):
- return -1
- return (6 - missionarios - canibais)
- def printa_solucao(movimentos):
- missionarios = 3
- canibais = 3
- for move in movimentos:
- missionarios -= move[0] - move[2]
- canibais -= move[1] - move[3]
- print(f'Inicio: {missionarios}|{canibais}, Fim: {abs(missionarios - 3)}|{abs(canibais - 3)}')
- def movimentos(lado):
- moves = []
- # Indo
- if lado == 0:
- moves.append((1, 0, 0, 0))
- moves.append((1, 1, 0, 0))
- moves.append((2, 0, 0, 0))
- moves.append((0, 1, 0, 0))
- moves.append((0, 2, 0, 0))
- #Voltando
- if lado == 1:
- moves.append((0, 0, 1, 0))
- moves.append((0, 0, 1, 1))
- moves.append((0, 0, 2, 0))
- moves.append((0, 0, 0, 1))
- moves.append((0, 0, 0, 2))
- return random.choice(moves)
- def initial_population(num_individuos): # Gera população
- population=[]
- for i in range(num_individuos):
- estados = random.randint(5, 15)
- individuo = []
- while estados > 0:
- individuo.append(movimentos(len(individuo) % 2))
- if (apt(individuo) == -1):
- individuo.pop()
- continue
- estados -= 1
- print(f'Movimentos gerados: {individuo}')
- population.append(individuo)
- return population
- def mutacao(populacao):
- for i in range(len(populacao)):
- if apt(populacao[i]) < 4:
- populacao[i].append(movimentos(len(populacao[i]) % 2))
- return populacao
- if __name__ == "__main__":
- # solucao = [(0, 2, 0, 0), (0, 0, 0, 1), (0, 2, 0, 0), (0, 0, 0, 1), (2, 0, 0, 0), (0, 0, 1, 1), (2, 0, 0, 0), (0, 0, 0, 1), (0, 2, 0, 0), (0, 0, 0, 1), (0, 2, 0, 0)]
- populacao = initial_population(10)
- printa_solucao(populacao[0])
- for i in range(len(populacao)):
- print(f'Individuo: {i} - Função aptidao: {apt(populacao[i])}')
- maiorAptidao = 0
- rep = 0
- while maiorAptidao < 5:
- for i in range(len(populacao)):
- if apt(populacao[i]) > maiorAptidao:
- print('teste2')
- maiorAptidao = apt(populacao[i])
- rep += 1
- # print(rep)
- populacao = mutacao(populacao)
- # apt(populacao[0])
- # print(populacao)
Advertisement
Add Comment
Please, Sign In to add comment