2016-05-15 17 views
0

我正在开发一个项目,我正在使用Gephi toolkit.I需要从整个图中生成100个随机数的节点。如何从整个图形Gephi Toolkit中生成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()); 

此代码返回节点的数量和edges..but我找不到一个函数来随机抽取节点的子集。我需要打印出节点并非所有节点因为我的号码米工作在遗传算法,我需要生成最初的人口......请任何想法。

回答

0

有可能是一个更好的方式,但你可以使用NodeIteratorgraph.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; 
} 
+0

谢谢you..but你能帮助我在编码这些行吗? – user2014

+0

非常感谢,但它不起作用。代码不识别 user2014

+0

它是'java.util'包的一部分,你需要导入它 – sjc