ALEBO predikátu optimalizácia

0

Otázka

Predpokladajme, že mám účtovná jednotka s 3 atribúty: A1, A2, A3 také, že:

  1. A1 môže mať len hodnoty: 1, 2, 3
  2. A2 môže mať len hodnoty: 10, 20, 30, 40, 50
  3. A3, môžu mať len hodnoty: 100, 200

A určité pravidlá, napríklad:

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

Potom tam je predikát: R = R1 or R2 or R3,, ktorú by som rád, aby sa minimalizovalo. Vec je, že A1=1 sa vzťahuje na všetky možné variácie A2 a A3,, aby sme mohli priviesť ju do samostatnej doložky: R = (A1=1) or (the rest)

Snažil som sa booleovskej minimalizácie metódy vyhlásením, premenné, ako a=(A1=1), b=(A1=2), ..., k=(A3=200)je však to , nezdá sa, že práca, pretože:

  1. boolean optimalizáciu si nie je vedomý všetkých hodnôt atribútu A
  2. booleovské premenné nie sú nezávislé Keď sa snažia riešiť tieto problémy, termín sa stáva príliš zložité a ani QMC, nie Espresso nie je schopný minimalizovať želaným spôsobom.

Tiež som sa snažil obchod každý-na-každý mapovania a v prípade, že jeden z nich má všetky hodnoty druhého, použiť ho ako úhrn kotvy, potom ju odstráňte a opakovať, ale to trvá večnosť a pomerne veľa RAM.

Možno by sme mohli predstavujú hodnoty atribútov, ako nastaviť a riešiť z množiny teória hľadiska.

Už ste niekedy stretávajú problém to? Sú si vedomí lepšie spôsoby, ako to vyriešiť? (heuristiky sú v poriadku, rovnako)

1

Najlepšiu odpoveď

1

Metóda optimalizácie výraz pre hodnotenie by mohlo byť rozdeliť pravidlá opakovane na atribút s najmenším počtom hodnôt. Po tejto expanzie by ste mohli zbierať hodnoty znova pre tých, ktorí majú tie isté, posledný odsek.

  1. Aby sa 2 skupiny, jeden pre pravidlá, ktoré prijíma A3 = 100 a jeden pre pravidlá, ktoré prijíma A3 = 200. Pravidlo sa môže skončiť v oboch skupinách. Potom upraviť pravidla v skupine tak, že to akceptuje iba hodnota pre skupinu, a nie druhý.

  2. Skupina tých skupín, opäť na hodnoty A1 pomocou rovnakej logiky.

By ste skončiť s rozšírenou prejavu, ako je tento:

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

V podstate sme stavbe strom s hodnotami, pre A3 v hĺbke 1 a hodnoty A1 v hĺbke 2 a hodnoty A2 v hĺbke 3. Ak existuje cesta z koreňa do listu pomocou hodnoty atribútov, potom platí pravidlo, fullfilled inak to nie je.

Potom môžete spojiť všetky uzly s rovnakým podstrom a tej istej materskej spoločnosti. Za to si môžete porovnať listy všetky uzly s rovnakým rodiča, a ak sa zhodujú, môžete zlúčiť uzlov. Potom prejdete o jednu úroveň nahor a porovnať uzly s rovnakým rodič, a tak ďalej.

Pre váš príklad by ste skončiť s týmto vyjadrením:

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)

Tento proces je veľmi jednoduchý a mohlo by tiež dôjsť ku skráteniu prejavu, nie len optimalizáciu pre hodnotenie. Nemusí byť dokonalý, ale mohlo by to byť spôsob, ako začať.

2021-11-22 20:45:00

V iných jazykoch

Táto stránka je v iných jazykoch

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