Exemple #1
0
        def individual_request(receiver):
            message = ACLMessage()
            message.set_ontology(swc.__name__)
            message.set_content(message_content)
            message.add_receiver(receiver)

            while True:
                try:
                    response = yield from self.p_command.send_request(message)
                    display_message(
                        self.aid.name,
                        f'[Comando de Chave] Inform: {response.content}')
                except FipaRefuseHandler as h:
                    response = h.message
                    display_message(
                        self.aid.name,
                        f'[Comando de Chave] Refuse: {response.content}')
                except FipaFailureHandler as h:
                    response = h.message
                    display_message(
                        self.aid.name,
                        f'[Comando de Chave] Failure: {response.content}')
                except FipaAgreeHandler:
                    pass
                except FipaProtocolComplete:
                    break
            return response
Exemple #2
0
 def send_document():
     # Sai do hold e envia documento
     self.in_hold = False
     # Cria pacote de mensagem e envia ao ADC
     message = ACLMessage()
     message.set_ontology(out.__name__)
     message.set_content(to_elementtree(self.document_to_send))
     self.behaviours_enviodedados.send_inform(message)
Exemple #3
0
 def action(self):
     message = ACLMessage(ACLMessage.REQUEST)
     message.add_receiver(AID('supermarket'))
     message.set_ontology(
         self.agent.session)  # Defines the tipe of list required
     message.set_content('Please, give me this list')
     self.agent.send(message)
     display(self.agent,
             'I requested for %s products.' % self.agent.session)
Exemple #4
0
    def request_external_restoration(self, poda):
        """Requests external restoration to AN"""
        display_message(self.aid.name, 'Sending request to AN')

        poda_cim = rdf2mygrid.poda_cim(poda=poda)
        # poda_cim = pickle.dumps(poda)

        message = ACLMessage()
        message.set_ontology("R_05")
        message.set_content(poda_cim)
        message.add_receiver(self.get_an())

        while True:
            try:
                response_an = yield from self.req_restoration.send_request(
                    message)
                display_message(self.aid.name,
                                f'Restauração externa efetivada')

            except FipaFailureHandler as h:
                response_an = h.message
                display_message(
                    self.aid.name,
                    f'Restauração externa falhou: {response_an.content}')

            except FipaAgreeHandler:
                display_message(self.aid.name, f'Agree recebido')

            except FipaProtocolComplete:
                break

        if response_an.ontology == swc.__name__:
            display_message(
                self.aid.name,
                f'Comando de chaves para concluir restauração internamente')

            response_acom = yield from self.send_switch_command(
                content=response_an.content, purpose=swc.Purpose.RESTORATION)

            display_message(
                self.aid.name,
                f'Restauração externa concluída com fechamento de chaves internas'
            )
Exemple #5
0
    def solicitar_propostas(self, poda):
        """Define função que será chamada após cada resposta"""
        poda_cim = rdf2mygrid.poda_cim(poda)
        # poda_cim = pickle.dumps(poda)

        # Elabora mensagem
        message = ACLMessage(ACLMessage.CFP)
        message.set_protocol(ACLMessage.FIPA_CONTRACT_NET_PROTOCOL)
        message.set_ontology("CN_01")
        message.set_content(poda_cim)
        for aid in self.adc_vizinhos:
            message.add_receiver(aid)

        propostas_realizaveis = []

        while True:
            try:
                proposta = yield from self.manage_negotiation_behaviour.send_cfp(
                    message)
                display_message(
                    self.aid.name,
                    f"Mensagem PROPOSE recebida de {proposta.sender.name}")

                content = json.loads(proposta.content)
                proposta_realizavel = (content["setores"] != [])

                if proposta_realizavel:
                    # Salva proposta para mais tarde
                    propostas_realizaveis.append(proposta)

                else:
                    # Rejeita proposta imediatamente
                    name = message.sender.localname

                    ramo = proposta.content
                    display_message(
                        self.aid.name,
                        f"Agente {name} possui chave de encontro, mas nao pode colaborar para o ramo {ramo}."
                    )

                    reject_message = proposta.create_reply()
                    reject_message.set_ontology("CN_05")
                    reject_message.set_content('Proposta não realizável')
                    self.manage_negotiation_behaviour.send_reject_proposal(
                        reject_message)

            except FipaRefuseHandler as h:
                refusal = h.message
                display_message(
                    self.aid.name,
                    f"Mensagem REFUSE recebida de {refusal.sender.name}")

            except FipaCfpComplete:
                break

        # Dados da melhor proposta
        melhor_proposta = None
        setores_atendidos = 0

        # Escolha do melhor propositor sob algum criterio
        if self.criterios["carreg_SE"] and self.criterios["carga_prior"]:
            pass

        elif self.criterios["carreg_SE"] and self.criterios["perdas"]:
            pass

        elif self.criterios["carreg_SE"] and self.criterios["chaveamentos"]:
            pass

        # Apenas carregamento da SE e qtd de setores atendidos
        else:

            # Varre todas as propostas recebidas
            for message in propostas_realizaveis:
                display_message(
                    self.aid.name,
                    f"Analisando proposta {propostas_realizaveis.index(message) + 1} de {len(propostas_realizaveis)}"
                )

                # Carrega conteudo da mensagem analisada
                content = json.loads(message.content)
                name = message.sender.name

                display_message(
                    self.aid.name,
                    f"Agente {name} pode restaurar ramo {content['setores']} com carregamento de {content['carreg_SE']}%  da sua SE"
                )

                # Verifica se atual proposta atende maior numero de setores
                if len(content["setores"]) > setores_atendidos:
                    melhor_proposta = message
                    setores_atendidos = len(content["setores"])

                # Se atende o mesmo numero de setores, verifica carregamento
                elif len(content["setores"]) == setores_atendidos:
                    content_melhor_atual = json.loads(message.content)

                    # Se carregamento atual for maior, vira melhor proposta
                    if content["carreg_SE"] > content_melhor_atual["carreg_SE"]:
                        melhor_proposta = message
                        setores_atendidos = len(content["setores"])

        # Envia Reject-Proposal para demais agentes
        for message in propostas_realizaveis:
            if message is melhor_proposta:
                continue

            resposta = message.create_reply()
            resposta.set_ontology("CN_04")
            self.manage_negotiation_behaviour.send_reject_proposal(resposta)

        # Envia Accept-Proposal para Agente Ganhador
        if melhor_proposta is not None:

            resposta = melhor_proposta.create_reply()
            resposta.set_ontology("CN_04")
            resposta.set_content(melhor_proposta.content)

            while True:
                try:
                    result = yield from self.manage_negotiation_behaviour.send_accept_proposal(
                        resposta)
                    display_message(self.aid.name, "Mensagem INFORM Recebida")

                except FipaFailureHandler as h:
                    result = h.message
                    display_message(self.aid.name, "Mensagem FAILURE Recebida")

                except FipaProtocolComplete:
                    break

            return result

        else:
            display_message(self.aid.name, "Nenhuma proposta foi acatada.")
            return None