0% encontró este documento útil (0 votos)
39 vistas3 páginas

Laboratorio Notaciones

El documento describe un laboratorio para crear anotaciones personalizadas en Java que definen reglas y hechos en un sistema experto simulado. Se presentan dos anotaciones, @Regla y @Hecho, junto con ejemplos de implementación en una clase llamada MotorInferencia. Además, se menciona la posibilidad de procesar estas anotaciones utilizando Reflection para la inferencia en un sistema experto real.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
39 vistas3 páginas

Laboratorio Notaciones

El documento describe un laboratorio para crear anotaciones personalizadas en Java que definen reglas y hechos en un sistema experto simulado. Se presentan dos anotaciones, @Regla y @Hecho, junto con ejemplos de implementación en una clase llamada MotorInferencia. Además, se menciona la posibilidad de procesar estas anotaciones utilizando Reflection para la inferencia en un sistema experto real.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Laboratorio: Anotaciones para Sistemas Expertos

Objetivo: Crear anotaciones personalizadas para definir reglas y propiedades dentro de


un sistema experto simulado.

Pasos:

1. Crear el Proyecto:
o Abre tu IDE y crea un nuevo proyecto Java (si no tienes uno ya abierto).
Nómbralo, por ejemplo, SistemaExpertoAnotaciones.
2. Definir Anotaciones:
o Vamos a crear algunas anotaciones que podrían representar conceptos en
un sistema experto:

a. @Regla: Para marcar métodos que representan reglas del sistema


experto.

Crea una nueva interfaz Java llamada `Regla`:

```java
package tu.paquete.experto; // Reemplaza con tu paquete

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Regla {
String nombre();
String descripcion() default "";
int prioridad() default 5; // Un valor por defecto
para la prioridad
}
```

* `@Retention(RetentionPolicy.RUNTIME)`: Indica que la


anotación estará disponible en tiempo de ejecución (para
poderla leer con Reflection).
* `@Target(ElementType.METHOD)`: Indica que esta
anotación solo se puede aplicar a métodos.

b. @Hecho: Para marcar campos que representan hechos o conocimientos


base del sistema.

Crea una nueva interfaz Java llamada `Hecho`:

```java
package tu.paquete.experto; // Reemplaza con tu paquete

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Hecho {
String nombre();
String descripcion() default "";
}
```

* `@Target(ElementType.FIELD)`: Indica que esta


anotación solo se puede aplicar a campos (variables de
instancia).

3. Crear una Clase de Sistema Experto Simulado:


o Crea una clase Java llamada MotorInferencia. Esta clase contendrá los
hechos y las reglas, anotados con nuestras nuevas anotaciones.

Java

package tu.paquete.experto; // Reemplaza con tu paquete

public class MotorInferencia {

@Hecho(nombre = "temperatura_alta", descripcion = "La


temperatura del paciente es alta.")
public boolean temperaturaAlta = true;

@Hecho(nombre = "tos_presente", descripcion = "El paciente


tiene tos.")
public boolean tosPresente = true;

@Regla(nombre = "sospecha_gripe", descripcion = "Si la


temperatura es alta y hay tos, sospechar gripe.", prioridad =
10)
public void evaluarSospechaGripe() {
if (temperaturaAlta && tosPresente) {
System.out.println("REGla 'sospecha_gripe' se
cumple: Posible gripe.");
}
}

@Regla(nombre = "recomendar_descanso", descripcion = "Si se


sospecha gripe, recomendar descanso.", prioridad = 5)
public void recomendarDescanso() {
// Esta regla se activaría si la regla 'sospecha_gripe'
se cumplió (en un motor de inferencia real).
// Aquí solo lo simulamos.
if (temperaturaAlta && tosPresente) {
System.out.println("RECOMENDACIÓN: Se recomienda
descanso.");
}
}

public static void main(String[] args) {


MotorInferencia motor = new MotorInferencia();
// En un sistema experto real, aquí iría la lógica para
evaluar las reglas
// basándose en los hechos. Para este laboratorio, las
reglas se ejecutan directamente.
motor.evaluarSospechaGripe();
motor.recomendarDescanso();
}
}

4. Procesar las Anotaciones (Opcional para este laboratorio básico):


o Para un sistema experto real, necesitarías código que inspeccione las
clases en busca de las anotaciones @Hecho y @Regla y luego utilice esta
información para la inferencia. Esto se haría usando Reflection, similar a
como lo hicimos en el laboratorio anterior.

Conclusión del Laboratorio de Sistemas Expertos con Anotaciones:

Hemos creado dos anotaciones personalizadas (@Regla y @Hecho) que nos permiten
añadir metadatos semánticos relacionados con un sistema experto directamente en
nuestro código Java. Esto podría facilitar la organización y el procesamiento de las
reglas y los hechos en un motor de inferencia más complejo.

En un sistema experto real, un motor de inferencia examinaría las clases anotadas,


extraería la información de las reglas y los hechos, y luego utilizaría un algoritmo
(como encadenamiento hacia adelante o hacia atrás) para llegar a conclusiones.

También podría gustarte