VEYA yüklem optimizasyonu

0

Soru

3 Özniteliğe sahip bir varlığım olduğunu varsayalım: A1, A2, A3 öyle ki:

  1. A1 sadece değerlere sahip olabilir: 1, 2, 3
  2. A2 sadece değerlere sahip olabilir: 10, 20, 30, 40, 50
  3. A3 sadece değerlere sahip olabilir: 100, 200

Ve bir dizi kural, örneğin:

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

Sonra bir yüklem var: R = R1 or R2 or R3 En aza indirgemek istiyorum. Mesele şu ki A1=1 tüm olası varyasyonları kapsar A2 ve A3, bu yüzden ayrı bir maddeye getirebiliriz: R = (A1=1) or (the rest)

Değişkenleri şu şekilde bildirerek boole küçültme yöntemlerini denedim a=(A1=1), b=(A1=2), ..., k=(A3=200) ancak, işe yaramıyor gibi görünüyor, çünkü:

  1. boole iyileştiricisi, öznitelik A'nın tüm değerlerinin farkında değil
  2. boole değişkenleri bağımsız değildir Bu sorunları çözmeye çalışırken, ifade çok karmaşık hale geliyor ve ne QMC ne de Espresso bunu istenen şekilde en aza indiremiyor.

Ayrıca her bir eşlemeyi saklamaya çalıştım ve bunlardan birinin diğerinin tüm değerlerine sahip olması durumunda, onu bir toplama çapası olarak kullanın, sonra kaldırın ve tekrarlayın, ancak sonsuzluk ve oldukça fazla RAM alır.

Belki öznitelik değerlerini bir küme olarak temsil edebilir ve küme teorisi açısından ele alabiliriz.

Hiç böyle bir sorunla karşılaştın mı? Bunu çözmenin daha iyi yollarının farkında mısın? (sezgisel yöntemler de iyidir)

1

En iyi cevabı

1

Değerlendirme için ifadeyi en iyi duruma getirme yöntemi, öznitelikteki kuralları en az değerle art arda bölmek olabilir. Bu genişlemeden sonra, son maddede aynı değerlere sahip olanlar için değerleri tekrar toplayabilirsiniz.

  1. Biri A3 = 100'ü kabul eden kurallar için diğeri A3 = 200'ü kabul eden kurallar için olmak üzere 2 grup oluşturun. Bir kural her iki grupta da sonuçlanabilir. Bu yüzden sadece başka bir grup için bir değer kabul ettiği gruptaki kuralı değiştirin.

  2. Bu grupları aynı mantığı kullanarak A1 değerleri üzerinde yeniden gruplandırın.

Bunun gibi genişletilmiş bir ifadeyle sonuçlanırsınız:

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

Temel olarak, derinlik 1'de A3 değerleri ve derinlik 2'de A1 değerleri ve derinlik 3'te A2 değerleri olan bir ağaç inşa ediyoruz. Öznitelik değerlerini kullanarak kökten yaprağa giden bir yol varsa, kural doldurulur, aksi halde doldurulmaz.

Bundan sonra, tüm düğümleri aynı alt ağaç ve aynı üst ağaçla birleştirebilirsiniz. Bunun için tüm düğümlerin yapraklarını aynı üst öğeyle karşılaştırabilir ve eşleşirse düğümleri birleştirebilirsiniz. Bundan sonra bir seviye yukarı çıkıp düğümleri aynı üst öğeyle karşılaştırırsınız.

Örneğiniz için bu ifadeyle sonuçlanacaksınız:

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)

Bu süreç oldukça basittir ve ifadeyi kısaltabilir, sadece değerlendirme için optimize etmekle kalmaz. Mükemmel olmayabilir ama başlamak için bir yol olabilir.

2021-11-22 20:45:00

Diğer dillerde

Bu sayfa diğer dillerde

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