Changeset 26 for src/main


Ignore:
Timestamp:
Oct 9, 2010, 12:24:38 PM (14 years ago)
Author:
gnappo
Message:

Aggiunto output in formato XML dei dati; modificato MQI (adesso cerca nella partizione piu` grande).

Location:
src/main/java/weka/clusterers
Files:
7 edited
1 moved

Legend:

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

    r24 r26  
    3535       
    3636
    37         private Configuration conf = null;
    3837        /**
    3938         *
     
    122121                        setVerboseLevel(Integer.parseInt(optionString));
    123122                }
     123                optionString = Utils.getOption('o', options);
     124                if (optionString.length() != 0) {
     125                        setOutputFile(optionString);
     126                }
     127        }
     128
     129        private void setOutputFile(String outputFile) {
     130                Configuration.instance().setOutputFile(outputFile);
     131        }
     132       
     133        private String getOutputFile() {
     134                return Configuration.instance().getOutputFile();
    124135        }
    125136
     
    150161                result.add("-V");
    151162                result.add("" + getVerboseLevel());
     163                result.add("-o");
     164                result.add("" + getOutputFile());
    152165                return (String[]) result.toArray(new String[result.size()]);
    153166        }
     
    186199                result.addElement(new Option("\tverbosity of graphical output.\n"
    187200                                + "\t(default 1).", "V", 1, "-V <num>"));
     201                result.addElement(new Option("\tpath of the output file.\n"
     202                                , "o", 1, "-o <path>"));
    188203                return result.elements();
    189204        }
  • src/main/java/weka/clusterers/forMetisMQI/GraphAlgorithms.java

    r25 r26  
    11package weka.clusterers.forMetisMQI;
    22
     3import java.io.File;
     4import java.io.FileOutputStream;
     5import java.io.IOException;
    36import java.util.HashSet;
    47import java.util.Iterator;
    58import java.util.Set;
    69import java.util.Stack;
     10
     11import org.jdom.Document;
     12import org.jdom.Element;
     13import org.jdom.output.Format;
     14import org.jdom.output.XMLOutputter;
    715
    816import weka.clusterers.forMetisMQI.graph.Bisection;
     
    1321import weka.clusterers.forMetisMQI.util.Configuration;
    1422import weka.clusterers.forMetisMQI.util.GraphsFrame;
     23import weka.clusterers.forMetisMQI.util.Random;
    1524import weka.clusterers.forMetisMQI.util.Util;
    1625
     
    92101                int verboseLevel = Configuration.instance().getVerboseLevel();
    93102                GraphsFrame gf = GraphsFrame.instance();
     103               
     104                Element rootXML = new Element("run");
     105                Document logXML = new Document(rootXML);
     106                rootXML.setAttribute("seed", Long.toString(Random.instance().getSeed()));
     107                Element graphXML = new Element("graph");
     108                graphXML.addContent(new Element("vertex").setText(Integer.toString(g.getVertexCount())));
     109                graphXML.addContent(new Element("edge").setText(Integer.toString(g.getEdgeCount())));
     110                rootXML.addContent(graphXML);
     111                Element clustersXML = new Element("clusters");
     112                rootXML.addContent(clustersXML);
     113               
    94114                System.out.println("Seed: " + Random.instance().getSeed());
    95115                System.out.println("Vertex count: " + g.getVertexCount());
     
    97117                Set<Set<Node>> clusters = new HashSet<Set<Node>>();
    98118                UndirectedGraph gclone = g.clone();
     119               
    99120                for (int i = 0; i < numberOfCluster; i++) {
    100121                        Bisection bisection = null;
     
    109130                                gf.addPanel(Util.panelCluster(g.clone(),bisection.getSmallerSubgraph().createInducedSubgraph().getVertices()));
    110131                       
    111                         System.out.print("Partizione iniziale: ");
     132                        System.out.print("Initial partition: ");
    112133                        System.out.print("V1: " + bisection.getSubgraph().getVertexCount());
    113134                        System.out.print(" V2: " + bisection.getComplement().getVertexCount());
     
    121142//                      System.out.println(cluster);
    122143                        Bisection mqiBisection = new Bisection(new Subgraph(g,cluster));
    123                         System.out.println("Partizione raffinata (MQI)");
     144                        System.out.println("Refined partition (MQI)");
    124145                        double newConductance = ((double)mqiBisection.edgeCut() / 2) / Math.min(mqiBisection.getSubgraph().totalDegree(),mqiBisection.getComplement().totalDegree());
    125                         System.out.println("Cluster "+ i + ":  V=" + clusterGraph.getVertexCount() + ", E=" + clusterGraph.getEdgeCount()+".");
     146                        System.out.print("Cluster "+ i + ":  V=" + clusterGraph.getVertexCount() + ", E=" + clusterGraph.getEdgeCount()+", ");
     147                        System.out.println("Cond: " + newConductance);
     148                       
     149                       
     150                        mqiBisection = new Bisection(new Subgraph(gclone,cluster));
     151                        newConductance = ((double)mqiBisection.edgeCut() / 2) / Math.min(mqiBisection.getSubgraph().totalDegree(),mqiBisection.getComplement().totalDegree());
    126152                        System.out.println("Cluster conductance: " + newConductance);
     153                       
     154                       
     155                        Element clusterXML = new Element("cluster");
     156                        clusterXML.setAttribute("id", Integer.toString(i));
     157                        clusterXML.addContent(new Element("vertex").setText(Integer.toString(clusterGraph.getVertexCount())));
     158                        clusterXML.addContent(new Element("edge").setText(Integer.toString(clusterGraph.getEdgeCount())));
     159                        clusterXML.addContent(new Element("conductance").setText(Double.toString(newConductance)));
     160                        clustersXML.addContent(clusterXML);
    127161                       
    128162                        clusters.add(cluster);
     
    134168                        }
    135169                }
     170               
     171               
     172                XMLOutputter xmlOutputter = new XMLOutputter();
     173                xmlOutputter.setFormat(Format.getPrettyFormat());
     174                try {
     175                        xmlOutputter.output(logXML, new FileOutputStream(new File(Configuration.instance().getOutputFile())));
     176                } catch (IOException e) {
     177                        e.printStackTrace();
     178                }
     179               
    136180                if(verboseLevel > 0) {
    137181                        gf.addPanel(Util.panelClusters(gclone, clusters));
  • src/main/java/weka/clusterers/forMetisMQI/MQI.java

    r25 r26  
    1616import weka.clusterers.forMetisMQI.graph.Node;
    1717import weka.clusterers.forMetisMQI.graph.Subgraph;
     18import weka.clusterers.forMetisMQI.graph.UndirectedGraph;
    1819import edu.uci.ics.jung.algorithms.flows.EdmondsKarpMaxFlow;
    1920import edu.uci.ics.jung.graph.DirectedGraph;
     
    8384
    8485        static private DirectedGraph<Node, Edge> prepareDirectedGraph(
    85                         Bisection bisection, Node source, Node sink, boolean forConductance) {
    86                 Subgraph B = bisection.getLargerSubgraph();
    87                 Subgraph A = bisection.getSmallerSubgraph();
     86                        Subgraph A, Node source, Node sink, boolean forConductance) {
     87                Bisection bisection = new Bisection(A);
     88                Subgraph B = bisection.getComplement();
    8889                int a = 0;
    8990                if (!forConductance)
     
    161162        static public Set<Node> mqi(Bisection partition, boolean forConductance) {
    162163//              System.out.println("INITIAL BISECTION: " + partition.toString());
     164                UndirectedGraph startingGraph = partition.getGraph();
    163165                boolean finished = false;
    164166                Bisection bisection = partition;
    165                 Set<Node> cluster = new HashSet<Node>(partition.getSmallerSubgraph()
     167                Set<Node> cluster = new HashSet<Node>(partition.getLargerSubgraph()
    166168                                .createInducedSubgraph().getVertices());
    167169//              System.out.println("IMPROVING SUBGRAPH: " + cluster);
     
    170172                        Node source = new Node("$$$$S");
    171173                        Node sink = new Node("$$$$T");
    172                         DirectedGraph<Node, Edge> directedGraph = prepareDirectedGraph(
    173                                         bisection, source, sink, true);
     174                        Subgraph A = new Subgraph(startingGraph,cluster);
     175                        DirectedGraph<Node, Edge> directedGraph = prepareDirectedGraph(A, source, sink, true);
    174176                        Transformer<Edge, Number> capTransformer = new Transformer<Edge, Number>() {
    175177                                public Double transform(Edge e) {
     
    191193
    192194                        if (!forConductance)
    193                                 maxFlowThreshold = bisection.getLargerSubgraph()
    194                                                 .getVertexCount()
     195                                maxFlowThreshold = A.getVertexCount()
    195196                                                * bisection.edgeCut() / 2;
    196197                        else {
    197198//                              maxFlowThreshold = Math.min(bisection.getLargerSubgraph().totalDegree(), bisection.getSmallerSubgraph().totalDegree());
    198                                 maxFlowThreshold = bisection.getSmallerSubgraph().totalDegree();
     199                                maxFlowThreshold = A.totalDegree();
    199200                                maxFlowThreshold = maxFlowThreshold
    200201                                                * (bisection.edgeCut() / 2);
     
    216217//                              System.out.println("REFINED BISECTION: " + bisection.toString());
    217218                                if(Configuration.instance().getVerboseLevel() > 1)
    218                                         GraphsFrame.instance().addPanel(Util.panelCluster(bisection.getGraph(), cluster));
     219                                        GraphsFrame.instance().addPanel(Util.panelCluster(bisection.getGraph().clone(), cluster));
    219220                        } else
    220221                                finished = true;
  • src/main/java/weka/clusterers/forMetisMQI/graph/Bisection.java

    r20 r26  
    44import java.util.Iterator;
    55import java.util.Set;
     6
     7import weka.clusterers.forMetisMQI.util.Random;
    68
    79
     
    4244         */
    4345        public Bisection(UndirectedGraph g){
     46                double limitingProbabilities = 0.1;
    4447                this.g = g;
    4548                a = new Subgraph(g);
    4649                b = new Subgraph(g);
    4750                Iterator<Node> graph = g.vtxsPermutation().iterator();
    48                 int i = 0;
    4951                while(graph.hasNext()) {
    5052                        Node u = graph.next();
    51                         if((i%2)==0)
     53                        if(Random.instance().nextDouble() < limitingProbabilities)
    5254                                a.addVertex(u);
    5355                        else
    5456                                b.addVertex(u);
    55                         i++;
    5657                }
    5758                marked = new HashSet<Node>();
  • src/main/java/weka/clusterers/forMetisMQI/graph/UndirectedGraph.java

    r20 r26  
    99import java.util.TreeMap;
    1010
    11 import weka.clusterers.forMetisMQI.Random;
     11import weka.clusterers.forMetisMQI.util.Random;
    1212import weka.core.Attribute;
    1313import weka.core.Instance;
  • src/main/java/weka/clusterers/forMetisMQI/util/Configuration.java

    r24 r26  
    1111        private int numberOfClusters = 2;
    1212       
     13        private String outputFile = null;
     14       
     15        public String getOutputFile() {
     16                return outputFile;
     17        }
     18
     19        public void setOutputFile(String outputFile) {
     20                this.outputFile = outputFile;
     21        }
     22
    1323        private static Configuration instance = null;
    1424       
  • src/main/java/weka/clusterers/forMetisMQI/util/Random.java

    r25 r26  
    1 package weka.clusterers.forMetisMQI;
     1package weka.clusterers.forMetisMQI.util;
    22
    33public class Random extends java.util.Random {
     
    1515        public static Random instance() {
    1616                if(instance == null) {
    17                         instance = new Random(/*new java.util.Random().nextLong()*/1234567890);
     17                        instance = new Random(new java.util.Random().nextLong()/*1234567890*/);
    1818                }
    1919                return instance;
  • src/main/java/weka/clusterers/forMetisMQI/util/Util.java

    r24 r26  
    1616import org.apache.commons.collections15.Transformer;
    1717
    18 import weka.clusterers.forMetisMQI.Random;
    1918import weka.clusterers.forMetisMQI.graph.Edge;
    2019import weka.clusterers.forMetisMQI.graph.Node;
     
    9392       
    9493        public static JPanel panelGraph(Graph<Node, Edge> g){
    95                 Layout<Node, Edge> layout = new KKLayout<Node, Edge>(g);
     94                Layout<Node, Edge> layout = new FRLayout<Node, Edge>(g);
    9695                layout.setSize(new Dimension(800,600)); // sets the initial size of the space
    9796                // The BasicVisualizationServer<V,E> is parameterized by the edge types
Note: See TracChangeset for help on using the changeset viewer.