【发布时间】:2015-10-21 21:18:32
【问题描述】:
给定一个包含 6 个节点(A、B、C、D、E、F)的示例图
和有向边 [A,B], [B,A], [A,D], [D,A], [B,C], [C,B], [B,E], [E ,B]、[C,F]、[F,C]。边被“加权”,概率值浮动,介于 0 和 1 之间。
create class Node extends V;
create property Node.value string;
insert into Node (value) values ('A');
insert into Node (value) values ('B');
insert into Node (value) values ('C');
insert into Node (value) values ('D');
insert into Node (value) values ('E');
insert into Node (value) values ('F');
create class PE extends E;
create property PE.probability float;
create edge PE
from (select from Node where value = 'A')
to (select from Node where value = 'B')
set probability = 0.9;
create edge PE
from (select from Node where value = 'B')
to (select from Node where value = 'A')
set probability = 0.4;
create edge PE
from (select from Node where value = 'A')
to (select from Node where value = 'D')
set probability = 0.85;
create edge PE
from (select from Node where value = 'D')
to (select from Node where value = 'A')
set probability = 0.85;
create edge PE
from (select from Node where value = 'B')
to (select from Node where value = 'E')
set probability = 0.9;
create edge PE
from (select from Node where value = 'E')
to (select from Node where value = 'B')
set probability = 0.9;
create edge PE
from (select from Node where value = 'B')
to (select from Node where value = 'C')
set probability = 0.4;
create edge PE
from (select from Node where value = 'C')
to (select from Node where value = 'B')
set probability = 0.9;
create edge PE
from (select from Node where value = 'C')
to (select from Node where value = 'F')
set probability = 0.8;
create edge PE
from (select from Node where value = 'F')
to (select from Node where value = 'C')
set probability = 0.8;
遍历图非常简单,返回所有六个节点。
-- traverse from D
select from (
traverse out()
from (
select from Node where value = 'D'
)
);
但我真正想要的是仅遍历聚合路径概率 >= 0.5 (50%) 的节点。我认为以下内容很接近,但没有返回任何内容
select from (
traverse out()[p = $aggp]
from (
select from Node where value = 'D'
)
while p >= 0.5
)
let $aggp = eval($current.inE().probability * $parent.p);
我是否遗漏了一些非常明显的东西?我正在寻找一个只返回 A、B、D、E 的图遍历,因为边 B->C 分配了概率 0.4,因此路径 D->A->B->C = 0.85 * 0.9 * 0.4 = 0.3
【问题讨论】:
-
您的查询中的“p”是什么?
-
p 旨在成为遍历中导致当前节点的边上的概率的聚合。对于任何给定节点,它将是来自 $parent 的概率 p 乘以从父节点引入的边的概率。
标签: orientdb