关系学习:这个Prolog输出说什么?

时间:2017-07-09 14:06:45

标签: prolog output

我需要在prolog数据集中找到关系。我有不同类型的列车具有不同的功能,例如Train1:

has_car(rel_east1,car_11).
has_car(rel_east1,car_12).
has_car(rel_east1,car_13).

infront(car_11,car_12).
infront(car_12,car_13).

size(car_11,long).
size(car_12,long).
size(car_13,short).

shape(car_11,hexagon).
shape(car_12,rectangle).
shape(car_13,hexagon).

load(car_11,rectangle).
load(car_12,circle).
load(car_13,triangle).
我有十种不同的火车。现在我使用Metagol算法,它将学习不同列车内的不同关系。结果我得到一个包含不同子句的列表。这是我的问题:我不理解条款之间的归纳步骤。例如:

relational(A):-has_car(A,B),relational_1(B).
relational_1(A):-relational_2(A,rectangle).
relational_2(A,B):-relational_3(A),shape(A,B).
relational_3(A):-infront(A,B),relational_4(B).
relational_4(A):-load(A,triangle).

我唯一知道的是,整个条款都说:"有一辆火车,其中包含一个形状为矩形的汽车。这辆车在另一辆包含三角形的汽车前面。" 但有人可以向我解释代码吗?线路? 例如,我不明白如何阅读第二行:"如果与A有关系1,那么A和矩形之间也存在关系2"?

1 个答案:

答案 0 :(得分:1)

我不是百分百肯定,但我认为关系_x谓词,是发明的关系(谓词)'通过metagol为您的学习任务。 由于命名发明谓词是一项艰巨的任务(对此没有很好的解决方案),您可以获得这些类型的名称。

例如,如果你使用了`kinship1'在这里:https://github.com/metagol/metagol

?- [kinship1].
Warning: /media/sam/9bb6ab40-5f17-481e-aba8-7bd9e4e05d66/home/sam/Documents/Prolog_practise/metagol/metagol.pl:250:
    Local definition of metagol:list_to_set/2 overrides weak import from lists
true.

    ?- a.
    % learning grandparent/2
    % clauses: 1
    % clauses: 2
    % clauses: 3
    grandparent_1(A,B):-father(A,B).
    grandparent_1(A,B):-mother(A,B).
    grandparent(A,B):-grandparent_1(A,C),grandparent_1(C,B).
    true .

通过学习grandparent/2来学习grandparent_1/2关系。我们和人类会称之为parent/2

所以relational_4(A):-load(A,triangle).你可以打电话给车载三角形的负载' 。然后relational_3(A):-infront(A,B),relational_4(B).将车载在一辆载有三角形负载的汽车前面。等

relational_4(A):-load(A,triangle).

如果对象A加载了三角形,则A为relational_4 要么 有一辆车的载荷为三角形。

relational_3(A):-infront(A,B),relational_4(B).

如果对象A在对象B的前面并且B是relational_4则A是relational_3 要么 轿厢A位于轿厢B的前方,轿厢B的负载为三角形

relational_2(A,B):-relational_3(A),shape(A,B).

如果A是relational_3并且具有形状B则A关系为_2 B. 要么 汽车A是另一辆装有三角形车的汽车,汽车A的形状不规则。

relational_1(A):-relational_2(A,rectangle).

如果对象A是relational_2矩形,则A是relational_1 要么 有一辆车有一个长方形的形状,它是一辆载有三角形负载的汽车的前面。

relational(A):-has_car(A,B),relational_1(B).

如果对象A有汽车B而B是关系_1,那么关系为A.

有一辆有车的火车,这辆车是一个长方形的形状,它是一辆三角载重的汽车前面