У меня есть набор объектов с атрибутами и набор правил, которые при применении к набору объектов предоставляют подмножество этих объектов.Чтобы это было легче понять, я приведу конкретный пример.
Моими объектами являются люди, и у каждого есть три атрибута: страна происхождения, пол и возрастная группа (все атрибуты являются дискретными).У меня есть несколько правил, таких как «все мужчины из США», которые соответствуют подмножествам этого большего набора объектов.
Я ищу либо существующий Java «механизм вывода», либо что-то подобное,который сможет сопоставить правила с подмножеством людей, или совет о том, как создать свое собственное.Я ознакомился с механизмами правил, но этот термин, по-видимому, используется исключительно для экспертных систем, которые экстернализуют бизнес-правила и, как правило, не включают каких-либо сложных форм вывода.Вот несколько примеров более сложных сценариев, с которыми мне приходится иметь дело:
Мне нужно сочетание правил.Поэтому, когда представлены оба слова «включают всех мужчин» и «исключают всех лиц США в возрастной группе 10–20 лет», «меня интересуют только мужчины за пределами США и мужчины в США, которые находятся за пределами 10 -20 возрастная группа.
Правила могут иметь разные приоритеты (четко определены).Поэтому правило «исключить всех мужчин» переопределяет правило «включает всех мужчин США».
Правила могут противоречить друг другу.Таким образом, я мог бы использовать как «включить всех мужчин», так и «исключить всех мужчин», и в этом случае приоритеты должны будут решить проблему.
Правила симметричны.Таким образом, «включить всех мужчин» эквивалентно «исключить всех женщин».
Правила (или, скорее, подмножества) могут иметь связанные с ними мета-правила (явно определенные).Эти мета-правила должны будут применяться в любом случае, когда применяется исходное правило, или если подмножество достигается с помощью логического вывода.Таким образом, если к правилу «включай всех мужчин» прикреплено мета-правило «исключить США», и я предоставлю движку правило «исключить всех женщин», то оно должно иметь возможность сделать вывод, что подмножество «исключить всех женщин»эквивалентно подмножеству «включить всех мужчин» и, как таковое, дополнительно применять правило «исключить США».
Я, по всей вероятности, могу жить без пункта 5, но мне нужны вседругие упомянутые свойства.Мои правила и объекты хранятся в базе данных и могут быть обновлены на любом этапе, поэтому мне нужно будет при необходимости создать экземпляр «механизма вывода» и впоследствии уничтожить его.