[英]How can I generate 100 random number of nodes from the whole graph Gephi Toolkit?
我正在開發一個項目,正在使用Gephi工具包,需要從整個圖中生成100個隨機數的節點。
public void script() {
//Init a project - and therefore a workspace
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
pc.newProject();
Workspace workspace = pc.getCurrentWorkspace();
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();
PreviewModel model = Lookup.getDefault().lookup(PreviewController.class).getModel();
ImportController importController = Lookup.getDefault().lookup(ImportController.class);
FilterController filterController = Lookup.getDefault().lookup(FilterController.class);
AppearanceController appearanceController = Lookup.getDefault().lookup(AppearanceController.class);
AppearanceModel appearanceModel = appearanceController.getModel();
//Import file
Container container;
try {
// File file = new File(getClass().getResource("/org/gephi/toolkit/demos/polblogs.gml").toURI());
File file = new File(getClass().getResource("/org/gephi/toolkit/demos/Book3.csv").toURI());
container = importController.importFile(file);
container.getLoader().setEdgeDefault(EdgeDirectionDefault.DIRECTED); //Force DIRECTED
} catch (Exception ex) {
ex.printStackTrace();
return;
}
//Append imported data to GraphAPI
importController.process(container, new DefaultProcessor(), workspace);
//See if graph is well imported
DirectedGraph graph = graphModel.getDirectedGraph();
System.out.println("Nodes: " + graph.getNodeCount());
System.out.println("Edges: " + graph.getEdgeCount());
這段代碼返回節點和邊的數量..但是我找不到隨機提取節點子集的函數...我需要打印出節點的數量而不是所有節點的數量,因為我正在研究遺傳算法,需要產生初始人口...請提出任何想法。
有可能是一個更好的方式,但你可以使用NodeIterator
從返回graph.getNodes()
或使用graph.getNodes().toArray()
將返回節點數組。
然后,您可以使用Math.random
從那里提取100個隨機節點。
如果將結果添加到集合中,則可以確保獲得相同的節點不止一次。
沒有經過測試,但是像這樣...
static final int POPULATION_SIZE = 100;
public Set<Node> getInitialPopulation(Graph graph){
Node[] nodes = graph.getNodes().toArray();
Set<Node> initialPopulation = new HashSet<>();
if(nodes.length < POPULATION_SIZE){
for(Node node : nodes){
initialPopulation.add(node);
}
return initialPopulation;
}
while(initialPopulation.size() < POPULATION_SIZE){
initialPopulation.add(nodes[(int)(Math.random()*nodes.length)]);
}
return initialPopulation;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.