0

我正在尝试使用 Protegé 来解决以下数学难题:

找到一个六位数字,其中第一位比第三 位大一第二比第四位小第五位比第三位小第六位比 第四位多SECONDTHIRD数字之和等于FIRST。所有数字的总和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 断言isOneMoreThanisOneLessThan

但我不确定两件事:

  1. 我如何知道哪些对象属性特征可以赋予我现有的对象属性?
  2. 我如何以这种方式对 Sum 规则进行[n2+n3]=n1建模[n1+n2+n3+n4+n5+n6]=30
4

1 回答 1

1

我不认为你可以让它与当前的 OWL 推理器一起工作,但你可以接近 SWRL 规则(尽管我仍然认为你不能完全让它工作)。这是我将采取的方法。

  1. 声明一个范围为xsd:int[≥0,≤9]的数据属性hasValue
  2. 将Digit类声明为hasValue 的子类,恰好为 1
    • 这意味着每个数字都有一个介于 0 和 9 之间的值,包括 0 和 9。
  3. 声明Digit个人,firstsecondthirdFourthFifthSixth
  4. 添加一组指定各种约束的 SWRL 规则:

    1. hasValue(第三个,?x) ∧ swrlb:add(?y,?x,?1) → hasValue(first,?y)
      • 第一个比第三个多一个
    2. hasValue(fourth,?x) ∧ swrlb:subtract(?y,?x,?1) → hasValue(second,?y)
      • 第二个比第四个小一
    3. 依此类推,也可能在另一个方向上添加规则(例如,对于 1.,您还会有 hasValue(first,?y) ∧ swrlb:subtract(?x,?y,?1) → hasValue(third ,?X)。

如果你真的很幸运,推理者可能会尝试为个人分配hasValue值,并会被迫根据 SWRL 规则进行正确分配。更有可能的是,您必须开始尝试一些值并让推理器排除不一致的值。

于 2015-02-02T20:55:01.437 回答