Changeset 24 for src


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
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/weka/clusterers/MetisMQIClusterer.java

    r22 r24  
    1111import weka.clusterers.forMetisMQI.graph.Node;
    1212import weka.clusterers.forMetisMQI.graph.UndirectedGraph;
     13import weka.clusterers.forMetisMQI.util.Configuration;
    1314import weka.core.Attribute;
    1415import weka.core.Capabilities;
     
    2324                OptionHandler {
    2425
    25         private int numberOfClusters = 2;
    26 
    27         private int sizeFinerGraph = 10;
    28 
    2926        /**
    3027         * It maps each cluster with an integer id.
     
    3734        private Map<Node, Integer> nodeMap = null;
    3835       
    39         /**
    40          * True if a random bisection must be used.
    41          */
    42         private boolean randomBisection = false;
    43 
     36
     37        private Configuration conf = null;
    4438        /**
    4539         *
     
    5246                UndirectedGraph g = new UndirectedGraph();
    5347                g.loadFromInstance(data);
    54                 Set<Set<Node>> clusters = GraphAlgorithms.metisMqi(g, numberOfClusters,
    55                                 sizeFinerGraph, randomBisection);
     48                Set<Set<Node>> clusters = GraphAlgorithms.metisMqi(g);
    5649                setNumClusters(clusters.size());
    5750                int i = 0;
     
    125118                optionString = Utils.getOption('R', options);
    126119                setRandomBisection(Boolean.parseBoolean(optionString));
     120                optionString = Utils.getOption('V', options);
     121                if (optionString.length() != 0) {
     122                        setVerboseLevel(Integer.parseInt(optionString));
     123                }
     124        }
     125
     126        private void setVerboseLevel(int verboseLevel) {
     127                Configuration.instance().setVerboseLevel(verboseLevel);
    127128        }
    128129
    129130        private void setRandomBisection(boolean b) {
    130                 this.randomBisection = b;
     131                Configuration.instance().setRandomBisection(b);
    131132        }
    132133
     
    146147                result.add("" + getSizeFinerGraph());
    147148                result.add("-R");
     149                result.add("" + getRandomBisection());
     150                result.add("-V");
     151                result.add("" + getVerboseLevel());
    148152                return (String[]) result.toArray(new String[result.size()]);
    149153        }
    150154
     155        private boolean getRandomBisection() {
     156                return Configuration.instance().isRandomBisection();
     157        }
     158
     159        private int getVerboseLevel() {
     160                return Configuration.instance().getVerboseLevel();
     161        }
     162
    151163        private int getSizeFinerGraph() {
    152                 return sizeFinerGraph;
     164                return Configuration.instance().getSizeFinerGraph();
    153165        }
    154166
    155167        private int getNumClusters() {
    156                 return numberOfClusters;
     168                return Configuration.instance().getNumberOfClusters();
    157169        }
    158170
     
    170182                result.addElement(new Option("\tsize of finer graph.\n"
    171183                                + "\t(default 10).", "S", 1, "-S <num>"));
     184                result.addElement(new Option("\trandom bisection.\n"
     185                                + "\t(default false).", "R", 1, "-V <boolean>"));
     186                result.addElement(new Option("\tverbosity of graphical output.\n"
     187                                + "\t(default 1).", "V", 1, "-V <num>"));
    172188                return result.elements();
    173189        }
    174190
    175191        private void setSizeFinerGraph(int size) {
    176                 this.sizeFinerGraph = size;
     192                Configuration.instance().setSizeFinerGraph(size);
    177193        }
    178194
    179195        private void setNumClusters(int n) {
    180                 this.numberOfClusters = n;
     196                Configuration.instance().setNumberOfClusters(n);
    181197        }
    182198
     
    198214        @Override
    199215        public int numberOfClusters() throws Exception {
    200                 return numberOfClusters;
     216                return Configuration.instance().getNumberOfClusters();
    201217        }
    202218
  • 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.