O predicado de la optimización de la

0

Pregunta

Supongamos que tengo una entidad con 3 atributos: A1, A2, A3, tales que:

  1. A1 sólo puede tener los valores: 1, 2, 3
  2. A2 sólo pueden tener valores: 10, 20, 30, 40, 50
  3. A3 sólo puede tener los valores: 100, 200

Y una serie de reglas, por ejemplo:

R1: (A1 in (1, 2)) AND (A2 in (20, 40, 50)) AND (A3 IN (100))
R2: (A1 in (1, 3)) AND (A2 in (10, 30)) AND (A3 in (200))
R3: (A1 in (1, 2)) AND (A2 in (10)) AND (A3 in (100))

Entonces no es un predicado: R = R1 or R2 or R3que me gustaría minimizar. La cosa es que A1=1 cubre todas las posibles variaciones de A2 y A3, por lo que podemos llevar en un apartado independiente: R = (A1=1) or (the rest)

He intentado booleano minimización de los métodos por declarar las variables como a=(A1=1), b=(A1=2), ..., k=(A3=200)sin embargo , no parece funcionar, porque:

  1. boolean optimizador no es consciente de todos los valores de Un atributo
  2. las variables booleanas no son independientes Cuando se trata de abordar estos problemas, la expresión se está convirtiendo en demasiado complejo y ni QMC, no Espresso no es capaz de minimizar en la forma deseada.

También he tratado de almacenar cada uno-para-cada una de las asignaciones y en caso de que uno de ellos tiene todos los valores de la otra, lo utilizan como una agregación de anclaje, a continuación, retire y repetir, pero se necesita la eternidad y un buen montón de memoria RAM.

Tal vez podemos representar los valores de atributo como un conjunto y la dirección de la teoría de conjuntos punto de vista.

¿Alguna vez has enfrentado a un problema de este tipo? Es usted consciente de las mejores maneras de resolverlo? (heurísticas son bien)

1

Mejor respuesta

1

Un método de optimización de la expresión para la evaluación podría ser dividir las reglas repetidamente en el atributo con el menor número de valores. Después de esta expansión podría recoger los valores de nuevo para aquellos que tienen los mismos en la última cláusula.

  1. Hacer 2 grupos, uno para las reglas que aceptar A3 = 100 y una de las reglas que aceptar A3 = 200. Una regla puede acabar en ambos grupos. A continuación, modifique la regla en el grupo de modo que sólo acepta el valor para el grupo y no el otro.

  2. Grupo los grupos de nuevo en los valores de A1 con la misma lógica.

Se terminaría con una ampliación de la expresión como esta:

A3 = 100 AND (
    (A1 = 1 AND A2 IN (10, 20, 40, 50)) OR
    (A1 = 2 AND A2 IN (10, 20, 40, 50)))
OR A3 = 200 AND (
    (A1 = 1 AND A2 IN (10, 30)) OR
    (A1 = 3 AND A2 IN (10, 30)))

Básicamente, se está construyendo un árbol con los valores de A3 en profundidad 1 y los valores de A1 en la profundidad de 2 y los valores de A2 a la profundidad de 3. Si existe un camino desde la raíz hasta la hoja utilizando los valores de los atributos, a continuación, la regla se cumplió de lo contrario no.

Después de que usted puede combinar todos los nodos con el mismo subárbol y el mismo padre. Para esto usted puede comparar las hojas de todos los nodos con el mismo padre y si coinciden, usted puede combinar los nodos. Después de que usted vaya uno a subir de nivel y comparar los nodos con el mismo padre y así sucesivamente.

Por su ejemplo, usted podría terminar con esta expresión:

A3 = 100 AND A1 IN (1, 2) AND A2 IN (10, 20, 40, 50) OR
A3 = 200 AND A1 IN (1, 3) AND A2 IN (10, 30)

Este proceso es bastante simple, y también podría acortar la expresión, no sólo optimiza para su evaluación. Puede que no sea perfecto, pero podría ser una forma de empezar.

2021-11-22 20:45:00

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................