Prova Modelo

Janeiro de 2000

AISC (Testes)


Condições gerais da prova

Índice


Parte teórica

  1. Considere os dois tipos seguintes de Agentes:

Que diferenças se colocam ao nível dos requisitos de desenvolvimento dos agentes de cada um desses tipos?

  1. Admita que um agente é representado simplesmente por um processo computacional que recebe pedidos de execução de tarefas, executa essas tarefas e devolve resultados. Que tipos de problemas se poderão levantar quanto ao desempenho de tal agente? Como resolveria tais problemas?
  1. Num protocolo de negociação o agente contratante anuncia a tarefa que pretende contratar a um conjunto de agentes que conhece, aguarda que todos respondam com propostas, escolhe e selecciona a mais adequada. Haverá situações nas quais o protocolo possa falhar originando que nenhuma tarefa seja seleccionada apesar de haver potenciais contratados que a possam executar atendendo todos os requisitos especificados no anuncio? Justifique.

Índice


Parte prática

Considere-se uma bolsa de valores mobiliários tradicional e as actividades de transacção de títulos mobiliários que aí decorrem.
A bolsa de valores mobiliários (vulgo bolsa) é responsável pela identificação dos títulos bem como pela autorização de transacção dos títulos. Os títulos são transaccionados por profissionais específicos, denominados corretores, que dispõem de carteira profissional emitida e identificável pela bolsa.
Estes servem de intermediários entre a bolsa e os potenciais clientes que por sua vez emitem intenções de compra e venda de títulos. Um cliente pode ser comprador e vendedor e na sua ordem de transacção especifica para além da intenção, o título, quantidade a transaccionar e o valor a que deseja efectuar a transacção. A intenção de transacção diz sempre respeito à sessão que decorre, ou à próxima se não decorre nenhuma. O corretor emite a intenção de transacção à bolsa, sendo esta efectuada se o título atingir o valor especificado e se existir oferta em quantidade suficiente em bolsa. As intenções de compra vão sendo satisfeitas considerando a hora de registo em que foi realizada.
É comum o corretor ser ou estar directamente relacionado com um banco, que é responsável pela guarda de títulos e através do qual a transacção financeira é executada (transacção do valor de compra ou venda de títulos que será creditado ou debitado ao cliente).

Deseja-se implementar um sistema baseado em agentes inteligentes e cooperativos que modelize as actividades descritas.

  1. Identifique as entidades com potencial para serem modelizadas como agentes inteligentes. Indique as relações de cada uma destas entidades, justificando a sua necessidade.
  1. Complete o diagrama seguinte, com os termos e expressões disponíveis e considerando os símbolos e regras apresentados.

Símbolos e Regras usados na estrutura:

Base de dados

Registos

Comandos

Nome

Campos

insere(Registo,Valor_registo) -> ok,já_existe
altera(Registo,Valor_registo) -> ok,indefinido
apaga(Registo,Valor_chave) -> ok,indefinido
pergunta(Registo,Valor_chave) -> (ver p/ cada registo)
entidade
Entidade_nome	% átomo
Endereço	% átomo
[Actividade]	% [átomo]
pergunta(entidade,Actividade) -> [Entidade]
corretor
Corretor_nome	% átomo
Nº Carteira Profissional(NCP)
		% átomo
pergunta(corretor,Denominação) -> NCP
intenção
Compra/Venda	% compra,venda
Título_nome	% átomo
Corretor_nome	% átomo
Cliente_nome	% átomo
Quantidade	% número
Valor		% número
Hora_registo	% hh:mm:ss
pergunta(intenção,Título) -> [Intenção]
título
Título_nome	% átomo
Quantidade	% número
pergunta(título,Denominação) -> Quantidade
conta
Cliente_nome	% átomo
Saldo		% número
pergunta(titular,Titular) -> Saldo
conta_banco
Banco_nome	% átomo
Cliente_nome	% átomo
(não disponível)

Mensagens transaccionadas entre entidades:

  1. Usando uma nomenclatura semelhante à do diagrama da questão anterior, especifique um protocolo de conversações entre as entidades cliente, corretor e bolsa no processo iniciado por uma intenção de compra por parte do cliente. Suponha que a intenção é bem sucedida.
  1. É comum o corretor sugerir ao cliente a compra ou venda de títulos, analisando a carteira de títulos do cliente (os títulos que transacciona) e as características dos títulos comparando-as com outros. Implemente numa linguagem de programação à sua escolha, um procedimento da entidade Corretor que sugira potenciais transacções para um determinado tipo de cliente, que prefere títulos com liquidez e variação semelhantes (±10%) aos títulos da sua carteira.Considere que existem predefinidas as seguintes funções:

Índice


Resolução da parte prática

  1.  
Entidades Relações
Bolsa Corretor: as transacções em bolsa são efectuadas por corretores, que devem ser devidadmente identificados e autorizados pela entidade "bolsa";
Cliente: a bolsa identifica e autoriza os corretores perante o cliente;
Banco: as transacções mobiliárias implicam transacções financeiras, pelo que a bolsa deve dispor de conta bancária através da qual serão efectuadas.
Corretor Bolsa: (já descrito);
Banco: as transacções financeiras em bolsa devem realizadas através duma conta em banco;
Cliente: o corretor é contratado pelo cliente para efectuar transacções em bolsa.
Cliente Corretor: (já descrito);
Bolsa: (já descrito);
Banco: O cliente tem uma conta num banco através da qual será efectuada a transacção financeira com a bolsa (via corretor).
Banco Bolsa: (já descrito);
Cliente: (já descrito);
Corretor: (já descrito).
  1.  

  1.  

  1.  

sugestoes(Cliente_nome) ->
	Intencoes=cliente_intencoes(Cliente_nome),
	Titulos=[X#record_intencao.titulo_nome||X<-Intencoes],	% pode ter repetidos
	Escolhas=escolhe(Titulos,[]).
escolhe([],Escolhas) -> Escolhas;
escolhe([Titulo|Titulos],Escolhas) ->
	Titulo_saldo=cliente_titulo_saldo(Titulo),
	Mais_escolhas=if
		Titulo_saldo > 0 ->
			testa_semelhancas(Titulo)
		true ->
			[]
	end,
	Titulos_sem_repetidos=[X||X<-Titulos,lists:member(Titulo,Titulos)==false],
	Escolhas_novas=lists:append(Escolhas,Mais_escolhas),
	escolhe(Titulos_sem_repetidos,Escolhas_novas).
testa_semelhancas(Titulo) ->
	Liquidez=bolsa_titulo_liquidez(Titulo),
	{Min,Max}=bolsa_titulo_valores(Titulo),
	Valor=bolsa_titulo_valor(Titulo),
	Variação=titulo_variacao({Min,Max},Valor),
	Titulos=bolsa_titulos(),
	compara_com_titulos(Liquidez,Variação,Titulos,[]).
compara_com_titulos(Liquidez,Variação,[],Semelhantes) -> Semelhantes;
compara_com_titulos(Liquidez,Variação,[Titulo|Titulos],Semelhantes) ->
	Liquidez_outro=bolsa_titulo_liquidez(Titulo),
	{Min_outro,Max_outro}=bolsa_titulo_valores(Titulo),
	Valor_outro=bolsa_titulo_valor(Titulo),
	Variação_outro=titulo_variação({Min_outro,Max_outro},Valor_outro),
	case compara_caracteristicas(Liquidez,Liquidez_outro,Variação,Variação_outro) of
		semelhante ->
			compara_com_titulos(Liquidez,Variação,Titulos,[Titulo|Semelhantes]);
		distinto ->
			compara_com_titulos(Liquidez,Variação,Titulos,Semelhantes)
	end.
compara_caracteristicas(Lq1,Lq2,Var1,Var2) ->
	Percent_Lq=Lq1*0.1,
	Percent_Var=Var1*0.1,
	Dif_Lq=abs(Lq1-Lq2),
	Dif_Var=abs(Var1-Var2)
	if
		Dif_Lq=<Percent_Lq, Dif_Var=<Percent_Var ->
			semelhante;
		true ->
			distinto
	end.

Índice


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

AISC (Testes)