Я проводил некоторые исследования механизмов правил, которые были бы более подходящими для работы во встроенной системе. Система будет собирать информацию с датчиков и в соответствии с этой информацией выполнять конкретные вызовы C / C ++. Примером может быть:
IF RainSensor.value > RainSensor.threshold
THEN call( GarageWindow::close())
Будучи GarageWindow классом C ++, живущим в двоичном файле, который ссылается на библиотеку движка правил.
Я не могу делать предположения о возможностях указанной встроенной системы. Требования к нему:
Мне нужно будет дать альтернативы в соответствии с его возможностями (будут определены в будущем), предположения:
1) Встроенная система ничего не поддерживает (без JVM, без Python и т. Д.):
КЛИПЫ как библиотека C или clipsmm как библиотека C ++. Оба могут использоваться в коммерческих приложениях (GPL для clipsmm).
преимущества: Открытый исходный код. Очень хорошо проверено / задокументировано. Портативный и может работать на малой памяти. Можно вызвать функции C или C ++ из его раздела RHS. Скорее всего, движок правил должен будет взаимодействовать с программным обеспечением C или C ++.
Недостатки: Это не потокобезопасно. Поддерживает только прямую цепочку.
2) Система поддерживает Python:
PyClips:
Интерфейс Python для CLIPS. Функциональность остается такой же, как и в предыдущем случае. Использование этого будет полезно только в том случае, если вызовы Python должны выполняться в разделе RHS. Какие преимущества / недостатки я пропускаю?
3) Система поддерживает JVM:
Джесс:
преимущества: Хорошая интеграция с объектами Java. CLIPS-подобный язык сценариев. Прямая и обратная цепочка. Автоматическое прослушивание объектов Java для изменения слотов.
НедостаткиЛицензированный. Может определять только новые классы во время компиляции.
Drools:
преимущества: Открытый исходный код. Документально. Интеграция Java Прямая и обратная цепочка.
Недостатки: Он больше предназначен для работы в Интернете (это мое впечатление).
В чем преимущество Drools против Jess во встроенной среде?
Оба могут добавлять новые классы только во время компиляции. Клипы могут во время выполнения. С другой стороны, если код C ++, который обновляет экземпляры клипов, устарел, любой новый класс, созданный непосредственно в CLIPS, не будет сопоставлен ни с каким другим классом в вызывающем коде C ++. Следовательно, недостаток перекомпиляции параметров Java не такой.
Есть ли какой-нибудь другой подходящий движок для встраиваемых систем, который мне совершенно не хватает?
Задача ещё не решена.
Других решений пока нет …