Prova 1 

1ª Prova - 28 de Janeiro de 2000

Tecnologia Informática


Condições gerais da prova

Índice


Parte teórica

  1. Um dos principais problemas dos sistemas usando agentes tem a ver com a dificuldade que os seres humanos têm em acreditar nas capacidade dos agentes e atribui-lhes alguma credebilidade, nomeadamente quando os agentes se destinam a substituir o ser humano.
  2. Considere o caso de um Agente para representar um comprador por comérico electrónico. Que características deveria ter esse agente para que o utilizador pudesse confiar nele? Sugira as funcionalidades que desponibilazaria num agente que desenvolvesse para o efeito.

  3. Acha que seria possível constituir uma comunidade de Agentes Inteligentes e Móveis com recurso a tecnologia RPC (Remote Procedure Call)?
  1. Considere que se transformam vários sistemas periciais desenvolvidos para omesmo domínio ou para domínios similares (admitindo alguma complementaridade) em Agentes. Que dificuldades práticas poderiam dificultar a partilha de conhecimentos entre esses Agentes?

Índice


Parte prática

Um leilão caracteriza-se por:

Pretende-se desenvolver um sistema baseado em agentes inteligentes que modelize a actividade descrita com a condicionante do processo decorrer num ambiente distribuído e em que as transacções se realizam recorrendo à internet.

  1. Identifique as entidades com potencial para serem modelizadas como agentes inteligentes, caracterizando a suas relações com outras entidades bem como a informação de que devem dispor inicialmente para que possam iniciar a sua actividade.
  1. Os licitadores devem mostrar o interesse em participar no leilão, identificando-se e apresentando informações bancárias. O leiloeiro terá a possibilidade de recusar a sua participação no leilão quer por conhecimento próprio do licitador, quer recorrendo às informações bancárias.
    Complete o diagrama seguinte, correspondente a este procedimento.

Diagrama:

Estrutura da informação (opcional):

Registos

Nome

Campos

licitador
licitador_nome		% átomo
endereço		% átomo
classificação		% bom,mau,indefinido
leilão
produto_nome		% átomo
base_licitação		% número
valor_arremate		% número
licitacões		% [licitação]
licitação
licitador_nome		% átomo
valor_licitação		% número
válida			% válida/inválida
conta
cliente_nome		% átomo
saldo			% número
movimentos		% [{átomo,valor,data}]
ocorrências		% [átomo]
inf_banco
banco_nome		% átomo
cliente_nome		% átomo
  1. Usando uma nomenclatura semelhante à do diagrama da questão anterior, especifique um protocolo de conversações respeitante ao processo de licitação entre as entidades leiloeiro, licitador e restantes licitadores. Considere que a licitação tanto pode ser aceite como recusada.
  1. Assim que deixarem de chegar licitações por determinado período de tempo (TEMPO_ESPERA_LICITAÇÃO), o leiloeiro inicia a fase de arremate (encerramento). A fase de arremate segue sempre o mesmo processo quer existam ou não licitações aceites, e consiste em comunicar a todos os licitadores três mensagens do tipo {msg_encerramento, X}, em que X varia por ordem crescente de 1 até 3. Entre cada uma das mensagens o leiloeiro espera um determinado período de tempo (TEMPO_ENCERRAMENTO_ESPERA), e sempre que ocorra uma nova licitação válida durante esse período, a fase de arremate é anulada e inicia-se de novo a fase de licitação. Após X=3, o leilão está definitivamente encerrado e o valor da licitação vencedora é comunicado a todos os licitadores.
    Partindo do princípio que já estão desenvolvidas as seguinte funções e/ou procedimentos,

implemente o processo descrito numa linguagem de programação à sua escolha.

Índice


Resolução da parte prática

  1.  
Entidades Relações Informação inicial
Leiloeiro Licitador, de quem recebe licitações e lhe envia os valores das licitações aceites no leilão e a quem envia informação de actualização das licitações. Produto, nomeadamente a base de licitação
Licitador Leiloeiro, a quem envia licitações e de quem recebe a resposta da licitacao e a actualização dos valores das licitações aceites no leilão. Valor máximo a licitar
  1.  

  1.  

  1.  

loop(Fase) ->
	case Fase of
		licitacao ->
			receive
				{msg_licitacao,Licitacao} ->
					processa_licitacao(Licitacao),
					loop(licitacao)
				after ?TEMPO_ESPERA_LICITACAO ->
					loop({arremate,1}
			end;
		{arremate,X} when X=<3 ->
			Msg={msg_arremate,X},
			envia_para_todos_licitadores(Msg),
			receive
				{msg_licitacao,Licitacao} ->
					case processa_licitacao(Licitacao) of
						ok ->
							loop(licitacao);
						error ->
							loop({arremate,X})
					end
				after ?TEMPO_ESPERA_ARREMATE ->
					loop({arremate,X+1}
			end;
		{arremate,4} ->
			Valor_arremate=procura_melhor_licitacao(),
			Msg={msg_arremate_final,Valor_arremate},
			envia_para_todos_licitadores(Msg)
	end.
processa_licitacao(Licitacao) ->
	case valida_licitacao(Licitacao) of
		erro ->
			Msg={msg_inf,Licitacao,invalida},
			envia_para_licitador(Licitacao#record_licitacao.licitador_nome,Msg),
			erro;
		ok ->
			insere_licitacao(Licitacao),
			Msg={msg_inf,Licitacao},
			envia_para_todos_licitadores(Msg),
			ok
	end.

Nota: Como simplificação do problema, parte-se do princípio que não ocorrem continuamente mensagens inválidas (no que respeita ao valor de licitação). Se assim não fosse, o processamento de timeout's não deveria ser processada assim mas através de timer's, que disparam mensagens específicas pelo que o sistema não seria afectado por mensagens inválidas.

Índice


Última actualização: 19-01-2001

Tecnologia Informática