Как случайным образом выбрать вершину или ребро из графа jGraphT

Я создал график с набором ребер, которые у меня есть (4000 тыс. ребер и 4 тыс. узлов). Теперь я хочу взять 10% ребер из корпуса, чтобы создать набор обучающих и тестовых данных.

Я хочу выбрать ребро случайным образом, проверить, есть ли у вершин этого ребра ребро со случайной вершиной. Если это так, я удалю это ребро на графике, а также запишу это ребро в тестовый файл. Так что позже я предскажу края тестового файла, используя некоторую функцию подобия.

Логика такова, что я пытаюсь предсказать A->C, учитывая A->B и B->C.

Теперь проблема в том, что я не могу найти способ случайного выбора ребра и случайной вершины в JGraphT. Мои имена вершин представляют собой строки со случайными числами.

У кого-нибудь есть решение для этого?


person TechCrunch    schedule 23.04.2013    source источник


Ответы (1)


Существует возможность. Сначала посмотрите пример:

DirectedGraph<String, DefaultEdge> graph = new DefaultDirectedGraph<String, DefaultEdge>(DefaultEdge.class);
Object[] vertexSet = graph.vertexSet().toArray();
Object[] edgeSet = graph.edgeSet().toArray();
String someRndNode = (String) vertexSet [ getSomeRandomNumberBetween(0, vertexSet.length)];
DefaultEdge someRndEdge = (DefaultEdge) edgeSet [ getSomeRandomNumberBetween(0, edgeSet.length)];

Вы просто получаете набор ребер и узлов вашего графа. Определить случайное число на основе массивов. Достаньте из него то, что вам нужно.

person Matthias Kricke    schedule 26.04.2013