ArithmeticBool
Numa conversa com Moisés começamos a viajar na possibilidade de responder expressões booleanas com dependências baseado numa lógica que ele me apresentou, mas usando aritimética no lugar das expressões para dar o grau de certeza sobre uma resposta. Isso porque não teremos valores verdadeiro ou falso como atomos da expressão, mas valores numéricos indicando a certeza sobre a afirmação.
Isso se parece com lógica fuzzy. Estou definindo o seguinte: a resposta está no intervalo
[0, 1], onde
0 significa certeza absoluta do valor falso,
1 significa certeza absoluta do valor verdadeiro e
0.5 significa que não se sabe a resposta. Valores intermediários indicam o grau de certeza que pode ser facilmente convertido para um percentual.
Fica mais ou menos assim:
- Se Mônica está feliz e eu tenho acesso a internet, então eu estou feliz.
Eu não sei se Mônica está feliz, mas Carlinha e Gilmar podem me informar. Considero que é verdade se ele ou ela disserem que sim, mas minha confiança (para esse assunto) em Carlinha é de 90% e em Gilmar é de 50%, então temos as varáveis:
-
X: Carlinha diz que Mônica está feliz.
-
Y: Gilmar diz que Mônica está feliz.
-
W: Eu tenho acesso a internet.
-
F: Eu estou feliz.
A expressão é:
-
F = ( [X 90] or [Y 50] ) and W
Nesta notação quando a variável está entre colchetes significa que não será representada com 100% do seu valor. W tem 100% de confiança porque eu estou dando a informação.
Agora digamos que eu tenha os seguintes valores:
-
X = 0.8 ou seja, Carlinha me diz que esla está bem feliz.
-
Y = 0.4 ou seja, Gilmar me diz que não sabe, mas parece um pouco infeliz.
-
W = 0.95 ou seja, eu estou conectado, mas cai vez ou outra.
então temos:
-
F = ( [0.8 90] or [0.4 50] ) and 0.95
Calculando:
F = ( [0.8 90] or [0.4 50] ) and 0.95
Não entendeu nada? Porque
0.45 é 50% de
0.4? Então leia abaixo:
Como Funciona? (convertendo lógica booleana em algebra)
Revisando:
- os valores estão no intervalo entre
0 e 1, inclisive.
-
0 representa 100% de certeza em falso.
-
1 representa 100% de certeza em verdadeiro.
-
0.5 não se sabe informar.
Ou seja:
Nível de certeza em Falso:
-
0.00 = 100%
-
0.10 = 80%
-
0.20 = 60%
-
0.30 = 40%
-
0.40 = 20%
-
0.45 = 10%
|
Nível de certeza em Verdadeiro:
-
0.55 = 10%
-
0.60 = 20%
-
0.70 = 40%
-
0.80 = 60%
-
0.90 = 80%
-
1.00 = 100%
|
Se eu não confio 100% em um valor posso diminuir sua influência na resposta final, apesar de que isso pode também diminuir a certeza da resposta. O valor falso deve ser elevado para tender a
0.5 e o valor verdadeiro deve diminuir para tender, também, a
0.5.
Baseando-se na notação, veja como é o cálculo:
[X P] = ( X * Q ) + ( ( 1 - Q ) / 2 ), onde
Q = P / 100.
As analiazes das comparações booleanas não são uma busca pela probabilidade de se encontrar o valor verdade ou falso, mas uma mistura disso com a confiabilidade nas componentes. Afinal isso é uma tentativa de dar uma resposta baseada na confiança das fontes.
Se você não conhece, ou esqueceu, veja como funcionam os operadores booleanos base:
Para o
and temos que valorizar quando tivermos as duas componentes verdadeiras e tender ao falso em qualquer outro caso.
-
( X and Y )
- Se
X e Y > 0.5 (ou seja, verdadeiros):
- caso contrário:
Para o
or é preciso valorizar o verdadeiro quando concordarem ou selecionar só o verdadeiro. No caso do em que só tivermos falso, tirar uma média é o mais justo no caso.
-
( X or Y )
- Se
X e Y <= 0.5 (ou seja, falsos ou desconhecidos):
- Se
X e Y > 0.5 (ou seja, verdadeiros):
- Se tivermos um falso ou desconhecido e outro verdadeiro, pega o verdadeiro:
-
( val1 > 0.5 )? val1 : val2
A negação é a conversão para o valor exatamente contrário, isso se consegue com o complemtento para 1.
Assim como
0.9 representa 80% de certeza em verdadeiro, seu complemento
0.1 representa 80% de certeza em falso.
Testando valores no limite.
Para ter uma boa idéia do comportamento colocarei aqui testes com limite tendendo a
0,
1,
0.25,
0.5 e
0.75 pelos dois lados
(quando válido). Relacionando todos 2 a 2 na função
and e
or.
Possibilidades. Isso tem utilidade?
Isso pode morrer logo ou virar a nova moda da Web... Depois escrevo sobre isso.