Sunteți pe pagina 1din 19

SISTEMAS ESPECIALISTAS

Alexandre Ribeiro Dantas


alexrd@mail.com

Universidade Federal do Rio de Janeiro Departamento da Cincia da Computao Lgica em Programao Dezembro de 2000

SURGIMENTO DOS SISTEMAS ESPECIALISTAS E PROLOG


A rea de Inteligncia Artificial representa um grande repositrio de idias e tecnologias esperando para serem descobertas e aplicadas. Um dos resultados de pesquisa na rea tem sido o desenvolvimento de tcnicas que permitem modelar informaes em nveis de abstrao maiores. Essas tcnicas esto embutidas em linguagens e ferramentas que permitem a construo de programas de forma a representar a lgica humana na sua implementao, tornando-os mais fcil de desenvolver e manter. Esses programas, que simulam o comportamento humano em domnios de problemas bem definidos, so os sistemas especialistas. Acredita-se que esse tipo de suporte aplicado regras de negcio se transformar em uma caracterstica padro na maior parte das bases de d ados comerciais nos prximo anos. No final da dcada de 50, linguagens de programao especiais foram inventadas para facilitar manipulao simblica. A mais famosa a Lisp (List Processing). Devido a sua elegncia simples e flexibilidade, grande parte dos programas de pesquisa em inteligncia artificial so escritos em Lisp, ao contrrio das aplicaes comerciais. Lisp tem suas razes em uma rea da matemtica (clculo lambda). Outra linguagem, Prolog (Programming in Logic) tem suas origens em clculo de predicados de primeira ordem. A linguagem Prolog teve origem em meados da dcada de 70 na Frana, pelas iniciativas de Robert A. Kowalski e Alain Colmerauer no uso de lgica formal como base para uma linguagem de programao. O trabalho de Kowalski propo rcionou a base terica, enquanto Colmerauer realmente deu incio a linguagem criando o primeiro interpretador Prolog. David Warren construiu o primeiro compilador Prolog. Prolog uma linguagem declarativa baseada em predicados lgicos, significando que apenas necessrio declarar o modelo do problema enquanto a mquina de inferncia busca uma soluo. Sendo assim, os programas tendem a ser mais prximos dos problemas a serem resolvidos e mais adaptveis a mudanas. Desta forma, Prolog tem se mostrado fortemente associado com sistemas especialistas. Prolog a linguagem predominante em inteligncia artificial, e uma das nicas linguagens de programao baseada apenas em lgica pura. Como suas teorias so fundamentadas em clculo de predicados de primeira ordem, Prolog oferece uma sintaxe limpa e elegante, e ao mesmo tempo semnticas bem definidas. Prolog uma linguagem de programao baseada em regras. Isto significa que o programador fornece um conjunto de regras para determinada condio ser verdadeira. Para que a condio seja verdadeira, o computador deve verificar que todas as regras foram compiladas. Se alguma regra no for vlida, a condio falha. Uma das melhores caractersticas de Prolog ser uma linguagem declarativa. Isto permite ao programador construir o programa em termos do

problema e no descrevendo um algoritmo. Para o computador, isto significa que o programa informa o que verdadeiro e o que precisa ser feito ao invs de como faz -lo. Prolog a melhor linguagem para ser utilizada em sistemas especialistas, uma vez que construda com semntica declarativa e possui poderosos mecanismos de unificao e busca embutidos. Prolog permite fcil programao quando envolvida com aplicaes em inteligncia artificial, uma vez quep ossui habilidade de separar o conhecimento das informaes do controle. Sendo baseada em lgica, Prolog permite uma representao do conhecimento de forma rica, como necessria, e as relaes lgicas entre os dados. Prolog tem uma base de dados embutida o que a torna mais poderosa do que implementar outros tipos de aplicaes de base de dados. Prolog tem um provador de teoremas interno que ajuda o sistema a decidir quais regras selecionar em determinada situao. Prolog usa inferncia atravs de backward chaining, at que os fatos na base de dados sejam encontrados. Prolog geralmente utiliza pequena frao de espao em disco como programas similares em linguagens procedurais. A linguagem fcil de ler e manter.

O QUE SO SISTEMAS ESPECIALISTAS


Sistemas especialistas so relativamente novos no campo da cincia da computao. No final dos anos 60 e incio dos anos 70, os primeiros desses sistemas comearam a surgir, mas ainda eram poucos e isolados, devido ao conhecimento limitado no campo, falta de linguagens de programao apropriadas e o alto custo. Um sistema especialista a representao, em um programa computacional, de um ser humano especialista de um determinado domnio de aplicao, devendo agir como tal. Ele deve ser capaz de agir racionalmente, lidar com incertezas e informaes incompletas na soluo de problemas que precisam da deciso de um especialista. Sistemas especialistas podem ser considerados sistemas baseados em conhecimentos, porm com a capacidade de explicar seu comportamento e decises para o usurio, permitindo melhor avaliao da incerteza. Os domnios de aplicao mais comuns hoje em dia, incluem sistemas para diagnsticos mdicos, localizao de falha de equipamentos ou interpretao de dados de medio. Sistemas especialistas so programas de computadores que analisam dados em uma forma que, se feito por humanos, seria considerada inteligente. So caracterizados por lgica simblica ao invs de clculos numricos; uma base de conhecimento explcita que compreendida por um especialista na rea; e habilidade em explicar concluses com conceitos significativos para o usurio. Os sistemas podem ser teis de duas maneiras: no suporte a decises (comum na medicina) ou na tomada de decises (comum na rea industrial). Sistemas especialistas so utilizados como produtos stand-alone, como em companhias de carto de crdito, para tomada rpida de decises; ou ento embutidos em outros produtos. Entretanto, h alguns problemas na utilizao de sistemas especialistas. Os sistemas no exibem de gradao sensvel, ou seja, se o sistema chega ao limite do seu conhecimento, torna-se completamente sem sentido. Um ser humano, ao contrrio, pode avisar que est no limite do seu conhecimento, dar uma resposta razovel e no sem sentido, ou indicar algum a outra pessoa para ser consultada. H o grande perigo de seguir cegamente as sugestes de sistemas especialistas, principalmente no caso de sistemas mdicos, onde os riscos so altos e questes ticas importantes. Alm disso, a velocidade dos computadores ainda no suficiente para grandes bases de conhecimento e a aquisio de conhecimento um processo demorado, caro e sujeito a erros. Esses problemas envolvem dificuldade em capturar o conhecimento profundo do domnio, ou seja, o sistema

apenas sabe os dados e regras programados nele, no podendo inferir novas regras ou originar novos dados, apenas utilizar a informao existente. Finalmente, problemas pequenos podem ser verificados, mas h poucas chances de se realmente saber se a soluo para problemas muito grandes funciona sem realmente aplic-la. As reas mais favorveis para anlise de sistemas especialistas possuem algumas ou todas as caractersticas abaixo: O conhecimento necessrio para tomada de decises razoavelmente bem delimitado. Pessoas especialistas na rea podem achar solues precisas muito mais rapidamente do que pessoas que no so especialistas. H valor considervel em se atingir solues precisas rapidamente, para justificar o esforo de automao do processo de deciso. Os dados necessrios como consulta para a deciso podem ser descritos objetivamente.

APLICAES E BENEFCIOS DOS SISTEMAS ESPECIALISTAS


Sistemas especialistas tm se tornado amplamente utilizado na indstria em geral. Abaixo esto listadas algumas das principais aplicaes de sistemas especialistas: Diagnstico e Problemas de Dispositivos e Sistemas - Sistemas que deduzem falhas e sugerem aes corretivas para o mal funcionamento de um dispositivo ou processo. H provavelmente mais aplicaes de diagnstico d sistemas especialistas do que e qualquer outro tipo. O problema de diagnstico pode ser caracterizado de forma abstrata como: dada uma evidncia, quais so os problemas/razes/causas relacionados ? Planejamento e Escalonamento Sistemas que analisam um conjunto de um ou mais objetivos complexos e interativos, de forma a determinar conjunto de aes para atingir os objetivos ou prover uma ordenao temporal detalhada das aes, levando em considerao recursos disponveis e outras restries. Esta classe de problemas tem grande potencial comercial e envolve, por exemplo, escalonamento de vos, tripulao e portes para cias areas. Configurao de objetos a partir de sub-componentes til em muitas diferentes indstrias, envolvendo projeto de engenharia e construo complexos. Formao de decises financeiras Programas que aconselham banqueiros a decidir realizar emprstimos, verificao do risco e preo de seguro para companhias de seguro. Publicao do conhecimento Entregar conhecimento relevante para o usurio no contexto do seu problema. Por exemplo, aconselhar um usurio em uma construo gramatical mais apropriada em um texto, ou aconselhar um usurio em uma estratgia de impostos em um programa de preparao de impostos.

Os principais benefcios para o usurio final, associados ao uso de sistemas especialistas podem ser identificados como: Aumento da rapidez do trabalho humano profissional Em empresas, reduo de custos internos, como resultado de melhoria de qualidade pela introduo da tecnologia de sistemas especialistas. Aumento da qualidade da tomada de decises. Preservao do conhecimento especialista, de indivduos que se aposentam ou deixam a empresa ou para manter o know-how para que possa ser aplicado em outros lugares. Introduo de novos produtos.

PAPIS NO DESENVOLVIMENTO DE SISTEMAS ESPECIALISTAS


Durante o desenvolvimento de um sistema especialista, alguns papis podem ser identificados: Especialista do Domnio Pessoa que atualmente resolve os problemas e responde s perguntas indicadas para o sistema. o especialista, cujo conhecimento e experincia devem ser codificados no sistema. Engenheiro de Conhecimento Codifica o conhecimento em uma forma declarativa que pode ser utilizada pelo sistema. Esse processo o mais complexo e demorado em um desenvolvimento de um sistema especialista. O engenheiro de conhecimento deve trabalhar ao lado do especialista do domnio, para garantir que toda a informao possvel est sendo colocada no sistema de forma correta. Engenheiro de Sistema Pode ser utilizado no desenvolvimento do sistema, sendo responsvel por construir a interface com o usurio, projetar o formato declarativo da base de conhecimento e tambm implementar a mquina de inferncia. Usurio Indivduo que consulta o sistema por conselhos ou solues para um problema, que anteriormente seriam providas pelo especialista do domnio.

Para construir um sistema especialista que resolve problemas em um determinado domnio, o engenheiro do conhecimento deve comear atravs da su a familiarizao com os aspectos e a terminologia do domnio. A partir disto, ele pode iniciar exaustiva comunicao com os reais especialistas para adquirir e consolidar seu conhecimento. Finalmente, o engenheiro pode organizar os resultados das entrevistas e traduzi-las em um software que um computador possa usar. Um usurio apresenta ao sistema problemas especficos ao domnio. O sistema, ento, aplica seu conhecimento armazenado para resolver o problema.

SISTEMAS ESPECIALISTAS FAMOSOS


Alguns sistemas especialistas famosos so ilustrados na lista abaixo: XCON (R1) Projeta computadores VAX, baseado em OPS5. Voc informa quantos usurios quer Ter, quanta memria precisa, etc. e o sistema informa quantos andares, mquinas, mesas e at comprimento correto dos cabos. At 1983, possua mais de 3000 regras, sendo um sucesso comercial. CADUCEUS Um programa de medicina que conhece sobre 500 doenas. MYCIN Talvez o mais famoso sistema especialista mdico. Diagnostica doenas do sangue. Usa backward chaining. importante para pesquisa, mas no utilizado na prtica devido as limitaes da base de conhecimento. Usa fatores de certeza para o raciocnio ao invs de probabilidades e conjuntos fuzzy. TAXMAN Sistema especialista legal para casos de cobranas. PROSPECTOR Sistema que ajuda na previso de depsitos minerais. Baseia-se em probabilidades. PUFF/CENTAUR/WHEEZE Sistemas especialistas para desordens pulmonares. Usa frames e regras. ONCOCIN Conselheiro de quimioterapia para planos de tratamento de cncer.

ESTRUTURA DE UM SISTEMA ESPECIALISTA


A estrutura de um sistema especialista envolve as seguintes funcionalidades: soluo de problemas usando conhecimento especfico ao domnio e lidando com incerteza; e interao com usurio, que inclui explicao do comportamento e decises durante e depois do processo de soluo de problemas. Representao do conhecimento e raciocnio so tpicos delicados da estrutura, assim como a manuteno de uma suave interao durante o raciocnio. A figura abaixo ilustra a estrutura de um sistema especialista. shell
base de conhecimento mquina de inferncia interface com usurio usurio

Figura 1 - Estrutura do Sistema Especialista (Bratko) Uma ferramenta para sistemas especialistas um ambiente de desenvolvimento que contm os componentes bsicos de um sistema especialista. Associado ao shell, h o mtodo para construir aplicaes, configurando e instanciando esses componentes. Os componentes so ilustrados abaixo. Base de conhecimento - Armazenamento de fatos e heursticas do conhecimento. A ferramenta proporciona um ou mais esquemas de representao de conhecimento para expressar o conhecimento sobre o domnio de aplicao. Algumas usam frames e regras de produo. Em Prolog, o conhecimento representado atravs de declaraes lgicas. Mquina de inferncia - Mecanismos de inferncia para manipular a informao simblica e o conhecimento da base para formar uma linha de raciocnio para resolver um problema. O mecanismo de inferncia pode variar desde simples modus ponens backward chaining de regras de produo at raciocnio mais complexos. Subsistema de aquisio de conhecimento - Auxilia na construo da base de conhecimento, coletando conhecimento necessrio para resolver problemas. um dos principais entraves para construo de sistemas especialistas. Subsistema de explicao Explica as aes do sistema. A explicao pode variar desde como a soluo final ou intermedirias foram alcanadas at justificar a necessidade de dados adicionais. Interface com usurio Significa meios de comunicao com o usurio.

A base de conhecimento representa o conhecimento que especfico do domnio de aplicao, atravs de fatos e regras que descrevem as relaes e fenmenos que ocorrem naquele domnio, alm de formas possveis para soluo de problemas (heursticas, mtodos, idias). A mquina de inferncia e a interface com o usurio formam o shell do si stema, que independe do domnio sendo caracterizado. A mquina de inferncia o instrumento que sabe como usar o conhecimento contido na base, enquanto a interface com o usurio proporciona a comunicao entre o usurio e o sistema, permitindo o acompanhamento do processo de soluo de problema sendo realizado pela mquina de inferncia. Uma forma simples de desenvolver sistemas especialistas ter um shell que atue universalmente, associando-o a diversas bases de conhecimento de aplicaes distintas, que devem concordar com o protocolo estabelecido por ele. As bases de conhecimento

podem ser representadas por diversas tcnicas, como as baseadas em regras (regras de produo if-then, por exemplo), redes semnticas ou frames. H numerosos shells comerciai s para sistemas especialistas, cada um apropriado para um conjunto diferente de problemas. O trabalho com sistemas especialistas inclui tanto escrever shells de sistemas especialistas como tambm escrever sistemas usando shells. Esta ltima opo geralmente reduz o custo e o tempo de desenvolvimento, se comparada com a opo de desenvolver todo o sistema a partir do zero. As ferramentas auxiliam o engenheiro a detectar inconsistncias, redundncias e incompletudes do conjunto de regras, alm de permitir sua edio e depurao, e rastrear a cadeia de inferncia. Alguns dos shells mais conhecidos para uso de sistemas especialistas esto ilustrados abaixo: EMYCIN (Empty Mycin) ART (Automated Reasoning Tool) OPS5 (Primeiro bom shell amplamente usado, faz forward chaining) CLIPS (Verso menor e mais barata do ART, sintaxe mais limpa do que OPS5) OPS83 (Extenso do OPS5, mais construes tradicionais de programao - loops) KEE (Knowledge Engineering Environment) Knowledge Craft.

CONSTRUINDO UM SISTEMA ESPE CIALISTA


Algumas perguntas e passos podem ser feitos como guia para a construo de um sistema especialista: O domnio bom para a construo de um sistema especialista ? O conhecimento pode ser expressado atravs de regras de produo ? H um especiali sta do domnio disponvel, capaz e interessado em ajudar ? Engenheiro de Conhecimento entrevista o especialista do domnio Engenheiro cria a base de regras e conhecimento Engenheiro verifica consistncia, redundncia e completude das regras

A primeira e tapa para se projetar um sistema especialistas a escolha do problema. A necessidade da soluo deve justificar os custos envolvidos no desenvolvimento. Conhecimento especialista humano no est disponvel em todas as situaes quando necessrio, pois se o conhecimento amplamente avalivel, no justifica o desenvolvimento de um sistema especialista. O problema pode ser resolvido utilizando-se tcnicas de raciocnio simblico, sem precisar de habilidade ou destreza fsica. O problema bem estruturado e no requer muito conhecimento comum no formal. O problema no pode ser facilmente resolvido usando-se mtodos computacionais tradicionais. Se existe uma soluo algortmica boa, no ser usado um sistema especialista. Existem especialistas cooperativos e articulados, disponveis para ajudar na aquisio do conhecimento do domnio. Os problemas so de tamanho e escopo apropriados, que requerem conhecimento altamente especializado, mas levaria tempo razovel para um humano resolver.

Tendo reconhecido que o problema favorvel, necessrio extrair o conhecimento do especialista e represent-lo, utilizando um shell de sistemas especialistas. Este o trabalho do engenheiro de conhecimento, mas envolve forte colaborao dos especialistas do domnio e usuri os finais. Esta etapa conhecida como Engenharia do

Conhecimento. O engenheiro do conhecimento o especialista em representao e linguagem de inteligncia artificial, sendo capaz de selecionar um shell favorvel para o projeto, extrair o conhecimento do especialista e implement-lo de forma correta e eficiente em uma base de conhecimento. Para extrair conhecimento do especialista, o engenheiro deve inicialmente tornar-se familiar com o domnio do problema, atravs de textos introdutrios ou conversas, seguindo para mais sistemticas entrevistas. Tipicamente, o especialista apresenta conjuntos de exemplos de problemas e mostra seu raciocnio na soluo dos problemas. O engenheiro deve abstrair regras gerais destas explicaes e valid -las com o especialista. O ciclo bsico do desenvolvimento deve envolver rpida construo de um prottipo inicial, testes iterativos e modificaes no prottipo com especialistas e usurios finais, para verificar a validade das regras e se o sistema proporciona informaes ne cessrias para satisfazer o usurio, assim como performance. Para desenvolver o prottipo inicial, o engenheiro deve tomar decises sobre a forma apropriada de representar o conhecimento e os mtodos de inferncia (regras, regras e frames, forward ou backward chaining). Para testar essas decises bsicas de projeto, o prottipo inicial apenas resolve pequena parte do problema geral, testando se os mtodos utilizados se comportam bem. A Representao do Conhecimento formaliza e organiza o conhecimento. Uma das mais utilizadas representaes so as regras de produo, formadas por condio e ao (ifthen). A parte if lista um conjunto de condies em alguma combinao lgica.. Como consequncia, a parte then pode ser concluda, ou a ao de soluo do probl ema tomada. Sistemas especialistas cujo conhecimento representado por regras so chamados de Sistemas Baseados em Regras. Portanto, as regras de produo if-then so declaraes condicionais que definem relaes lgicas entre os conceitos do domnio. Elas so da forma: if pr-condio P then concluso C if situao S then ao A if condies C1 e C2 se aplicam then condio C no se aplica

As principais vantagens em se usar regras de produo se baseiam no fato de que elas so uma forma natural para expressar conhecimento. Alm disso, notam-se caractersticas como modularidade, incrementabilidade, modificabilidade e transparncia do sistema. Entretanto, para alguns domnios (como o de diagnsticos mdicos), necessrio algum grau de qualificao probabilstica na interpretao do conhecimento. Usar a sintaxe de Prolog para regras, tem agumas desvantagens: A sintaxe pode nao ser conveniente para um usurio no familiarizado com Prolog, por exemplo, o especialista do domnio que deveria ser capaz de ler as regras, especificar novas e modific-las. A base de conhecimento no sintaticamente distinguvel do resto do programa. Uma distino mais explcita seria mais desejvel. Redes semnticas e frames so formas de representao do conhecimento favorve is para a representao de grandes conjuntos de fatos de forma estruturada. Ambas so facilmente implementadas em Prolog, descrevendo objetos e suas relaes. Fatos podem ser verificados diretamente ou inferidos atravs de mecanismos como herana de fatos. Frames so baseados em uma viso mais passiva do conhecimento, um encapsulamento de conhecimento simblico sobre uma entidade a ser representada. Tipicamente, um frame consiste de uma lista de propriedades da entidade e os respectivos valores. Por exemplo:

[VIRUS]

stage symptoms time

[FLU]

symptoms time type

[HIV]

symptom stage blood density

Durante a sua representao, o conhecimento, entretanto, quase sempre incompleto e impreciso. Para domnios mais complicados, pode ser necessrio buscar alternativas s regras de produo (if-then), como por exemplo, lgica fuzzy ou conceitos relacionados a probabilidade. O conjunto de mtodos para usar conhecimento impreciso em combinao com dados imprecisos no processo de raciocnio, chamado de raciocnio com incerteza. Sistemas Baseados em Regras podem ser guiados por metas ou guiados por dados (backward e forward chaining), ou pode usar ambas estratgias, que representam o Modelo de soluo. A mais comum utilizar backward chaining, uma vez que o sistema especialista ir coletar informaes sobre o problema do usurio atravs de questes que so relevantes para a soluo. O raciocnio em backward chaining feito seguindo-se uma cadeia de regras partindo -se da hiptese, utilizando a base de conhecimento para verificar sua validade. Esse tipo de raciocnio o implementado em Prolog. O raciocnio em forward chaining no parte da hiptese, mas, a partir da incluso d fatos na base de e conhecimento, so geradas novas concluses. O dilema de escolher entre backward ou forward chaining no possui soluo instantnea, depende muito do problema e tambm da forma da rede de regras. Se h poucos ns de dados e muitos ns de metas, forward chaining pode ser mais apropriado. Se queremos provar que alguma hiptese verdadeira, mais natural fazer backward, iniciando-se com a hiptese. Se h muitas hipteses competindo e no h razo para comear com uma ao invs de outra, m elhor fazer forward chaining, que mais natural no monitoramento de tarefas onde os dados so adquiridos continuamente e o sistema tem que detectar se surgiu alguma anomalia. Freqentemente, haver um conjunto de possveis solues para o problema. O sistema dever considerar cada soluo hipottica e tentar provar se ou no vlida. Algumas vezes, o sistema no ser capaz de provar ou negar algo a partir dos dados iniciais, ento ele perguntar ao usurio questes adicionais para concluir qual das possveis solues a correta. Em geral, soluo de problemas usando backward chaining envolve busca de todas as possveis situaes para provar a hiptese. Uma forma comum fazer como Prolog, usando busca em profundidade com backtracking. Abaixo, um exemplo de regras para raciocnio em backward chaining. Esta forma de raciocnio freqentemente utilizada em problemas que envolvem identificao e diagnstico. IF paciente tem febre E paciente tem dor de cabea THEN prescrever medicao A OU prescrever medicao B IF paciente alrgico a medicao A THEN NO prescrever medicao A E prescrever medicao B Exemplo de regras para raciocnio em forward chaining. Todos os dados iniciais so apresentados e a mquina de inferncia os utiliza para atingir a concluso apropriada. IF and and and pode prescrever medicao A pode prescrever medicao B paciente est tomando medicao C medicao A reage com medicao C

and THEN and

reao ameaa de vida prescrever medicao B no pode prescrever medicao A

Um interpretador simples de regras em backward chaining (Bratko): ::::op(800, op(700, op(300, op(200, fx, if). xfx, then). xfy, of). xfy, and).

is_true(P) :- fact(P). % A relevant rule whose condition is true is_true(P) :- if Condition then P, is_true(Condition). is_true(P1 and P2) :- is_true(P1), is_true(P2). is_true(P1 or P2) :- is_true(P1); is_true(P2). Um interpretador simples de regras em forward chaining (Bratko): forward :- new_derived_fact(P), !, % new fact write(Derived:), write(P), nl, assert(fact(P)), forward; % continue write(No more facts). % no facts derived new_derived_fact(Concl) :if Cond then Concl, % a rule no fact(Concl), % rules conclusion not yet a fact composed_fact(Cond). % condition true ? composed_fact(Cond) :- fact(Cond). % simple fact composed_fact(Cond1 and Cond2) :composed_fact(Cond1), composed_fact(Cond2). composed_fact(Cond1 or Cond2) :composed_fact(Cond1);composed_fact(Cond2).

Em funo dos Sistemas Especialistas lidarem com incerteza ou conhecimento de heurstica, sua credibilidade freqentemente questionada. Quando uma resposta duvidosa, necessrio saber que raciocnio foi feito. Se o raciocnio parecer plausvel, possvel acreditar na resposta. A maioria dos sistemas especialistas possuem a habilidade de responder perguntas da forma: Porque a resposta X? ou Como voc concluiu isso?. Facilidades de explicaes podem ser geradas rastreando -se a linha de raciocnio usada pela mqu ina de inferncia. Prover essa explicao envolve, no mnimo, guardar que regras foram usadas na busca da soluo, e utilizar esse armazenamento para a explicao. Entretanto, facilidades de explicao no so amplamente usadas, e quando usadas, no so vistas como aceitveis pelos usurios. Uma das razes para isto que as explicaes apenas referenciam o conhecimento superficial codificado pelas regras, ao invs do conhecimento sobre o domnio que originalmente motivou as regras (que no usualmente re presentado). Portanto, o sistema pode dizer que concluiu X devido a regra 23, mas no explica o que a regra 23 significa. Outra razo para a falha das facilidades de

explicao o fato de que se o usurio falha ao tentar entender ou aceitar a explicao, o sistema no pode explicar novamente de outra forma, como humanos fazem.

EXEMPLOS DE SHELL DE SISTEMAS ESPECIALISTAS EM PROLOG


A seguir, um exemplo simples de um sistema especialista baseado em regras que utiliza backward chaining. Dadas possveis hipteses, ele faz o encadeamento reverso em cada uma, tentando descobrir se verdadeira ou no. Se ele no puder provar um fato usando as regras, ele ir perguntar ao usurio se ele verdadeiro ou falso. Uma vez que ele tenha provado uma das hipteses, ele ir apresentar suas concluses para o usurio. Os vrios operadores de corte (!) so utilizados para controlar o backtracking. O predicado principal check_hypothesis. Esse predicado utiliza backtracking para passar por todos os membros da lista de hipteses para ver se cada um pode ser provado como verdadeiro pelo backward chaining. Uma vez que tenha achado um, ele escreve uma mensagem apropriada para o usurio. Para fazer isto, primeiro ele procura por um texto apropriado para concluso em particular (exemplo good_pet(tweety)) usando o predicado atext/2. Ento ele usa o predicado prprio do compilador (Mac Prolog), message/1 para escrever a mensagem. O principal b_chainpredicate tem quatro casos, lidando com os casos: h uma conjuno de metas para provar; a meta a ser provada apenas um fato; h uma regra cuja concluso combina com a meta; e o fato aonde o usurio diz que alguma coisa verdadeira. O predicado user_says_its_true utiliza o predicado embutido do compilador (Mac Prolog) yesno/1, que abre uma janela de dilogo com algum texto e dois botes (sim e no), e sucede se o usurio clicar no boto sim. Se o usurio diz que alguma coisa verdade, ento o fato inserido na base de dados. Um exemplo de dilogo do sistema (S) com um usurio (U) est ilustrado abaixo: ?S: U: S: U: S: U: S: U: S: U: S: U: S: U: S: find_good_pet. Does lenny have feathers? No. Is lenny cuddly? no Does eddie have feathers? yes. Is eddie small? no Is eddie cuddly? no Does tweety have feathers? yes Is tweety small? yes I suggest that tweety would make a good pet.

A seguir, o cdigo fonte em Prolog do exemplo do shell.

%% -----------------------------------------------------------------%% Micro Expert System. %% Alison Cawsey, Feb 1993 % OPERATOR DECLARATIONS :- op(975, fx, if). :- op(950, xfy, then). :- op(925, xfy, and). % EXPERT SYSTEM RULES (EXPERT KNOWLEDGE BASE) rule(if rule(if rule(if rule(if rule(if eats(X, Y) and living(Y) then carnivore(X)). carnivore(X) and big(X) then dangerous(X)). has_feathers(X) then bird(X)). bird(X) and small(X) then good_pet(X)). cuddly(X) then good_pet(X)).

% TEXT TEMPLATES FOR ENGLISH % qtext/2: Provides a simple template based translation into English % questions. qtext(cuddly(X), ['Is ', X, ' cuddly?']). qtext(has_feathers(X), ['Does ', X, ' have feathers?']). qtext(small(X), ['Is ', X, ' small']). % atext/2: Template based translation into recommendations. atext(good_pet(X), ['I suggest that ', X, ' would make a good pet.']). % EXAMPLE TEST CASE find_good_pet :- check_hypothesis([good_pet(lenny), good_pet(eddie), good_pet(tweety)]). % MAIN EXPERT SYSTEM SHELL CODE % % % % % % % % % % check_hypothesis(+Hypotheses) Succeeds when one of the hypotheses is proved true, or it has tried them all. Picks a hypothesis, and uses b_chain to find out if it is true. If it is true then b_chain succeeds and check_hypothesis writes out the appropriate recommendation. If false it backtracks to 'on' to find another hypothesis to try. Once it has tried all the hypotheses it will backtrack to second check_hypothesis clause and write an appropriate message. (Uses MacProlog built in predicates message/1 and on/2)

check_hypothesis(Hypotheses) :on(Hypoth, Hypotheses), bchain(Hypoth), !, atext(Hypoth, Text), message(Text).

% % % %

get a member of hypotheses b_chain to check if true. get hold of appropriate text. write out the recommendation

check_hypothesis(_) :- message(['None of the possible hypotheses seem to be true']).

% bchain(+Goal) % Succeeds if Goal is true, given rules + facts supplied by user as % backward chaining proceeds. bchain(G1 and G2):- !, bchain(G1), bchain(G2). b_chain(Goal) :userfact(Goal). % G1 and G1 are true if % G1 can be proved by backward chaining % and G2 can be too. % G's true if its a fact!

bchain(Goal):rule(if Preconditions then Goal), bchain(Preconditions).

% % % %

Goal is true if there's a rule concluding it and its Preconditions can be proved by backward chaining

bchain(Goal):user_says_its_true(Goal). % % % %

% Goal is true if % user says its true.

user_says_its_true(+Goal) True if there is some text to use to ask the user about it, and when you ask the user they say yes. Uses MacProlog built in predicate yesno/1

user_says_its_true(Goal) :qtext(Goal, Text), yesno(Text), assert(userfact(G)).

% Add the fact to Prolog's database.

Agora, vamos analisar um outro exemplo de shell mais completo, que permite iterao com usurio e proporciona facilidades de explicao (Bratko). % % % % % % % % Procedure explore(Goal,Trace,Answer) finds Answer to a given Goal. Trace is a chain of ancestor goals and rules. 'explore' tends to find a positive answer to a question. Answer is 'false' only when all the possibilities have been investigated and they all resulted in 'false'. op(900,xfx,:). op(800,xfx,was). op(870,fx,if). op(880,xfx,then). op(550,xfy,or). op(540,xfy,and). op(300,fx,'derived by'). op(600,xfx,from). op(600,xfx,by).

:::::::::-

% Program assumes: op(700,xfx,is), op(500,fx,not)

explore(Goal,Trace,Goal is true was 'found as a fact') :- fact : Goal.

% Assume only one rule about each type of goal explore(Goal, Trace, Goal is TruthValue was 'derived by' Rule from Answer) :Rule : if Condition then Goal, % rule relevant to goal explore(Condition,[Goal by Rule | Trace], Answer), truth(Answer,TruthValue). explore(Goal1 and Goal2, Trace, Answer) :!, explore(Goal1,Trace,Answer1), continue(Answer1,Goal1 and Goal2, Trace, Answer). explore(Goal1 or Goal2, Trace, Answer) :exploreyes(Goal1,Trace,Anser); exploreyes(Goal2,Trace,Answer). explore(Goal1 or Goal2,Trace, Answer1 and Answer2) :!, not exploreyes(Goal1,Trace,_), not exploreyes(Goal2,Trace,_), % no positive answer explore(Goal1,Trace,Answer1), % answer 1 must be negative explore(Goal2,Trace,Answer2). % answer 2 must be negative explore(Goal,Trace, Goal is Answer was told) :useranswer(Goal,Trace,Answer). % user supplied answer exploreyes(Goal,Trace,Answer) :explore(Goal,Trace,Answer), positive(Answer). continue(Answer1,Goal1 and Goal2, Trace, Answer) :positive(Answer1), explore(Goal2,Trace,Answer2), (positive(Answer2), answer =Answer1 and Answer2; negative(Answer2),answer = Answer2). continue(Answer1,Goal1 and Goal2,_,Answer1) :negative(Answer1). truth(Question is TruthValue was Found, TruthValue) :- !. truth(Answer1 and Answer2, TruthValue) :truth(Answer1,true), truth(Answer2,true), !, TruthValue = true; TruthValue = false. positive(Answer) :- truth(Answer,true). negative(Answer) :- truth(Answer,false).

% % % % %

Procedure useranswer(Goal,Trace,Answer) generates, through backtracking, user-supplied solutions to Goal. Trace is a chain of ancestor goals and rules used for why explanation.

useranswer(Goal,Trace,Answer) :askable(Goal,_), % may be asked of the user freshcopy(Goal,Copy), % variables in goal renamed useranswer(Goal,Copy,Trace,Answer,1). % Do not ask again about an instatiated goal useranswer(Goal,_,_,_,N) :N >1, instantiated(Goal), !, fail.

% repeated question ? % no variables in goal % do not ask again

% Is Goal impled true or false for all instantiations? useranswer(Goal,Copy,_,Answer,_) :wastold(Copy,Answer,_), instance_of(Copy,Goal), !. % answer to Goal implied % Retrieve known solutions, indexed from B on, for Goal useranswer(Goal,_,_,true,N) :wastold(Goal,true,M), M >= N. % Has everything already been said abaout Goal? useranswer(Goal,Copy,_,Answer,_) :end_answers(Copy), instance_of(Copy,Goal), !, % Everything was said about Goal fail. % Ask the user for (more) solutions useranswer(Goal,_,Trace,Answer,N) :askuser(Goal,Trace,Answer,N). askuser(Goal,Trace,Answer,N) :askable(Goal,ExternFormat), format(Goal,ExternFormat,Question,[],Variables), % get format ask(Goal,Question,Variables,Trace,Answer,N). ask(Goal,Question,Variables,Trace,Answer,N) :nl, (Variables = [], !, write('Is it true: '); write('Any more solution to: ')), write(Question), write('?'), getreply(Reply), !, % Reply = yes/no/why process(Reply,goal,Question,Variables,Trace,Answer,N). process(why,Goal,Question,Variables,Answer,N) :showtrace(Trace), ask(Goal,Question,Variables,Trace,Answer,N). process(yes,Goal,_,Variables,Trace,true,N) :nextindex(Next), % get new free index to wastold Next1 is Next+1, (askvars(Variables),

assertz(wastold(Goal,true,Next)); % record solution freshcopy(Goal,Copy), % copy of goals useranswer(Goal,Copy,Trace,Answer,Next1)). % more answers ? process(no,Goal,_,_,_,false,N) :freshcopy(Goal,Copy), wastold(Copy,true,_), !, % 'no' means no more solutions assertz(end_answers(Goal)), % mark end of answers fail; nextindex(Next), % next free index to wastold assertz(wastold(Goal,false,Next)). % 'no' means no solution format(Var,Name,Name,Vars,[Var/Name | Vars]) :- var(Var), !. format(Atom,Name,Atom,Vars,Vars) :atomic(Atom), !, atomic(Name). format(Goal,Form,Question,Vars0,Vars) :Goal =..[Functor|Args1], Form = ..[Functor|forms], formatall(Args1,Forms,Args2,Vars0,Vars), Question = ..[Functor|Args2]. formatall([],[],[],Var,Vars). askvars([]). askvars([Variable/Name | Variables]) :nl, write(Name), write('='), read(Variable), askvars(Variables). showtrace([]) :- nl, write('This was your question'), nl. showtrace([Goal by Rule | Trace]) :nl, write('To investigate, by '), write(Rule), write(','), write(Goal), showtrace(Trace). instantiated(Term) :- numbervars(Term,0,0). % instance_of(T1,T2) : instance of T1 is T1; that is % term T1 is more general than T1 or equally general as T2 instance_of(Term,Term1) :freshcopy(Term1,Term2), numbervars(Term2,0,_), Term = Term2. freshcopy(Term,FreshTerm) :asserta(copy(Term)), rectrac(copy(FreshTerm)), !.

lastindex(0). nextindext(Next) :retract(lastindex(Last)),!, Next is Last+1, asssert(lastindex(Next)). getreply(Reply) :read(Answer), means(Answer,Reply),!; nl, write('Answer unknown, try again please'),nl, getreply(Reply). means(yes,yes). means(y,yes). means(no,no). means(n,no). means(why,why). means(w,why). numbervars(Term,N,NPlus1) :var(Term),!, Term = var/N, NPlus1 IS N+1. numbervars(Term,N,M) :Term = ..[Functor|Args], numberargs(Args,N,M). numberargs([],N,N) :- !. numberargs([X|L],N,M) :numbervars(X,N,N1), numberargs(L,N1,M1). present(Answer) :nl,showconclusion(Answer), nl, write('Would you like to see how?'), getreply(Reply), (Reply=yes,!,show(Answer);true)). showconclusion(Answer1 and Answer2) :!, showconclusion(Answer1), write('and'), showconclusion(Answer2). showconclusion(Conclusion was Found) - write(Conclusion). % show displays a complete solution tree show(Solution) :- nl, show(Solution,0),!. show(Answer1 and Answer2,H) :!, show(Answer1,H), tab(H), write(and), nl, show(Answer2,H).

show(Answer was Found,H) :tab(H), writeans(Answer), nl,tab(H), write('was'), show1(Found,H). show1(Derived from Answer,H) :!, write(Derived),write('from'), nl, H1 is H+4, show(Answer,H1). show1(Found,_) :- write(Found),nl. writeans(Goal is true) :- !, write(Goal). wirteans(Answer) :- write(Answer). expert :getquestion(Question), (answeryes(Question); answerno(Question)).

% input user's question % try to find positive answer % if no positive then find negative

answeryes(Question) :% look for positive answers to question markstatus(negative), % no positive answser yet expore(Question,[],Answer), % trace is empty positive(Answer), % look for positive answers markstatus(positive), % positive answer found present(Answer),nl, write('More Solutions?'), getreply(Reply), % read user's reply Reply = no. % otherwise, backtrack to explore answerno(Question) :retract(no_positive_answer_yet),!, explore(Question,[],Answer), negative(Answer), present(Answer),nl, write('More negative solutions?'), getreply(Reply), Reply=no. markstatus(negative) :- assert(no_positive_answer_yet). markstatus(positive) :- retract(no_positive_answer_yet),!; true. getquestion(Question) :nl, write('Question please'), nl, read(Question). A seguir uma Base de Conhecimento pequena para identifica o de animais. :- op(100, xfx, [has,gives, does not , eats, lays, isa]). :- op(100, xf, [swims, flies]). rule1 : if Animal has hair or Animal gives milk then Animal isa mammal rule2: if Animal has feathres or Animal flies and Animal lays eggs then Animal is a bird

rule3: if Ani mal isa mammal and (Animal eats meat or Animal has pointed teeth and Animal has claws and Animal has forward pointing eyes) then Animal isa carnivore rule4: if Animal isa carnivore and Animal has tawny colour and Animal has dark spots then Animal isa cheetah. rule5: if Animal isa carnivore and Animal has tawny colour and Animal has black stripes then Animal isa tiger rule6: if Animal isa bird and Animal does not fly and Animal swims then Animal is a penguin rule7: if Animal is a bird and Animal isa good flyer then Animal is a albatross fact: X isa animal :- member(X, [cheeta, tiger, penguin, albatross]). askable ( _ gives _ , Animal gives What ). askable ( _ flies, Animal flies). askable ( _ lay eggs, Animal lays eggs). askable ( _ eats _, Animal eats What). askable ( _ has _ , Animal has Something). askable ( _ does not , Animal does not DoSomething ). askable ( _ swims, Animal swims). askable ( _ isa good flier, Animal isa good flier).

REFERNCIAS
Bratko, Ivan. Prolog - Programming for Artificial Intelligence. Second Edition. Addison-Wesley Publishing Company. Pginas 331-397. Japanese Technology Evaluation Center - KNOWLEDGE-BASED SYSTEMS IN JAPAN. http://itri.loyola.edu/kb/toc.htm CLIPS - A Tool for building expert systems http://www.ghg.net/clips/CLIPS.html Artificial Intelligence http://www.cis.njit.edu/~rju3268/index.html Journal of IS Education - Expert Systems A Quick Tutorial http://gise.org/JISE/Vol1-5/EXPERTSY.htm Expert Systems in Medicine http://www.dsclab.ece.ntua.gr/~kblekas/medicine.html American Association of Artificial Intelligence - Expert Systems http://www.aaai.org/Pathfinder/html/expert.html Expert Systems Prolog vs Lisp http://userpages.umbc.edu/~schmitt/331F96/bjaran1/paper.html Databases and Artificial Intelligence http://www.cee.hw.ac.uk/~alison/ai3notes/all.html The Beginnings of Prolog http://www.practical-applications.co.uk/Prolog/history.html Knowledge-based Systems Demos http://www.emsl.pnl.gov:2080/proj/neuron/kbs/demos.html PC AI Expert Systems http://www.pcai.com/pcai/New_Home_Page/ai_info/expert_systems.html StudyWeb Expert Systems http://www.studyweb.com/links/287.html What are Expert Systems http://www.ghgcorp.com/clips/ExpertSystems.html

S-ar putea să vă placă și