Předpokládejme, že mám účetní jednotka s 3 atributy: A1, A2, A3 taková, že:
- A1 může mít jen hodnoty: 1, 2, 3
- A2 může mít jen hodnoty: 10, 20, 30, 40, 50
- A3 může mít jen hodnoty: 100, 200
A řada pravidel, napří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))
Pak tam je predikát: R = R1 or R2 or R3
, které bych rád, aby se minimalizovalo. Věc je, že A1=1
zahrnuje všechny možné varianty A2
a A3
,, takže vám můžeme přinést to na samostatný článek: R = (A1=1) or (the rest)
Snažil jsem boolean minimalizace metody tím, že deklaruje proměnné jako a=(A1=1), b=(A1=2), ..., k=(A3=200)
však se to nezdá do práce, protože:
- boolean optimizer nejsou známy všechny hodnoty atribut
- booleovské proměnné nejsou nezávislé Když se snaží tyto problémy řešit, výraz se stává příliš složité a ani šroubováky qmc, ani Espresso není schopen minimalizovat jej v požadovaném způsobem.
Také jsem se snažil, aby každý obchod na každé mapování a v případě, že jeden z nich má všechny hodnoty další, použít ji jako agregace kotva, a pak ji vyjměte a opakovat, ale to trvá věčnost a docela dost RAM.
Možná, že můžeme reprezentovat hodnoty atributu jako sadu a řešit to z teorie množin hlediska.
Už jste někdy čelí problém? Jsou si vědomi lepší způsoby, jak to vyřešit? (heuristiky jsou v pořádku, stejně)