Моделирование суммы 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

Но я не уверен в двух вещах:

  1. Как я могу узнать, какие характеристики свойств объекта дают мои существующие свойства объекта?
  2. как мне смоделировать правила сумм таким образом [n2+n3]=n1 а также [n1+n2+n3+n4+n5+n6]=30?

1 ответ

Я не думаю, что вы можете заставить это работать с текущими аргументами OWL, но вы можете приблизиться к правилам SWRL (хотя я все еще думаю, что вы не можете заставить его работать). Вот подход, который я бы выбрал.

  1. Объявите свойство данных hasValue с диапазоном xsd: int [≥0, ≤9].
  2. Объявите класс Digit как подкласс hasValue точно 1
    • Это означает, что каждая цифра имеет значение от 0 до 9 включительно.
  3. Объявите цифры лиц, первый, второй, третий, четвертый, пятый и шестой.
  4. Добавьте несколько правил SWRL, которые определяют различные ограничения:

    1. hasValue(третье,?x) ∧ swrlb:add(?y,?x,?1) → hasValue(первое,?y)
      • первый на треть больше, чем третий
    2. hasValue(четвертый,? x) ∧ swrlb: вычесть (? y,? x,? 1) → hasValue(второй,?y)
      • второй на четвертый меньше
    3. и так далее, возможно добавляя правила и в другом направлении (например, для 1. у вас также будет hasValue(first,?y) ∧ swrlb:subtract(?x,?y,?1) → hasValue(третий,? Икс).

Если вам действительно повезет, рассудитель может попытаться назначить значения hasValue для отдельных лиц и будет вынужден выполнить правильное назначение на основе правил SWRL. Вероятнее всего, вам придется попробовать некоторые значения и позволить рассудителю исключить противоречивые значения.

Другие вопросы по тегам