Ignore:
Timestamp:
Oct 6, 2010, 4:02:40 PM (14 years ago)
Author:
gnappo
Message:

Inserita gestione pannelli per la visualizzazione grafi.

Location:
src/main/java/weka/clusterers/forMetisMQI
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/weka/clusterers/forMetisMQI/GraphAlgorithms.java

    r23 r24  
    1111import weka.clusterers.forMetisMQI.graph.UndirectedGraph;
    1212import weka.clusterers.forMetisMQI.util.CoarserGraphElement;
     13import weka.clusterers.forMetisMQI.util.Configuration;
    1314import weka.clusterers.forMetisMQI.util.GraphsFrame;
    1415import weka.clusterers.forMetisMQI.util.Util;
     
    6869                if (stack.size() > 0) {
    6970                        partition = KL(stack.peek().getContracted());
     71                        if(Configuration.instance().getVerboseLevel() > 1) {
     72                                GraphsFrame.instance().addPanel(Util.panelContractedGraph(stack.peek()));
     73                                GraphsFrame.instance().addPanel(Util.panelContractedGraph(stack.peek(),partition.getSmallerSubgraph().createInducedSubgraph().getVertices()));
     74                        }
    7075                        partition = Uncoarse.uncoarse(stack, partition);
    7176                }
     
    8186         * @param sizeFinerGraph
    8287         */
    83         static public Set<Set<Node>> metisMqi(UndirectedGraph g, int numberOfCluster, int sizeFinerGraph, boolean randomBisection) {
    84                 GraphsFrame gf = new GraphsFrame("Prova");
     88        static public Set<Set<Node>> metisMqi(UndirectedGraph g) {
     89                int numberOfCluster = Configuration.instance().getNumberOfClusters();
     90                boolean randomBisection = Configuration.instance().isRandomBisection();
     91                int sizeFinerGraph = Configuration.instance().getSizeFinerGraph();
     92                int verboseLevel = Configuration.instance().getVerboseLevel();
     93                GraphsFrame gf = GraphsFrame.instance();
    8594                System.out.println("Vertex count: " + g.getVertexCount());
    8695                System.out.println("Edges count: " + g.getEdgeCount());
    87                 Iterator<Node> iNodes = g.getVertices().iterator();
    88                 int degreeCounter = 0;
    89                 while(iNodes.hasNext()) {
    90                         Node node = iNodes.next();
    91                         if(g.degree(node) == 1) {
    92                                 degreeCounter++;
    93                         }
    94                 }
    9596                Set<Set<Node>> clusters = new HashSet<Set<Node>>();
    9697                UndirectedGraph gclone = g.clone();
    97                 gf.addPanel(Util.panelGraph(gclone));
    9898                for (int i = 0; i < numberOfCluster; i++) {
    9999                        Bisection bisection = null;
     100                        if(verboseLevel > 1)
     101                                gf.addPanel(Util.panelGraph(g.clone()));
    100102                        if(!randomBisection)
    101103                                bisection = metis(g,sizeFinerGraph);
    102104                        else
    103105                                bisection = new Bisection(g);
     106                       
     107                        if(verboseLevel > 1)
     108                                gf.addPanel(Util.panelCluster(g.clone(),bisection.getSmallerSubgraph().createInducedSubgraph().getVertices()));
     109                       
    104110                        System.out.print("Partizione iniziale: ");
    105111                        System.out.print("V1: " + bisection.getSubgraph().getVertexCount());
     
    127133                        }
    128134                }
    129                 gf.addPanel(Util.panelClusters(gclone, clusters));
     135                if(verboseLevel > 0)
     136                        gf.addPanel(Util.panelClusters(gclone, clusters));
    130137                gf.setVisible(true);
    131138                return clusters;
  • src/main/java/weka/clusterers/forMetisMQI/MQI.java

    r22 r24  
    1919import edu.uci.ics.jung.graph.DirectedGraph;
    2020import edu.uci.ics.jung.graph.DirectedSparseGraph;
     21import weka.clusterers.forMetisMQI.util.Configuration;
     22import weka.clusterers.forMetisMQI.util.GraphsFrame;
    2123import weka.clusterers.forMetisMQI.util.Util;
    2224
     
    199201                        }
    200202                        alg.evaluate();
    201 //                      Util.viewFlowGraph(directedGraph, edgeFlowMap);
     203                        if(Configuration.instance().getVerboseLevel() > 1)
     204                                GraphsFrame.instance().addPanel(Util.panelFlowGraph(directedGraph, edgeFlowMap));
    202205                        System.out.println("MAX FLOW: " + alg.getMaxFlow() + " THRESHOLD: "
    203206                                        + maxFlowThreshold);
     
    210213                                        bisection.getGraph(), cluster));
    211214//                              System.out.println("REFINED BISECTION: " + bisection.toString());
     215                                if(Configuration.instance().getVerboseLevel() > 1)
     216                                        GraphsFrame.instance().addPanel(Util.panelCluster(bisection.getGraph(), cluster));
    212217                        } else
    213218                                finished = true;
  • src/main/java/weka/clusterers/forMetisMQI/util/GraphsFrame.java

    r23 r24  
    1616         */
    1717        private static final long serialVersionUID = 1L;
     18       
     19        private static GraphsFrame instance = null;
    1820
    1921        private int numberOfPanels = 0;
     
    2325        private JButton nextButton = null;
    2426        private JButton prevButton = null;
     27       
     28        public static GraphsFrame instance() {
     29                if(instance == null) {
     30                        instance = new GraphsFrame("Graphs Frame");
     31                }
     32                return instance;
     33        }
     34       
     35        private GraphsFrame() {
     36               
     37        }
    2538
    26         public GraphsFrame(String name) {
     39        private GraphsFrame(String name) {
    2740                super(name);
    2841                setBounds(new Rectangle(800, 700));
     42                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     43
    2944
    3045                graphPanel = new JPanel();
  • src/main/java/weka/clusterers/forMetisMQI/util/Util.java

    r23 r24  
    44import java.awt.Dimension;
    55import java.awt.Paint;
     6import java.util.Collection;
    67import java.util.HashMap;
    78import java.util.HashSet;
     
    910import java.util.Map;
    1011import java.util.Set;
     12import java.util.Map.Entry;
    1113
    12 import javax.swing.JFrame;
    1314import javax.swing.JPanel;
    1415
     
    2021import weka.clusterers.forMetisMQI.graph.UndirectedGraph;
    2122import edu.uci.ics.jung.algorithms.layout.FRLayout;
     23import edu.uci.ics.jung.algorithms.layout.KKLayout;
    2224import edu.uci.ics.jung.algorithms.layout.Layout;
    2325import edu.uci.ics.jung.graph.Graph;
     
    2729public class Util {
    2830       
    29         public static JPanel panelCluster(Graph<Node, Edge> g, Set<Node> cluster) {
     31        public static JPanel panelCluster(Graph<Node, Edge> g, Collection<Node> cluster) {
     32                Set<Node> setNodes = new HashSet<Node>();
     33                setNodes.addAll(cluster);
    3034                Set<Set<Node>> clusters = new HashSet<Set<Node>>();
    31                 clusters.add(cluster);
     35                clusters.add(setNodes);
    3236                return panelClusters(g, clusters);
    3337        }
    3438       
     39        public static JPanel panelClusters(Graph<Node, Edge> g, Set<Set<Node>> clusters) {
     40                return panelClusters(g,clusters,new ToStringLabeller<Node>());
     41        }
    3542       
    36         public static JPanel panelClusters(Graph<Node, Edge> g, Set<Set<Node>> clusters) {
    37                 Layout<Node, Edge> layout = new FRLayout<Node, Edge>(g);
     43        public static JPanel panelClusters(Graph<Node, Edge> g, Set<Set<Node>> clusters, Transformer<Node,String> transformer) {
     44                Layout<Node, Edge> layout = new KKLayout<Node, Edge>(g);
    3845                layout.setSize(new Dimension(800, 600)); // sets the initial size of the space
    3946                // The BasicVisualizationServer<V,E> is parameterized by the edge types
     
    8087                vv.setPreferredSize(new Dimension(800, 600)); // Sets the viewing area
    8188                                                                                                                // size
    82                 vv.getRenderContext().setVertexLabelTransformer(
    83                                 new ToStringLabeller<Node>());
    84                 vv.getRenderContext().setEdgeLabelTransformer(
    85                                 new ToStringLabeller<Edge>());
     89                vv.getRenderContext().setVertexLabelTransformer(transformer);
    8690                vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
    8791                return vv;
     
    8993       
    9094        public static JPanel panelGraph(Graph<Node, Edge> g){
    91                 Layout<Node, Edge> layout = new FRLayout<Node, Edge>(g);
     95                Layout<Node, Edge> layout = new KKLayout<Node, Edge>(g);
    9296                layout.setSize(new Dimension(800,600)); // sets the initial size of the space
    9397                // The BasicVisualizationServer<V,E> is parameterized by the edge types
     
    96100                vv.setPreferredSize(new Dimension(800,600)); //Sets the viewing area size
    97101                vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<Node>());
    98                 vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller<Edge>());
     102                vv.getRenderContext().setEdgeLabelTransformer(
     103                                new Transformer<Edge, String>() {
     104                                        public String transform(Edge e) {
     105                                                return "";
     106                                        }
     107                                });
    99108                return vv;
    100109        }
     
    120129                return vv;
    121130        }
     131       
     132        static public JPanel panelContractedGraph(CoarserGraphElement cge, Collection<Node> cluster) {
     133                Set<Node> setNodes = new HashSet<Node>();
     134                setNodes.addAll(cluster);
     135                Set<Set<Node>> clusters = new HashSet<Set<Node>>();
     136                clusters.add(setNodes);
     137                return panelClusters(cge.getContracted(), clusters, new ContractedVertexTransformer(cge));
     138        }
     139       
     140        static public JPanel panelContractedGraph(CoarserGraphElement cge) {
     141                Layout<Node, Edge> layout = new KKLayout<Node, Edge>(cge.getContracted());
     142                layout.setSize(new Dimension(800,600)); // sets the initial size of the space
     143                // The BasicVisualizationServer<V,E> is parameterized by the edge types
     144                BasicVisualizationServer<Node,Edge> vv =
     145                new BasicVisualizationServer<Node,Edge>(layout);
     146                vv.setPreferredSize(new Dimension(800,600)); //Sets the viewing area size
     147                vv.getRenderContext().setVertexLabelTransformer(new ContractedVertexTransformer(cge));
     148                return vv;
     149        }
     150
    122151       
    123152        /**
Note: See TracChangeset for help on using the changeset viewer.