[英]How to label edges with probabilities in graph using Jung 2
我是Java和Jung的新手。 我正在編寫一個程序,需要在事件發生的邊緣上添加概率(即數據將從第一個節點流到另一個節點的事件的概率)。 我有點困惑,Max-Flow會幫我這個忙嗎,還是我需要使用其他選項,或者在Jung內沒有其他選擇,在這種情況下,我需要自己編寫嗎? 在這方面的任何幫助將不勝感激。
問候,瓦卡斯
您是否打算設置邊緣權重來表示某些事件的概率? 最大流量算法將使用您分配給每個邊的“容量”來查找從源頂點到宿頂點的最大流量的路徑。 您到底想在這里做什么?
我不太確定您的最終目標是什么,所以我會盡力幫助您。
首先可以通過定義自定義Edge和Edge Factory類來表示概率。 我所做的是:
0.進口:
import org.apache.commons.collections15.Factory;
1.添加自定義類。 他們自定義的邊緣類可能類似於:
public static class MyEdge { private int flow; private int capacity; private String name; private int eIndex; public MyEdge(String name, int eIndex) { this.name = name; this.eIndex = eIndex; } public int getCapacity() { return this.capacity; } public void setCapacity(int edgeCapacity) { this.capacity = edgeCapacity; } public int getFlow() { return this.flow; } public void setFlow(int edgeFlow) { this.flow = edgeFlow; } public String toString() { return this.name; } }
每次在畫布上以圖形方式繪制邊緣時,自定義邊緣工廠實際上就是創建邊緣的過程,它看起來像:
public static class MyEdgeFactory implements Factory { private static int defaultFlow = 0; private static int defaultCapacity = 0; private int edgeCount; private MyEdgeFactory() { } public MyEdge create() { String name = "E" + edgeCount; MyEdge e = new MyEdge(name, edgeCount); edgeCount++; e.setFlow(defaultFlow); e.setCapacity(defaultCapacity); return e; } }
2.告訴可視化查看器如何顯示邊緣標簽; 您需要將其添加到要創建圖形和VisualizationViewer對象(vv)的位置:
vv.getRenderContext().setEdgeLabelTransformer(new Transformer() { public String transform(MyEdge e) { return (e.toString() + " " + e.getFlow() + "/" + e.getCapacity()); } });
現在,每次創建邊時,其標簽的形式將為“ E0 0/0”,“ E1 0/0”,依此類推。
我將很快在我的博客上發布詳細的教程和代碼,因此,如果您要花大量時間在正在進行的任何項目上,那么您可以關注這個空間。
看一下您調用setEdgeLabelTransformer的方式,您需要將其傳遞給新的Transformer() ,就像我在編號為2的代碼段中所做的那樣。
當您傳遞新的ToStringLabeller()時 ,您是在告訴查看者使用邊緣對象的toString()方法進行標記。 您需要傳遞一個自定義的Transformer,只需更正您的代碼使其看起來像我的代碼就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.