Механизм логического вывода для вычисления соответствия набору согласно внутренним правилам

У меня есть ряд объектов с атрибутами и набором правил, который при применении к набору объектов обеспечивает подмножество тех объектов. Для создания этого легче понять, я обеспечу конкретный пример.

Мои объекты являются людьми, и у каждого есть три атрибута: страна происхождения, пол и возрастная группа (все атрибуты дискретны). У меня есть набор правил, как "все штекеры из США", которые соответствуют подмножествам этого большего набора объектов.

Я ищу или существующий Java "механизм логического вывода" или что-то подобное, которое сможет отобразиться от правил до подмножества людей или совета относительно того, как пойти о создании моего собственного. Я читал на механизмах правила, но тот термин, кажется, исключительно используется для экспертных систем, которые воплощают бизнес-правила, и обычно не включает усовершенствованной формы вывода. Вот некоторые примеры более сложных сценариев, с которыми я должен иметь дело:

  1. Мне нужно соединение правил. Таким образом, при дарившем и, "включают все штекеры" и, "исключают всех граждан США в 10 - 20 возрастных группах", я только интересуюсь штекерами за пределами США и штекерами в США, которые являются вне 10 - 20 возрастных групп.

  2. Правила могут иметь различные приоритеты (явно определенный). Так высказывание правила "исключают все штекеры", переопределит высказывание правила, "включают все американские штекеры".

  3. Правила могут конфликтовать. Таким образом, я мог иметь и, "включают все штекеры" и, "исключают все штекеры", в этом случае, приоритеты должны будут уладить проблему.

  4. Правила симметричны. Так "включают все штекеры", эквивалентно для "исключения всех розеток".

  5. Правила (или скорее подмножества) могут иметь метаправила (явно определенный) связанный с ними. Эти метаправила должны будут быть применены в любом случае, что исходное правило применяется, или если подмножество достигнуто через вывод. Таким образом, если метаправило "исключает США", присоединен к правилу, "включают все штекеры", и я предоставляю механизму правило, "исключают все розетки", это должно смочь заключить, это "исключает все розетки" подмножество, эквивалентно, "включают все штекеры" подмножество, и как таковой применяются, "исключают американское" правило дополнительно.

Я могу, по всей вероятности, жить без объекта 5, но мне действительно нужны все другие упомянутые свойства. И мои правила и объекты хранятся в базе данных и могут быть обновлены на любом этапе, таким образом, я должен был бы инстанцировать 'механизма логического вывода' при необходимости и уничтожать его позже.

7
задан menjaraz 18 April 2012 в 07:20
поделиться

2 ответа

Для меня это очень похоже на логику описания и базы знаний. У вас есть концепции, роли и личности.

Если вы хотите развернуть свою проблему как рассуждение, основанное на логике описания, вы должны хорошо смоделировать свою проблему и выполнить для нее рассуждение.

Есть несколько свободных логистов, их список можно найти здесь .

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

Возможно, вам захочется особо взглянуть на KAON2 и DIG при использовании Java.

0
ответ дан 7 December 2019 в 12:15
поделиться

Я считаю, что вы можете использовать что-то вроде алгоритма ID3 для извлечения набора правил из начального состояния ваших объектов. Я не знаю конкретной реализации на Java, хотя Wikipedia указывает на различные реализации от Ruby до C (я не могу разместить более одной гиперссылки :-)), но это не сложный алгоритм для изучения.

Как только он построит дерево решений, которое может быть выражено в формате правил, вы можете использовать его, чтобы увидеть, к какому классу принадлежат ваши объекты: всем мужчинам из США, всем женщинам от 10 до 20, ... и когда кто-то обновляет ваши объекты в базе данных, вы можете перестроить дерево решений.

0
ответ дан 7 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: