Пример #1
0
def aco(max_it, alpha, beta, rho, N, e, q, tal, b, localizacoes):
    #inicializando elementos.
    mapa = Mapa(e, tal, localizacoes, alpha, beta, rho, q)
    formigas = np.full(e, Formiga())
    iteracao = 0

    while iteracao < max_it:
        ##localizando a melhor rota.
        # Para cada numero de formigas é construido uma rota aplicando o seguinte passo.
        for formiga in formigas:
            for i in enumerate(range(e - 1)):
                proximaCidade = mapa.calculaProbabilidades(
                    formiga.cidadesNVisitadas, formiga.cidadeAtual)
                formiga.adicionaRota(proximaCidade, mapa)

        # Avalia o tamanho da rota construída por cada formiga, se uma rota mais curta for encontrada a
        # melhor rota será atualizada.
        for formiga in formigas:
            if formiga.tamanhoRota < lmenor:
                lmenor = formiga.tamanhoRota
                melhor = formiga.rota
        #Atualiza os feromonios nas rotas que as formigas passaram.
        for formiga in formigas:
            mapa.atualizaFeromonios(formiga.rota)
        iteracao += iteracao

    return melhor, lmenor
Пример #2
0
    def __init__(self):

        self.memoria = Mapa()
        self.posicaoAtual = [0,0]
        self.posicaoSupostaOuro = []
        self.supostaPosicaoPocos = []
        self.sensacoes = []
Пример #3
0
def main():

    wumppus = Wumppus()
    mapa = Mapa()

    #cria o wumppus
    mapa.criarWumppus(wumppus)

    #cria os pocos
    mapa.criarPocos(wumppus)

    #seta o ouro
    mapa.inserirOuro()

    mapa.printMapa()

    #debug
    for i in range(0, len(mapa.listaDePocos)):
        print mapa.listaDePocos[i]

    #cria Guerreiro
    guerreiro = Guerreiro()

    while True:
        listaSensacao = mapa.pegarSensacao(guerreiro)
        guerreiro.agir(listaSensacao)
        input()
    def carregaMapas(self):
        self.listaMapas = []

        #para cada um dos mapas informados cria-se um novo objeto e adciona a uma lista
        #print("Carregando Mapas")
        for i in range(self.dados.DIRETORIO_MAPAS.__len__()):
            newMapa = Mapa(i, self.dados.DIRETORIO_MAPAS[i],
                           self.dados.DIRETORIO_MAPAS_FOGO[i],
                           self.dados.DIRETORIO_MAPAS_VENTO[i],
                           self.filtraTeleportes(i), self.dados)
            self.listaMapas.append(newMapa)
            if self.dados.FLAG_ATIVACAO_FOGO:
                self.listaFogo.append([])
        self.objetivo = objetivo
        self.fronteira = Pilha(20)
        self.fronteira.empilhar(inicio)
        self.achou = False

    def buscar(self):
        topo = self.fronteira.getTopo()
        print('Topo: {}'.format(topo.nome))

        if topo == self.objetivo:
            self.achou = True
        else:
            '''For para percorrer todos os vertices do topo'''

            for a in topo.adjacentes:
                if self.achou == False:
                    print('Verificando se já visitado: {}'.format(
                        a.cidade.nome))
                    if a.cidade.visitado == False:
                        a.cidade.visitado = True
                        self.fronteira.empilhar(a.cidade)
                        Profundidade.buscar(self)

        print('Desempilhou: {}'.format(self.fronteira.desempilhar().nome))


from Mapa import Mapa
mapa = Mapa()

profundidade = Profundidade(mapa.portoUniao, mapa.curitiba)
profundidade.buscar()
Пример #6
0
from Mapa import Mapa
from VetorOrdenado import VetorOrdenado


class Gulosa:
    def __init__(self, objetivo):
        self.objetivo = objetivo
        self.achou = False

    def buscar(self, atual):
        print('\nAtual->{}'.format(atual.nome))
        atual.visitado = True

        if (atual == self.objetivo):
            self.achou = True
        else:
            self.fronteira = VetorOrdenado(len(atual.adjacentes))
            for a in atual.adjacentes:
                if a.cidade.visitado == False:
                    a.cidade.visitado = True
                    self.fronteira.inserir(a.cidade)
            self.fronteira.mostrar()
            if (self.fronteira.getPrimeiro() != None):
                Gulosa.buscar(self, self.fronteira.getPrimeiro())


map = Mapa()
gulosa = Gulosa(map.curitiba)
gulosa.buscar(map.portoUniao)
 def __init__(self):
     self.mapa = Mapa()
     self.l = []
Пример #8
0
    def __init__(self, size, req_points):

        self.counter = 0
        self.mapa = Mapa(size)  # ustawienie wielkości mapy
        self.req_points = req_points
        self.city_population = {}
Пример #9
0
map_y_sqms_count = 11

screen_dimension_game = {
    'x': 32 * map_x_sqms_count,
    'y': 32 * map_y_sqms_count
}

pygame.init()
font_name = pygame.font.get_default_font()
name_font = pygame.font.SysFont(font_name, 16)

screen = pygame.display.set_mode(
    (screen_dimension_game['x'], screen_dimension_game['y']), 0, 32)

clock = pygame.time.Clock()
mapa = Mapa(map_x_sqms_count, map_y_sqms_count)
player = Player(randrange(0, map_x_sqms_count), randrange(0, map_y_sqms_count),
                'Arrois')

walk_player = WalkPlayer(player, 1)
player_walking = False


def player_walk_for(direction: WalkDirection, speed):
    global walk_player
    try:
        walk_player.speed = speed
        walk_player.set_direction_to_walk(direction)
        walk_player.start()
    except RuntimeError:
        walk_player = WalkPlayer(player, speed)
Пример #10
0
    def executar(self):

        resultados = pd.DataFrame({
            'melhores': [],
            'piores': []
        })  # Cria o DF para armazenar os resultados

        mapa = Mapa(
            self.__mapa)  # Instancia e lê as coordenadas do mapa escolhido
        cidades = mapa.ler_coordenadas()

        pop = Populacao(self.__num_cel, self.__validade, cidades,
                        0)  # Instancia uma nova população
        populacao = pop.gerar_populacao()  # Gera o DF da população
        populacao.sort_values(
            by='fitness',
            inplace=True)  # Ordena a população de acordo com o fitness
        populacao.index = range(
            populacao.shape[0])  # Ajusta o índice da população
        mem = Memoria(populacao[:self.__tamanho_mem].copy()
                      )  # Armazena na memória uma parcela da população
        mem.ordenar_memoria()  # Ordena a memória

        for geracao in range(self.__num_ger):  # Para cada geração:

            # Clona a população de acordo com a quantidade estipulada de clones
            populacao = clonar(populacao, self.__num_clones, geracao,
                               self.__validade, cidades)
            populacao = pd.DataFrame(populacao)

            # Ordena os valores da população de acordo com o 'fitness'
            populacao.sort_values(by='fitness', inplace=True)
            populacao.index = range(populacao.shape[0])

            # Cria um data set temporário para a memória
            memoria = pd.DataFrame(mem.get_memoria())

            # Verifica uma a uma as células presentes na memória
            for index, celula in populacao.iterrows():

                # Armazena o pior valor de fitness
                pior_fit = memoria.fitness.max()

                # Verifica quais células já estão presentes na memória de acordo com o fitness
                talvez_exista = memoria.fitness == celula.fitness
                existe = False

                for possibilidade in talvez_exista:
                    if possibilidade:
                        existe = True

                # Armazena somente as células que não estão presentes na memória e possuem um 'fitness' melhor do que o
                # pior já armazenado
                if (celula.fitness < pior_fit) and (not existe):
                    memoria.drop([memoria.shape[0] - 1],
                                 inplace=True)  # Remove a última célula
                    memoria = memoria.append(
                        celula, ignore_index=True)  # Adiciona a célula nova
                    memoria.sort_values(
                        by='fitness', inplace=True
                    )  # Ordena a população de acordo com o fitness
                    memoria.index = range(
                        memoria.shape[0])  # Ajusta o índice da população

            # Armazena o melhor fitness da memória e o pior fitness da população
            resultados = resultados.append(
                {
                    'melhores': memoria.fitness.min().copy(),
                    'piores': populacao.fitness.max().copy()
                },
                ignore_index=True)

            # Diminui a validade das células
            memoria.validade -= 1

            # Verifica uma a uma as células presentes na memória
            for index, row in memoria.iterrows():
                if row.validade < 0:  # Modifica o fitness se a validade for menor que zero
                    memoria.loc[index, 'fitness'] += row.fitness * 0.5

            populacao = memoria.copy()
            populacao = clonar(populacao,
                               int(self.__num_cel / self.__tamanho_mem - 1),
                               geracao, self.__validade, cidades)
            populacao.sort_values(by='fitness', inplace=True)
            populacao.index = range(populacao.shape[0])

            mem.set_memoria(memoria.copy())
            mem.ordenar_memoria()

            print(
                f'\n### {geracao} - {self.__execucao} ###\n{populacao.loc[0, "fitness"]}'
            )

        return resultados