Mejora del rendimiento de la modalidad de ejecución secuencial

Para utilizar el algoritmo secuencial, asegúrese de que las reglas son homogéneas y que las reglas no están encadenadas. En el algoritmo secuencial, puede definir el número de reglas que se deben ejecutar por tupla y el orden de ejecución utilizando las propiedades de control.

Algoritmo secuencial

Para garantizar la misma ejecución con cualquiera de los algoritmos, se requieren las dos condiciones siguientes:
  • Las reglas deben ser homogéneas. Las reglas homogéneas significan que las condiciones de estas reglas deben establecerse en el mismo tipo y número de objetos. Si intenta aplicar el algoritmo secuencial a reglas heterogéneas, normalmente crea más objetos de tupla, lo que puede hacer que se ejecuten más reglas que en la modalidad RetePlus . La firma de tupla común también puede provocar que no se activen reglas heterogéneas: cuando no hay instancias correspondientes en la memoria de trabajo, no se pueden crear tuplas.

  • Las reglas no deben encadenarse, es decir, la modificación realizada en la parte de acción de una regla no debe llevar a la ejecución de otra regla.

Si especifica la modalidad de ejecución secuencial para reglas que no son compatibles con ella, el motor genera un error.

El uso de la modalidad de ejecución secuencial se describe más adelante en las secciones:

Tuplas

Una tupla es una lista de objetos que cumple con una estructura determinada. Una estructura de tupla es simplemente una secuencia de descriptores de clase. Cada ubicación de una estructura de tupla se denomina ranura. El mismo descriptor de clase puede aparecer más de una vez en diferentes ranuras.

Tome una estructura de tupla:

(Customer,Product)

Aquí hay una tupla que cumple con esta estructura:

(new Customer("Henry"),new DVD("Mickey"))

Tenga en cuenta que la subclase se tiene en cuenta porque un DVD es un Product. Sin embargo, algunas tuplas que no cumplen con la estructura:

Por ejemplo, la siguiente tupla es demasiado grande:


(new Customer("Henry"),new CD("Madona"),new DVD("Mickey"))

Esta tupla no está ordenada correctamente:


(new DVD("Lord of the rings"),new Customer("Henry"))

Y esta tupla es demasiado pequeña:


(new Customer("Henry"))

En Java™, una tupla se implementa fácilmente como una matriz de objetos:


Java Tuple = Object[]

El código Java para crear una tupla y sus objetos es:


new Object[] {new Customer("Henry"),new DVD("Mickey")}

En tiempo de ejecución, las tuplas se crean automáticamente a partir del contenido de la memoria de trabajo y, a continuación, se pasan al motor de reglas. Las tuplas se pasan una tras otra al método de coincidencia de tuplas.

Propiedades de control en modalidad secuencial

Las propiedades de control afectan a la ejecución en modalidad secuencial y a la estructura de tupla. Consulte Propiedades de control para tareas de reglas en modalidades de ejecución para obtener más información general.

El número de reglas que se deben ejecutar por tupla y el orden en el que se ejecutan se pueden especificar con las propiedades de control: orden, activacióny firinglimit.

La propiedad de ordenación

La propiedad ordering es obligatoria para el proceso secuencial. Describe el orden en el que se ejecutarán las reglas de la tarea de regla.

Hay dos valores disponibles:

  • literal: las reglas se mantienen en el orden en el que se establecen en el cuerpo de la tarea (utilizando flechas arriba/abajo).

  • sorted: las reglas se ordenan según sus prioridades estáticas.

Tenga en cuenta que otro valor, dynamic, sólo está disponible para las tareas de regla que utilizan la modalidad de ejecución RetePlus .

La propiedad de activación

La propiedad firing especifica si, para cada tupla, se deben ejecutar todas las reglas o sólo la primera regla que se aplica. Esta propiedad es opcional.

Tiene dos valores posibles:

  • allrules

    Este valor significa que todas las reglas que se aplican deben ejecutarse antes de saltarse a la siguiente tupla. Este es el valor predeterminado.

  • rule

    Este valor significa que sólo se debe ejecutar la primera regla que se aplica en la primera tupla.

La propiedad firinglimit

La propiedad firinglimit proporciona otro nivel de control cuando la propiedad firing se establece en allrules. Se utiliza para especificar un número que representa el número máximo de reglas que se deben ejecutar antes de saltar a la siguiente tupla. Este número debe ser mayor que cero.

Limitaciones conocidas del algoritmo secuencial

La tabla siguiente describe las limitaciones del proceso secuencial, en particular su uso combinado con determinadas construcciones de ILOG ® Rule Language (IRL).

Limitación Descripción
Limitaciones de ILOG Rule Language (IRL)

No todos los patrones de reglas que se han diseñado para la coincidencia de Rete con estado están disponibles. Los errores de tiempo de compilación se producen cuando una regla no es compatible con la implementación de coincidencia de tupla actual.

Por lo tanto, cuando se utiliza el proceso secuencial, IRL no da soporte a las características siguientes:

  • prioridades dinámicas

    Puesto que no hay ninguna agenda en el proceso secuencial, sólo se permiten las reglas con prioridades estáticas.

  • not, exists, collect condiciones sin un enumerador

    Las condiciones not, existsy collect con un enumerador (from o in) se convierten al código de bytes Java. Cuando se especifica un enumerador, el conjunto de objetos está disponible como un valor vinculado a la condición. (Tenga en cuenta que esto no es una limitación para RetePlus o Fastpath.)

Construcciones de condición

Las siguientes construcciones de condición están disponibles en el proceso secuencial:

  • los enlaces de condición simples y las pruebas están disponibles

  • from

  • in

Refracción

La unidad de datos para un ciclo de motor es la tupla. El motor no registra las tuplas ya que están emparejadas, más bien las olvida entre ciclos. Por lo tanto, no hay soporte incorporado para la refracción.

Utilizando la modalidad de ejecución secuencial, la tarea de regla anterior se convierte en:

ruletask main {
   algorithm = sequential;
   ordering = literal;
   body = {Person,PersonProduct}
}

El rastreo de ejecución muestra que, utilizando la modalidad de ejecución secuencial, la misma regla se ejecuta dos veces para las mismas partes de dos tuplas diferentes.

Aunque no hay soporte incorporado para la refracción, la modalidad de ejecución secuencial utiliza una estrategia de aplicación de reglas determinada cuando genera el cuerpo del método de coincidencia de tupla. La estrategia, sin embargo, trata de limitar el uso de la refracción.

Recursos IRL (ILOG Rule Language)

Por el contrario, prácticamente todas las expresiones y sentencias de nivel de script del IRL están disponibles en el proceso secuencial. Sirven principalmente para mantener la coherencia de las otras tareas de regla que no están establecidas en el algoritmo secuencial.

A continuación se muestra una lista de estas características:

Funciones

Las definiciones de función y las llamadas están totalmente disponibles.

Expresiones de nivel de script

Todas las expresiones IRL están disponibles. (Tenga en cuenta que ?instance funciona en cualquier modalidad de ejecución.)

Sentencias a nivel de script

Todas las sentencias IRL están disponibles.

Actualizar

La construcción de actualización está disponible porque pueden existir actualizaciones falsas en las tareas de regla establecidas en el algoritmo secuencial. Una actualización falsa es una actualización en un objeto que no puede coincidir con ninguna parte de condición de las tareas de regla establecidas en el algoritmo secuencial, pero que puede ser significativa para otras tareas de regla que utilizan el algoritmo RetePlus . Todas las tareas de reglas se especifican en el conjunto de reglas y deben mantenerse coherentes con el motor actual. Sin embargo, es importante tener en cuenta que la actualización habitual no la maneja en absoluto el algoritmo de proceso secuencial sin estado.

Reglas repetibles

Las reglas repetibles no las maneja el algoritmo de proceso secuencial, pero pueden ser relevantes para otras tareas de reglas que utilizan el algoritmo RetePlus .

Insertar

La inserción de objetos que podrían coincidir con partes de condición de tareas de regla establecidas en el algoritmo secuencial puede provocar incoherencias cuando las tuplas de objetos se extraen de la memoria de trabajo. Esto se debe a que los objetos se insertan en la primera posición y no se notifica al iterador que crea las tuplas. Por lo tanto, el iterador no proporciona las tuplas que implican el nuevo objeto al motor de proceso secuencial. Sin embargo, la inserción sigue siendo relevante para otras tareas de reglas utilizando el algoritmo RetePlus .