Алгоритм обнаружения избыточных правил

Я ищу алгоритм для обнаружения избыточных правил.

Rules имеют фиксированное количество входных параметров, и каждый параметр имеет отдельный домен.

Учитывайте три параметра правила: Цвет, Материал и Размер:

Цве: Красный, зеленый, синий Материал: Дерево, Стекло, АлюминийРазме: Маленький Средний Большо

равило @Each может соответствовать нескольким значениям параметра или совпадать с любым значением.первы Правило, которое соответствуетвсначения параметров @ выбраны. Нетотрицани правила, но домен является фиксированным, поэтому можно добавить отрицание, добавив все остальные.

       +--------------------------------------------------++-----------------
       |                   Rule Parameters                || Rule Action
       +----------------+------------------+--------------++-----------------
       | Color          | Material         | Size         || ==> Price
       +----------------+------------------+--------------++-----------------
Rule 1 | Red            | Wood, Glass      | Large        || $100
Rule 2 | Red            | Aluminium        | Large        || $200
Rule 3 | Blue or Green  | Wood             | Medium       || $300
Rule 4 | Red            | ** Any **        | Large        || $400  <== Redundant
Rule 5 | ** Any **      | ** Any **        | ** Any **    || $500

Правило 4 является избыточным из-за комбинации Правил 1 и 2. Избыточное правило - это правило, которое будетникогд быть сопоставленным из-за (комбинации) определенных правилд это правило. Действие правила не оценивается при проверке избыточности.

Как это реализовать Эффективно (на Java)? Он должен поддерживать 1000 правил с 10 параметрами по 100 значений в каждом. Правила, параметры и значения параметров считываются из базы данных (т. Е. Они не могут быть жестко запрограммированы).

Проблема с Эффективность это то, что есть 100 ^ 10 комбинаций входных параметров (каждый параметр имеет домен из 100 значений). Алгоритм необходим в графическом редакторе правил для поддержки пользователя, создающего правила. Он должен найти все избыточные правила в течение нескольких секунд.

GitHub

Я создал хранилище для тестирования предлагаемых решений:https: //github.com/qlp/redundant-rule В настоящее время только реализация BDD, которая не справляется с проблемой такого размера. Может быть, моя реализация BDD может быть улучшена?

Ответы на вопрос(7)

Ваш ответ на вопрос