Informação Incompleta

[Exerto de: Sousa, P.; Ramos, C. and Neves, J. (1999), Manufacturing Entities with Incomplete Information. Proceedings of the 2nd International Workshop on Intelligent Manufacturing Systems (IMS-Europe'99), pp. 185-193. Leuven, Belgium, 22-24 September 1999]

Considerando a Programação em Lógica, uma qustão ?P feita à base de dados pode ser provada ou não (sendo assim verdadeira ou falsa). No entanto, a programação em lógica clássica é baseada nalguns pressupostos que impoêm limitações ao tipo de processamento necessário para tratar informação incompleta. Alguns desses pressupostos são:

Sistemas reais, no entanto, não trabalham com estes pressupostos, podendo beneficiar largamente de abordagens que evitem estas limitações. Ao adicionar capacidade para representação e reciocinio sobre informação incompleta a um sistema, a sua base de dados passa a poder descrever o mundo real de forma muito mais correcta.

Um outro ponto de acção é a representação de informação negativa explicita. Ao contrário de assumir que o que não se conhece é falso (i.e., mundo fechado), representa-se na base de dados o conhecimento de algo que sabemos ser falso. sendo assim, a base de dados tem duas partes: o que sabemos ser verdadeiro, e o que sabemos ser falso. tudo o resto é desconhecido.

Em termos de programação em lógica isso pode ser visto por:

demo(P, true) ¬ P
demo(P, false) ¬ ØP
demo(P, unknown)

Onde P é o predicado a provar, e o simbolo Ø representa 'negação explicita'. Há no entanto situações onde o mundo fechado faz sentido, e.g., um sistema de gestão de encomendas pode assumir que as encomendas não presentes na base de dados não existem (i.e., são falsas em vez de desconhecidas).

Informação Incompleta na Produção

Na àrea da produção, existem várias situações onde toda a informação necessário pelo sistema não está disponivel, e.g., uma encomenda de um cliente que nao especifica completamente os atributos dos produtos (cor, etc.). Em vez de considerar esta informação como incorrecta e ignora-la, o sistema pode utiliza-la para guiar as suas decisões dado o facto da informação ser de confiança, i.e., o cliente vai completar a encomenda mais tarde no tempo.

Embora esta informação não esteja compleamente definida, tornando assim impossivel a sua utilização, o facto de ela existir no sistema é mais util do que a sua não existencia. Supondo um cenário de escalonamento de produção, embora não seja possivel alocar os recursos para a realização daquela encomenda, é possivel efectaur uma estimativa baseada em informação estatistica do histórico do cleinte e dos produtos.

Casos Representados

Informação Negativa Explicita

% order(Id, Customer, Due_Date, Details)
 
negation(order(_, mrSmith, _, [detail(_, _, sweater_ref304)])

Mundo Fechado

negation(order(Id, Customer, Due_Date, Details)) :-
        \+ order(Id, Customer, Due_Date, Details)

Valores Nulos

% order(Id, Customer, Due_Date, Details)
 
order(202, someone, ‘22-05-1999’, [detail(20, unit, sweater_ref304)])
 
null(someone)
 
exception_null(order(N, _, D, Detail)) :-
        order(Number, C, D, Detail),
        null(C)

Valores Nulos de um conjunto Possivél

% order(Id, Customer, Due_Date, Details)
 
exception_set(order(305, mrCarl, [detail(10, unit, shirt_ref10a)]))
 
exception_set(order(305, mrCarl, [detail(10, unit, shirt_ref10b)]))

Valores Proibidos

% customer(Id, Name, ABC_Ranking, Country_of_Origin)
 
null_n_allowed(customer(C, N, R, nerd_land))
 
null_n_allowed(on_top(Object, Package)) :- 
        length(Package, 7)

Mecanismo de Inferência

demo(Q, true) :- 
        Q, 
        \+ exception_null(Q)
 
demo(Q, unknown) :- 
        exception_null(Q)
 
demo(Q, unknown) :-    
        exception_set(Q)
 
demo(Q, not_allowed) :- 
        null_n_allowed(Q)
 
demo(Q, false) :- 
        negation(Q), 
        \+ exception_set(Q)
 
demo(_, unknown)

Exemplos de questões

Valores Nulos

?- demo(order(202, mrSmith, _, _), T)
T = unknown

Valores Nulos de um conjunto & Mundo Fechado

?- demo(order(305, mrCarl, [detail(10, unit, shirt_ref10a)]), T)
T = unknown
 
?- demo(order(305, mrBill, [detail(10, unit, shirt_ref10a)]), T)
T = false

Valores Proibidos

?- demo(customer(202, mrBigNerd, 100, nerd_land), T)
T = not_allowed

(c) 1999, Paulo Sousa
comentários e sugestões
Criação: 13 de Dezembro de 1999
Ultima Alteração: 13 de Dezembro de 1999