O predicato di ottimizzazione

0

Domanda

Supponiamo che io sono un'entità con 3 attributi: A1, A2, A3, tale che:

  1. A1 può avere solo valori: 1, 2, 3
  2. A2 può avere solo valori: 10, 20, 30, 40, 50
  3. A3 può avere solo valori: 100, 200

E una serie di regole, ad esempio:

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))

Poi c'è un predicato: R = R1 or R2 or R3che vorrei ridurre al minimo. Il fatto è che A1=1 copre tutte le possibili variazioni di A2 e A3, in modo che possiamo portare in un separato clausola: R = (A1=1) or (the rest)

Ho provato boolean metodi di minimizzazione da parte di dichiarazione delle variabili a=(A1=1), b=(A1=2), ..., k=(A3=200)tuttavia non sembra funzionare, perché:

  1. boolean optimizer non è a conoscenza di tutti i valori di Un attributo
  2. le variabili booleane non sono indipendenti Quando si cerca di risolvere questi problemi, l'espressione è di diventare troppo complesso e né QMC, non Espresso non è in grado di ridurre in modo desiderato.

Ho anche provato a memorizzare ogni per ogni mapping e nel caso in cui uno di essi hanno tutti i valori di un altro, usarlo come un'aggregazione di ancoraggio, quindi rimuovere e ripetere, ma ci vuole l'eternità e un bel po ' di RAM.

Forse siamo in grado di rappresentare i valori di attributo come impostare e affrontare dal punto di vista teorico.

Avete mai affrontato un problema questo? Siete a conoscenza di modi migliori per risolvere il problema? (euristica sono ok così)

1

Migliore risposta

1

Un metodo per l'ottimizzazione l'espressione per la valutazione potrebbe essere quello di dividere le regole ripetutamente l'attributo con il minor numero di valori. Dopo questa espansione si potrebbe raccogliere nuovamente i valori per coloro che hanno gli stessi sull'ultima clausola.

  1. Fare 2 gruppi, uno per le regole che accettano A3 = 100 e uno per le regole che accettano A3 = 200. Una regola può finire in entrambi i gruppi. Quindi modificare la regola in gruppo in modo che si accetta solo il valore per il gruppo e non l'altro.

  2. Gruppo di quei gruppi di nuovo sui valori di A1 con la stessa logica.

Si finirebbe con una maggiore espressione come questa:

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)))

Fondamentalmente ci sono la costruzione di un albero con i valori per la A3 alla profondità 1 e i valori di A1 alla profondità di 2 e i valori di A2 a una profondità 3. Se c'è un cammino dalla radice alla foglia utilizzando i valori di attributo, quindi la regola è soddisfatto altrimenti non.

Dopo di che è possibile unire tutti i nodi con la stessa sottostruttura e lo stesso padre. Per questo è possibile confrontare le foglie di tutti i nodi con lo stesso genitore e se corrispondono, è possibile unire i nodi. Dopo di che si va al livello superiore e confrontare i nodi con lo stesso genitore e così via.

Per il tuo esempio, si finirebbe con questa espressione:

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)

Questo processo è abbastanza semplice e può anche ridurre l'espressione, non solo di ottimizzare valutazione. Potrebbe non essere perfetto, ma potrebbe essere un modo per iniziare.

2021-11-22 20:45:00

In altre lingue

Questa pagina è in altre lingue

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