Приложение, над которым я работаю, является "конфигуратором". Это написано на С#, и я даже написал механизм правил, чтобы пойти с ним. Идея состоит в том, что существует куча пропозициональных логических операторов, и пользователь может сделать выбор. Основываясь на том, что они выбрали, некоторые другие предметы становятся обязательными или полностью недоступными.
Пропозициональные логические утверждения обычно имеют следующие формы:
A => ~X
ABC => ~(X+Y)
A+B => Q
A(~(B+C)) => ~Q A <=> B
Символы:
=> -- Implication
<=> -- Material Equivalence
~ -- Not
+ -- Or
Two letters side-by-side -- And
Я очень новичок в Prolog, но похоже, что он сможет обрабатывать все "правила обработки" для меня, позволяя мне выйти из моего текущего механизма правил (он работает, но это не так быстро или легко поддерживать, как мне хотелось бы).
Кроме того, все доступные опции попадают в иерархию. Например:
Outside
Color
Red
Blue
Green
Material
Wood
Metal
Если элемент на втором уровне (функция, например Цвет) подразумевается, то должен быть выбран элемент на третьем уровне (опция, например, красный). Аналогично, если мы знаем, что функция ложна, то все параметры под ней также являются ложными.
Уловка состоит в том, что каждый продукт имеет свой собственный набор правил. Является ли разумным подход к созданию базы знаний, содержащей эти операторы, в качестве предикатов, а затем во время запуска запускает все правила для продукта?
Как я могу себе представить, что это может сработать, нужно настроить идею компонентов, функций и опций. Затем установите отношения между ними (например, если функция является ложной, то все ее параметры являются ложными). Во время выполнения добавьте специальные правила продукта. Затем передайте все пользовательские настройки функции, получая в качестве вывода, какие элементы являются истинными, а какие - ложными.
Я не знаю всех последствий того, о чем я прошу, поскольку я просто попадал в Пролог, но я стараюсь избегать плохого пути и тратить много времени на этот процесс.
Некоторые вопросы, которые могут помочь настроить то, что я пытаюсь выяснить:
- Помогает ли этот звук?
- Я лаяю неправильное дерево?
- Есть ли недостатки или проблемы при попытке создать все эти правила во время выполнения?
- Есть ли лучшая система для такого рода вещей, что я мог бы сжать в приложение С# (точнее, Silverlight)?
- Существуют ли другие конкурирующие системы, которые я должен изучить?
- Есть ли у вас общий совет по поводу такого рода вещей?
Заранее благодарим за ваш совет!