2017-07-09 72 views
0

我需要在序言數據集中找到關係。我有不同種類的火車有不同的功能,例如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

我不是100%確定的,但我認爲relational_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_1/2grandparent/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是盈具有負載,其爲三角形

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

轎廂B的如果A是關係_3並且具有形狀B,則A關係_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.

有一列火車有一輛車,那輛車是一個長方形的形狀,它是一個有三角形負載的汽車的前面