Vous êtes sur la page 1sur 85

Laboratrio de Inteligncia Artificial/LIA Grupo Sistemas INTeligentes Aplicados/SINTA Universidade Federal do Cear

Expert SINTA Visual Component Library


verso 1.1 Manual do Desenvolvedor
1995-1998 Laboratrio de Inteligncia Artificial/LIA Grupo Sistemas INTeligentes Aplicados/SINTA

Expert SINTA Visual Component Library


Verso da documentao 1.1 Criao deste documento: 11 de abril de 1997 ltima modificao: 5 de janeiro de 1998

Apresentao
A construo de sistemas especialistas envolve investimentos em profissionais de diversas reas, implicando em riscos maiores de produo. Uma conhecida estratgia para minimizar o problema o investimento em ferramentas capazes de prototipar, avaliar e implementar o projeto de um sistema. Procura-se, assim, diminuir a quantidade de recursos necessrios, entre eles o tempo envolvido. Porm, difcil conciliar alta produtividade e versatilidade em ferramentas qualificadas em tais categorias. O Expert SINTA, um shell voltado para facilidade de uso, j vem sendo utilizado com sucesso na construo de sistemas especialistas, mas no dispe de recursos de intercmbio de dados com outros ambientes de desenvolvimento, nem possibilita o total aproveitamento das caractersticas do sistema operacional na criao de interfaces com o usurio final. Com a introduo da biblioteca de componentes Expert SINTA Visual Component Library (Expert SINTA VCL), torna-se vivel aproveitar as possibilidades oferecidas pela ferramenta descrita dentro de uma linguagem de programao orientada a objeto de alta produtividade. Ferramentas como estas so comumente denominadas ferramentas RAD (Rapid Application Development). Entre os motivos que levaram o grupo implementao da Expert SINTA VCL, temos:

o Expert SINTA (shell) no provia toda a funcionalidade necessitada em certos


sistemas especialistas;

no haviam meios de aproveitar os dados obtidos com o shell em outros


programas;

seria invivel o acrscimo de vrios recursos de interface e intercmbio de dados

na ferramenta em si. A poltica do grupo SINTA disponibilizar solues baseadas em sistemas inteligentes de forma gratuita para a comunidade de Computao em geral. Tal abordagem demandaria muito tempo e dinheiro;

os sistemas especialistas poderiam ser compilados em uma dada linguagem de


programao e utilizados de forma totalmente independente do Expert SINTA;

seria possvel reaproveitar milhares de linhas de cdigo j escritas na construo


do shell. O shell Expert SINTA destina-se s plataformas Windows 3.1 ou superior, incluindo verses nativas para Windows 95 e NT. A Expert SINTA Visual Component Library pode ser utilizada pelos ambientes Borland Delphi (ou C++ Builder) em qualquer verso. Esse documento descreve as propriedades chave dos componentes da Expert SINTA Visual Component Library 1.1 e exemplos de aplicaes. Para maiores informaes sobre outras propriedades, mtodos e eventos, consulte a documentao da classe base de cada componente apresentado na documentao respectiva do Borland Delphi. Este documento de referncia est organizado nas seguintes sees:

Desenvolvendo com a Expert SINTA VCL: aqui so explicados exemplos


reais de aplicaes implementadas com esta biblioteca. So apresentados os componentes de forma introdutria seguidos de diferentes programas;

Alm da Expert SINTA VCL: como estender a biblioteca e acrescentar novos


componentes;

Manual de referncia: descrio das principais propriedades, mtodos e


eventos de todos os componentes da Expert SINTA VCL. Abrange desde as classes de estrutura de dados aos componentes visuais. Consulte-o para conhecer outras funes e tirar dvidas;

Sobre o projeto: informaes sobre o LIA e os participantes da equipe de


desenvolvimento do Expert SINTA e Expert SINTA VCL. Para informaes adicionais, consulte a documentao do shell Expert SINTA e do Borland Delphi.

ATENO: O LABORATRIO DE INTELIGNCIA ARTIFICIAL (LIA) DISPE DE UMA HOMEPAGE PARA ESCLARECIMENTO DE DVIDAS: http://www.lia.ufc.br. PORM, NENHUMA GARANTIA DADA PELOS AUTORES. DO MESMO MODO, SUPORTE TCNICO PODE NO ESTAR DISPONVEL.

Desenvolvendo com a Expert SINTA VCL


Como e onde usar determinados componentes? Esta seo explica desde a descrio das principais classes que formam a Expert SINTA VCL a exemplos teis de como estas devem ser aplicadas. Captulo 1 - Os Componentes Apresentando os onze componentes visuais da Expert SINTA VCL, suas funes e como estas se relacionam. Captulo 2 - Um Run-Time para o Expert SINTA O primeiro exemplo prtico mostra como construir rapidamente um run-time para efetuar consultas a bases de conhecimento geradas como o shell Expert SINTA. Captulo 3 - Controlando a Entrada de Dados Organize a entrada de dados do usurio da maneira que lhe for conveniente. Neste captulo, temos um pequeno formulrio que permite a entrada prvia de dados para uma posterior consulta. Captulo 4 - A Expert SINTA VCL e Bancos de Dados Bancos de dados so extremamente teis para consultas a dados previamente cadastrados. Veja como relacionar um sistema especialista Expert SINTA a um banco de dados utilizando o Delphi.

Captulo

1
Os Componentes
Quais so os componentes da Expert SINTA VCL? Como se relacionam? Onde utiliz-los? Estas perguntas so respondidas no captulo que se segue, apresentando os onze componentes bsicos da biblioteca. Os tpicos deste captulo incluem:

O que possvel fazer com a Expert SINTA VCL Os componentes Relacionando os componentes

O que possvel fazer com a Expert SINTA VCL


A Expert SINTA VCL uma biblioteca de componentes para programao de sistemas especialistas baseados em regras de produo, fatores de confiana e encadeamento para trs, de forma semelhante ao clssico MYCIN. Para maiores informaes sobre este tipo de sistema especialista, consulte a documentao do shell Expert SINTA. De uma forma geral, a Expert SINTA VCL torna possvel a criao de frontends para bases de conhecimento geradas com o Expert SINTA. Entre as tarefas desempenhadas por esta VCL, temos:

encapsular a mquina de inferncia e a estrutura de dados que representa o


conhecimento (regras de produo);

fornecer mecanismos para entrada de dados do usurio; fornecer mecanismos de depurao; alm disso, permitir personalizao da aplicao final;
Talvez o melhor exemplo da capacidade da Expert SINTA VCL seja o prprio shell Expert SINTA. Este basicamente acrescenta um editor de bases de conhecimento biblioteca, onde todas as estruturas de dados, operaes de consultas e elementos de interface grfica esto implementadas. A partir da VCL, o nico limite a vontade do programador.

Os componentes
Antes de mais nada, proceda com a instalao da biblioteca no Borland Delphi. O arquivo de instalao ExSystem.pas. Para maiores informaes de como instalar componentes, consulte a documentao do Borland Delphi. Uma vez instalada, a barra de ferramentas a seguir deve aparecer em seu ambiente:

Figura 6 - A Barra de Ferramentas no Borland Delphi

Os componentes nativos da Expert SINTA VCL podem ser divididos nas seguintes categorias:

Componente principal
TExpertSystem Este componente encapsula a mquina de inferncia e a estrutura de dados que representa a base de conhecimento. Para tal, referencia um arquivo de base de conhecimento gerado pelo shell. Todos os outros componentes fazem referncia a um dado componente TExpertSystem direta ou indiretamente.

Componentes gerais de interface grfica


TRuleView Exibe as regras de um base de conhecimento referenciada por um componente TExpertSystem. TExpertPrompt Um menu para entrada de dados do usurio em resposta a uma determinada pergunta efetuada pelo sistema. Uma pergunta no a nica maneira que um sistema especialista utilizar para obter informaes complementares, mas a mais comum. Portanto, este componente bastante utilizado. TLabelQuestion A nica opo de personalizao de interface integrada no shell Expert SINTA a possibilidade de mudana da mensagem que aparece em uma pergunta para cada varivel. possvel reaproveitar esta mensagem dentro de front-ends montados em uma linguagem como o Borland Delphi, de forma a manter um aspecto uniforme entre uma consulta realizada no prprio shell e um aplicativo final construdo com a VCL. TValuesGrid Exibe as instncias (valores) de uma dada varivel por ordem decrescente de

grau de confiana.

Componentes de depurao
TWhyDialog Caixa de dilogo que exibe uma explicao para a necessidade de uma dada pergunta, baseando-se tanto em explicaes criadas pelo projetista da base no shell ou, na falta destas, em explicaes montadas automaticamente a partir das regras. TDebugPanel Semelhante a TRuleView, exibe as regras da base de conhecimento de um sistema especialista em um painel, mas indica tambm qual premissa (ou concluso) est sendo analisada pela mquina de inferncia em determinado ponto de uma consulta. TWatchPanel De forma semelhante a opo Watch de um ambiente de programao, exibe as instncias (valores atribudos durante uma consulta) de todas variveis atravs de dois painis: o superior lista todas as variveis; o inferior, as instncias da varivel selecionada no painel superior. TConsultTree Um sistema especialista precisa explicar porque (como) determinadas concluses foram atingidas. Este componente pode criar e exibir de forma hierrquica todos passos seguidos do comeo ao fim de uma consulta. TAllVars Mais um componente de exibio de instncias de variveis? Sim, mas de forma hierrquica. Ao contrrio de TWatchPanel, este componente so se atualiza automaticamente para cada nova instncia criada pela mquina de inferncia.

Componente de navegao
TExNavigator basicamente um navegador que controla o fluxo da consulta em conjunto com as respostas entradas pelo usurio e outros componentes de interface acrescentados pelo desenvolvedor da aplicao. Suas operaes bsicas so iniciar consulta, voltar pergunta anterior, dar uma pausa na consulta, executla passo a passo, e cancelar a consulta.

Relacionando os componentes
Agora que temos conhecimento das partes, precisamos compreender o todo. Como proceder para unir estes componentes em uma aplicao completa? Existe outra forma de classificar a VCL: componentes de atualizao automtica, os quais modificam-se automaticamente sempre que um fato relevante ocorre durante uma consulta; componentes passivos, que precisam da chamada de um

mtodo para exibir funcionalidade. Basicamente, todos os componentes, exceo de TConsultTree e TAllVars, so automticos. TValuesGrid pode ser automtico ou passivo, mas normalmente passivo. Para que componentes automticos procedam como tal, preciso relacion-los a um componente TExpertSystem. Para tal, existe a propriedade ExpertSystem. Atravs do Object Inspector, atribua um sistema especialista para cada controle automtico. Por exemplo, crie um novo formulrio e acrescente dois componentes: um TExpertSystem e um TRuleView.

Figura 6 - Um exemplo simples de relao entre componentes

Os nomes default so ExpertSystem1 e RuleView1. Selecione RuleView1 e ative o Object Inspector. Clique na propriedade ExpertSystem e selecione ExpertSystem1. Nada parece ocorrer. Agora selecione ExpertSystem1 e, atravs do Object Inspector, digite na propriedade FileName o caminho de um determinado arquivo BCM de base de conhecimento. Dentro de ExpertSystem1 ocorrer o carregamento das regras. Automaticamente, RuleView1 refletir a mudana. Cada componente reage de acordo com a mudana feita. TRuleView reage a mudanas do arquivo da base de conhecimento, mas nenhum componente nativo da Expert SINTA VCL notificado sobre mudanas realizadas diretamente na estrutura de dados, como, por exemplo, uma alterao de nome de varivel feita atravs do shell. Seria caro demais em termos de processamento. A tabela a seguir indica os componentes e as respectivas operaes de TExpertSystem que provocam alteraes. Obviamente, TExpertSystem no entra na relao:
Componente
TRuleView TExpertPrompt TLabelQuestion TValuesGrid

Eventos
Carregamento de nova base de conhecimento. Carregamento de nova base de conhecimento. Carregamento de nova base de conhecimento. Carregamento de nova base de conhecimento. Quando a propriedade AutomaticUpdate verdadeira, tambm sofre mudanas a cada instncia que acrescentada ou retirada da base de fatos do sistema especialista. A cada pergunta realizada.

TWhyDialog

TDebugPanel TWatchPanel TConsultTree TAllVars TExNavigator

Carregamento de nova base de conhecimento e a cada passo efetuado pela mquina de inferncia. Carregamento de nova base de conhecimento e cada instncia modificada de cada varivel. No atualizado automaticamente. Invoque um mtodo para gerar mudanas. No atualizado automaticamente. Invoque um mtodo para gerar mudanas. Carregamento de nova base de conhecimento, incio e fim de consulta, entrada e sada em modo de execuo passo-a-passo, retorno pergunta anterior, nova pergunta realizada.

Outro parmetro importante que aparece constantemente nos componentes da Expert SINTA VCL so os cdigos de variveis. Por exemplo, o componente TExpertPrompt monta automaticamente um menu de entrada de dados para que o usurio marque valores de uma dada varivel. Logo, a varivel um parmetro bsico deste componente. Voc indica a varivel referenciada pelo componente atravs de seu cdigo. Cada varivel criada atravs do Expert SINTA recebe um cdigo interno que nunca muda (a no ser, bvio, que esta seja apagada e inserida novamente categoricamente nem sequer seria a mesma varivel). Assim, o uso de cdigos o modo mais estvel de referncia de variveis. Nomes podem ser muito compridos e mudam constantemente. Para obter os cdigos criados pelo Expert SINTA, abra a base de conhecimento no shell e selecione o menu Arquivo Exportar Cdigos... Digite o nome do arquivo texto onde sairo os resultados. Abra posteriormente este arquivo no seu editor de textos favorito quando precisar saber o cdigo de uma dada varivel ou valor. Sobre a entrada do nome do arquivo da base de conhecimento no Object Inspector, referente propriedade FileName de TExpertSystem, bom que se lembre que estamos digitando um nome de arquivo como outro qualquer. Assim, se o arquivo est em outro diretrio que no o mesmo dos arquivos fonte da sua aplicao em desenvolvimento e diretrio de sada, deve-se entrar em FileName o caminho completo ou relativo. Se voc mantiver o mesmo diretrio para base de conhecimento, arquivos fonte e arquivos objeto/executvel, basta que se entre o nome da base, como secaju.bcm (isto feito nos exemplos includos com a Expert SINTA VCL). Este detalhe pode parecer um contratempo, mas para uma biblioteca simples como a Expert SINTA VCL uma alternativa mais atraente que o uso de mecanismos de independncia de diretrio, como o uso de um alias, adotado na Borland Database Engine. De qualquer forma, com uma nica linha de cdigo possvel consertar qualquer eventual dificuldade:
procedure TForm1.FormCreate(Sender: TObject); begin ExpertSystem.FileName := meu sistema.bcm; end;

Captulo

2
Um Run-Time para o Expert SINTA
Este o primeiro de uma srie de exemplos para demonstrar a funcionalidade da Expert SINTA VCL. O cdigo completo dos mesmos acompanha a biblioteca. Neste captulo, o exemplo um run-time, um programa capaz de aproveitar arquivos gerados em outro mas sem permitir edio. No nosso caso, isto significa a capacidade de realizar consultas. Basicamente, eqivale ao shell Expert SINTA, mas sem as capacidades de edio.

Na linha de montagem
Os formulrios principais de nosso run-time so dois: frmMain, a janela onde ocorrem as consultas e frmResults, onde os resultados so exibidos. Em frmMain, os principais objetos encontrados so:

LabelQuestion (classe TLabelQuestion): para exibio de perguntas; ExpertPrompt (classe TExpertPrompt): para permitir a entrada de dados
do usurio; btnOk (classe TBitBtn): boto para confirmar entradas do usurio; btnWhy (classe TBitBtn): chama caixa de dilogo com explicaes; WhyDialog (classe TWhyDialog): a prpria caixa de dilogo; DebugPanel (classe TDebugPanel): exibe regras e indica o ponto de anlise da mquina de inferncia durante uma consulta; WatchPanel (classe TWatchPanel): painis para exibio de instncias de variveis. Observe que o mesmo se encontra junto com DebugPanel dentro de um objeto TNotebook. Para visualizar WatchPanel, clique na lista do Object Inspector; ExNavigator (classe TExNavigator): navegador que controlar a consulta; ExpertSystem (classe TExpertSystem): o componente principal que tudo centraliza;

Os componentes so unidos atravs da propriedade ExpertSystem. A base de conhecimento do sistema especialista ser indicada em tempo de execuo

atravs da caixa de dilogo OpenDialog. O cdigo a seguir mostra o momento que um arquivo foi escolhido e deve ser carregado no sistema:
//Procedimento: TfrmMain.mnuOpenClick(Sender: TObject); ExpertSystem.FileName := OpenDialog.FileName;

Observe que no houve preocupao com a propriedade VarCode do objeto ExpertPrompt, mas ela vital. a propriedade que indica o cdigo da varivel (lembre o ltimo captulo) cujo menu de entrada ser construdo. Vamos atualizar este valor em tempo de execuo. Como comum em componentes, as classes da Expert SINTA VCL possuem diversos eventos. Um dos eventos vitais OnPrompt, da classe TExpertSystem. Este evento disparado sempre que o sistema necessita de informaes sobre os valores de uma determinada varivel, varivel esta que no pode ser deduzida de nenhuma regra. A forma mais comum atravs de um componente TExpertPrompt (no captulo 4 veremos outra). A definio de OnPrompt :
OnPrompt = TVarBasedEvent;

TVarBasedEvent um evento de dois parmetros: Sender, o objeto que invocou o evento (como nos demais componentes do Delphi) e V, a varivel necessria cujo significado varia de acordo com o contexto. No caso de OnPrompt, indica a varivel da qual desejamos obter informaes. Utilizamos V no nosso runtime no seguinte modo:
procedure TfrmMain.ExpertSystemPrompt(Sender: TObject; V: Integer); begin LabelQuestion.VarCode := V; ExpertPrompt.VarCode := V; end;

Utiliza-se V para atualizar LabelQuestion e ExpertPrompt. O evento OnPrompt tambm paralisa (automaticamente) a consulta, modificando internamente o valor da propriedade WaitingAnswer, de TExpertSystem. A consulta no prossegue enquanto WaitingAnswer for verdadeira. Cabe ao programador do aplicativo decidir quando a resposta foi dada para que a mquina de inferncia prossiga. No nosso run-time, isto ocorre atravs do boto OK. Clicar em OK equivale a confirmar a entrada. Logo, o seguinte cdigo deve ser acrescentado:
procedure TfrmMain.btnOKClick(Sender: TObject); begin ExpertPrompt.UpdateBase; ExpertSystem.WaitingAnswer := false; end;

O mtodo UpdateBase de TExpertPrompt l a(s) entrada(s) marcada(s) e atualiza as instncias da varivel relacionada ao objeto atravs da propriedade VarCode. Aps esta atualizao, a mquina de inferncia desbloqueada (WaitingAnswer := false).

A hora do resultado
Agora devemos nos preocupar com a exibio de resultados. Observe que frmResults

exatamente o mesmo formulrio utilizado no shell Expert SINTA. Ele consiste de quatro componentes principais, dispostos em um objeto TNotebook:

PanelVarName (classe TPanel): exibir o nome da varivel objetivo em


questo. ValuesGrid (classe TValuesGrid): ir exibir as instncias da varivel objetivo. Observe que a propriedade AutomaticUpdate foi assinalada como falsa para diminuir o processamento realizado pelo sistema especialista; ConsultTree (classe TConsultTree): ir exibir todos os passos feitos durante a consulta; AllVars (classe TAllVars): rvore com as instncias de todas as variveis; RuleView (classe TRuleView): novamente, um objeto para exibio de regras. importante deixar um objeto deste tipo acessvel para melhor compreenso da rvore exibida em ConsultTree;

exceo de RuleView, todos os demais objetos precisam ser atualizados atravs da chamada de um mtodo. O evento ideal para isto OnShowResults de TExpertSystem. OnShowResults tambm do tipo TVarBasedEvent, o que significa que um de seus parmetros uma varivel. Esta a varivel objetivo do momento (pode haver outras, dependendo do sistema). O cdigo de OnShowResults em nosso exemplo :
procedure TfrmMain.ExpertSystemShowResults(Sender: TObject; V: Integer); begin with frmResults do begin PanelVarName.Caption := ExpertSystem.VarName(v); ValuesGrid.VarCode := v; ValuesGrid.RefreshValues; ConsultTree.CreateTree(ExpertSystem); AllVars.CreateTree(ExpertSystem); Notebook.PageIndex := 0; TabSet.TabIndex := 0; ShowModal; end; end;

PanelVarName um objeto de frmResults que exibir o nome de uma dada varivel, no caso V. A propriedade VarCode de ValuesGrid tambm recebe V, e um mtodo complementar, RefreshValues, deve ser invocado. ConsultTree e AllVars invocam o mtodo CreateTree utilizando o sistema especialista ExpertSystem como parmetro. Como ltima observao, no evento OnClose do formulrio principal, frmMain, temos a seguinte linha de cdigo:
ExpertSystem.AbortConsultation;

Este comando aborta qualquer consulta que esteja em andamento. Caso contrrio, a janela s fechar ao trmino da consulta. Diversas outras funes so realizadas neste exemplo. Pode-se citar a inibio ou bloqueio de elementos de interface no comeo e no fim de uma consulta, a chamada de um arquivo de ajuda a partir da janela de resultados, entre outras. Para maiores

detalhes, consulte o cdigo completo do Expert SINTA RunTime e a Parte III deste manual.

Captulo

3
Controlando a Entrada de Dados
Nem s de aquisio interativa de informaes comandada atravs do encadeamento para trs vive a mquina de inferncia da Expert SINTA VCL. Neste captulo curto, veremos outra alternativa de entrada de dados, provando-se que existem diversas possibilidades de aplicao da biblioteca. Cabe ao programador arranj-las como achar melhor. E nada melhor como uma boa carta de vinhos para estimul-lo!

Vinhos para uma refeio


Imagine-se mesa em um restaurante futurista. sua frente, uma tela espera ordens para recomendar um vinho de acordo com a refeio planejada. Marcando comodamente alguns itens, seu ajudante ciberntico decide de imediato a melhor escolha. Neste exemplo, nada seria mais irritante que responder cada questo em separado, como normalmente ocorre em uma consulta conduzida pelo shell Expert SINTA. Mas no estamos mais no shell, h uma linguagem de programao toda nossa disposio, domesticada pela presena da Expert SINTA VCL. Vinhos para uma refeio um sistema especialista de demonstrao, no devendo ser comparado a especialistas profissionais, mas pode lhe dar boas idias de como montar uma aplicao final.

Na linha de montagem
O formulrio onde a consulta ocorre deve dispor elementos de entrada de dados. Como so diversas as variveis, aqui optou-se por dividi-las em grupos afins, formando uma espcie de ajudante passo-a-passo comum em programas Windows. Para cada varivel de entrada, foi colocado um objeto TExpertPrompt com o respectivo cdigo de varivel, bem como um TLabelQuestion. Note que objetos TLabelQuestion bem que poderiam ser substitudos por labels comuns, mas usar TLabelQuestion traz a vantagem de reaproveitar o que foi feito no shell, permitindo que mudanas feitas na base reflitam tanto em uma consulta feita no shell como nesta aplicao. A nica exceo foi feita para a pergunta referente ao tipo de molho encontrado na refeio. Tnhamos duas opes: como a base original j dividia a questo do molho

em duas variveis (tem molho e tipo de molho), no seria desejvel mudar. O fato de no ter molho necessariamente implica que no devemos perguntar mais sobre o tipo do mesmo. Logo, poderamos deixar a pergunta sobre o tipo de molho fora do formulrio principal e invoc-la somente se necessria, ao estilo do shell, ou disponibiliz-la de imediato e lembrar que no necessria uma resposta caso a refeio no tenha molho. o que ocorre em formulrios do nosso cotidiano. Neste caso, a mensagem que aparece na aplicao diferente daquele que aparece no shell. Como no shell a pergunta s feita se necessria, ela pode (e deve) permanecer como Que tipo de molho usado na refeio?. Mas na aplicao, deve ser algo como Em caso afirmativo, qual molho?. Observe com ateno a diferena, uma espcie de ajuste a situaes ligeiramente distintas. Sempre leve em considerao questes como esta quando estiver projetando sua interface final com o usurio. Pense em quais variveis devem ser informadas de antemo e quais podem ser adquiridas de forma interativa elegantemente. No nosso exemplo, optou-se por uma entrada prvia de toda a informao necessria, mas exemplos que lidam com grande volume de variveis, especialmente aqueles que lidam com dados usualmente raros ou difceis de obter, tendem a adotar uma abordagem mista. Agora, vamos ao cdigo. Desejamos instanciar estas variveis antes do incio da consulta. Na verdade, com a Expert SINTA VCL nunca podemos alterar instncias de variveis fora de uma consulta. Como proceder ento? Realizando as alteraes no incio da consulta. O evento OnStart de TExpertSystem til especialmente nestas ocasies:
procedure TForm1.ExpertSystemStart(Sender: TObject); begin ExpertPrompt1.UpdateBase; ExpertPrompt2.UpdateBase; ExpertPrompt3.UpdateBase; ExpertPrompt4.UpdateBase; ExpertPrompt5.UpdateBase; ExpertPrompt6.UpdateBase; ExpertPrompt7.UpdateBase; ExpertPrompt8.UpdateBase; ExpertPrompt9.UpdateBase; end;

Os nove TExpertPrompt do formulrio correspondem s nove informaes necessrias para uma recomendao de vinho. No incio da aplicao, estes esto dispostos na janela de forma que podemos marcar as opes vontade. Isto no significa de forma alguma que estamos alterando as instncias das respectivas variveis. Tais alteraes s ocorrero pela chamada do mtodo UpdateBase de cada TExpertPrompt. O momento ideal para isto o incio da consulta, disparado pelo clique no boto Consultar. Note que no foi necessrio lidar com a propriedade WaitingAnswer de TExpertSystem. A janela de resultados (frmResults) e os demais eventos funcionam de forma anloga ao exemplo do captulo 2, o run-time.

Captulo

4
A Expert SINTA VCL e Bancos de Dados
Um sistema especialista tem como principal tarefa automatizar um processo de tomada de decises. Dentro deste objetivo, nada mais adequado que possuir um conjunto de dados j cadastrados e deixar para o sistema a tarefa de calcular os resultados utilizando como fonte de informaes estes dados. Assim, relatrios para diversos casos podem ser obtidos neste processamento de registros. Vejamos maneiras fceis de integrao de bases de dados a projetos de sistemas especialistas criados com a Expert SINTA VCL, na verso batch do nosso conhecido SECAJU.

SECAJU Batch Consultation


Para quem trabalha com o shell Expert SINTA, o sistema SECAJU familiar. O SECAJU um sistema simples de diagnstico de pragas e doenas do cajueiro. Atravs de perguntas dirigidas ao responsvel pela plantao, uma srie de provveis pragas e doenas apresentada ao final de uma consulta. Suponhamos que levantaram-se dados de diversos agricultores pelo interior do Cear e agora desejamos submeter ao SECAJU estas informaes. Seria imensamente tedioso o processo de resposta a cada consulta e anotao/impresso de resultados. Com a Expert SINTA VCL, possvel criar com facilidade um projeto em Delphi ou C++ Builder que utilize estas informaes e gere um relatrio com apenas poucas linhas de programao.

Na linha de montagem
Os principais objetos utilizados neste projeto so:

ExpertSystem (classe TExpertSystem): sistema especialista com as regras

do SECAJU; MemoResults (classe TMemo): aqui que o relatrio de resultados ser impresso; DebugPanel (classe TDebugPanel): depurador que ir exibir, a ttulo de ilustrao, o comportamento da mquina de inferncia. No tem uma utilidade direta na aplicao, mas interessante notar como a mquina de

inferncia atua em consultas sucessivas; btnStart (classe TButton): dispara a seqncia de consultas; Para esta aplicao, foram criadas duas tabelas: Clientes.db e Casos.db. A tabela de clientes tem a funo somente de armazenar o nome dos clientes que consultaro o SECAJU. Em Casos.db, cada registro contm informaes sobre o estado da plantao de cada cliente, um registro para cada (relacionado pelo campo cd_cliente cdigo do cliente). Os demais campos de Casos.db correspondem a variveis do domnio do SECAJU que devem ser fornecidas pelo usurio (para saber que variveis so respondidas por usurio, abra a base de conhecimento no Expert SINTA e utilize a opo Depurar Dependncias...). Assim, o campo Cbcatd corresponde varivel castanha broqueada com amndoa totalmente destruda, Gnroi galeria nos ramos ou inflorescncias, Inflorescencias inflorescncias e assim vai at conter todas as variveis. Por que esta ordem foi escolhida? Primeiro vejamos como as consultas so disparadas: ao clicarmos o boto btnStart, as seguinte aes ocorrem:
procedure TForm1.btnStartClick(Sender: TObject); begin memoResults.Clear; TableCasos.First; while not TableCasos.EOF do begin ExpertSystem.StartConsultation; TableCasos.Next; end; ShowMessage('Todas as consultas finalizadas!'); end;

Ou seja, a tabela de casos varrida e uma consulta iniciada (e finalizada) para cada registro. Os valores correntes so lidos quando necessrios, ou seja, atravs do evento OnPrompt:
procedure TForm1.ExpertSystemPrompt(Sender: TObject; V: Integer); begin ExpertSystem.AttribVarFromBinary(V,IntToStr(GetValueFromTable(V))); ExpertSystem.WaitingAnswer := false; end;

A varivel em demanda V receber suas instncias de acordo com o que for indicado no registro corrente. Por questes de modularidade, resolvemos colocar o procedimento que mapeia um campo da tabela no valor desejado em separado:
function TForm1.GetValueFromTable(V: integer): integer; function VarMap(V: integer): integer; begin Result := V - 4; end; begin Result := TableCasos.Fields[VarMap(V)].AsInteger; end;

Como funciona? Desejamos saber o(s) valor(es) de V, onde V o cdigo da varivel. A subfuno VarMap indica qual a posio do campo com o(s) valor(es) de V dentro do registro corrente. A complexidade desta funo variar de acordo com seu sistema especialista e o modo como a tabela foi organizada. No caso do SECAJU Batch Consultation, a varivel do campo nmero 1, castanha broqueada..., possui cdigo 5 (o primeiro campo o campo nmero 0: cdigo do cliente). A varivel do campo 2, cdigo 6; do campo 3, cdigo 7. claro que isto foi feito porque sabamos dos cdigos de cada varivel (veja o captulo I para saber como extrair estes cdigos). O SECAJU tambm favorece um mapeamento fcil, porque todas as variveis necessrias em uma pergunta correspondem s variveis de cdigo no intervalo 05 a 36. Se, por exemplo, a varivel 25 no fosse uma varivel de pergunta, mas calculada pelo sistema, obviamente no apareceria na tabela. Assim, a funo VarMap precisaria ser reformulada:
function VarMap(V: integer): integer; begin if V < 25 then Result := V 4 else Result := V 5; //saltando a varivel #25 end;

Outras combinaes podem ser necessrias dependendo do seu sistema. Quanto aos valores dos campos, tambm fica a cargo do programador a escolha da codificao que ser feita. A mais direta utilizar o cdigo do valor em cada campo. Ou seja, se, para dado caso, a varivel inflorescncias tem como valor murchas ou secas (cdigo 29 no arquivo BCM), o campo Inflorescencias teria valor 29. Mas isto traria problemas quanto a variveis multivaloradas. No nosso exemplo, utilizamos uma combinao binria. Por exemplo, suponhamos que temos uma varivel que pode assumir quatro valores. Sua combinao binria um somatrio baseado em potncias de dois: se escolhemos o primeiro e o quarto valor, a combinao ser 2 (1-1) + 2(4-1) = 9. Se escolheu-se o segundo, terceiro e o quarto, a combinao ser 2(2-1) + 2(3-1) + 2(4-1) = 14. Assim podemos indicar um conjunto de valores para uma varivel atravs de um nico campo. O mtodo AttribVarFromBinary, de TExpertSystem, faz o resto do trabalho (consulte a referncia ao final deste manual caso precise de maiores informaes sobre este mtodo). Voc pode saber a posio de cada valor para uma varivel atravs da exportao de cdigos (utilize o shell para isso) ou simplesmente abrindo a janela de variveis no shell Expert SINTA: os valores de cada varivel aparecero ordenados. Consulte a documentao do shell para maiores informaes. MAS ATENO: uma desvantagem clara desta abordagem de codificao a dependncia da ordem dos valores. Se voc precisar mudar a ordem e estiver utilizando este mtodo, no esquea de modificar as tabelas. Para os valores DESCONHECIDO, SIM e NO, o mtodo AttribVarFromBinary utiliza as constantes 1, 2 e 3, respectivamente. Para saber mais sobre as constantes utilizadas na Expert SINTA VCL, examine o arquivo ExConsts.pas. Outra desvantagem a impossibilidade do uso de graus de confiana nesta entrada codificada. Finalmente, no evento OnPrompt, no esquecer de ExpertSystem.WaitingAnswer := false aps a resposta, indicando mquina de inferncia que a mesma j foi obtida.

Alm da Expert SINTA VCL


A orientao a objetos do Object Pascal permite o acrscimo elegante de novas funcionalidades Expert SINTA VCL. Captulo 5 Estendendo a Expert SINTA VCL Os passos essenciais para criao de novos componentes que se integrem biblioteca de forma transparente e possam ser distribudos para outros desenvolvedores. Apresentando um novo componente: TListExpertPrompt! Captulo 6 Interfaces: comunicao entre os objetos Uma caracterstica interessante a resposta automtica de certos componentes em relao a mudanas no sistema especialista associado. Como implementar estas atualizaes automticas em componentes criados por voc?

Captulo

5
Estendendo a Expert SINTA VCL
Para aqueles que no esto satisfeitos com as funcionalidades fornecidas pelos componentes da Expert SINTA VCL, possvel, de maneira fcil, a criao de novos componentes utilizando-se o conjunto de estruturas de dados implementado. Com o uso de objetos de interface, objetos que respondem automaticamente a eventos disparados pelo sistema especialista envolvido podem ser construdos, facilitando seu uso por terceiros.

O bsico dos objetos Expert SINTA


Uma melhor compreenso do funcionamento interno dos componentes padres da biblioteca bastante til. Estude a implementao descrita nos arquivos fonte (*.PAS) pelos quais a biblioteca foi instalada. Para tal, procure no se preocupar com a classe TExpertSystem, mas com os controles de interface grfica implementados no arquivo ExCtrls.Pas. De TExpertSystem, deve-se compreender bem sua interface de mtodos e propriedades (o mesmo vale para as estruturas de dados encontradas em ExDataSt.Pas). Alm disso, importante algum conhecimento da estrutura de dados utilizada na representao de conhecimento. Informaes detalhadas sobre TExpertSystem e sobre estruturas de dados podem ser encontradas no manual de referncia, ltimo captulo do presente documento. Outro requisito indispensvel o entendimento de programao de componentes em Object Pascal. Neste captulo, vamos criar ExCtrls2.Pas, um arquivo contendo um novo componente de interface grfica. Mas, antes de prosseguirmos, vale ressaltar: de forma alguma essencial a criao de novos componentes para a implementao de aplicaes mais flexveis. Muito pode ser feito simplesmente com chamadas aos mtodos das classes bsicas da Expert SINTA VCL e o bom uso de seus eventos.

Um substituto para TExpertPrompt


Cansado daquele mesmo TExpertPrompt de sempre? Que tal implementarmos um novo objeto de entrada de dados, talvez mais adequados a suas necessidades? Nesta seo vamos estender um componente TListBox (consulte a documentao da Visual Componente Library da Borland para maiores informaes). Esta list box permitir que marquemos opes de resposta para uma dada varivel, inclusive com

opo de marcao de vrios itens (para variveis multivaloradas). Com fins de simplicidade, no sero includas opes para entrada de graus de confiana para as respostas. Vamos batizar este componente de TListExpertPrompt. Observao: para melhor entendimento deste captulo, talvez seja mais til que o leitor primeiramente instale este componente e compreenda sua utilidade.

Mtodos e propriedades
Qual sero os parmetros para nosso novo componente? Assim como em TExpertPrompt, os parmetros bsicos so o sistema especialista e a varivel cujos valores de entrada sero disponibilizados. Como padro no Object Pascal, criam-se funes que manipularo estas propriedades. As propriedades adicionadas a TCustomListBox sero:

ExpertSystem (classe TExpertSystem): o sistema especialista ligado a este


componente. O mtodo de manipulao, seguindo a nomenclatura tradicional do Object Pascal, ser SetExpertSystem. A varivel interna ser FExpertSystem. Para maiores informaes sobre propriedades e convenes de nomenclatura, consulte a documentao do Delphi;

VarCode (tipo integer): o cdigo da varivel cujos valores de entrada sero


disponibilizados para escolha; Um mtodo necessrio aquele que l os valores marcados e atualiza a base de fatos do sistema. Vamos cham-lo (assim como em TExpertPrompt) de mtodo UpdateBase. Os mtodos adicionais de TListBox se resumem em:

procedure UpdateBase: a partir dos valores marcados na lista, atualiza-se a


base de fatos do sistema especialista respectivo; Uma primeira declarao deste nosso novo componente seria:
TListExpertPrompt = class(TCustomListBox) private FVarCode: integer; FExpertSystem: TExpertSystem; FVarBinary: boolean; //A ser explicada posteriormente protected procedure SetExpertSystem(ES: TExpertSystem); procedure SetVarCode(vc: integer); public function UpdateBase: boolean; published property ExpertSystem: TExpertSystem read FExpertSystem write SetExpertSystem; property VarCode: integer read FVarCode write SetVarCode; end;

Vamos ver como a propriedade VarCode aproveitada em TListExpertPrompt:


procedure TListExpertPrompt.SetVarCode(vc: integer); begin

FVarCode := vc; if (FExpertSystem <> nil) and (vc <> 0) and (Parent <> nil) and (not FExpertSystem.EmptyBase) then begin FExpertSystem.Vars.Seek(vc); if FExpertSystem.Vars.Blind then begin VarCode := 0; Exit; end; if FExpertSystem.Vars.Numeric then begin VarCode := 0; raise EExpertSystem.Create('Este prompt no exibe valores' + ' de variveis numricas!'); end; MultiSelect := FExpertSystem.Vars.Multi; FExpertSystem.ValuesList(vc, TStringList(Items)); {Varivel do tipo Sim/No} FVarBinary := (Items.Objects[0] = nil); FVarCode := vc; end else if vc = 0 then Clear; end;

Primeiramente, FVarCode recebe o valor passado pela propriedade (vc). A primeira condio verifica se existe um componente ExpertSystem associado e se este j apresenta uma base de conhecimento carregada. Esta verificao bastante comum nos componentes da Expert SINTA VCL (veja o arquivo ExCtrls.Pas). As duas prximas condies verificam se a varivel realmente existe e se ela no numrica (este componente no feito para entrada de variveis numricas). Finalmente, a propriedade MultiSelect da list box ajustada de forma a permitir a seleo de mais de um item caso a varivel seja multivalorada. A parte mais difcil j est implementada em TExpertSystem: atravs do mtodo ValuesList, pode-se preencher uma lista TStringList com os valores, ordenados por suas posies, de uma varivel. Consulte mais informaes sobre TExpertSystem.ValuesList na referncia encontrada ao final deste documento. ValuesList preenche a lista de retorno (Items) tanto com as strings dos valores como com ponteiros para as estruturas de dados que armazenam estes valores na memria. Para variveis binrias, as strings retornadas so Sim e No, mas nenhum ponteiro retornado (Items.Objects[i] = nil, para todo i dentro da faixa de valores). FVarBinary um valor interno utilizado para saber posteriormente se esta varivel binria ou no. O mtodo UpdateBase implementado do seguinte modo:
function TListExpertPrompt.UpdateBase: boolean; var i, total: integer; bin_value: integer; begin if (FVarCode = 0) or (FExpertSystem = nil) or FExpertSystem.BrokenSequence or (not FExpertSystem.ExecutionMode) or ((not FExpertSystem.WaitingAnswer) and (FExpertSystem.Wait or FExpertSystem.Trace)) then Result := false else begin

if FVarBinary then begin if Selected[0] then FExpertSystem.AttribVarFromBinary(FVarCode, YES) else FExpertSystem.AttribVarFromBinary(FVarCode, NO); end else begin total := Items.Count - 1; bin_value := 0; for i := 0 to total do if Selected[i] then bin_value := bin_value + trunc(exp(ln(2)*i)); if bin_value = 0 then bin_value := UNKNOWN; FExpertSystem.AttribVarFromBinary(FVarCode, bin_value); end; Result := true end; end;

A condio inicial verifica se: existe uma varivel selecionada em VarCode; o sistema especialista est em consulta; no momento o usurio no est voltando para a pergunta anterior (propriedade BrokenSequence) e se no est em pausa, esperando uma resposta (WaitingAnswer e outros). Para variveis binrias, a ao bem simples: se o primeiro item o selecionado, a resposta SIM acrescentada na base de fatos pelo mtodo AttribVarFromBinary. Se o segundo item o selecionado, a resposta NO. Para as demais variveis, criamos o nmero equivalente ao somatrio das potncias de dois respectivas aos itens selecionados, conforme exige o mtodo AttribVarFromBinary. Desta forma, com um s comando atualizamos a base de fatos. Para maiores informaes sobre AttribVarFromBinary, consulte a referncia ao final deste documento. E quanto ao mtodo SetExpertSystem? Basicamente, poderamos ter definido a propriedade ExpertSystem como:
property ExpertSystem: TExpertSystem read FExpertSystem write FExpertSystem;

Porm, assim como em vrios componentes da Expert SINTA VCL, seria interessante realizar alteraes automticas em TListExpertPrompt quando definimos um sistema especialista. Por exemplo, em TExpertPrompt, quando dizemos qual o sistema especialista relacionado a um objeto desta classe, onde o valor de VarCode j foi definido, o componente automaticamente exibe sua lista de valores. Quando o sistema especialista destrudo ou uma nova base de conhecimento carregada, as alteraes se refletem imediatamente em TExpertPrompt. O prximo captulo ir lidar com a questo de troca de mensagens entre componentes de forma a permitir ao usurio de seus componentes o uso dos mesmos sem preocupaes de garantir a integridade relacional.

Captulo

6
Interfaces: comunicao entre os objetos
Quando vemos um objeto como TDebugPanel em ao, notamos claramente que existe uma espcie de troca de mensagens entre seu objeto ExpertSystem relacionado e o mesmo. A mquina de inferncia, ao avanar, indica ao depurador sua nova posio. O depurador, ao receber um valor para ExpertSystem, efetua uma espcie de cadastro no sistema especialista de forma a poder ser reencontrado pelo sistema quando atualizaes se fazem necessrias. A comunicao entre objetos da Expert SINTA VCL se faz necessria por dois motivos: para sabermos atualizar componentes relacionados quando necessrio e para indicar a estes componentes quando outro objeto de seu interesse foi destrudo. Para tal, utilizam-se o que este manual convencionou de objetos de interface da Expert SINTA VCL. Para uma boa compreenso desta seo, recomenda-se razovel conhecimento em polimorfismo no contexto de orientao a objeto.

O que so interfaces?
Em primeiro lugar, no confunda o conceito de interface utilizado aqui com o conceito utilizado pela tecnologia COM. No Delphi 3.0, temos objetos de interface, mas estes no esto relacionados de forma alguma com a Expert SINTA VCL. Para que um objeto A invoque mtodos do objeto B e vice-versa, necessrio que A faa referncia a B, bem como o oposto. Isto ocorre diversas vezes na Expert SINTA VCL: um objeto TExpertSystem possui uma lista apontando para diversos controles a ele relacionados, como por exemplo, o objeto TRuleView descrito no primeiro captulo deste documento. Quando carregamos uma nova base de conhecimento no objeto de sistema especialista, este percorre sua lista de controles relacionados e chama mtodos de atualizao. Ou seja, de alguma forma, um objeto TRuleView aponta para um dado objeto TExpertSystem que, por sua vez, aponta para o TRuleView original. Como implementar este relacionamento? Observe que o comportamento de atualizao poderia ser uma caracterstica herdada de um objeto genrico. Por exemplo, ao invs de uma lista de ponteiros TRuleView, a classe TExpertSystem teria uma lista de, digamos, TExpertControl. Esta classe teria um mtodo abstrato, digamos, RefreshLink.

Por sua vez, TRuleView seria uma classe derivada de TExpertControl, para implementar esta interface em comum, e de TListBox, de onde herdaria as funcionalidades grficas. E outra possibilidade se abre: TExpertSystem poderia aceitar qualquer objeto derivado de TExpertControl, como um objeto implementado por terceiros, no somente classes previamente estabelecidas. Estes novos objetos precisariam apenas chamar um mtodo de TExpertSystem que os registrassem junto ao sistema especialista, incluindo-os em sua lista de controles relacionados. Mas, existe um grande problema. O Object Pascal, linguagem utilizada no Delphi, no apresenta o recurso de herana mltipla! Como fazer ento para evitar este problema? Uma alternativa fazer de TExpertControl um objeto de comunicao intermediria entre TExpertSystem e um controle real. Um componente da Expert SINTA VCL, TRuleView, digamos, apontaria para um objeto TExpertControl e este apontaria de volta para a lista de regras. O objeto TExpertSystem relacionado apontaria para TExpertControl, conforme a figura 3:

Figura 6 - Comunicao por "interfaces"

Esta abordagem, utilizada pela Expert SINTA VCL, contorna o problema da falta de herana mltipla medida do possvel. Note que a nomenclatura foi mudada de TExpertControl para TExCtrlInterface para enfatizar que este apenas um objeto de interface, no o controle em si.

Devo sempre implementar uma nova interface?


As interfaces so utilizadas por componentes que respondem automaticamente a dadas alteraes do sistema especialista relacionado, o que uma deciso do desenvolvedor destes componentes. Como vimos no primeiro captulo, nem todos os componentes da Expert SINTA VCL so assim e nem sempre vamos desejar implementar um componente que possua uma interface relacionada. Por exemplo, TConsultTree e TAllVars so duas classes que no possuem uma interface respectiva. A regra geral : se voc deseja que seu componente seja alertado de determinados eventos do sistema especialista e implementar funes de atualizao, ento voc tambm necessitar implementar uma interface, o que na realidade bem simples. Caso contrrio, no h necessidade em sequer prosseguir a leitura deste captulo.

Como criar interfaces


A declarao de TExCtrlInterface :
TExCtrlInterface = class protected OwnerControl: TObject;

public Kind: byte; constructor procedure procedure procedure end;

Create(AKind: byte; AOwnerControl: TObject); Clear; virtual; abstract; RefreshLink(Sender:TExpertSystem);virtual;abstract; DestroyLink; virtual; abstract;

Para compreender esta definio, temos que compreender a funcionalidade de um objeto de interface. Em primeiro lugar, como descrito em tpicos anteriores deste captulo, o objeto de interface deve apontar para o objeto real que se deseja integrar Expert SINTA VCL. Este objeto , na declarao de TExCtrlInterface, o ponteiro OwnerControl. O relacionamento feito no construtor da interface. E no construtor que tambm se inicializa um parmetro essencial: Kind. No mdulo ExConsts.Pas, temos as seguintes constantes:
{Interfaces} {Para objetos que exibem instncias de variveis} I_INSTANCE_VIEW = 0; {Para objetos que exibem dados relativos a variveis, como uma pergunta ou os seus possveis valores} I_VARIABLE_VIEW = 1; {Para objetos que exibem regras ou trechos de regras} I_KB_VIEW = 2; {Para objetos que refletem o status da mquina de inferncia, como um navegador} I_STATUS_VIEW = 3;

De acordo com o valor de Kind, TExpertSystem realizar mudanas nos objetos apontados nos eventos necessrios. Os diferente efeitos para diferentes valores de Kind so:

I_INSTANCE_VIEW: os objetos so atualizados sempre que novas instncias

de variveis surgem ou so desfeitas. Isto ocorre basicamente quando uma regra aceita (e suas concluses parte ENTO efetuadas) ou quando o usurio volta para uma pergunta anterior (o que desfaz algumas instncias). Classes da Expert SINTA VCL correspondentes a esta descrio so TWatchPanel e TValuesGrid;

I_VARIABLE_VIEW: note bem a diferena interfaces com Kind igual a

I_INSTANCE_VIEW respondem a eventos que lidam com instncias de variveis. Estas correspondem a objetos que lidam com propriedades de variveis. Por propriedades de uma varivel se entende: lista de valores possveis e perguntas relacionadas. Classes da Expert SINTA VCL correspondentes a esta descrio so TExpertPrompt e TLabelQuestion;

I_KB_VIEW: manipulam objetos que lidam com regras ou trechos de regras.


Por exemplo, nossos conhecidos TRuleView e TDebugPanel;

I_STATUS_VIEW: a mquina de inferncia de um sistema especialista pode


estar em vrios estados: desativada, em consulta, em pausa, voltando para a

pergunta anterior. Se seu componente precisa responder a estes eventos, utilize este tipo. O exemplo tpico TExNavigator; O mtodo abstrato RefreshLink deve ser implementado por uma classe de interface derivada de TExCtrlInterface, como veremos na continuao de nosso exemplo, o TListExpertPrompt. De um modo geral, a funo de cada mtodo :

Clear: invocado quando no h informaes a serem exibidas. Em um

TRuleView, isto eqivaleria a limpar a list box. Em um TExpertPrompt, a esconder todas as opes. Em um TLabelQuestion, a limpar o caption do label. Ou seja, assim como os demais mtodos da interface, a ao totalmente dependente do objeto real apontado pela interface;

RefreshLink: atualiza as informaes a pedido do sistema especialista


relacionado;

DestroyLink: chamado pelo destrutor do sistema especialista para avisar que o


objeto TExpertSystem relacionado no existe mais;

Exemplo prtico
Para a real compreenso de como se deve criar e utilizar uma interface para um componente em desenvolvimento, continuemos com o exemplo do captulo 5, o TListExpertPrompt. Vamos definir a interface TListExpertPromptInterface:
TListExpertPromptInterface = class(TExCtrlInterface) public procedure Clear; override; procedure RefreshLink(Sender: TExpertSystem); override; procedure DestroyLink; override; end;

Como os mtodos da classe base TExCtrlInterface so abstratos, devemos implement-los na interface derivada:

O mtodo Clear deve limpar a visualizao de dados:


procedure TListExpertPromptInterface.Clear; begin TListExpertPrompt(OwnerControl).VarCode := 0; end;

mtodo RefreshLink deve atualizar os dados. TListExpertPromptInterface, isto feito preenchendo-se os (TListExpertPrompt(OwnerControl).Items) com os valores da (VarCode). O mtodo TExpertSystem.ValuesList (ver referncia documento) faz esta operao automaticamente.

No caso de itens da lista dada varivel ao final deste

procedure TListExpertPromptInterface.RefreshLink(Sender:TExpertSystem) begin

TListExpertPrompt(OwnerControl).ExpertSystem. ValuesList(TListExpertPrompt(OwnerControl).VarCode, TStringList(TListExpertPrompt(OwnerControl).Items)); end;

O mtodo DestroyLink basicamente o mesmo para todos os tipos de interface,


indicando que o sistema especialista no mais vlido:
procedure TListExpertPromptInterface.DestroyLink; begin TListExpertPrompt(OwnerControl).ExpertSystem := nil; end;

Observe que o objeto OwnerControl um ponteiro TObject. Assim, o cast explcito necessrio. A segunda parte consiste na integrao da interface com o componente. Em TListExpertPrompt, a primeira medida ser tomada quanto criao da interface.
constructor TListExpertPrompt.Create(AOwner: TComponent); begin inherited Create(AOwner); ExpertPromptInterface := TListExpertPromptInterface.Create(I_VARIABLE_VIEW, Self); end;

O prximo ponto importante a associao ao sistema especialista respectivo. aqui que entra o mtodo SetExpertSystem, associado propriedade ExpertSystem, conforme foi definido no captulo anterior.
procedure TListExpertPrompt.SetExpertSystem(ES: TExpertSystem); begin if (FExpertSystem <> ES) and (FExpertSystem <> nil) then FExpertSystem.RemoveControl(ExpertPromptInterface); FExpertSystem := ES; if ES <> nil then begin ES.AddControl(ExpertPromptInterface); if FVarCode <> 0 then SetVarCode(FVarCode); end else VarCode := 0; end;

Observe que a primeira preocupao verificar se este objeto TListExpertPrompt est associado a algum outro sistema especialista (FExpertSystem <> nil). Se verdadeiro, o mtodo RemoveControl de TExpertSystem encarregar-se- de "desalocar" a interface respectiva da lista de controles relacionados no sistema especialista. Aps esta verificao, a interface associada ao sistema especialista pelo mtodo AddControl de TExpertSystem. A atualizao da exibio de dados feita logo em seguida, o que em TListExpertPrompt corresponde ao mtodo SetVarCode. Claro, tudo isto feito levando-se em conta que o sistema especialista existe. Se o valor passado for nulo (ES = nil), isto deve eqivaler a limpar a exibio de informaes. Nenhum sistema especialista estar associado interface implementada em TListExpertPrompt. Finalmente, deve-se saber desassociar a interface do sistema especialista e

destru-la quando no destrutor do componente:


destructor TListExpertPrompt.Destroy; begin if FExpertSystem <> nil then FExpertSystem.RemoveControl(ExpertPromptInterface); ExpertPromptInterface.Free; inherited Destroy; end;

ltimas observaes
Quase todas as interfaces derivam de TExCtrlInterface e implementam os mtodos abstratos nela definidos. H uma exceo: a interface de depuradores, como TDebugPanel. TExDebugInterface definida em ExSystem.Pas como:
TExDebugInterface = class(TExCtrlInterface) protected function GetActiveTrace: boolean; virtual; abstract; procedure SetActiveTrace(ac: boolean); virtual; abstract; public property ActiveTrace: boolean read GetActiveTrace write SetActiveTrace; procedure Activate; virtual; abstract; procedure Update(rule: integer; order: integer; is_tail: boolean); virtual; abstract; end;

Alm dos mtodos e propriedades de TExCtrlInterface, esta interface acrescenta as seguintes funcionalidades:

ActiveTrace: indica que a mquina de inferncia deve esperar por um passo do


depurador para poder continuar;

Activate: quando invocado, paralisa a mquina de inferncia se ActiveTrace


verdadeira ou de acordo com indicaes do sistema especialista;

Update(rule, order, is_tail): informa ao depurador que mquina de inferncia


est na regra rule, na order-sima premissa (ou concluso) da mesma, sabendose que uma premissa se is_tail verdadeira e uma concluso se is_tail falsa ;

Ao associar um novo depurador, deve-se, alm de associ-lo ao sistema especialista pelo mtodo AddControl, indicar que este o depurador do sistema:
ES.DebugControl := TMyExDebugInterface(MyExDebugInterface);

Ou seja, a implementao atual de TExpertSystem s aceita um depurador por vez. Para maiores detalhes, veja a implementao de TDebugPanel.SetExpertSystem em ExCtrls.Pas.

Manual de Referncia
Este seo descreve a funcionalidade das principais classes que formam a Expert SINTA Visual Component Library de forma a servir de referncia. Para uma compreenso melhor do relacionamento entre estas classes, consulte as sees anteriores deste documento. Captulo 7 Estrutura de Dados Relao das classes que formam a estrutura de dados utilizada na representao do conhecimento. Captulo 8 Os Componentes Visuais Os mtodos e as propriedades dos onze componentes da Expert SINTA VCL.

Captulo

7
Estrutura de Dados
Nesta seo, descrevemos as classes que formam a estrutura de dados representando a base de conhecimento. Embora no seja absolutamente necessria a compreenso das mesmas, estas podem ser teis na criao de componentes personalizados para comunicao com o sistema especialista. Tambm um exemplo funcional de implementao de regras de produo. Cada definio de classe pode ser encontrada pelo seguinte cabealho, onde cada linha possui seu significado:

TMinhaClasse
Unidade: Exemplo TObject TObjetoDerivado ... TMinhaClasse

Antes de compreender uma classe, tenha certeza de que compreende suas classes de base. As classes de base no citadas aqui pertencem Visual Component Library da Borland. Consulte a documentao do Borland Delphi ou C++ Builder se precisar.

Viso Geral
Para melhor compreender a estrutura que representa as regras de produo, vejamos o seguinte exemplo (extrado da base SECAJU): SE OU E E ENTO galerias nos ramos ou inflorescncias = Sim inflorescncias = murchas ou secas brotaes novas murchas = Sim orifcios laterais nos ramos ou inflorescncias = Sim praga = broca das pontas CNF 90%

Figura 6 - Exemplo de regra de produo

Chamemos as concluses de uma regra de cabeas da regra e os antecedentes de caudas. Esta notao proveniente da linguagem PROLOG, na qual as concluses encabeam as clusulas. Para o projetista do conhecimento que cria bases utilizando o Expert SINTA, o seguinte critrio para definies de assertivas deve ser seguido: ( I ). A estrutura de cada cauda (premissa) deve obedecer ao seguinte modelo: <atributo> onde: <operador> <valor> <conectivo>

atributo uma varivel capaz de assumir uma ou mltiplas instanciaes no decorrer

da consulta base de conhecimentos. Cabe ao desenvolvedor definir o tipo de atributo. Um atributo uma entidade capaz de armazenar listas de valores cujo significado depende do contexto da base. Por exemplo, um atributo doena, no SECAJU, capaz de ser instanciado a qualquer um ou vrios elementos da lista de valores pr-definida [mofo preto, oidio, antracnose]. Nmeros tambm podem ser atribudos a variveis;

operador um elo de ligao entre o atributo e o valor da premissa que define o tipo
de comparao a ser realizada. So operadores relacionais: =, >, <=, <>, entre outros;

valor um item de uma lista a qual foi previamente criada e relacionada a um


atributo. Como sabemos, a interface visual do Expert SINTA foi idealizada de modo a minimizar o trabalho do responsvel pela implementao da base de conhecimentos. Para tanto, o Expert SINTA exige que os atributos sejam definidos antes de criarmos uma regra que o utilize. No momento da criao de um atributo, tambm possvel que seja definida uma lista de valores que constituir o universo ao qual suas instanciaes devem necessariamente pertencer. As listas criadas podem ser utilizadas para construo de menus, caso o sistema especialista necessite efetuar uma pergunta ao usurio referente quele determinado atributo. Um valor tambm pode ser um nmero, caso o atributo o permita;

conectivo um dos seguintes elementos utilizados na lgica clssica: E, OU. Sua


funo unir a sentena ao conjunto de premissas que formam a seo de antecedentes de uma regra.

Esta estrutura representada atravs de uma rvore binria da classe TTails (descrita a seguir). ( II ). A estrutura de cada cabea (concluso) deve obedecer ao seguinte modelo: <atributo> onde: = <valor> <grau de confiana>

atributo equivale ao mesmo atributo usado em caudas; = um operador de atribuio e no de igualdade. Ou seja, o atributo, nas cabeas
de regra, sempre instanciado a um valor. Dependendo se a varivel pode ou no acumular mltiplas instanciaes, o novo valor substitura o antigo ou ser empilhado com os demais.

valor equivale ao mesmo valor utilizado em caudas; grau de confiana uma porcentagem indicando a confiabilidade daquela concluso
especfica da regra. O grau de confiana varia de 0% a 100%. O seguinte diagrama exibe todas as rvores binrias que formam a estrutura de dados de uma base de conhecimento. Observe que a mesma pode ser apresentada com um esquema relacional:

Figura 6 - Principais entidades que formam a estrutura de dados

Ao programar a nvel de estrutura de dados, procure pensar como se estivesse utilizando tabelas de um banco de dados relacional. Extramos informaes de cada "tabela" (rvore binria) de um "registro" corrente (aqui denominado de n) com atributos (propriedades). Para conseguir informaes, por exemplo, de uma varivel, deve-se navegar pela "tabela" Vars de um objeto TExpertSystem usando comandos como Seek (para ir direto ao ponto), MoveFirst, MoveLast, MoveNext, MovePrevious. A funo Blind indica se existe algum "registro" corrente (funcionaria mais ou menos como um EOF - end of file). Por exemplo, usando a regra mostrada anteriormente, podemos organizar a estrutura de dados do seguinte modo (observe que os cdigos so gerados durante a construo da base pelo shell Expert SINTA):

Vars
Cdigo 1 2 3 4 5 Nome galerias nos ramos ou inflorescncias inflorescncias brotaes novas murchas orifcios laterais nos ramos ou inflorescncias praga Multivalorada? Numrica? No No Sim No No No No No Sim No

Values
Cdigo Cdigo da varivel Nome Posio 1 2 murchas ou secas 1 2 2 existem leses necrticas 2 3 5 broca das pontas 1 4 5 besourinho vermelho 2 (existem leses necrticas e besourinho vermelho foram colocados apenas para ilustrar o comportamento de mais de um valor para uma mesma varivel)

Tails
Cdigo da regra Cdigo da Operador Cdigo Conectivo Negao varivel do valor 1 1 = -2 OU No 1 2 = 1 E No 1 3 = -2 E No 1 4 = -2 ENTO No O valor -2 especial e corresponde ao SIM lgico. Para maiores detalhes, ver a descrio da classe TTails.

Heads
Cdigo da regra Cdigo da varivel 1 5 Cdigo do valor 3 CNF 0.9

As Classes
A seguir, a descrio das "tabelas" mais importantes e demais classes de estrutura de dados.

TCodeNameIndexTree
Unidade: ExDataSt TObject TSingleIndexTree TCodeNameIndexTree

Descrio
Classe de base para a estrutura de dados. No usada diretamente por TExpertSystem. uma rvore binria de dois ndices, onde seus ns armazenam um cdigo mais uma determinada string (um nome). Os ns so indexados tanto por cdigo como por nome.

Propriedades

Propriedade

Visibilidade

Default

Documentada em

Blind Code CurrentKey Name RecordCount

public public public public public

PRIMARY_KEY

TSingleIndexTree TSingleIndexTree TCodeNameIndexTree TCodeNameIndexTree TSingleIndexTree

CurrentKey: integer ndice atual usado pelos mtodos Move... e pelas propriedades. Os valores possveis so: PRIMARY_KEY e BY_NAME; Name: string Nome do n corrente da rvore;

Mtodos
Mtodo Visibilidade Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek SeekByName

public public public public public public public public public

TSingleIndexTree TSingleIndexTree TCodeNameIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TCodeNameIndexTree TCodeNameIndexTree

procedure Insert(c: integer; name: string); Insere um n novo. Nesta rvore, o n um cdigo mais um nome. Os ns so ordenados por c ou name; procedure Seek(key: integer); override; Procura por um n de cdigo key. Se bem-sucedido, a propriedade Blind definida como falso. Caso contrrio, como verdadeiro. O ndice corrente mudado para PRIMARY_KEY, ndice por cdigo; procedure SeekByName(name: string); virtual; Procura por um n de nome name. Se bem-sucedido, a propriedade Blind definida como falso. Caso contrrio, como verdadeiro. O ndice corrente mudado para BY_NAME, ndice por nome;

TFormulas
Unidade: ExDataSt TObject TSingleIndexTree TCodeNameIndexTree TFormulas

Descrio
Qualquer associao (atribuio, comparao) de um valor a uma varivel numrica

considerada como funo do usurio. Essa funo interpretada pelo parser da mquina de inferncia. nessa rvore que as expresses so guardadas.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code CurrentKey Name RecordCount

public public public public public

PRIMARY_KEY

TSingleIndexTree TFormulas TCodeNameIndexTree TFormulas TSingleIndexTree

Code: integer Cdigo arbitrrio para relacionar a frmula a uma cabea ou cauda de regra; Name: string A expresso a ser analisada pelo parser interno;

THeads
Unidade: ExDataSt TObject TSingleIndexTree THeads

Descrio
Representa as cabeas (concluses) de uma regra. De acordo com o que foi descrito no comeo desta seo, uma concluso formada por trs atributos: cdigo da varivel + cdigo do valor (ou frmula) + grau de confiana daquela assertiva. Lembre-se que a operao de atribuio ("=") est implcita.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code CNF RecordCount ValCode VarCode

public public public public public public

TSingleIndexTree THeads THeads TSingleIndexTree THeads THeads

Code: integer Cdigo da regra associada. A ordem das concluses definida pela ordem na qual elas aparecem na rvore. Ao usarmos o mtodo Seek(x), o n corrente passa a ser a primeira concluso da regra de cdigo x. Com o mtodo MoveNext, possvel iterar por todas as concluses; CNF: single Grau de confiana (confidence factor) da atribuio. Varia de 0 a 1;

ValCode: integer Cdigo do valor (ou frmula matemtica) que est sendo atribudo a uma varivel; VarCode: integer Cdigo da varivel que est sendo instanciada por uma atribuio;

Mtodos
Mtodo Visibilidade Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek

public public public public public public public public

TSingleIndexTree TSingleIndexTree THeads TsingleIndexTree TsingleIndexTree TsingleIndexTree TsingleIndexTree TsingleIndexTree

procedure Insert(c: integer; c_var: integer; c_val: integer; cnf: single); Insere um novo n, onde c o cdigo da regra relacionada, c_var o cdigo da varivel em atribuio, c_val o cdigo do valor (ou frmula) atribudo, cnf o grau de confiana da concluso;

THelpContexts
Unidade: ExDataSt TObject TSingleIndexTree THelpContexts

Descrio
So informaes sobre possveis contextos de ajuda de um dado valor de uma varivel objetivo, de forma a chamar um arquivo de ajuda no tpico desejado, dependendo da varivel. O shell Expert SINTA usa esses valores na janela de exibio de resultados.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code Context RecordCount

public public public public

TSingleIndexTree THelpContexts THelpContexts TSingleIndexTree

Code: integer Cdigo relacionado a um dado valor; Context: integer Nmero do contexto de ajuda dentro do arquivo de ajuda;

Mtodos

Mtodo

Visibilidade

Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek

public public public public public public public public

TSingleIndexTree TSingleIndexTree THelpContexts TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree

procedure Insert(c: integer; con: integer); Insere um novo n, onde c o cdigo do valor relacionado, con o nmero do contexto de ajuda;

TInfos
Unidade: ExSystem Este tipo de dado um registro (record), no uma classe

Descrio
Informaes gerais sobre a base de conhecimento, como o seu nome, nome dos autores, texto de abertura, entre outras.

Propriedades
Propriedade Visibilidade Default Documentada em

Authors HelpFile Name Overture ShowIntro

TInfos TInfos TInfos TInfos TInfos

Authors: string O(s) nome(s) do(s) autor(es); HelpFile: string Arquivo de ajuda relacionado, utilizado principalmente para exibir informaes sobre resultados atingidos; Name: string Nome do sistema especialista criado; Overture: TStringList Texto explicativo que pode ser utilizado no incio de uma consulta; ShowIntro: boolean Informa se uma tela de abertura com o texto contido em Overture deve ser exibida. O

shell exibe esta tela automaticamente, mas, caso se esteja criando um projeto com a Expert SINTA VCL, cabe ao implementador cri-la ou no;

TQuestions
Unidade: ExDataSt TObject TSingleIndexTree TQuestions

Descrio
So as strings utilizadas, por exemplo, em TLabelQuestion para exibir o texto de uma pergunta definida pelo criador da base. Essas strings so usadas para deixar mais claro ao usurio qual a inteno de uma dada pergunta. So mais teis sob o Expert SINTA, que no possui um editor de janelas. Em um ambiente como o Borland Delphi, podem ser substiudas por labels comuns. Porm, com o uso de perguntas definidas na prpria base de conhecimento, o trabalho pode ser mais automatizado, como mostrado no Expert SINTA RunTime (cdigo fonte - para Borland Delphi - incluso no pacote da Expert SINTA VCL).

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code Question RecordCount UseCNF Why

public public public public public public

TSingleIndexTree TQuestions TQuestions TSingleIndexTree TQuestions TQuestions

Code: integer Cdigo da pergunta, relacionado ao cdigo de uma dada varivel; Question: string A pergunta propriamente dita; UseCNF: boolean Propriedade usada pelo desenvolvedor para identificar se tal pergunta fica boa ou no com entradas que permitem fatores de confiana. Por exemplo, em perguntas do tipo "Existem chances de chuva amanh?" so adequadas com o uso de CNFs, enquanto "Qual o seu sexo?" no. Tal propriedade usada pela classe TExpertPrompt e por qualquer um que queira construir controles de entrada de valores para uma base de conhecimento em execuo; Why: TStringList Um pequeno texto de uso facultativo que explica qual a importncia daquela pergunta. Leve em considerao que definir um valor para esta propriedade implicar em copiar strings para um TStringList interno, e no usar o valor atribudo como ponteiro;

Mtodos

Mtodo

Visibilidade

Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek

public public public public public public public public

TSingleIndexTree TSingleIndexTree TQuestions TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree

procedure Insert(c: integer; q: string; w: TStringList; uc: boolean); Insere um novo n, onde c o cdigo da varivel relacionada, q o texto da pergunta em si, w uma lista de strings com a explicao respectiva (para nenhuma explicao, passe nil - NULL - como valor), uc o indicativo do uso ou no de grau de confiana;

TRules
Unidade: ExDataSt TObject TSingleIndexTree TCodeNameIndexTree TValues TRules

Descrio
Rene informaes gerais sobre a regra, a saber: o nome e sua posio em relao s demais. O contedo (premissas e concluses) est em rvores do tipo TTails e THeads. Para maiores detalhes, consulte as classes de base e os comentrios no comeo deste captulo.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code CurrentKey Name Position RecordCount VarCode

public public public public public public public

PRIMARY_KEY

TSingleIndexTree TSingleIndexTree TValues TCodeNameIndexTree TValues TSingleIndexTree TValues

Position: integer Indica a posio da regra em relao s demais. No confundir com a propriedade Code, to somente um cdigo de controle criado pelo Expert SINTA. TRules um reaproveitamento de TValues, onde Position esconde a propriedade original de TValues. Use o mtodo SeekByVar para procurar por Position;

Mtodos
Mtodo Visibilidade Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek SeekByName SeekByVar

public public public public public public public public public public

TSingleIndexTree TSingleIndexTree TRules TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TValues TValues TRules

procedure Insert(c: integer; name: string; position: integer; dummy: integer); Insere um novo n. Nesta rvore, o n representa uma regra (cdigo + nome + posio; o ltimo valor no usado) . Os ns so ordenados por c, name ou position; procedure SeekByVar(c_var: integer); Encontrar o primeiro n cuja posio c_var. O ndice corrente mudado para BY_VAR, ndice por cdigo de varivel, interpretada em TRules como cdigo de posio.

TSingleIndexTree
Unidade: ExDataSt TObject TSingleIndexTree

Descrio
Classe de base para a estrutura de dados. No usada diretamente por TExpertSystem. uma rvore binria de um nico ndice, onde seus ns armazenam somente uma informao: um cdigo, sendo este cdigo utilizado para sua indexao.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code RecordCount

public public public

TSingleIndexTree TSingleIndexTree TSingleIndexTree

Blind: boolean Indica se existe ou no algum n corrente. Por exemplo, quando procuramos um n e ele no existe, esta propriedade retorna true. A grosso modo, pode ser comparado com uma propriedade EOF de uma tabela de banco de dados; Code: integer Cdigo do n corrente da rvore; RecordCount: integer Retorna o total de ns da rvore;

Mtodos
Mtodo Visibilidade Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek procedure Delete; virtual; Deleta da rvore o n atual;

public public public public public public public public

TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree

function GetFreeCode: integer; Retorna um cdigo que pode ser utilizado em um novo n de forma a no coincidir com os ns j existentes; procedure Insert(c: integer); virtual; Insere um novo n. Nesta rvore, o n simplesmente um cdigo qualquer. Os ns so ordenados por c; procedure MoveFirst; virtual; Move-se para o primeiro n da rvore, de acordo com o ndice atual (esta rvore possui somente um ndice, por chave, mas suas descendentes podem ter outros); procedure MoveLast; virtual; Move-se para o ltimo n da rvore, de acordo com o ndice atual (esta rvore possui somente um ndice, por chave, mas suas descendentes podem ter outros); procedure MoveNext; virtual; Move-se para o prximo n da rvore, de acordo com o ndice atual (esta rvore possui somente um ndice, por chave, mas suas descendentes podem ter outros); procedure MovePrevious; virtual; Move-se para o n anterior da rvore, de acordo com o ndice atual (esta rvore possui somente um ndice, por chave, mas suas descendentes podem ter outros); procedure Seek(key: integer); virtual; Procura por um n de cdigo key. Se bem-sucedido, a propriedade Blind definida como falso. Caso contrrio, como verdadeiro;

TTails
Unidade: ExDataSt TObject TSingleIndexTree TTails

Descrio

Representa as caudas (premissas) de uma regra. De acordo com o que foi descrito no comeo desta seo, uma premissa formada por quatro atributos: cdigo da varivel + operador + cdigo do valor (ou frmula matemtica) + conectivo para prxima premissa.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code Conect Neg Operator RecordCount ValCode VarCode

public public public public public public public public

TSingleIndexTree TTails TTails TTails TTails TsingleIndexTree TTails TTails

Code: integer Cdigo da regra associada. A ordem das premissas definida pela ordem na qual elas aparecem na rvore. Ao usarmos o mtodo Seek(x), o n corrente passa a ser a primeira premissa da regra de cdigo x. Com o mtodo MoveNext, possvel iterar por todas as premissas; Conect: integer Tipo de conectivo que liga a premissa corrente prxima premissa. A ltima premissa tem como conectivo o valor ENTO. Os valores de conectivo so: cnAND (E: valor 0), cnOR (OU: valor 1), cnTHEN (ENTO: valor 2); Neg: boolean Quando verdadeira, inverte o sentido do operador ("=" interpretado com "<>", "<" como ">=", etc.) Operator: string Operador que especifica a o tipo de comparao entre uma varivel e um valor. Os operadores possveis so "=", ">", "<", ">=", "<=", "<>" ValCode: integer Cdigo do valor (ou frmula matemtica) que est sendo comparada com uma varivel; VarCode: integer Cdigo da varivel que est sendo comparada com um valor;

Mtodos
Mtodo Visibilidade Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast

public public public public public

TSingleIndexTree TSingleIndexTree TTails TSingleIndexTree TSingleIndexTree

MoveNext MovePrevious Seek

public public public

TSingleIndexTree TSingleIndexTree TSingleIndexTree

procedure Insert(c: integer; c_var: integer; op: string; c_val: integer; conec: integer; neg: boolean); Insere um novo n, onde c o cdigo da regra relacionada, c_var o cdigo da varivel em comparao, op o operador de comparao, c_val o cdigo do valor (ou frmula) comparada, conec o conectivo para prxima premissa e neg o indicativo de negao.

TTargetNode
Unidade: ExDataSt TObject TTargetNode

Descrio
Os items da lista TTargets so objetos do tipo TTargetNode. Estes items guardam informaes sobre os objetivos do sistema especialista, enquanto TTargets define sua ordem de busca.

Propriedades
Propriedade Visibilidade Default Documentada em

Code ShowResults

public public

TTargetNode TTargetNode

Code: integer O cdigo da varivel relacionada; ShowResults: boolean Se falso, o evento OnShowResults no disparado quando esse objetivo encontrado;

TTargets
Unidade: ExDataSt TObject TList TTargets

Descrio
Os objetivos do sistema especialista. Note que no se usa uma rvore ordenada, pois os itens devem estar em uma lista cuja ordem depende apenas da ordem de entrada.

Propriedades
Propriedade Visibilidade Default Documentada em

Capacity

public

TList

Count Items List Nodes

public public public public

TList TList TList TTargets

Nodes[Index: integer]: TTargetNode L os valores da lista. Use no lugar da propriedade Items (usada para as outras operaes: deleo, insero, etc.) para ler valores diretamente como TTargetNode, sem necessidade de casting; Para informaes sobre os mtodos, consulte a documentao de TList no Borland Delphi.

TValues
Unidade: ExDataSt TObject TSingleIndexTree TCodeNameIndexTree TValues

Descrio
A representao dos valores relacionados s variveis. Os valores especiais so UNKNOWN (Desconhecido: valor -1), YES (Sim: -2), NO (No: -3). Os ns aqui so ordenados tanto pelo cdigo e nome como tambm pelo cdigo da varivel relacionado a este valor. Para maiores detalhes, consulte as classes de base e os comentrios no comeo deste captulo.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code CurrentKey Name Position RecordCount VarCode

public public public public public public public

PRIMARY_KEY

TSingleIndexTree TSingleIndexTree TValues TCodeNameIndexTree TValues TSingleIndexTree Tvalues

CurrentKey: integer ndice atual usado pelos mtodos Move... e pelas propriedades. Os valores possveis so: PRIMARY_KEY, BY_NAME e BY_VAR; Position: integer Lembrando que o n atual representa um valor do Expert SINTA, essa propriedade indica a posio na qual o item do valor aparece em um TExpertPrompt; VarCode: integer Relaciona o n atual (que representa um valor) a uma varivel;

Mtodos

Mtodo

Visibilidade

Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek SeekByName SeekByVar

public public public public public public public public public public

TsingleIndexTree TsingleIndexTree Tvalues TsingleIndexTree TsingleIndexTree TsingleIndexTree TsingleIndexTree Tvalues Tvalues Tvalues

procedure Insert(c: integer; name: string; c_var: integer; position: integer); Insere um novo n. Nesta rvore, o n representa uma varivel (cdigo + nome + cdigo da varivel a qual pertence + posio no qual deve aparecer em um TExpertPrompt). Os ns so ordenados por c, name ou c_var; procedure Seek(key: integer); Encontrar o primeiro n de cdigo key. Se bem-sucedido, a propriedade Blind definida como falso. Caso contrrio, como verdadeiro. O ndice corrente mudado para PRIMARY_KEY, ndice por cdigo; procedure SeekByName(name: string; v: integer); Procura por um n de nome name, pertecente varivel v. Se bem-sucedido, a propriedade Blind definida como falso. Caso contrrio, como verdadeiro. O ndice corrente mudado para BY_NAME, ndice por nome; procedure SeekByVar(c_var: integer); Encontrar o primeiro n cujo cdigo de varivel c_var. O ndice corrente mudado para BY_VAR, ndice por cdigo de varivel. Itere pela rvore usando MoveNext para encontrar o valor desejado, identificando-o pelas demais propriedades;

TVarBasedEvent
Unidade: ExSystem Este tipo de dado um procedure, no uma classe

Descrio
Este tipo de procedure utilizada para determinados eventos existentes na classe TExpertSystem. O primeiro parmetro corresponde ao parmetro padro de um evento Delphi: o objeto que disparou o evento. O segundo parmetro uma informao complementar, cujo significado depender do evento em si. Para ver exemplos de utilizao de TVarBasedEvent, consulte a documentao da classe TExpertSystem no prximo captulo.
{Eventos relativos ao sistema especialista, onde V um cdigo de varivel} TVarBasedEvent = procedure (Sender: TObject; V: integer)

of object;

TVarListExtraTree
Unidade: ExDataSt TObject TSingleIndexTree TVarListExtraTree

Descrio
As instncias das variveis durante uma consulta so guardadas em duas rvores: VarListTree e VarListExtraTree. A segunda guarda as instncias de valores no representados por cdigos (no esto na rvore Values nem so do tipo Sim / No / DESCONHECIDO). At o momento, os nicos valores deste tipo que o Expert SINTA suporta so valores numricos. Valores DESCONHECIDO para variveis numricas so guardadas em VarListTree.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code CNF RecordCount Value

public public public public public

TSingleIndexTree TSingleIndexTree TVarListExtraTree TSingleIndexTree TVarListExtraTree

Code: integer Cdigo de uma varivel. Para cada instncia que uma varivel possui, existe um n correspondente na rvore. Com o mtodo Seek encontra-se a primeira instncia de uma varivel. Como MoveNext, itera-se pelos ns para encontrar outras possveis instncias; CNF: single O grau de confiana da instncia; Value: string O valor atribudo. Seu significado depende da varivel associada. Com variveis numricas, note que necessrio converter de string para real sempre que necessrio;

Mtodos
Mtodo Visibilidade Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek

public public public public public public public public

TSingleIndexTree TSingleIndexTree TVarListExtraTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree

procedure Insert(c: integer; v: string; cnf: single);

Insere um novo n, onde c o cdigo da varivel, v o valor (instncia), cnf o grau de confiana da instncia;

TVarListTree
Unidade: ExDataSt TObject TSingleIndexTree TVarListTree

Descrio
As instncias das variveis durante uma consulta so guardadas em duas rvores: VarListTree e VarListExtraTree. A primeira guarda as instncias de valores que esto presentes na rvore Values e valores Sim/No, alm do valor DESCONHECIDO.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code CNF RecordCount ValCode

public public public public public

TSingleIndexTree TVarListTree TVarListTree TSingleIndexTree TVarListTree

Code: integer Cdigo de uma varivel. Para cada instncia que uma varivel possui, existe um n correspondente na rvore. Com o mtodo Seek encontra-se a primeira instncia de uma varivel. Como MoveNext, itera-se pelos ns para encontrar outras possveis instncias; CNF: single O grau de confiana da instncia; ValCode: integer O cdigo do valor relacionado varivel, ou seja, a instncia da varivel;

Mtodos
Mtodo Visibilidade Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek

public public public public public public public public

TSingleIndexTree TSingleIndexTree TVarListTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree

procedure Insert(c: integer; v: integer; cnf: single); Insere um novo n, onde c o cdigo da varivel, v o cdigo do valor (instncia), cnf o grau de confiana da instncia;

TVars
Unidade: ExDataSt TObject TSingleIndexTree TCodeNameIndexTree TVars

Descrio
A representao das variveis. Para maiores detalhes, consulte as classes de base e os comentrios no comeo deste captulo.

Propriedades
Propriedade Visibilidade Default Documentada em

Blind Code CurrentKey Multi Name Numeric RecordCount

public public public public public public public

PRIMARY_KEY

TSingleIndexTree TSingleIndexTree TCodeNameIndexTree TVars TCodeNameIndexTree TVars TSingleIndexTree

Multi: boolean Propriedade que indica se o n corrente da rvore representa uma varivel multivalorada ou no; Numeric: boolean Propriedade que indica se o n corrente da rvore representa uma varivel numrica ou no;

Mtodos
Mtodo Visibilidade Documentado em

Delete GetFreeCode Insert MoveFirst MoveLast MoveNext MovePrevious Seek SeekByName

public public public public public public public public public

TSingleIndexTree TSingleIndexTree TVars TSingleIndexTree TSingleIndexTree TSingleIndexTree TSingleIndexTree TCodeNameIndexTree TCodeNameIndexTree

procedure Insert(c: integer; name: string; num: boolean; multi: boolean); Insere um novo n. Nesta rvore, o n representa uma varivel (cdigo + nome + indicativo de numrica ou no + indicativo de multivalorada ou no). Os ns so ordenados por c ou name;

Captulo

8
Os Componentes Visuais
Nesta seo, so descritos os componentes visuais acessveis pelo ambiente de programao utilizado na construo de sistemas especialistas baseados na Expert SINTA VCL. De cada componente (classe), so comentados propriedades, mtodos e eventos, onde a nomenclatura procura seguir as convenes estabelecidas no Object Pascal. Vale tambm lembrar que esta documentao refere-se Expert SINTA VCL para Win32 (Delphi 2.0 ou superior). Componentes para Windows 3.1 podem variar um pouco dos aqui descritos. Classes de interface (TExCtrlInterface, TExDebugInterface) so descritas em detalhes no captulo 6. Outra observao: nem todas as propriedades, mtodos e eventos herdados de componentes da VCL do Delphi so apresentados aqui. Para uma lista completa, consulte a documentao das classes base de cada componente da Expert SINTA VCL na documentao do Borland Delphi.

As Classes
As classes seguintes so apresentadas em ordem alfabtica, mas bom sempre lembrar que todos os componentes, de alguma forma, esto relacionados a TExpertSystem:

TAllVars
Unidade: ExCtrls TObject TPersistent TComponent TControl TWinControl TCustomTreeView TAllVars

Descrio
Para exibir todos valores de todas as variveis, use este componente. Note que variveis ainda no instanciadas no so apresentadas. DICA: pode-se usar este componente como alternativa ao TWatchPanel. Use o evento OnChange de TExpertSystem para atualiz-lo (mais o desempenho no o mesmo, pois toda a rvore redesenhada).

Propriedades

Propriedade

Visibilidade

Default

Documentada em

Align BorderStyle Color Ctrl3D Cursor DragCursor DragMode Enabled Font Height HelpContext HideSelection Hint Items Left Name ParentColor ParentCtrl3D ParentFont ParentShowHint PopupMenu ReadOnly ShowButtons ShowHint ShowLines ShowRoot TabOrder TabStop Tag Top Visible Width

published published published published published published published published published published published published published published published published published published published published published published published published published published published published published published published published

alNone bsSingle clWindow True crDefault crDrag dmManual True 0 True

False True True True True True False True True False 0 True

TControl TCustomListBox TWinControl TWinControl TControl TControl TControl TControl TControl TControl TWinControl TCustomTreeView TControl TCustomTreeView TControl TComponent TControl TWinControl TControl TControl TControl TCustomTreeView TCustomTreeView TControl TCustomTreeView TCustomTreeView TWinControl TWinControl TComponent TControl TControl TControl

Mtodos
Mtodo Visibilidade Documentado em

CreateTree Demais mtodos

public public/protected

TAllVars TCustomTreeView

procedure CreateTree(ES: TExpertSystem) Preenche o objeto com a rvore representando todos os valores e variveis; Demais mtodos Consulte a documentao do Delphi/C++ Builder;

Eventos
Eventos Visibilidade Documentado em

OnChange

published

TCustomTreeView

OnChanging OnClick OnCollapsed OnCollapsing OnCompare OnDblClick OnDeletion OnDragDrop OnDragOver OnEndDrag OnEnter OnExit OnExpanded OnExpanding OnGetImageIndex OnGetSelectedIndex OnKeyDown OnKeyPress OnKeyUp OnMouseDown OnMouseMove OnMouseUp OnStartDrag

published published published published published published published published published published published published published published published published published published published published published published published

TCustomTreeView TControl TCustomTreeView TCustomTreeView TCustomTreeView TControl TCustomTreeView TControl TControl TControl TWinControl TWinControl TCustomTreeView TCustomTreeView TCustomTreeView TCustomTreeView TWinControl TWinControl TWinControl TControl TControl TControl TControl

TConsultTree
Unidade: ExCtrls TObject TPersistent TComponent TControl TWinControl TCustomTreeView TConsultTree

Descrio
neste componente que se exibem os passos realizados por uma consulta. Normalmente, no evento OnShowResults de um dado TExpertSystem, um objeto destes recebe, atravs do mtodo CreateTree, informaes para criar uma rvore de pesquisa.

Propriedades
Propriedade Visibilidade Default Documentada em

Align BorderStyle Color Ctrl3D Cursor DragCursor DragMode Enabled Font Height

published published published published published published published published published published

alNone bsSingle clWindow True crDefault crDrag dmManual True

TControl TCustomListBox TWinControl TWinControl TControl TControl TControl TControl TControl TControl

HelpContext HideSelection Hint Left Name ParentColor ParentCtrl3D ParentFont ParentShowHint PopupMenu ReadOnly ShowButtons ShowHint ShowLines ShowRoot TabOrder TabStop Tag Top Visible Width

published published published published published published published published published published published published published published published published published published published published published

0 True

False True True True True True False True True False 0 True

TWinControl TCustomTreeView TControl TControl TComponent TControl TWinControl TControl TControl TControl TCustomTreeView TCustomTreeView TControl TCustomTreeView TCustomTreeView TWinControl TWinControl TComponent TControl TControl TControl

Mtodos
Mtodo Visibilidade Documentado em

Clear CreateTree Demais mtodos

public public public/protected

TConsultTree TConsultTree TCustomTreeView

procedure CreateTree(ES: TExpertSystem) Preenche o objeto com a rvore de consulta. ATENO: uma vez descarregadas as informaes sobre o histrico da consulta, elas se perdero. Se precisar exibir a rvore em mais de uma TConsultTree, copie os ns como faria em um TCustomOutline (Win16) ou TCustomTreeView (Win32); procedure Clear Limpa todo o contedo da rvore; Demais mtodos Consulte a documentao do Delphi/C++ Builder;

Eventos
Eventos Visibilidade Documentado em

OnChange OnChanging OnClick OnCollapsed OnCollapsing OnCompare

published published published published published published

TCustomTreeView TCustomTreeView TControl TCustomTreeView TCustomTreeView TCustomTreeView

OnDblClick OnDeletion OnDragDrop OnDragOver OnEndDrag OnEnter OnExit OnExpanded OnExpanding OnGetImageIndex OnGetSelectedIndex OnKeyDown OnKeyPress OnKeyUp OnMouseDown OnMouseMove OnMouseUp OnStartDrag

published published published published published published published published published published published published published published published published published published

TControl TCustomTreeView TControl TControl TControl TWinControl TWinControl TCustomTreeView TCustomTreeView TCustomTreeView TCustomTreeView TWinControl TWinControl TWinControl TControl TControl TControl TControl

TDebugPanel
Unidade: ExCtrls TObject TPersistent TComponent TControl TWinControl TCustomListBox TCustomRuleView TDebugPanel

Descrio
Uma listbox que funciona como depurador, exibindo como item destacado o ponto no qual a mquina de inferncia est durante uma consulta. O controle do depurador feito pelo objeto TExpertSystem associado (mtodos Pause, Resume e ExecuteStep).

Propriedades
Propriedade Visibilidade Default Documentada em

Align BorderStyle Color Ctrl3D Cursor DragCursor DragMode Enabled ExpertSystem ExtendedSelect Font Height HelpContext Hint IntegralHeight

published published published published published published published published published published published published published published published

alNone bsSingle clWindow True crDefault crDrag dmManual True True 0 False

TControl TCustomListBox TWinControl TWinControl TControl TControl TControl TControl TDebugPanel TCustomListBox TControl TControl TWinControl TControl TCustomListBox

ItemHeight Left MultiSelect Name ParentColor ParentCtrl3D ParentFont ParentShowHint PopupMenu ShowHint TabOrder TabStop TabWidth Tag Top Visible Width

published published published published published published published published published published published published published published published published published

False False True True True False False 0 0 True

TCustomListBox TControl TCustomListBox TComponent TControl TWinControl TControl TControl TControl TControl TWinControl TWinControl TCustomListBox TComponent TControl TControl TControl

ExpertSystem: TExpertSystem Sistema especialista cuja mquina de inferncia ser acompanhada;

Mtodos
Mtodo Visibilidade Documentado em

Activate FillRules SetHorizontalBar Update Demais mtodos

public public public public public/protected

TDebugPanel TRuleView TRuleView TDebugPanel TCustomListBox

procedure Activate Aciona o depurador, ocasionando espera na mquina de inferncia. Este mtodo chamado pelo sistema especialista associado atravs de uma interface do tipo TDebugPanelInterface; procedure Update(rule: integer; order: integer; is_tail: boolean) Indica ao depurador que a mquina de inferncia est na regra de cdigo rule, no item de nmero order, onde is_tail indica se este item est nas concluses (cabeas de regra - is_tail falso ) ou concluses (caudas de regra - is_tail verdadeiro). Este mtodo chamado pelo sistema especialista associado atravs de uma interface do tipo TDebugPanelInterface; Demais mtodos Consulte a documentao do Delphi/C++ Builder

Eventos
Eventos Visibilidade Documentado em

OnClick OnDblClick

published published

TControl TControl

OnDragDrop OnDragOver OnEndDrag OnEnter OnExit OnKeyDown OnKeyPress OnKeyUp OnMouseDown OnMouseUp OnStartDrag

published published published published published published published published published published published

TControl TControl TControl TWinControl TWinControl TWinControl TWinControl TWinControl TControl TControl TControl

TExNavigator
Unidade: ExCtrls TObject TPersistent TComponent TControl TWinControl TCustomControl TConsultPanel TExNavigator

Descrio
O navegador TExNavigator exibe botes que permitem mudar o status da consulta (por exemplo, inici-la, voltar para a pergunta anterior, dar uma pausa, finalizar). Os botes so disponibilizados ou no de acordo com o status da mquina de inferncia. DICA: para construir um navegador personalizado, pode utilizar controles (botes, por exemplo) para disparar mtodos como Pause, StartEngine, etc. no objeto TExpertSystem desejado e eventos como OnPause, OnStart para disponibilizar, ou inibir, esses controles.

Propriedades
Propriedade Visibilidade Default Documentada em

Align BevelInner BevelOuter BevelWidth BorderStyle BorderWidth btnBack btnGo btnPause btnStep btnStop Color Ctrl3D Cursor DragCursor DragMode Enabled ExpertSystem

published published published published published published public public public public public published published published published published published published

alNone bvNone bvRaised 1 bsSingle 0

clWindow True crDefault crDrag dmManual True

TControl TCustomPanel TCustomPanel TCustomPanel TCustomListBox TCustomListBox TExNavigator TExNavigator TExNavigator TExNavigator TExNavigator TWinControl TWinControl TControl TControl TControl TControl TExNavigator

Height HelpContext Hint Left Locked Name ParentColor ParentCtrl3D PopupMenu TabOrder TabStop Tag Top Visible VisibleButtons Width

published published published published published published published published published published published published published published published published

0 False False True False 0 True [nbGo, nbStep, nbStop]

TControl TWinControl TControl TControl TCustomPanel TComponent TControl TWinControl TControl TWinControl TWinControl TComponent TControl TControl nbBack, TExNavigator nbPause, TControl

btnGo, btnBack, btnStep, btnPause, btnStop: TSpeedButton So os botes que correspondem s funes, respectivamente, de Iniciar/Continuar, Voltar para a pergunta anterior, Executar passo, Pausa, Abortar consulta; ExpertSystem: TExpertSystem O sistema associado ao navegador; VisibleButtons: TNavigatorVisibleButtons ([nbGo, nbBack, bnStep, nbPause, nbStop]) Se voc no desejar, por exemplo, que o boto de pausa e passo no apaream, use essa propriedade;

Mtodos
Mtodo Visibilidade Documentado em

DisableAll UpdateButtons SetDefaults Demais mtodos procedure DisableAll Desabilita todos os botes;

public public public public/protected

TExNavigator TExNavigator TExNavigator TCustomPanel

procedure UpdateButtons Abilita/desabilita os botes de acordo com o estado da mquina de inferncia; procedure SetDefaults Abilita/desabilita os botes para o estado de partida da mquina de inferncia; Demais mtodos Consulte a documentao do Delphi/C++ Builder;

Eventos
Eventos Visibilidade Documentado em

OnDragDrop OnDragOver OnEndDrag OnEnter OnExit OnMouseDown OnMouseMove OnMouseUp OnResize OnStartDrag

published published published published published published published published published published

TControl TControl TControl TWinControl TWinControl TControl TControl TControl TCustomPanel TControl

TExpertPrompt
Unidade: ExCtrls TObject TPersistent TComponent TControl TWinControl TScrollingWinControl TScrollBox TExpertPrompt

Descrio
Monta um menu de checkboxes para entrada de dados automaticamente baseado em uma varivel de uma base de conhecimento. Tambm atualiza automaticamente as instncias da varivel em uma consulta de acordo com o que foi marcado pelo usurio.

Propriedades
Propriedade Visibilidade Default Documentada em

Align AutoScroll AutoSize BorderStyle BoundsRect Brush ClientHeight ClientOrigin ClientRect ClientWidth Color ControlCount Controls Ctrl3D Cursor DragCursor DragMode Enabled ExpertSystem

published published published published public public, read-only public public, read-only public, read-only public published public, read-only public, read-only published published published published published published

alNone True False bsSingle

TControl
TScrollingWinControl

clWindow True crDefault crDrag dmManual True

TExpertPrompt TCustomListBox TControl TWinControl TControl TWinControl TWinControl TControl TWinControl TWinControl TWinControl TWinControl TControl TControl TControl TControl TExpertPrompt

Font Height HelpContext Hint HorzScrollBar Left MaxHeight MaxWidth MinHeight MinWidth Name Parent ParentColor ParentCtrl3D ParentFont ParentShowHint PopupMenu ShowErrorMessages ShowHint TabOrder TabStop TabWidth Tag Top VarCode VertScrollBar Visible Width

published published published published published published published published published published published public published published published published published published published published published published published published published published published published

TControl TControl TWinControl TControl


TScrollingWinControl

300 400 0 0 False True True True False False 0 0 0 True

TControl TExpertPrompt TExpertPrompt TExpertPrompt TExpertPrompt TComponent TControl TControl TWinControl TControl TControl TControl TExpertPrompt TControl TWinControl TWinControl TCustomListBox TComponent TControl TExpertPrompt
TScrollingWinControl

TControl TControl

AutoSize: boolean Quando verdadeira, o prompt ajusta automaticamente seu tamanho de acordo com as opes apresentadas; ExpertSystem: TExpertSystem O sistema que fornece a base de conhecimento ao ExpertPrompt; MaxHeight: integer Altura mxima que o prompt pode atingir quando AutoSize verdadeira; MaxWidth: integer Largura mxima que o prompt pode atingir quando AutoSize verdadeira; MinHeight: integer Altura mnima que o prompt pode atingir quando AutoSize verdadeira; MinWidth: integer Largura mnima que o prompt pode atingir quando AutoSize verdadeira; ShowErrorMessages: boolean Quando verdadeira, o ExpertPrompt exibir mensagem de erro em caso de entrada

invlida; VarCode: integer Varivel que ir fornecer os valores para a construo das opes;

Mtodos
Mtodo Visibilidade Documentado em

ArrangeTextOptions BuildOptions UpdateBase Demais mtodos

public public public public/protected

TExpertPrompt TExpertPrompt TExpertPrompt TScrollBox

procedure ArrangeTextOptions Semelhante a BuildOptions, mais usado apenas para os menus de opes de checkboxes (ou seja, para entradas de dados no numricas). Sua funo basicamente reposicionar os controles dentro do TExpertPrompt. um pouco mais rpido; procedure BuildOptions Fora a exibio de opes no TExpertPrompt ( automtica quando se muda a propriedade ExpertSystem ou VarCode). Pode ser usada para, por exemplo, reposicionar os controles filhos quando mudamos o tamanho do TExpertPrompt.; procedure UpdateBase Atualiza a consulta com os valores dados como entrada nas opes do prompt. Demais mtodos Consulte a documentao do Delphi/C++ Builder

Eventos
Eventos Visibilidade Documentado em

OnClick OnDblClick OnDragDrop OnDragOver OnEndDrag OnEnter OnExit OnMouseDown OnMouseMove OnMouseUp OnResize

published published published published published published published published published published published

TControl TControl TControl TControl TControl TWinControl TWinControl TControl TControl TControl TScrollBox

TExpertSystem
Unidade: ExSystem TObject TPersistent TComponent TExpertSystem

Descrio
Classe principal, onde esto includas a mquina de inferncia e a estrutura de dados que representa a base de conhecimento. Os outros componentes da Expert SINTA VCL sempre referenciam algum objeto TExpertSystem direta ou indiretamente.

Propriedades
Propriedade Visibilidade Default Documentada em

ExecutionMode FileName Formulas Heads HelpContexts Info Name Questions ReportEnding Rules Tag Tails Targets Trace Trail Values VarList VarListExtra Vars WaitingAnswer

public published public public public public published public published public published public public public public public public public public public

True 0

TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TComponent TExpertSystem TExpertSystem TExpertSystem TComponent TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem

ExecutionMode: boolean Se verdadeira, indica que uma consulta est em andamento. Quando falsa, a mquina de inferncia no est sendo utilizada e, portanto, no h nenhuma consulta em andamento, significando que muitas operaes, como criar instncias de variveis, no podem ser efetuadas. FileName: string Indica o nome do arquivo BCM correspondente base do sistema especialista utilizado. Quando o valor desta propriedade mudado, a base imediatamente aberta. Se outra estava sendo utilizada, ser fechada automaticamente; Formulas: TFormulas Estrutura de dados representando as frmulas matemticas utilizadas nas regras. Para maiores informaes, consulte o captulo anterior; Heads: THeads Estrutura de dados representando as concluses de cada regra. Para maiores informaes, consulte o captulo anterior; HelpContexts: THelpContexts

Estrutura de dados representando os valores de contexto de ajuda ligados aos valores das variveis-objetivo. Para maiores informaes, consulte o captulo anterior; Info: TInfos Informaes sobre a base. Para maiores informaes, consulte o captulo anterior; Questions: TQuestions Estrutura de dados representando as mensagens utilizadas como perguntas ao usurio final. Para maiores informaes, consulte o captulo anterior; ReportEnding: boolean Se verdadeira, uma mensagem aparecer ao final de uma consulta indicando seu trmino (Fim da Consulta). Se desejar que esta mensagem no aparea, atribua false a esta propriedade; Rules: TRules Estrutura de dados representando as regras como um todo. Para maiores informaes, consulte o captulo anterior; Tails: TTails Estrutura de dados representando as premissas de cada regra. Para maiores informaes, consulte o captulo anterior; Targets: TTargets Estrutura de dados representando a lista de variveis-objetivo a serem procuradas. Para maiores informaes, consulte o captulo anterior; Trace: boolean Indica se a base est no modo de depurao; Trail: TQueue Fila de inteiros onde todas as operaes realizadas pela mquina de inferncia so registradas. Estas operaes so armazenadas em duplas, ou seja, a cada operao realizada pela mquina de inferncia corresponde a dois inteiros a mais adicionados ao final de Trail. O significado destes inteiros (digamos, cod1 e cod2) varia de acordo com as informaes a seguir: Status de cod1 cod1 > 0 cod1 = 0 cod1 = -1 cod1 = -2 cod1 = -3 Significado a mquina de inferncia est passando pela premissa de ordem cod2 da regra cod1. a mquina de inferncia realizou uma pergunta sobre a varivel cod2. a regra cod2 foi aprovada. a regra cod2 foi rejeitada. a mquina de inferncia iniciou a busca pela varivel cod2.

Para melhor compreender o significado de Trail, veja o mtodo AddTrail na unidade ExSystem (mtodo no documentado aqui) e o cdigo de TConsultTree.

Values: TValues Estrutura de dados representando os valores que uma varivel pode assumir (no confundir com as instncias assumidas por uma varivel durante uma consulta). Para maiores informaes, consulte o captulo anterior. VarList: TVarListTree Lista de instncias assumidas por varivel univaloradas e multivaloradas. Inclui tambm instncias DESCONHECIDAS de todos os tipos de variveis. Voc provalmente preferir utilizar o mtodo VarInstances do que lidar com esta propriedade diretamente; VarListExtra: TVarListExtraTree Lista de instncias assumidas por variveis numricas. No inclui instncias DESCONHECIDAS. Voc provalmente preferir utilizar o mtodo VarInstances do que lidar com esta propriedade diretamente; Vars: TVars Estrutura de dados representando as variveis da base de conhecimento Para maiores informaes, consulte o captulo anterior; WaitingAnswer: boolean Quando verdadeira, paralisa a mquina de inferncia no momento que uma pergunta deve ser feita. Utilizada para permitir entrada do usurio enquanto a mquina de inferncia est em pausa;

Mtodos
Mtodo Visibilidade Documentado em

AbortConsultation AttribVar AttribVarFromBinary AttribVarFromPosition BackToLastQuestion BookmarkVar ConectName DefaultPrompt ExecuteStep LoadFromFile PauseEngine RestoreVarFromBookmark ResumeEngine SaveToFile StartConsultation ValCode ValName ValuesList VarCode VarInstances VarName

public public public public public public public public public public public public public public public public public public public public public

TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem

procedure AbortConsultation

Se uma consulta est sendo efetuada, este mtodo a cancelar; procedure AttribVar(V: integer; Value: string; CNF: single; Is_a_code: boolean) Inclui na lista de variveis instanciadas a varivel "V", bem como ajusta esses valores em caso de repetio ou quando a varivel no multivalorada. Value o cdigo do valor correspondente ou o valor numrico convertido para string. Cdigos especiais, referentes a valores como SIM, NO e DESCONHECIDO so passados atravs de suas constantes convertidas para strings (por exemplo, IntToStr(YES), IntToStr(NO)). Se o valor sendo passado no deve ser interpretado com cdigo de valor, mas como o prprio valor (o que o normal com variveis numricas), o ltimo parmetro, Is_a_code, deve ser falso. CNF o grau de confiana da atribuio, variando de 0 a 1. Assim, se desejamos atribuir varivel 5 o valor de cdigo 2 com grau de confiana 80%, invocamos este mtodo do seguinte modo:
AttribVar(5, 2, 0.8, true)

Atribuir o valor SIM varivel 18, grau de confiana 100%:


AttribVar(18, IntToStr(YES), 1, true)

Atribuir 47,6 varivel numrica 39, grau de confiana 60%:


AttribVar(39, 47.6, 0.6, false)

Atribuir DESCONHECIDO varivel numrica 39, grau de confiana 100%


AttribVar(39, IntToStr(UNKNOWN), 1, true)

procedure AttribVarFromBinary(V, VBin: integer) Atribui diversos valores para uma dada varivel V. Estes valores esto identificados todos em um nico nmero, o parmetro VBin. Isto permite a descrio de valores de uma consulta de forma compactada, conforme visto no exemplo do captulo 4 deste documento. Este mtodo se baseia na posio relativa de cada valor em relao varivel. A posio de um valor pode ser visualizada e modificada no shell Expert SINTA: no editor de variveis, simplesmente observe a lista de valores correspondente varivel selecionada. A ordem na qual eles aparecem na lista a eqivalente s suas posies (esta ordem utilizada, por exemplo, em TExpertPrompt, o qual exibe opes de resposta na mesma ordem). Para mudar a posio dos valores, consulte a documentao do shell. A figura a seguir, exibindo a janela de variveis correspondente a um sistema de diagnstico de pragas e doenas do cajueiro (SECAJU), deixa claro que, para a varivel doena, os valores oidio, antracnose e mofo preto possuem posies 1, 2 e 3, respectivamente.

Figura 6 - Entrada de Variveis no Shell

Outra forma fcil de extrair as posies de cada valor utilizar a opo


ArquivoExportarCdigos... no shell.

Obs.: Ao contrrio dos cdigos de variveis, as posies podem mudar se o projetista da base de conhecimento assim desejar! Assim, fique certo de que estas mudanas no afetaro seu projeto. Seguindo nosso exemplo, para atribuirmos o primeiro e o segundo valor varivel doena, utilizamos o mtodo AttribVarFromBinary do seguinte modo:
AttribVarFromBinary(2, 3)

O primeiro parmetro diz respeito ao cdigo da varivel doena (2). O segundo um valor montado a partir da combinao do primeiro e segundo valores. Esta combinao baseada em dgitos binrios. Os valores selecionados de doena, dentre os valores disponveis (trs, no total) podem ser indicados pela seqncia
011

que em nmeros decimais eqivale a 3. Da mesma forma, para uma varivel com cinco valores, onde o segundo, o quarto e o quinto valores sero atribudos, a seqncia eqivalente
11010

ou 25, em decimal. Para um bom exemplo de transformao do uso deste mtodo, consulte o mtodo UpdateBase de TListExpertPrompt da unidade de demonstrao XLib comentada parcialmente nos captulos 5 e 6 do presente documento. Obs.: Para atribuir os valores padro DESCONHECIDO, SIM e NO, no utilize variveis baseadas na posio, mas sim as constantes UNKNOWN, YES e NO, conforme presente na unidade ExConsts. Obviamente, este mtodo no pode ser utilizado para variveis numricas, as quais no apresentam listas de valores (e suas

respectivas posies). Obs.: Por questes de simplicidade, este mtodo no permite a escolha de um grau de confiana para cada valor atribudo. O valor 100% assumido. procedure AttribVarFromPosition(V, Pos: integer; CNF: single) Uma forma variante de AttribVarFromBinary. Antes de compreender este mtodo, leia as informaes necessrias do mtodo citado. Com AttribVarFromPosition, o valor situado na posio Pos atribudo varivel V com o grau de confiana CNF. Para obter a posio de uma varivel, consulte o mtodo AttribVarFromBinary. procedure BackToLastQuestion Volta para a ltima pergunta realizada pela mquina de inferncia durante a busca ao objetivo atual; procedure BookmarkVar Guarda o estado atual das rvores internas de estruturas de dados Vars e Values em um "bookmark" interno. Somente um bookmark existe por sistema especialista. Com o mtodo RestoreVarFromBookmark, as rvores Vars e Values so reposicionadas de acordo com a configurao salva. Cuidado ao usar BookmarkVar/RestoreVarFromBookmark. A boa prtica utiliz-los dentro de um mesmo procedimento, com a garantia de que as chamadas a outros mtodos (entre a ao de guardar o status de Vars e Values no bookmark e a ao de restaur-los) no invoquem novamente BookmarkVar. Por exemplo:
procedure Test(ExSys: TExpertSystem); begin ExSys.Vars.MoveLast; ExSys.BookmarkVar; ShowMessage(ltima varivel: + ExSys.Vars.Name); ExSys.Vars.MoveFirst; ShowMessage(Primeira varivel: + ExSys.Vars.Name); DoSomething(ExSys); ExSys.RestoreVarFromBookmark; ShowMessage(ltima varivel: + ExSys.Vars.Name); end;

O procedimento DoSomething citado acima no deve chamar o mtodo BookmarkVar de ExSys sob a pena de que o ltimo comando de Test no corresponda mais realidade. function ConectName(C: integer): string Retorna o nome (string) corresponde ao cdigo do conectivo passado como parmetro. Este cdigo corresponde s constantes cnAnd (E), cnOr (OU) e cnThen (ENTO) contidas na unidade ExConsts. procedure DefaultPrompt(V: integer) Exibe a entrada de dados default para a varivel V. procedure ExecuteStep Se a mquina de inferncia estiver em pausa, executa um passo.

function LoadFromFile(FN: string) Carrega uma base de conhecimento de arquivo BCM, cujo caminho indicado pela string FN. Retorna falso caso o carregamento no seja bem sucedido. Eqivale propriedade FileName. procedure PauseEngine Coloca a mquina de inferncia no estado de pausa, modificando o valor da propriedade Trace para verdadeiro; procedure RestoreVarFromBookmark Coloca o estado das rvores Vars e Values de acordo com o que foi indicado no "bookmark" interno. Para maiores informaes, consulte a documentao do mtodo BookmarkVar desta mesma classe; procedure ResumeEngine Tira a mquina de inferncia do estado de pausa, modificando o valor da propriedade Trace para falso; function SaveToFile(FN: string) Salva uma arquivo de base de conhecimento, cujo caminho indicado pela string FN. Nenhuma checagem de integridade referencial entre as rvores da estrutura de dados feita (algo que o shell Expert SINTA, por exemplo, realiza, mas por outras formas). Retorna falso caso o salvamento no seja bem sucedido. procedure StartConsultation Inicia a consulta. functionValCode(Vr: integer; V: string): integer Retorna o cdigo do valor de nome V associado varivel de cdigo Vr. functionValName(V: integer; C: integer): string Retorna o nome do valor de cdigo C associado varivel de cdigo V. procedureValuesList(V: integer; ListOfValues: TStringList) Preenche uma TStringList passada como parmetro com a lista de valores possveis de uma varivel V. Essa lista de valores eqivalente quela que aparece quando selecionamos uma varivel no editor de variveis do shell Expert SINTA. function VarCode(V: string): integer Retorna o cdigo de uma varivel de nome V. procedure VarInstances(V: integer; ValuesList, CNFsList: TStringList) Preenche uma TStringList passada como parmetro (ValuesList) com todas as instncias atuais de uma varivel V em um dado instante de uma consulta, bem como seus respectivos graus de confiana em uma segunda TStringList (CNFsList). As instncias so dispostas em ordem descrescente de grau de confiana e ordem crescente de posio em relao varivel (para saber mais de posies de um valor em uma varivel, consulte o mtodo AttribVarFromBinary desta mesma classe). No se deve confundir uma lista de instncias com uma lista de valores. Valores

so fixos, determinados durante a construo da base de conhecimento e podem ser obtidos com o mtodo ValuesList. Instncias so os valores atribudos a uma varivel durante uma consulta. Portanto, s faz sentir invocar o mtodo VarInstances se uma consulta estiver em andamento. function VarName(C: integer): string Retorna o nome de uma varivel de cdigo C.

Eventos
Eventos Visibilidade Documentado em

AfterCheckPassword OnChange OnExecuteStep OnFindTarget OnFinish OnPause OnPrompt OnResume OnShowResults OnStart

published published published published published published published published published published

TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem TExpertSystem

AfterCheckPassword: TNotifyEvent Evento chamado imediamente aps a entrada de senha (quando necessria) e antes do carregamento do resto da base de conhecimento; OnChange: TVarBasedEvent Evento chamado quando uma instncia acrescentada (ou retirada) varivel V passada como parmetro; OnExecuteStep: TNotifyEvent Evento chamado quando um passo executado no modo de depurao; OnFindTarget: TVarBasedEvent Evento chamado imediatamente antes da busca de um dado objetivo passado como parmetro. til para inicializar variveis numa espcie de encadeamento para frente; OnFinish: TNotifyEvent Evento chamado logo aps todas as finalizaes necessrias da mquina de inferncia. A consulta j foi completamente fechada antes deste evento ocorrer, inclusive com a destruio das instncias existentes. Assim, se planeja utilizar algum resultado da consulta, melhor faz-lo pelo evento OnShowResults; OnPause: TNotifyEvent Evento chamado quando uma consulta entra no modo de depurao. Pode ser usado, por exemplo, para exibir um depurador; OnPrompt: TVarBasedEvent Evento chamado quando a mquina de inferncia precisa saber do usurio o(s) valor(es) para a varivel V passada como parmetro. Um prompt padro pode ser usado com o

mtodo DefaultPrompt; OnResume: TNotifyEvent Evento chamado quando a mquina de inferncia sai do modo de depurao e volta para a consulta normal. Pode ser usado, por exemplo, para esconder um depurador; OnShowResults: TVarBasedEvent Evento chamado quando o objetivo (passado como parmetro) encontrado ou quando se esgotam todas as possibilidades de ach-lo; OnStart: TNotifyEvent Evento chamado imediamente antes da busca do primeiro objetivo. til para inicializar variveis numa espcie de encadeamento para frente;

TLabelQuestion
Unidade: ExCtrls TObject TPersistent TComponent TControl TGraphicControl TCustomLabel TLabelQuestion

Descrio
Label que exibe o texto de uma pergunta associada a uma varivel.

Propriedades
Propriedade Visibilidade Default Documentada em

Align Alignment AutoSize Caption Color Cursor DragCursor DragMode Enabled ExpertSystem FocusControl Font Height HelpContext Hint Left Name ParentColor ParentFont ParentShowHint PopupMenu ShowAccelChar

published published published published published published published published published published published published published published published published published published published published published published

alNone taLeftJustify True clWindow crDefault crDrag dmManual True

False True True True

TControl TCustomLabel TCustomLabel TCustomLabel TWinControl TControl TControl TControl TControl TLabelQuestion TCustomLabel TControl TControl TWinControl TControl TControl TComponent TControl TControl TControl TControl TCustomLabel

ShowHint Tag Top Transparent VarCode Visible Width WordWrap

published published published published published published published published

False 0 False 0 True False

TControl TComponent TControl TCustomLabel TLabelQuestion TControl TControl TCustomLabel

ExpertSystem: TExpertSystem O sistema associado ao label; VarCode: integer O cdigo da varivel cuja pergunta ser exibida;

Mtodos
Mtodo Visibilidade Documentado em

BuildCaption Demais mtodos

public public/protected

TLabelQuestion TCustomLabel

procedure BuildCaption Fora a mudana de caption de acordo com a varivel selecionada. Observao: o caption mudado automaticamente j com a mudana da varivel (propriedade VarCode); Demais mtodos Consulte a documentao do Delphi/C++ Builder;

Eventos
Eventos Visibilidade Documentado em

OnClick OnDblClick OnDragDrop OnDragOver OnEndDrag OnMouseDown OnMouseMove OnMouseUp OnStartDrag

published published published published published published published published published

TControl TControl TControl TControl TControl TControl TControl TControl TControl

TRuleView
Unidade: ExCtrls TObject TPersistent TComponent TControl TWinControl TCustomListBox TCustomRuleView TRuleView

Descrio

Este componente uma listbox que exibe as regras de uma determinada base de conhecimento associada a um componente TExpertSystem.

Propriedades
Propriedade Visibilidade Default Documentada em

Align BorderStyle Color Ctrl3D Cursor DragCursor DragMode Enabled ExpertSystem ExtendedSelect Font HeadFilter Height HelpContext Hint IntegralHeight ItemHeight Left MultiSelect Name ParentColor ParentCtrl3D ParentFont ParentShowHint PopupMenu ShowHint TabOrder TabStop TabWidth Tag Top UseFilter Visible Width

published published published published published published published published published published published public published published published published published published published published published published published published published published published published published published published published published published

alNone bsSingle clWindow True crDefault crDrag dmManual True True

0 False False False True True True False False 0 0 False True

TControl TCustomListBox TWinControl TWinControl TControl TControl TControl TControl TRuleView TCustomListBox TControl TRuleView TControl TWinControl TControl TCustomListBox TCustomListBox TControl TCustomListBox TComponent TControl TWinControl TControl TControl TControl TControl TWinControl TWinControl TCustomListBox TComponent TControl TRuleView TControl TControl

ExpertSystem: TExpertSystem Sistema especialista cujas regras sero exibidas; HeadFilter: TSingleIndexTree Caso no se deseje exibir todas as regras, possvel selecionar somente aquelas que apresentem uma determinada varivel em suas concluses (como ocorre na opo Visualizar do shell Expert SINTA). Para isso, acrescente a esta rvore o(s) cdigo(s) das variveis que iro corresponder s regras desejadas;

UseFilter: boolean Para que a seleo de regras feita com HeadFilter seja efetuada, esta propriedade deve ter o valor true.

Mtodos
Mtodo Visibilidade Documentado em

FillRules SetHorizontalBar Demais mtodos

public public public/protected

TRuleView TRuleView TCustomListBox

procedure FillRules Fora a exibio das regras na TRuleView ( automtica quando se muda a propriedade TExpertSystem); procedure SetHorizontalBar Fora a exibio de uma barra de rolagem horizontal (no padro do Windows); Demais mtodos Consulte a documentao do Delphi/C++ Builder

Eventos
Eventos Visibilidade Documentado em

OnClick OnDblClick OnDragDrop OnDragOver OnEndDrag OnEnter OnExit OnKeyDown OnKeyPress OnKeyUp OnMouseDown OnMouseMove OnMouseUp OnStartDrag

published published published published published published published published published published published published published published

TControl TControl TControl TControl TControl TWinControl TWinControl TWinControl TWinControl TWinControl TControl TControl TControl TControl

TValuesGrid
Unidade: ExCtrls TObject TPersistent TComponent TControl TWinControl TCustomControl TCustomGrid TDrawGrid TStringGrid TValuesGrid

Descrio
Mostra no formato de um grid todos os valores de uma varivel, incluindo os fatores de

confiana. Pode ser usado como alternativa ao TWatchPanel.

Propriedades
Propriedade Visibilidade Default Documentada em

Align AutomaticUpdate BorderStyle Cells Col ColCount Color Cols ColWidths Ctrl3D Cursor DefaultColWidth DefaultDrawing DefaultRowHeight DragCursor DragMode Enabled ExpertSystem FixedColor FixedCols FixedRows Font GridLineWidth Height HelpContext Hint Left Name Options

published published published public public published published public public published published published published published published published published published published published published published published published published published published published published

alNone False bsSingle 5 clWindow True crDefault 64 True 24 crDrag dmManual True clBtnFace 1 1 1 0

ParentColor ParentCtrl3D ParentFont ParentShowHint PopupMenu Row RowCount RowHeights Rows ScrollBars Selection ShowHint

published published published published published public published public public published public published

[goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect] False True True True

TControl TValuesGrid TCustomListBox TStringGrid TCustomGrid TCustomGrid TWinControl TStringGrid TCustomGrid TWinControl TControl TCustomGrid TCustomGrid TCustomGrid TControl TControl TControl TValuesGrid TCustomGrid TCustomGrid TCustomGrid TControl TCustomGrid TControl TWinControl TControl TControl TComponent TCustomGrid

ssBoth False

TControl TWinControl TControl TControl TControl TCustomGrid TCustomGrid TCustomGrid TStringGrid TCustomGrid TCustomGrid TControl

TabOrder TabStop TabWidth Tag Top VarCode Visible Width

published published published published published published published published

False 0 0 0 True

TWinControl TWinControl TCustomListBox TComponent TControl TValuesGrid TControl TControl

AutomaticUpdate: boolean Quando verdadeira, o grid atualiza automaticamente a exibio das instncias de sua varivel quando necessrio; ExpertSystem: TExpertSystem Sistema especialista cujos valores de determinada varivel sero exibidos; VarCode: integer Varivel que ir fornecer os valores para a construo das opes;

Mtodos
Mtodo Visibilidade Documentado em

RefreshValues Demais mtodos

public public/protected

TValuesGrid TScrollBox

procedure RefreshValues Atualiza os valores exibidos no grid. No necessrio chamar caso a propriedade AutomaticUpdate seja verdadeira; Demais mtodos Consulte a documentao do Delphi/C++ Builder;

Eventos
Eventos Visibilidade Documentado em

OnClick OnColumnMoved OnDblClick OnDragDrop OnDragOver OnDrawCell OnEndDrag OnEnter OnExit OnGetEditMask OnGetEditText OnKeyDown OnKeyPress OnKeyUp OnMouseDown

published published published published published published published published published published published published published published published

TControl TDrawGrid TControl TControl TControl TDrawGrid TControl TWinControl TWinControl TDrawGrid TDrawGrid TWinControl TWinControl TWinControl TControl

OnMouseUp OnRowMoved OnSelectCell OnSetEditText OnStartDrag OnTopLeftChanged

published published published published published published

TControl TDrawGrid TDrawGrid TDrawGrid TControl TDrawGrid

TWatchPanel
Unidade: ExCtrls TObject TPersistent TComponent TControl TWinControl TCustomControl TCustomPanel TWatchPanel

Descrio
Este componente consiste de dois painis, exibindo variveis no painel superior e valores no inferior. Tais valores so atualizados automaticamente durante uma consulta ao sistema especialista associado.

Propriedades
Propriedade Visibilidade Default Documentada em

AddAll Align BevelInner BevelOuter BevelWidth BorderStyle BorderWidth Color Ctrl3D Cursor DragCursor DragMode Enabled ExpertSystem Font Height HelpContext Hint labelVars labelValues Left listVars listValues Locked Name ParentColor ParentCtrl3D

published published published published published published published published published published published published published published published published published published public public published public public published published published published

True alNone bvNone bvRaised 1 bsSingle 0 clWindow True crDefault crDrag dmManual True

False False True

TWatchPanel TControl TCustomPanel TCustomPanel TCustomPanel TCustomListBox TCustomListBox TWinControl TWinControl TControl TControl TControl TControl TWatchPanel TControl TControl TWinControl TControl TWatchPanel TWatchPanel TControl TWatchPanel TWatchPanel TCustomPanel TComponent TControl TWinControl

PopupMenu ShowHint TabOrder TabStop Tag Top ValuesListHeight Visible Width

published published published published published published published published published

False False 0 50 True

TControl TControl TWinControl TWinControl TComponent TControl TWatchPanel TControl TControl

AddAll: boolean Se verdadeira, o painel mostrar todas as variveis automaticamente ao indicarmos o sistema especialista (TExpertSystem) correspondente; ExpertSystem: TExpertSystem Associa um sistema especialista ao objeto em questo; labelVars: TLabel listVars: TListBox labelValues: TLabel listValues: TListBox Componentes internos ao painel Watch; ValuesListHeight: integer Define a altura da lista de valores (o painel inferior). Ele permanece fixo quando o tamanho do WatchPanel muda;

Mtodos
Mtodo Visibilidade Documentado em

AddNewItem Clear DeleteItem FillVars Update Demais mtodos

public public public public public public/protected

TWatchPanel TWatchPanel TWatchPanel TWatchPanel TWatchPanel TCustomPanel

procedure AddNewItem(V: integer) Adiciona ao painel de variveis a varivel de cdigo V; procedure Clear Limpa todo o painel de variveis; procedure DeleteItem(V: integer; Name: string) Delete do WatchPanel a varivel de cdigo V. Se for especificado um nome diferente de vazio (''), ser deletada a varivel de nome Name (o cdigo ser ignorado); procedure FillVars Insere todas as variveis do sistema ExpertSystem no painel;

procedure Update Atualiza a exibio de valores da varivel selecionada no painel superior. Realizada automaticamente pelo sistema ExpertSystem associado; Demais mtodos Consulte a documentao do Delphi/C++ Builder;

Eventos
Eventos Visibilidade Documentado em

OnClick OnDblClick OnDragDrop OnDragOver OnEndDrag OnEnter OnExit OnMouseDown OnMouseMove OnMouseUp OnResize OnStartDrag

published published published published published published published published published published published published

TControl TControl TControl TControl TControl TWinControl TWinControl TControl TControl TControl TCustomPanel TControl

TWhyDialog
Unidade: ExDlgWhy TObject TPersistent TComponent TWhyDialog

Descrio
Caixa de dilogo que exibe uma explicao/ajuda sobre determinada pergunta;

Propriedades
Propriedade Visibilidade Default Documentada em

Name Tag

published published

TComponent TComponent

Mtodos
Mtodo Visibilidade Documentado em

Execute Demais mtodos

public public/protected

TWhyDialog TComponent

function Execute(V: integer; ES: TExpertSystem): boolean Se a varivel V tiver uma explicao associada, ela ser exibida. Caso contrrio, o sistema montar uma explicao de acordo com o estado atual da mquina de inferncia do sistema ES. A funo retorna falso se a caixa de dilogo no for exibida;

Demais mtodos Consulte a documentao do Delphi/C++ Builder;

Eventos
Este componente no possui eventos.

Sobre o Projeto
Descrio da equipe responsvel pela implementao e manuteno da Expert SINTA VCL e do shell Expert SINTA. A Equipe Membros da equipe de Sistemas INTeligente Aplicados da UFC. Agradecimentos Agradecimentos aos demais colaboradores deste trabalho.

Sobre

o Projeto
A Equipe
O Projeto Expert SINTA foi iniciado em maio de 1995 no Laboratrio de Inteligncia Artificial (LIA), localizado no Departamento de Computao da Universidade Federal do Cear (UFC). Desde ento, o grupo Sistemas INTeligentes Aplicados (SINTA) vem desenvolvendo atividades relacionadas a aplicaes prticas de tcnicas de Inteligncia Artificial. Com o foco principal em sistemas especialistas, criou-se uma ferramenta de uso geral para criao de bases de conhecimento, o Expert SINTA. Esta ferramenta utilizada para criao de sistemas dentro da prpria UFC, bem como para o uso em aulas sobre Inteligncia Artificial. O Expert SINTA tambm foi apresentado com sucesso na VI Semana de Informtica, promovida pela UFBA, na seo de ferramentas do Simpsio Brasileiro de Engenharia de Software/96 e em eventos internos da Universidade Federal do Cear, resultando em comentrios favorveis de diversas regies do Brasil. Para satisfazer mais necessidades profissionais, foi criado o programa Desenvolvimento Integrado de Sistemas Especialistas (DISE), envolvendo a tecnologia utilizada no Expert SINTA e ferramentas de programao de terceiros. Desta forma, procura-se preencher todos os requisitos para a construo de sistemas especialistas de bom nvel, alm de atuar junto comunidade acadmica com ferramentas didticas. Como fruto deste trabalho, veio a Expert SINTA Visual Component Library (Expert SINTA VCL), apresentada na seo de ferramentas do Simpsio Brasileiro de Engenharia de Software/97. Entre todos os integrantes que participam ou participaram do grupo, temos:

Joo Fernando Lima Alcntara foi programador auxiliar, alm de colaborar com
conselhos e modificaes da ferramenta. Tambm desenvolveu projetos de sistemas especialistas com o uso do Expert SINTA;

Jos Helano Matos Nogueira, orientador do grupo original e grande divulgador

do nosso trabalho em diversas outras entidades de ensino superior. Atualmente no mais participa diretamente do grupo;

Rafael Castro de Andrade, estudante da Universidade Estadual do Cear

(UECE), principal responsvel por testes, alm de vrias outras crticas. Tambm atuou como desenvolvedor de sistemas especialistas em conjunto com

o grupo;

Ricardo Bezerra de Andrade e Silva, programador-chefe do Expert SINTA e

junto a Ricardo Silvestre projetou as caractersticas bsicas da ferramenta. o responsvel pela manuteno do programa, bem como pela implementao da Expert SINTA Visual Component Library;

Ricardo Sousa Silvestre, criador da idia original do shell Expert SINTA, sendo
um dos programadores e projetistas da primeira verso da ferramenta;

Shirlene Correia de Holanda, aluna da Odontologia, desenvolveu um projeto de


sistema especialista para patologias bucais junto ao grupo;

Tarcsio Cavalcante Pequeno, criador do grupo e principal responsvel;

Sobre

o Projeto
Agradecimentos
O grupo gostaria de agradecer s seguintes pessoas: Financiamento CAPES CNPq A equipe de desenvolvimento do SECAJU Qulzia Maria Silva Melo (Doutora em Entomologia) Antonio Lindemberg M. Mesquita (Mestre em Entomologia) Lianna Maria Saraiva Teixeira (Mestre em Fitossanidade) Francisco das Chagas O. Freire (Doutor em Fitopatologia). Demais colaboradores Genaro de Azevedo Frana Marcelo Antonio Thomaz de Arago Marcelino Cavalcante Pequeno e a todos os usurios do Expert SINTA.

Expert SINTA Visual Component Library


1995-98 Laboratrio de Inteligncia Artificial - LIA http://www.lia.ufc.br

Vous aimerez peut-être aussi