我想使用GRAKN对有关自动驾驶汽车的知识进行建模。在一个示例中,我想得出必须向自动驾驶汽车建议的速度。我知道汽车的最大速度,我知道道路的速度限制,如果道路上的速度限制没有超过汽车的最大速度,我想建议汽车驾驶允许的速度限制。最大速度,限速和建议速度是汽车或道路的属性。在我的示例中,我想将“速度限制”的值分配为“建议速度”的值。在GRAKN中有可能吗?
以下是我尝试过的。我知道这是不正确的,但是我希望解决方案看起来像这样,而不是分配值而不是整个属性。
define
max-speed sub attribute, datatype double;
proposed-speed sub attribute, datatype double;
speed-limit sub attribute, datatype double;
drives-on sub relation,
relates vehicle-role,
relates type-of-road;
vehicle sub entity,
has max-speed,
has proposed-speed,
plays vehicle-role;
car sub vehicle;
road-type sub entity,
has speed-limit,
plays type-of-road;
highway sub road-type;
proposed-speed-by-road-type sub rule,
when {
$x isa vehicle, has max-speed $s;
$y isa road-type, has speed-limit $z;
($x,$y) isa drives-on;
$z <= $s;
}, then {
$x has proposed-speed $z;
};
proposed-speed-by-car-max sub rule,
when {
$x isa vehicle, has max-speed $s;
$y isa road-type, has speed-limit $z;
($x,$y) isa drives-on;
$z > $s;
}, then {
$x has proposed-speed $s;
};
insert
$owncar isa car, has max-speed 190;
$highway isa highway, has speed-limit 130;
(vehicle-role: $owncar, type-of-road: $highway) isa drives-on;`
现在,如果我查询以下内容:match $x id V82016, has proposed-speed $z; get;
我得到:
grakn.core.server.exception.TransactionException-The type [car] is not allowed to have an attribute of type [speed-limit]. Please check server logs for the stack trace.
我明白了,因为这是不正确的。因此,我想提取“速度限制”的值并将其分配给建议的速度。这可能吗?
答案 0 :(得分:0)
这是可能的。您的例子是正确的。目前唯一的条件是各个属性数据类型相同,并且允许这些类型具有它们。在幕后,将创建一个新属性,并复制值。我们计划将用例扩展到涵盖兼容的数据类型对。
它在当前的master分支上按预期工作。通常,它也应与1.5.7一起使用,但是1.5.7在计算规则等式方面存在问题,可能会导致错误的结果。该问题在1.5.8版本中应该没有。
希望有帮助!