Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % 7.1
- % a)
- :- op(800, xfy, e).
- :- op(950, xfx, entao).
- :- op(850, fx, se).
- :- op(750, xfx, com).
- % R1
- se motor=nao e bateria=ma entao problema=bateria com fc=1.
- % R2
- se luz=fraca entao bateria=ma com fc=0.8.
- % R3
- se radio=fraco entao bateria=ma com fc=0.8.
- % R4
- se luz=boa e radio=bom entao bateria=boa com fc=0.8.
- % R5
- se motor=sim e cheiro_gas=sim entao problema=encharcado com fc=0.8.
- % R6
- se motor=nao e bateria=boa e indicador_gas=vazio entao problema=sem_gasolina com fc=0.9.
- % R7
- se motor=nao e bateria=boa e indicador_gas=baixo entao problema=sem_gasolina com fc=0.3.
- % R8
- se motor=nao e cheiro_gas=nao e ruido_motor=nao_ritmado e bateria=boa entao problema=motor_gripado com fc=0.7.
- % R9
- se motor=nao e cheiro_gas=nao e bateria=boa entao problema=carburador_entupido com fc=0.9.
- % R10
- se motor=nao e bateria=boa entao problema=velas_estragadas com fc=0.8.
- % b)
- :- dynamic(facto/3).
- % facto(A, V, FC).
- % c)
- questionavel(motor, 'O motor funciona?', [sim,nao]).
- questionavel(luz, 'Como estao as luzes?', [fraca,razoavel,boa]).
- questionavel(radio, 'Como esta o radio?', [fraco,razoavel,bom]).
- questionavel(cheiro_gas, 'Sente cheiro a gasolina?', [sim,nao]).
- questionavel(indicador_gas, 'Como esta o indicador de gasolina?', [vazio,baixo,meio,cheio]).
- questionavel(ruido_motor, 'Que ruido faz o motor?', [ritmado,nao_ritmado]).
- %limpar a memória de trabalho se, isto quebrar a meio!! .. ou reinicir o prolog!
- %se o motor funciona (não e sim) evitar perguntar outra vez.., se já existir um facto!
- %acrecentando aqui uma claúsula verifica, atributo e V2 igual a V, quero simplesmente que isto falhe!
- %se motor = mo e bateria=ma entao problema = bateria com fc =1
- verifica(A, V, FC):-
- facto(A,V,FC),!.%Velho),!, %facto(A, V, FC). se todas as premissas forem , atributos motor e bateria , a premissa é um conjunto de condições que pode ser motor = não e bateria = má
- % retract(facto(A,V,FCVelho)),
- % FC is FCNovo +
- verifica(A,V,FC):-
- facto(A,V2,-), V2\=V,!,fail.
- verifica(A,V,FC):-
- questionavel(A,Perg,LR),
- write(Perg:LR),read(Val),
- write('Certeza[0-1]'),read(FC),
- assert(facto(A,Val,FC)),
- !,V=Val. % fica info, na memória de trabalho que motor igual a Sim! ..
- % em vez de Val , o que tinha era motor de RL e nesta base de conhecimento o que tinha era: atributo bateria era 1024!
- verifica(A,V,FC):-
- deduz(A,V,FC). % todos na mesma página aula mais íngrata do semestre no final é que se ve a funcionar
- atualiza(A,V,FCNovo):-
- facto(A,V,FCVelho),
- FC is FCNovo + FCVelho *(1-FCNovo),
- retract(facto(A,V,FCVelho)),
- assert(facto(A,V,FC)).
- atualiza(A,V,FC):-
- assert(facto(A,V,FC)).
- deduz(A,V,FC):- %deduz(A,V,FC):-
- se Prems entao A=V com fc=FCRegra,%aqui é um objectivo!
- prova(Prems, FCPrems),
- FCNovo is FCPrems * FCRegra, %é um vezes o outro, fatores de certeza no outro. .. * FCRegra!
- actualiza(A,V,FCNovo),%quero combinar ao chegar ao fim, com os fatores de certeza! e no atributo o valor fc, coloquei a 1a regra tentei comprovar as premissas... o que vou fazer a seguir!?
- fail. % quero saber o valor para o atributo problema.. Vários factos com o mesmo produto para os fatores problemas
- deduz(A,V,FC):-
- facto(A,V,FC). %é o processamento de uma lista, conjugação de algoritmos miniMax e o núcleo do sistema, está no predicado Verifica etc!
- prova(A=V, FC):-
- verifica(A,V,FC).
- prova(A=V e Ps, FC):-
- verifica(A,V,FC1),
- prova(Ps,FC2),
- %e o fator de certeza, predicado.. e um facto de certeza com isso e atributo questionável!?
- FC is min(FC1,FC2). %não se aplica na claúsula e ou seja pode-se aplicar naquela regra!
- %como guardo a info , ou atualizo -a ?? , Senão basto mudar o assert! e dúvidas.. certeza que há!
- % facto em prolog e :-
- %guarda info num facto, pode ser importante para o futuro!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement