Modelado en el nivel de concepto

Tema 6 – Modelo de conocimiento

En este tema se presenta el modelo de conocimiento, donde se detallan los requisitos de conocimiento y razonamiento de un SBC. Se realiza una presentación informal al Lenguaje de Modelado de Conocimiento mediante el cual se formalizan los conceptos, relaciones, tipos de reglas, instancias, inferencias, tareas y métodos que forman parte del modelo de conocimiento de un problema.

inferencias – Catálogo de inferencias

Catálogo de las 18 inferencias identificadas en la metodología Common-KADS: cubrir, abstraer, asignar, clasificar, comparar, criticar, corresponder, modificar, operacionalizar, evaluar, generar, agrupar, proponer, predecir, seleccionar, ordenar, especificar y verificar.

Tema 8 – Catálogo de tareas

En este tema se presenta el conjunto de tareas habituales en SBC. Se clasifican en dos tipos: tareas analíticas, que se aplican sobre sistemas existentes para generar una caracterización de los mismos; y tareas sintéticas, en las que el sistema es el objeto del desarrollo. Las tareas analíticas son clasificiación, valoración, diagnóstico, monitorización y predicción, y las tareas sintéticas son diseño, configuración, planificación, temporalización y asignación.

Modelado en el nivel de contexto

Tema 5 – Modelado en el nivel de contexto

En este tema se presentan los modelos del nivel de contexto: el modelo de organización, para analizar el contexto de la organización en la que se implantará un SBC; el modelo de tareas, para analizar las tareas que requieren un uso intensivo de conocimiento; y el modelo de agentes, para analizar los agentes involucrados en el proceso.

Caso práctico – DomoCCIA

Ejemplo de desarrollo del modelado en el nivel de contexto para el caso de una empresa dedicada a la instalación de infraestructuras domóticas en viviendas particulares.

Introducción a CommonKADS

Tema 4 – Introducción a CommonKADS

En este tema se presentan conceptos generales sobre la metodología CommonKADS, el desarrollo de sistemas basados en conocimiento mediante modelos y el sistema de modelos de CommonKADS.

Análisis de la situación del rey en ajedrez

Trabajo: Análisis de la situación del rey en ajedrez

El ajedrez es un juego de mesa para dos jugadores. Se juega sobre un tablero cuadriculado de 8×8 casillas, alternadas en colores blanco y negro, que constituyen las 64 posibles posiciones para el desarrollo del juego. Al principio del juego cada jugador tiene dieciséis piezas: un rey, una dama, dos alfiles, dos caballos, dos torres y 8 peones. Se trata de un juego de guerra en el que el objetivo es derrocar al rey del oponente. Esto se hace alcanzando la casilla que ocupa el rey con alguna de las piezas propias sin que el otro jugador pueda zafarse del ataque, en una jugada llamada jaque mate.

Las fichas

Las fichas en el juego de ajedrez son de seis tipos:

El rey: Es la ficha más importante del juego. El rey se puede mover una única casilla en cualquier dirección (horizontal, vertical o diagonal); siempre y cuando dicha casilla esté libre u ocupada por una ficha contraria, a la que captura, y no esté amenazada por ninguna ficha contraria.

La dama: Es la ficha con más libertad de movimientos en el juego. La dama se puede mover cualquier cantidad de casillas en cualquier dirección (horizontal, vertical o diagonal); siempre y cuando dicha casilla esté libre u ocupada por una ficha contraria, a la que captura, y todas las casillas de su recorrido estén libres. La dama no puede saltar por encima de ninguna ficha para realizar su movimiento.

La torre: Se puede mover cualquier cantidad de casillas en dirección horizontal o vertical; siempre y cuando dicha casilla esté libre u ocupada por una ficha contraria, a la que captura, y todas las casillas de su recorrido estén libres. La torre no puede saltar por encima de ninguna ficha para realizar su movimiento.

El alfil: Se puede mover cualquier cantidad de casillas en dirección diagonal; siempre y cuando dicha casilla esté libre u ocupada por una ficha contraria, a la que captura, y todas las casillas de su recorrido estén libres. El alfil no puede saltar por encima de ninguna ficha para realizar su movimiento.

El caballo: Se puede mover a cualquiera de las ocho casillas que se encuentran desplazándose dos casillas en una dirección no diagonal (horizontal o vertical) y después una casilla en la dirección no diagonal contraria (vertical u horizontal), describiendo una ‘L’; siempre y cuando dicha casilla esté libre u ocupada por una ficha contraria a la que captura. El caballo es la única ficha que puede saltar por encima de otras fichas para realizar su movimiento.

El peón: Es la ficha más débil del juego. El peón se puede mover de tres formas distintas:

  • Una única casilla en dirección vertical hacia el campo contrario (los blancos hacia arriba y los negros hacia abajo); siempre y cuando dicha casilla esté libre.

  • Dos casillas en dirección vertical hacia el campo contrario en su primer movimiento (desde la segunda fila para los blancos y desde la septima fila para los negros); siempre y cuando las dos casillas que avanza esté libres.
  • Una única casilla en diagonal hacia el campo contrario (los blancos hacia arriba y los negros hacia abajo); siempre y cuando dicha casilla esté ocupada por una ficha contraria, a la que captura.

No se consideran movimientos que dependan del desarrollo previo de la partida tales como enroque entre rey y torre, o captura del peón al paso.

La situación del rey

La situación del rey en una posición de ajedrez es fundamental para identificar el final de la partida. El rey puede estar en alguno de los siguientes estados:

  • Libre: El rey no está amenazado por ninguna pieza contraria

  • En jaque: El rey está amenazado por una o varias piezas contrarias, pero puede librarse de la amenaza de alguna de las siguientes formas:
    • Capturando la pieza atacante
    • Interponiendo una pieza entre la pieza atacante y el rey
    • Moviendo el rey a una casilla que no esté amenazada
  • En jaque mate: El rey está amenazado por una o varias piezas contrarias y no puede librarse de dicha amenaza
  • Ahogado: El rey está libre, pero es la única pieza que se puede mover y todas las casillas a las que se puede mover están amenazadas por piezas contrarias

Objetivos del trabajo

El trabajo consiste en implementar un sistema de producción en CLIPS que analice la situación del rey negro en una posición de ajedrez. El programa debe identificar si el rey negro está libre, en jaque, en jaque mate o ahogado. Además, en el caso en que el rey negro esté en jaque, debe indicar todas las formas que tiene de librarse de dicho estado.

Para ello se proporciona un fichero ejemplos.txt que contiene 20 posiciones de ajedrez con el siguiente formato:

# 01 Rey libre
--t-----
--pTP-pp
--p-----
p---rpC-
--D---c-
d-----P-
P---PP-P
------R-

Donde la primera línea tiene que comenzar con # y contiene una descripción de la posición (procedencia, tipología o dificultad) y las restantes 8 líneas se corresponden con las filas del tablero de ajedrez, donde una letra indica la presencia de una ficha y el símbolo - indica que la casilla correspondiente está vacía. Cada ficha está representada con su inicial (R – rey, D – dama, T – torre, A – alfil, C – caballo, P – peón) que será mayúscula para las fichas blancas y minúscula para las fichas negras.

También se proporciona un fichero base ajedrez.clp en el que se definen los siguientes constructores:

  • Una plantilla ficha para almacenar la información sobre las fichas del juego:

    (deftemplate ficha
      (slot fila)
      (slot columna)
      (slot tipo
            (type SYMBOL)
            (allowed-symbols rey dama torre alfil caballo peon))
      (slot color
            (type SYMBOL)
            (allowed-symbols blanco negro)))
    
    • Los campos fila y columna sirven para almacenar los números de fila y columna en los que se encuentra la ficha.
    • El campo tipo sirve para almacenar el tipo de ficha.
    • El campo color sirve para almacenar el color de la ficha.
  • La regla ajedrez-numero y las funciones tipo-ficha, color-ficha y lee-ajedrez sirven para cargar un ejemplo desde el fichero ejemplos.txt
    (deffunction tipo-ficha (?v)
      (switch ?v
              (case "R" then rey)
              (case "r" then rey)
              (case "D" then dama)
              (case "d" then dama)
              (case "T" then torre)
              (case "t" then torre)
              (case "A" then alfil)
              (case "a" then alfil)
              (case "C" then caballo)
              (case "c" then caballo)
              (case "P" then peon)
              (case "p" then peon)))
    
    (deffunction color-ficha (?v)
      (if (member$ ?v (create$ "R" "D" "T" "A" "C" "P"))
          then blanco
          else negro))
    
    (deffunction lee-ajedrez (?n)
      (open "ejemplos.txt" data "r")
      (loop-for-count (?i 1 (- ?n 1))
        (loop-for-count (?j 1 10) (readline data)))
      (readline data)
      (loop-for-count (?i 1 8 )
        (bind ?fila (readline data))
        (loop-for-count (?j 1 8 )
          (bind ?v (sub-string ?j ?j ?fila))
          (if (not (eq ?v "-"))
              then (assert (ficha (fila ?i)
                                  (columna ?j)
                                  (tipo (tipo-ficha ?v))
                                  (color (color-ficha ?v)))))))
      (close data))
    
    (defrule ajedrez-numero
      (declare (salience 50))
      =>
      (printout t "Que problema quieres analizar (1-20): ")
      (lee-ajedrez (read))
      (assert (imprime)))
    
    • La regla ajedrez-numero tiene prioridad 50 para asegurar que se ejecuta antes que las reglas que analizan la situación del rey negro.
    • La regla ajedrez-numero evalúa una llamada a la función lee-ajedrez que carga todos los datos de la posición que se haya escogido como ejemplo.
  • Las reglas imprime-tablero, imprime-casilla-libre e imprime-casilla-ocupada, que junto con la función imprime-ficha sirven para imprimir en pantalla la posición que se ha escogido como ejemplo.
    (defrule imprime-tablero
      (declare (salience 50))
      ?h <- (imprime)
      =>
      (printout t "+-+-+-+-+-+-+-+-+" t)
      (retract ?h)
      (assert (imprime 1 1)))
    
    (deffunction imprime-ficha (?t ?c)
      (switch ?t
          (case rey then (if (eq ?c blanco) then "R" else "r"))
          (case dama then (if (eq ?c blanco) then "D" else "d"))
          (case torre then (if (eq ?c blanco) then "T" else "t"))
          (case alfil then (if (eq ?c blanco) then "A" else "a"))
          (case caballo then (if (eq ?c blanco) then "C" else "c"))
          (case peon then (if (eq ?c blanco) then "P" else "p"))))
    
    (defrule imprime-casilla-libre
      (declare (salience 50))
      ?h <- (imprime ?i ?j)
      (not (ficha (fila ?i) (columna ?j)))
      =>
      (retract ?h)
      (if (= ?j 1) then (printout t "|"))
      (printout t " |")
      (if (= ?j 8 )
          then (printout t t "+-+-+-+-+-+-+-+-+" t)
               (if (< ?i 8 ) then (assert (imprime (+ ?i 1) 1)))
          else (assert (imprime ?i (+ ?j 1)))))
    
    (defrule imprime-casilla-ocupada
      (declare (salience 50))
      ?h <- (imprime ?i ?j)
      (ficha (fila ?i) (columna ?j) (tipo ?t) (color ?c))
      =>
      (retract ?h)
      (if (= ?j 1) then (printout t "|"))
      (printout t (imprime-ficha ?t ?c))
      (printout t "|")
      (if (= ?j 8 )
          then (printout t t "+-+-+-+-+-+-+-+-+" t)
               (if (< ?i 8 ) then (assert (imprime (+ ?i 1) 1)))
          else (assert (imprime ?i (+ ?j 1)))))
    

Observaciones

  • Puede ser conveniente determinar que casillas del tablero se encuentran amenazadas por alguna pieza
  • Ninguna pieza, salvo el caballo, puede moverse saltando por encima de otras piezas
  • El peón es la única pieza que amenaza casillas a las que no puede moverse y se mueve a casillas que no amenaza
  • Para librarse de un jaque doble en el que dos piezas distintas amenazan al rey, éste debe moverse a una casilla no amenazada

Ejemplos

A continuación se muestran algunos ejemplos de cómo debería funcionar el programa pedido

Rey libre

Que problema quieres analizar (1-20): 1
+-+-+-+-+-+-+-+-+
| | |t| | | | | |
+-+-+-+-+-+-+-+-+
| | |p|T|P| |p|p|
+-+-+-+-+-+-+-+-+
| | |p| | | | | |
+-+-+-+-+-+-+-+-+
|p| | | |r|p|C| |
+-+-+-+-+-+-+-+-+
| | |D| | | |c| |
+-+-+-+-+-+-+-+-+
|d| | | | | |P| |
+-+-+-+-+-+-+-+-+
|P| | | |P|P| |P|
+-+-+-+-+-+-+-+-+
| | | | | | |R| |
+-+-+-+-+-+-+-+-+
- El rey está libre

Rey en jaque

Que problema quieres analizar (1-20): 15
+-+-+-+-+-+-+-+-+
| | |t| | | | | |
+-+-+-+-+-+-+-+-+
| | |p|P|T| |p|p|
+-+-+-+-+-+-+-+-+
| | |p| | | | | |
+-+-+-+-+-+-+-+-+
|p| | | |r|p|C| |
+-+-+-+-+-+-+-+-+
| | |D| | | |c| |
+-+-+-+-+-+-+-+-+
|d| | | | | |P| |
+-+-+-+-+-+-+-+-+
|P| | | |P|P| |P|
+-+-+-+-+-+-+-+-+
| | | | | | |R| |
+-+-+-+-+-+-+-+-+
- El rey está en jaque - Opciones:
-- Mover el rey negro de f4c5 a f3c4
-- Mover el rey negro de f4c5 a f4c6
-- Mover la dama negra de f6c1 a f2c5 capturando la torre blanca

Rey en jaque mate

Que problema quieres analizar (1-20): 2
+-+-+-+-+-+-+-+-+
| | |T| | | | |r|
+-+-+-+-+-+-+-+-+
| | | | | |p|p|p|
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
| | |R| | | | | |
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
- El rey está en jaque mate

Rey ahogado

Que problema quieres analizar (1-20): 14
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
| |T| | | |p| | |
+-+-+-+-+-+-+-+-+
| | | | |r|P| | |
+-+-+-+-+-+-+-+-+
|T| | | | | |P| |
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
| | | |D| | |R| |
+-+-+-+-+-+-+-+-+
- El rey está ahogado

Sistema experto para el control en tiempo real de procesos de mecanizado

Presentación: Sistema experto para el control en tiempo real de procesos de mecanizado

En procesos de mecanizado industriales se utilizan máquinas de corte automatizadas. Estas máquinas están conectadas a un dispositivo de control desde el que se indican las instrucciones básicas que sirven para obtener una pieza. Sin embargo, estos procesos dependen de la intervención humana para diagnosticar y corregir en tiempo real las imprecisiones que se puedan presentan. Se presenta un sistema experto para el control en tiempo real de procesos de mecanizado a partir de información proporcionada por sensores situados en la máquina de corte. Este sistema se ha implementado como prototipo en una fresadora Kondia 600 con control FAGOR 8025-MG.