LUB optymalizacja predykatów

0

Pytanie

Załóżmy, że mam istotę z 3 atrybutów: A1, A2, A3 takie, że:

  1. A1 może mieć tylko wartości: 1, 2, 3
  2. A2 może mieć tylko wartości: 10, 20, 30, 40, 50
  3. A3 może mieć tylko wartości: 100, 200

I szereg zasad, na przykład:

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

To jest predykat: R = R1 or R2 or R3chciałbym ograniczyć do minimum. Rzecz w tym, że A1=1 obejmuje wszystkie możliwe opcje A2 i A3tak , że możemy zrobić to w osobnym punkcie: R = (A1=1) or (the rest)

Próbowałem булевы metody minimalizacji, ogłaszając zmienne jak a=(A1=1), b=(A1=2), ..., k=(A3=200)jednak to chyba nie działa, bo:

  1. logiczny optymalizator nie zna wszystkich wartości atrybutu A
  2. logiczne zmienne nie są niezależne Podczas próby rozwiązać te problemy wyrażenie staje się zbyt skomplikowane, ani QMC, ani Kawy nie mogą zminimalizować w pożądany sposób.

Próbowałem również przechowywać mapowania "każdy do każdego", i w przypadku, jeśli jeden z nich ma wszystkie wartości innego, użyj go jako kotwice agregacji, a następnie usuń go i spróbuj, ale to trwa wieczność i sporo pamięci ram.

Być może uda nam się przedstawić wartości atrybutów w postaci zestawu i rozważyć ich z punktu widzenia teorii mnogości.

Czy kiedykolwiek się spotkałem z takim problemem? Czy znacie najlepsze sposoby jej rozwiązania? (эвристика też w porządku)

1

Najlepsza odpowiedź

1

Metoda optymalizacji wyrażenia dla oceny może polegać na wielokrotnym podziale przepisów na atrybut z najmniejszą ilością wartości. Po tego rozszerzenia można ponownie zebrać wartości dla tych, którzy mają te same wartości w ostatnim zdaniu.

  1. Utwórz 2 grupy: jedną dla reguł, które biorą A3 = 100, i jedną dla reguł, które biorą A3 = 200. Zasada może okazać się w obu grupach. Następnie zmień regułę w grupie w taki sposób, aby ono brał wartość tylko dla grupy, a nie do innego.

  2. Pogrupuj te grupy ponownie według wartości A1, stosując tę samą logikę.

W rezultacie, można uzyskać rozszerzone wyrażenie, coś podobnego do tego:

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

W zasadzie budujemy drzewo z wartościami dla A3 na głębokości 1, wartości A1 na głębokości 2 i wartościami dla A2 na głębokości 3. Jeśli istnieje ścieżka od korzenia do końca, wykorzystujący wartości atrybutów, to zwykle wypełnione w całości, w przeciwnym razie to nie jest tak.

Po tym można połączyć wszystkie węzły z jednym i tym samym поддеревом i jednym i tym samym rodzicem. Do tego można porównać liście wszystkich węzłów z jednym i tym samym rodzicem, i jeśli są one zgodne, można połączyć węzły. Po tym, można wspiąć się na jeden poziom wyżej i porównujesz węzły z jednym i tym samym rodzicem i tak dalej.

Dla twojej przykład można by w końcu dostał to wyrażenie:

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)

Ten proces jest dość prosty i może również skrócić wyrażenie, a nie tylko zoptymalizować go do oceny. To może nie jest idealnie, ale to może być sposób, aby rozpocząć.

2021-11-22 20:45:00

W innych językach

Ta strona jest w innych językach

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