1ª Prova - 28 de Janeiro de 2000
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.
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.
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 |
- envia_para_todos_licitadores(Mensagem) à ok
- valida_licitação(Licitação) à ok | erro
- insere_licitação(Leilão,Licitacao) à ok
- procura_melhor_licitação(Leilão) à Valor
implemente o processo descrito numa linguagem de programação à sua escolha.
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 |
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.
Última actualização: 19-01-2001