簡體   English   中英

如何從整個圖形Gephi Toolkit中生成100個隨機數的節點?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM