Posteado por: radioa | septiembre 22, 2012

Resumen VP-Expert Primer

Se presenta un resumen traducido del manual VP-Expert Primer originalmente publicado en inglés en esta liga

Se anexa este mismo trabajo en un archivo .doc en esta otra liga

Resumén por Salvador Rico Estrada

VP-Expert Primer

VP-Expert es el shell de un sistema experto que al igual que cualquier shell, contiene todo lo necesario para el funcionamiento del sistema experto (a excepción de la base de conocimientos de las reglas para el dominio particular).

Esto incluye:

  • Un motor de inferencia para la consulta de la KB con el fin de responder a las consultas.
  • Un editor para la creación y escritura de las reglas de la base de conocimientos.
  • Una interfaz de usuario capaz de manejar consultas, formular preguntas al usuario y presentación de seguimiento y explicaciones cuando sea necesario.  También ha limitado las capacidades gráficas.

Ejecución VP-Expert

Se puede instalar VP-Expert en su propia computadora, o utilizar el disco en una de los PC en los rooms 301 a 303 (trabaja mejor en 302).  En cualquier caso, VP-Expert está diseñado para ejecutarse desde DOS.

Para ejecutarlo, ir al disco y / o directorio que contiene los archivos y tipo vpx

El menú principal VP-Expert

 

Las opciones desde cualquier menú se pueden seleccionar con las teclas de flecha, pulsar una tecla de función, un dígito, o el uso de la primera letra del nombre de la opción.

Opciones importantes desde el menú principal son:

 Editar  editor built-in para crear y modificar una base de conocimientos
 Consultar ejecutar el sistema experto sobre la base de los conocimientos actuales
 Nombre de archivo  seleccionar otra base de conocimiento (desde el directorio actual) para editar o consultar
Ruta cambiar la unidad actual o directorio desde el que se seleccionan las bases de conocimiento
Salir  Salir del VP-Expert

La tecla ESC siempre se puede utilizar para volver un paso, en particular, a `escapar ‘una opción que se ha seleccionado.  Una consulta se puede interrumpir pulsando Ctrl-C.

Ejecución de una consulta

 

El proceso de usar VP-Expert para resolver un problema específico, con base en las reglas de su base de conocimientos, se llama “consulta”.  En general, el usuario no pone consultas directamente al sistema (esto se hace en la sección ACTIONS de la base de conocimientos), pero se introduzca respuestas a las preguntas relevantes a la consulta.

Para iniciar una consulta, seleccione Consulta en el menú principal y, a continuación, seleccione Ir

La pantalla de consulta contiene tres ventanas:

  • La mitad superior de la pantalla es la ventana de interacción.  De entrada se introduce aquí por el usuario, y los resultados (o cualquier otra cosa el programa imprime) se muestran aquí.
  • La ventana inferior izquierda muestra las reglas que están siendo controlados.  Si la velocidad de consulta se hace más lenta, se puede seguir la secuencia de reglas que se activan.
  • La ventana inferior derecha muestra los valores que se han asignado a las variables (es decir, cuáles son los hechos que el sistema sabe hasta ahora).

Las ventanas inferiores son útiles para la depuración `’una base de conocimientos.  Cuando ya no se necesita, pueden hacerse desaparecer mediante la inserción de una declaración RUNTIME en su base de conocimientos.

Inserción de datos para una consulta

 

Con el fin de responder a una pregunta, VP-Expert utiliza encadenamiento hacia atrás para trabajar a partir de un objetivo a preguntas (una pregunta que se define como cualquier proposición que no aparece en la parte THEN de cualquier regla).  Cuando una respuesta a una pregunta que se necesita, la pregunta se presenta al usuario, eventualmente junto con un menú de posibles respuestas.

  • Para seleccionar una respuesta de un menú de valores, use las teclas de flecha para resaltar su selección y luego presione Enter (tenga en cuenta que es posible elegir varias respuestas a algunas preguntas).
  • Para deseleccionar un valor que ya ha sido seleccionado, marque el valor elegido y pulse Del .
  • Finaliza su elección (es) pulsando END .
  • Si la entrada solicitada es un número (es decir, no hay ningún menú contextual), escriba el número y pulse Enter.

Extrayendo Explicaciones para una Consulta

 

VP-Expert también le permite ver las explicaciones de cómo se creó una variable, o por qué se hizo una pregunta.  Esto se puede hacer cuando se ejecuta el programa presionando la tecla / (que detiene la ejecución temporalmente) y luego seleccionar la opción deseada en el menú.

Si se selecciona How, el VP-Expert entonces proporcionará un menú de las variables utilizadas en el programa.

Si Why es seleccionado, VP-Expert imprimirá el BECAUSE parte (véase más adelante) de la regla responsable de causar el problema actual que se le pregunte.

Realizar un seguimiento de una Consulta

 

También puede guardar una copia (llamada huella) del árbol de inferencia creada en el transcurso de una consulta.  Esto puede permitir a examinar en detalle el proceso de razonamiento del sistema, y ​​es particularmente útil para la depuración.

Para realizar un seguimiento:

  • Elija Set y luego Trace de la Consult del menú.
  • Volver a la Consult de menú y Run la consulta como lo haría normalmente.

Un registro de las normas consultadas y hechos encontrados durante la consulta, queden almacenados en algún archivo de filename .trc , donde filename es el nombre de la base de conocimientos está consultando.

Creación de una base de conocimientos en VP-Expert

 

Estructura básica de una base de conocimientos

 

Creación de un sistema experto con Expert VP es básicamente una cuestión de entrar en una base de conocimientos que consta de tres partes:

ACCIONES

REGLAS

SENTENCIAS QUERY

En el centro de este proceso son variables que toman el lugar de las proposiciones en la VP-Expert.  El objetivo principal del motor de inferencia es por lo general para encontrar un valor para alguna meta” “ variable (s), usando encadenamiento hacia atrás para que busque por reglas que asignan un valor a esa variable como parte de su consecuente.

El bloque ACCIONES

 

El bloque ACCIONES consiste en sentencias que controlan las acciones del shell.  Estas instrucciones se ejecutan en el orden en el que aparecen (la única parte de la KB que lo hace).  En efecto, el bloque de acciones es el código de `’que controla la ejecución del motor de inferencia.

El siguiente es un ejemplo de un bloque (mínimo) ACCIONES:

ACTIONS

 

 DISPLAY “Welcome to the expert system

 Press any key to begin.~”

 FIND Decision

 DISPLAY “The decision in this case is {#Decision}.”;

Tenga en cuenta que comienza con las palabras ACTIONS y termina con un punto y coma (sin punto y coma entre estados). La primera instrucción DISPLAY indica al usuario qué hacer.  La declaración FIND expresa la meta del sistema.  La última sentencia DISPLAY son los resultados.

El declaración FIND

 

La forma básica de esta declaración es el siguiente:

FIND variable

Esta declaración activa el motor de inferencia, haciendo que se consulte a la base de conocimiento de reglas hasta que encuentra un valor para la variable.

Esto sigue el encadenamiento hacia atrás en el ramo:

  • Busca la primera regla que daría a la variable un valor (como parte de la THEN parte de la regla), y luego intenta encontrar los valores de las variables en el IF parte de la regla.
  • Se detendrá cuando un valor se encuentra en la variable (a menos que sea una PLURAL variable).
  • Si no se encuentran reglas que contienen la variable en su THEN parte, el shell en lugar ASK s al usuario por su valor.
  • Si existen reglas que contienen la variable en su THEN parte, pero ninguno de ellos puede ser probado, a continuación, la variable se considera que tiene valor unknown .

Tenga en cuenta que es posible tener más de una declaración FIND en la ACTIONS bloquear – Sin embargo, es raro que realmente pase.  Por lo general es más eficiente (por lo general menos preguntas se les pide) para tener una sola FIND para iniciar el proceso de consulta, y utilizar las reglas para asegurarse de que los demás valores se encuentran sólo cuando sea necesario.

La declaración DISPLAY

 

Cualquier texto que se desea se puede mostrar en la pantalla mediante una declaración DISPLAY y que encierra el texto entre comillas dobles:

DISPLAY “This is some text to be displayed for the user – perhaps to give instructions on how to use the system”

Si desea asegurarse de que el usuario tiene tiempo para leer un mensaje antes de que desaparezca de la pantalla, introduzca un “~” como el último carácter del mensaje.  Esto suspende todo el procesamiento hasta que el usuario presiona una tecla en el teclado.  El “~” en sí no se muestra.  Asegúrese de informar al usuario sobre cómo hacer que el sistema de ejecución hoja de vida:

DISPLAY “Here are some instructions. Press any key to continue~”

El valor de cualquier variable se puede incluir en un mensaje que se muestra simplemente encerrando el nombre de la variable entre llaves:

DISPLAY “I prescribe {treatment} for your {diagnosis}.”

Recuerde que también puede poner declaraciones DISPLAY en la parte de una regla THEN o ESLE.  Esto puede ser particularmente útil para proporcionar explicaciones, o para visualizar la información sólo si una cierta condición se mantiene.

Cómo controlar la interfaz de usuario

 

Los siguientes comandos están relacionados con la creación del estado inicial de la interfaz de usuario, y como tal debe ser colocado antes de las ACTIONS :

  • RUNTIME; quitará los dos “ depuración” ventanas en la parte inferior, liberando toda la pantalla para interactuar con el usuario.
  • BKCOLOR = color# ; será el color de fondo de la pantalla a color #.

Las declaraciones provistas siguientes pueden aparecer en las ACTIONS o en el THEN o ELSE parte de las normas:

  • CLS se borrará toda la pantalla en cualquier punto.
  • COLOR = color# ; establecerá el texto impreso desde este punto en adelante a color .

Creación de ventanas en VP-Expert

 

También puede crear sus propias ventanas en la pantalla VP-Expert.  Estos son particularmente útiles para la presentación de información (como las instrucciones) que no desea que salga de la pantalla.

Las ventanas se crean con el comando WOPEN:

 WOPEN ventana #, # TopRow, LeftCol #, # ofrows, # ofcols, color #

 

donde

window #                           un número (entre 1 y 8) solía contar VP-Expert qué la ventana actual es

TopRow #, # LeftCol      la Y y X respectivamente coordenadas de la esquina superior izquierda de la ventana

# Ofrows                             el número de filas en la ventana (entre 2 y 20)

# Ofcols                               el número de columnas de la ventana (entre 2 y 77)

color #                                el color de fondo de la ventana (ver BKCOLOR arriba)

Dado que puede haber varias ventanas abiertas al mismo tiempo, podemos decir VP-Expert, que es el “activo” uno (que es donde el texto será impreso) con el comando:

ACTIVE Window #

Por ejemplo:

 WOPEN 1, 1, 1, 4, 50, 2

 

se abre una ventana en la esquina superior izquierda de la pantalla, que es 4 filas por 50 columnas y tiene un fondo verde, y

 ACTIVE 1

indica a VP-Expert que ahora es la ventana activa.

Una ventana también se puede borrar con el comando:

 WCLOSE window #

Sin embargo, esto a veces tiene el efecto de borrar todas las ventanas en la pantalla.

Reglas de producción en VP-Expert

 

Las normas de producción de un sistema experto contener su conocimiento del dominio, expresado en las reglas del tipo SI-ENTONCES.  A diferencia de las sentencias en la sección Acciones, no se ejecutan en el orden en que aparecen; en cambio se les consulta cuando sea necesario durante el proceso de encadenamiento hacia atrás.  El orden de las reglas es sólo importante cuando hay más de una regla que se puede utilizar para dar una variable de un valor, como el intento de motor de inferencia para probar las reglas en el orden dado (véase a continuación para un ejemplo).

Formulario básico de reglas

 

La forma básica de una regla es la siguiente:

 RULE RuleName

 IF antecedente

 THEN consecuente;

 

Cada regla debe tener un nombre único (hasta 40 caracteres de longitud) después de la palabra RULE (dejando esto es una fuente muy común de los errores de sintaxis).  Al igual que cualquier otra etiqueta se utiliza en la programación, debe ser descriptivo de lo que significa la regla.

Un ejemplo (muy simple) regla:

RULE Diagnosis_of_measles

IF   Diagnosis = measles

THEN Treatment = penicillin;

 

En este caso, Diagnosis y Treatment son variables, y measles y penicillin son valores posibles para esas variables.  En otras palabras, esta norma establece que si Diagnosis tiene el valor measles , que puede entonces asignar Treatment el valor de penicillin .

Si el motor de inferencia estaba tratando de utilizar esta regla para encontrar un valor para la variable de Treatment , sería:

  • Compruebe Diagnosis ya había sido asignado un valor.
  • Si no, sería utilizar las reglas para tratar de encontrar un valor para el Diagnosis , volviendo a esta regla una vez que lo ha hecho.
  • Si el valor de Diagnosis es measles , a continuación, Treatment se le asigna el valor de penicillin .  En ese momento, el motor de inferencia no trabaja más n encontrar un valor para Treatment .
  • Si Diagnosis tiene algún otro valor (incluyendo unknown ), entonces la regla falla y el motor de inferencia que buscar alguna otra regla para dar Treatment un valor (si no hay ninguno, entonces Treatment se le asigna el valor unknown ).

Los operadores relacionales en los antecedentes de reglas

 

El IF parte de una regla consiste en una (o más) locales simples de la forma:

 valor relational_operator variables

donde relational_operator es uno de los siguientes:

=              es igual a

<>           no es igual a (utilizado en lugar de NO por VP-Expert)

<              es menor que

<=           es menor que o igual a

>              es mayor que

> =          es mayor que o igual a

Las últimas cuatro operadores se utilizan principalmente para valores numéricos (ver más abajo).

La declaración ELSE

 

Las reglas también pueden contener un ELSE instrucción como parte de su consecuente.  Por ejemplo:

REGLA Diagnosis_of_flu

Si el diagnóstico de gripe =

Entonces el tratamiento = bed_rest

Tratamiento ELSE = get_back_to_work;

Si la variable de Treatment se le ha asignado ningún otro valor en este punto en la KB (sea cual sea la regla, no sólo el THEN parte de esta regla), se le asigna el valor dado por el ELSE .

Los operadores lógicos

 

El IF parte de una regla puede estar compuesto por un máximo de 20 premisas simples unidas por los operadores lógicos OR o AND .

Por ejemplo:

RULE measles

IF   temperature = very_high

AND  spots = yes

AND innoculated <> yes

THEN Diagnosis = measles;

Si VP-Expert está intentando utilizar esta regla para encontrar un valor para el Diagnosis , primero comprobará si temperature es very_high (encontrar un valor de temperature si es necesario), luego si spots es yes , y así sucesivamente.

Por eficiencia, VP-Expert renuncia a tal regla de inmediato si no puede probar una de las premisas.  Por ejemplo, si temperature no es very_high , no tratar de encontrar spots o innoculated .

OR se maneja de manera diferente.  Por ejemplo, considere:

RULE allergy

IF spots = yes

OR rash = yes

THEN Diagnosis = allergy;

Aunque VP-Expert puede probar spots = yes , todavía le preguntará acerca de rash (aunque no es necesario).  Para reducir el número de preguntas, usted tendría que escribir dos reglas separadas:

RULE allergy1

IF spots = yes

THEN Diagnosis = allergy;

 

RULE allergy2

IF rash = yes

THEN Diagnosis = allergy;

Tenga en cuenta también que OR tiene mayor precedencia que la AND .  Por ejemplo, la regla:

RULE flu

IF   throat = sore

AND  temperature = high

OR   temperature = very_high

THEN Diagnosis = flu;

se interpreta como (garganta adolorida =) Y (= temperatura alta o la temperatura very_high =).  Tenga en cuenta también que no se puede utilizar paréntesis para cambiar el orden de evaluación – en su lugar, algo así como (A y B) o C -> D debe ser dividido en dos reglas de la forma A y B -> D y C -> D .

 

 

 

Asignación de Números y evaluación

 

Al igual que con otros idiomas, VP-Expert también le permite almacenar valores numéricos en variables, y para manipularlos con expresiones aritméticas.  Desde VP-Expert se preocupa más por la lógica, sin embargo, la sintaxis para hacerlo es bastante limitado.

Variables

Cálculos numéricos suelen incluir variables del lado derecho del operador de asignación o en instrucciones condicionales (sólo hemos visto los valores hasta este punto).  Sin embargo, como VP-Expert no le permite declarar las variables, se necesita alguna manera de contar una variable (como diagnosis ) de un valor (como measles ) cuando se usa en el lado derecho de la experession.  Esto se hace adjuntando la variable en el lado derecho de la expresión entre paréntesis.  Por ejemplo:

 

RULE own_pharmacy

IF   pharmacy_used = ours

THEN perscription = (treatment);

 

Computacion

Las expresiones aritméticas son también entre paréntesis, y el uso de la mayor parte de la misma sintaxis y los operadores como los lenguajes de programación:

 

RULE profit

IF   income > (expenses)  ! since expenses is a variable, it must be in parens

THEN profit = (income – expenses)

ELSE deficit = (expenses – income);

Tenga en cuenta que sólo VP-Expert trata de encontrar las variables que están en el lado izquierdo de una expresión, por ejemplo, la regla de arriba a tratar de encontrar un valor para el income , pero no para expenses .  Si un valor no se ha encontrado para expenses , VP-Expert será tratado como “desconocido”, dando resultados impredecibles.

Una forma de solucionar este problema es incluir un “dummy” condición en la regla para obligarlo a encontrar un valor para expenses :

RULE profit

IF   expenses >= 0  ! hopefully this will always be true!

AND  income > (expenses)  ! will work, since expenses now found

THEN profit = (income – expenses)

ELSE deficit = (expenses – income);

 

Funciones

VP-Expert también tiene una serie de funciones matemáticas estándar:

@ ABS (X) @ COS (X) @ ACOS (X)

@ LOG (X) @ SIN (X) @ ASIN (X)

@ EXP (X) @ TAN (X) @ ATAN (X)

@ SQRT (X)

Cada uno empieza con el @ símbolo, y al igual que otras expresiones matemáticas deben escribirse entre paréntesis:

 Side3 = (@ SQRT (side1 + lado2))

 

Múltiples respuestas a las preguntas

Como se mencionó anteriormente, el motor de inferencia para VP-Expert se detendrá una vez que encuentra el primer valor de una variable que está tratando de encontrar.  Es posible, sin embargo, para forzarlo a encontrar todos los valores para variables en lugar.  Esto se hace con la declaración PLURAL (la cual debe ser presentada al ACTIONS bloque):

 PLURAL: Lista de variables;

Mientras que usted no tiene que hacer todas las variables de la base de conocimientos PLURAL , debe incluir por lo menos todo lo que apoyaría el tipo de resultados múltiples que desea obtener.  En la base de “médico” el conocimiento que hemos estado trabajando hasta ahora, por ejemplo, si usted desea hacer treatment plural, entonces usted debe hacer diagnosis plural, así:

 PLURAL: tratamiento, diagnóstico;

Usted también puede tener que cambiar la estructura de las reglas que lidiar con PLURAL variables.  En particular, no podrá contar con el “orden de evaluación” al estructurar sus reglas y no las puede utilizar ELSE para establecer el valor de una PLURAL variable, ya que siempre se utiliza.

Por ejemplo, si la variable cost se PLURAL , no pudimos utilizar las siguientes reglas:

 RULE cheap

IF price < 20

THEN cost = cheap;

 

RULE expensive

IF price < 100

THEN cost = medium

ELSE cost = expensive;

Si price tuvo un valor 10, entonces cost se establecerá en cheap , medium y expensive !  En general, dichas normas deben establecerse de manera que sean independientes del orden en el que son juzgados:

RULE cheap

IF price < 20

THEN cost = cheap;

 

RULE medium

IF price < 100

AND price >= 20

THEN cost = medium;

 

RULE expensive

IF price >= 100

THEN cost = expensive;

Otra forma de hacer frente a un ELSE es reemplazarlo con un cheque por el valor unknown :

RULE work

IF diagnosis = unknown

THEN treatment = get_back_to_work;

Esta regla se activará sólo si diagnosis se ha dado ningún valor en este punto.  Al igual que el ELSE , debería ser la última regla que implica treatment para que esto funcione correctamente.

Adición de explicaciones a las normas

 

Hay muchas situaciones en las que es útil para justificar las conclusiones alcanzadas por un sistema experto.  VP-Expert tiene (limitada) capacidad para lo que le permite agregar esas explicaciones a las reglas, con la declaración BECAUSE:

RULE measles

IF   temperature = very_high

AND  spots = yes

AND innoculated <> yes

THEN Diagnosis = measles

BECAUSE “A high temperature and spots are the usual symptoms of measles”;

El texto contenido si el BECAUSE declaración se imprimirá si esta regla está involucrado ya sea en una consulta de cómo o ​​por qué.

  • Si esta regla fuera a disparar, el establecimiento de Diagnosis de measles , y el usuario se preguntara cómo Diagnosis se establece, este texto se imprime.
  • Si temperature , spots , o innoculated se les preguntó como resultado directo de esta regla, y el usuario se le preguntara por qué esa pregunta se le pedía, este texto se imprimirá.

Tenga en cuenta que la BECAUSE declaración debe ser la última instrucción de la regla.

Un par de otras notas:

  • Desde la BECAUSE podrá ser invocado contra una serie de formas diferentes (preguntando cómo para diagnosis , o por qué para temperature , spots , o innoculated ), debe ser bastante “genérica”, como es la regla anterior.  Si usted tiene una buena idea de la orden que se harán preguntas en, sin embargo, puede hacerlos un poco más específico:

RULE flu

IF   throat = sore

AND  temperature = high

OR   temperature = very_high

THEN Diagnosis = flu

BECAUSE “High temperature indicates a possible flu, and a sore throat

would confirm it.”;

Ya que sabemos que la temperatura ya se le preguntó por el measles regla, podemos centrarnos en responder a esta regla por qué throat se le está pidiendo.

  • Debido a que la opción de cómo no es fácil de usar (en particular para el tipo de usuario ingenuo más probable que se utilice el sistema experto), tal vez sea más fácil de usar para imprimir directamente a través de explicaciones y declaraciones DISPLAY:

RULE measles

IF   temperature = very_high

AND  spots = yes

AND innoculated <> yes

THEN Diagnosis = measles

DISPLAY “Your extremely high temperature and spots indicate a case of measles.”

BECAUSE “A high temperature and spots are the usual symptoms of measles”;

 

Instrucciones de consulta

 

Las variables que no aparecen como el consecuente de una regla en la base de conocimiento (es decir, son hojas del árbol de deducción), se consideran posibles preguntas para el usuario.  Si el motor de inferencia intenta encontrar una variable, el usuario será guiado por su valor.  Esto se hace con declaraciones ASK y CHOICES.

La declaración ASK

 

La forma de la petición para una variable está definida por un ASK comunicado.  Tiene la forma:

ASK variable: “prompt”;

Por ejemplo:

ASK temperature: “Please take the patient’s temperature, and enter it into the system.”;

Al igual que con cualquier otro programa, estas solicitudes deben ser informativos – es decir, deben informar al usuario sobre cómo recoger e introducir la información.

La declaración CHOICES

 

Si hay un número finito de posibles respuestas a una pregunta que se pueden presentar en un menú definido por un CHOICES comunicado.  Tiene la forma:

CHOICES variable: list of values;

Por ejemplo:

CHOICES temperature: normal, high, very_high;

Este menú se imprime cuando se hace la pregunta.  Tenga en cuenta que si no hay CHOICES declaración de una variable, el usuario tendrá que introducir un valor en el cursor después del prompt (así es como variables numéricas son generalmente tramitadas).

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: