예제 #1
0
    def __init__(self):

        self._rmax = 100
        self._s = None
        self._a = None
        self._accoes = [Mover(ang, ang_abs=True) for ang in psa.dirmov()]
        self._mec_aprend = MecAprend(self._accoes)
예제 #2
0
 def __init__(self, mecanismo_raciocinio):
     self._crencas = ModeloMundo()
     self._desejos = None  #vai ser lista de posicoes
     self._intencoes = None  #vai ser lista de posicoes
     self._capacidades = [
         Mover(self._crencas, angulo) for angulo in psa.dirmov()
     ]
     self._mecanismo_raciocinio = mecanismo_raciocinio
예제 #3
0
파일: modelo_mundo.py 프로젝트: pepipe/ISEL
 def transicoes(self, estado):
     transicoes = []
     for ang in psa.dirmov():
         posn = psa.util.mover(estado, ang)
         elem = self.obter_elemento(posn)
         if elem and elem is not OBST:
             transicoes.append((posn,ang))
     return transicoes
예제 #4
0
    def esquema(self, crencas):
        if self._pre_condicoes(crencas):
            # vai esccolher uma casa vazia junto do grupo de bases
            bases = crencas.obter_chaves('base')
            entrada_bases= []
            for base in bases:
                for movimento in dirmov():
                    nova_posicao = mover(base, movimento)
                    if not crencas.obter_valor(nova_posicao) and nova_posicao not in entrada_bases:
                        # e uma casa livre
                        entrada_bases.append(nova_posicao)

            base_entrada = entrada_bases[0] # escolhe uma casa livre junto das bases

            #vai ordenar as bases com base no uso de frente de onda
            V= {}
            frente_de_onda = []
            maximo = 100
            gama = 0.9
            s = base_entrada
                # vai usar a frente de onda para descobrir a base vazia mais distante
            V[s] = maximo
            frente_de_onda.append(s)
            while frente_de_onda:
                s = frente_de_onda.pop(0)
                    # lista de todos os estados 'sn' adjacentes de s
                for sn in self._transicoes(s, crencas):
                    if sn != s:
                        d = dist(s, sn)
                        vs = V.get(s,0) * math.pow(gama, d )
                        vsn = V.get( sn, 0)
                        if vsn == 0 or vs > vsn:
                            #ainda nao foi explorado o caminho ou precisa de ser reavaliado
                            V[sn] = vs
                            frente_de_onda.append(sn)
            #actualiza as crencas com o "potencial de cada base" e a posicao da entrada
            crencas.definir_entrada_bases(base_entrada)
            crencas.inicializar_bases(V)
예제 #5
0
 def __init__(self): # ** deveriamos passar os parametros psa para anular as dependencais
     self.alfa = 0.5   # se for 1 fica reativo
     self.gama = 0.9   # e o elemento de previsao do futuro
     self.epson = 0.010 # faz sentido ser pequeno senao nao aproveita so explora
     self.Q= {}  #dicionario com par de estado accao com chave a que e associado o valor r
     self.accoes= psa.dirmov()
예제 #6
0
파일: crencas.py 프로젝트: pepipe/ISEL
 def __init__(self):
     self.elementos = None
     self.pos_agente = None
     #capacidades do agente, neste caso os possíveis movimentos
     self.cap_agente = [Mover(self, ang) for ang in psa.dirmov()]
예제 #7
0
 def _transicoes(self, estado, crencas):
     novos_estados = [mover(estado, accao) for accao in dirmov()]
     return [ estado for estado in novos_estados if crencas.obter_valor(estado) == 'base']