Форум программистов, компьютерный форум, киберфорум
Наши страницы
Искусственный интеллект
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
kinsik
0 / 0 / 0
Регистрация: 07.10.2016
Сообщений: 5
1

Проверка продукционны (логических) правил на противоречивость

07.10.2016, 18:11. Просмотров 590. Ответов 16

Всем привет, прошу помощи у собщества. Имеется база из нескольких сотен бизнес правил типа Если атрибут1 = A или Б или С и Атрибут 2 <> A1 или А2 и Атрибут 3 ... то T=T1. Как такие правила проверить и выявить противоречивость или вложеность(поглощение) одного правила другим. Искал но не нашел литературу или статьи по этому поводу. Очевидно что такая проблема всегда появлеется когда формируется база знаний. Посоветуйте как эту задачу обычно решают.
Заранее благодарен за советы.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2016, 18:11
Ответы с готовыми решениями:

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

Реализовать упрощение логических формул относительно правил преобразования
Реализовать упрощение логических формул относительно правил преобразования, заданных следующими...

Проверка букв логических дисков в путях к исходному каталогу и его копии
То есть ,мне нужно сделать проверку буквы логического диска исходного каталога и буквы логического...

Противоречивость обучающей выборки, работа с массивом
Здравствуйте! Помогите, пожалуйста, с такой задачей. Это реализация нахождения противоречивости...

Проверка правил в mod_rewrite с использованием if else
Здравствуйте! Скажите пожалуйста, существует ли возможность реализовать проверку правил в...

16
warhast
20 / 20 / 4
Регистрация: 02.02.2014
Сообщений: 77
07.10.2016, 19:51 2
drools?
0
kinsik
0 / 0 / 0
Регистрация: 07.10.2016
Сообщений: 5
08.10.2016, 10:30  [ТС] 3
Нет, но нечто похожее.
0
vchc
26 / 26 / 5
Регистрация: 27.10.2015
Сообщений: 77
08.10.2016, 23:36 4
Насколько я помню, в учебнике ИИ: Современный подход, большой раздел посвящён логическому выводу в логике первого порядка, с примерами и алгоритмом.
0
echs
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
09.10.2016, 18:39 5
kinsik
Вы не могли бы привести пример попроще,
где было бы и противоречие и поглощение?
0
Mikhaylo
202 / 189 / 24
Регистрация: 20.09.2014
Сообщений: 1,359
09.10.2016, 21:07 6
Цитата Сообщение от echs Посмотреть сообщение
противоречие и поглощение?
Когда не хочется кушать но надо - это и есть поглощение и противоречие, дорогушка.
0
kinsik
0 / 0 / 0
Регистрация: 07.10.2016
Сообщений: 5
10.10.2016, 12:03  [ТС] 7
echs,
Противоречие и поглощение это например так:
Правило 1:
IF
A1 = V1 OR V2
AND
A2 = V3 or V4
AND
A3 = V5
THEN
R=R1
Правило 2:
IF
A1 = V11 OR V2
AND
A2 = V31 or V4
THEN
R=R2

Правило 2 поглощает Правило 1 при А1 = V2, A2 = V4 по скольку является более "широким". Это частично можно решить приоретизацией, но не всегда.
Полное противоречие может быть если к правилу 2 добавить A3 = V5.
0
kinsik
0 / 0 / 0
Регистрация: 07.10.2016
Сообщений: 5
12.10.2016, 13:42  [ТС] 8
Есть идеи? Неужели никто не сталкивался с проблемой взаимного пересечения логических правил при создании баз знаний?
0
vchc
26 / 26 / 5
Регистрация: 27.10.2015
Сообщений: 77
12.10.2016, 13:50 9
Стюарт Рассел, Питер Норвиг "Искусственный интеллект: современный подход", часть 3 "Знания и рассуждения".

Что вам ещё нужно? Провести персональные образовательные курсы?
0
Mikhaylo
202 / 189 / 24
Регистрация: 20.09.2014
Сообщений: 1,359
12.10.2016, 16:07 10
Сотню правил можно перебрать экспоненциальным перебором и даже чуть оптимизировать перебор.
Каждое правило записать в какой-нибудь нормальной форме (ДНФ, КНФ, не помню уже), подвести под одну гребенку. Получить что-то типа матрицы/массива и в цикле перебирать.
Ваша задача содержит слишком мало исходных данных, поэтому только перебор!
0
kinsik
0 / 0 / 0
Регистрация: 07.10.2016
Сообщений: 5
12.10.2016, 16:42  [ТС] 11
vchc,
Вот только не надо умничать. Вы дали ссылку, спасибо я посмтрю.
Я считал, что задача часто встречаемая поскольку описанные мной правила довольно обыкновенные и наверняка должно быть множесто способов ее решить помимо полного перебора варинатов.
0
Shamil1
Модератор
2234 / 1522 / 346
Регистрация: 26.03.2015
Сообщений: 5,428
12.10.2016, 17:25 12
Цитата Сообщение от kinsik Посмотреть сообщение
наверняка должно быть множесто способов ее решить помимо полного перебора варинатов
Храните правила в ДНФ и в КНФ. В одной таблице список конъюнкций, в другой таблице список дизъюнкций. Эти таблицы связаны соотношением "многие ко многим" с таблицей правил.
При проверках используйте поиск по ключу.

Добавлено через 2 минуты
з.ы. Хотя, возможно, для обеих проверок одна и та же нормальная форма подойдёт.
0
ValeryLaptev
Эксперт С++
1053 / 832 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
16.10.2016, 10:07 13
kinsik, мало кто занимается ИИ на практике.
Как я понял, правила типа MISO. Это ж, как я понимаю, дизъюнкты Хорна, которые используются в Прологе.
Я б сначала выписал ВСЕ переменные.
А потом попробовал переписать все правила со ВСЕМ переменными.
Чтобы видеть, в каких правилах какие переменные используются.
А потом быф подумал о модели представления правил в памяти.
Ну, а дальше уже какой-то алгоритм обхода по этой модели.
0
Mikhaylo
202 / 189 / 24
Регистрация: 20.09.2014
Сообщений: 1,359
16.10.2016, 10:18 14
Да, на общий вопрос может быть только общий ответ - полный перебор.
0
echs
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
17.10.2016, 13:49 15
kinsik
Тут надо создавать интерпретатор логического выражения.
Чтобы не запутаться начните с простого. Возьмите три
операции NOT, AND, OR (отрицание, логическое умножение и
логическое сложение). Кроме этого надо ввести две константы
TRUE, FALSE и логические переменные (для начала хватит 26
букв латинского алфавита или как вариант a1, a2, a3,... )...
А также нужно ввести скобки.

Алгоритм вычисления логического выражения.

1. программа ищет первую закрывающуюся скобку
2. потом (от этой скобки, впереди нее) открывающуюся скобку.
3. между этими двумя скобками других скобок нет.
4. начинаем вычислять выражение в этой паре скобок
5. ищем операцию самого высокого приоритета (NOT)
6. Если она есть, то ее вычисляем
7. И вновь ищем эту операцию .... и вычисляем
8. и так до тех пор, пока эти операции не закончатся
9. Далее то же самое повторяется с операцией AND
10. И наконец операция OR...
11. Все вычислено. В скобках других операций нет.
12. эта пара скобок удаляется.
13. на их месте остается результат
14. все повторяется
15. ищется новая пара скобок и новые вычисления в ней
16. скобки кончились - это значит последний результат и
есть значение логического выражения.
0
ValeryLaptev
Эксперт С++
1053 / 832 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
17.10.2016, 15:08 16
echs, не надо этого ничего. Открываем книжку Банды чертырех по паттернам.
И читаем паттерн Интерпретатор.
Там как раз интерпретатор логических выражений в качестве примера описан.
Или можно у Шилдта содрать интерпретатор арифметических, написанный по методы рекурсивного спуска.
Надо только заменить сами операции - остальное годится в лоб!.

Но в данном случае сначала надо подумать о структурке данных, с помощью которой правила можно представить.
А потом уже думать о вычислении выражений.
0
echs
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
17.10.2016, 20:19 17
Уважаемый ValeryLaptev,
Вы не могли бы уточнить насчет интерпретатора Шилдта
(где это можно скачать?). Буду вам в высшей степени
признателен, пожалуйста, не сочтите за труд.
0
17.10.2016, 20:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2016, 20:19

Игра "Угадай число!" с проверкой на противоречивость ответов
В этой лабораторной работе требуется создать программу, которая угадывает число, загаданное...

Создание правил Wireshark на основе правил Snort
Вот такое у меня задание. Даны правила Snort, нужно написать правила для Wireshark на их основе. Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru