Моделирование суммы 2 или более лиц в Protege
Я пытаюсь использовать Protegé для решения следующей математической загадки:
Найдите номер шестой цифры, в которой первая цифра на одну единицу больше, чем третья, вторая цифра на одну единицу меньше, чем четвертая, пятая цифра на одну единицу меньше, чем третья, а шестая цифра на одну единицу больше, чем четвертая. Сумма ВТОРОЙ и ТРЕТЬЕЙ цифр равна ПЕРВОЙ. Сумма всех цифр 30.
Это примерно соответствует следующим правилам:
Rules
------
n1 >(+1) n3
n2 <(-1) n4
n5 <(-1) n3
n6 >(+1) n4
n2 + n3 = n1
nSUM = 30
Итак, в Protegé я создал следующие онтологические правила:
- учебный класс:
Number
, - свойство объекта:
isOneMoreThan
, персонаж: не уверен, домен и диапазон:Number
- свойство объекта:
isOneLessThan
, персонаж: не уверен, домен и диапазон:Number
- физические лица:
n1
,n2
,n3
,n4
,n5
,n6
(каждый из которых имеет назначенное obj prop утверждениеisOneMoreThan
или жеisOneLessThan
Но я не уверен в двух вещах:
- Как я могу узнать, какие характеристики свойств объекта дают мои существующие свойства объекта?
- как мне смоделировать правила сумм таким образом
[n2+n3]=n1
а также[n1+n2+n3+n4+n5+n6]=30
?
1 ответ
Я не думаю, что вы можете заставить это работать с текущими аргументами OWL, но вы можете приблизиться к правилам SWRL (хотя я все еще думаю, что вы не можете заставить его работать). Вот подход, который я бы выбрал.
- Объявите свойство данных hasValue с диапазоном xsd: int [≥0, ≤9].
- Объявите класс Digit как подкласс hasValue точно 1
- Это означает, что каждая цифра имеет значение от 0 до 9 включительно.
- Объявите цифры лиц, первый, второй, третий, четвертый, пятый и шестой.
Добавьте несколько правил SWRL, которые определяют различные ограничения:
- hasValue(третье,?x) ∧ swrlb:add(?y,?x,?1) → hasValue(первое,?y)
- первый на треть больше, чем третий
- hasValue(четвертый,? x) ∧ swrlb: вычесть (? y,? x,? 1) → hasValue(второй,?y)
- второй на четвертый меньше
- и так далее, возможно добавляя правила и в другом направлении (например, для 1. у вас также будет hasValue(first,?y) ∧ swrlb:subtract(?x,?y,?1) → hasValue(третий,? Икс).
- hasValue(третье,?x) ∧ swrlb:add(?y,?x,?1) → hasValue(первое,?y)
Если вам действительно повезет, рассудитель может попытаться назначить значения hasValue для отдельных лиц и будет вынужден выполнить правильное назначение на основе правил SWRL. Вероятнее всего, вам придется попробовать некоторые значения и позволить рассудителю исключить противоречивые значения.