Search in sources :

Example 1 with PP_DivideAndRecluster

use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PP_DivideAndRecluster in project clusterMaker2 by RBVI.

the class PP_RearrangeAndMergeBest method mergeBest.

protected void mergeBest(ArrayList<ArrayList<Integer>> clusterObject) throws InvalidInputFileException {
    // System.out.println("start merging");
    ICCEdges cc2d = TaskConfig.ccEdgesEnum.createCCEdges(clusterObject.size());
    String[] ids = new String[clusterObject.size()];
    for (int i = 0; i < ids.length; i++) {
        ids[i] = i + "";
        for (int j = i + 1; j < ids.length; j++) {
            cc2d.setEdgeCost(i, j, -(float) calculateCostChange(clusterObject.get(i), clusterObject.get(j)));
        // System.out.println(i + "\t" + j + "\t" + cc2d.getEdgeCost(i, j));
        }
    }
    ConnectedComponent cc2 = new ConnectedComponent(cc2d, ids, null, false);
    ClusteringManager cm = new ClusteringManager(null);
    // cm.runClusteringForOneConnectedComponent(cc2, null, null, null, System.currentTimeMillis());
    new GreedyClusterer(cc2);
    // long dummy = TaskConfig.fpMaxTimeMillis;
    // TaskConfig.fpMaxTimeMillis = Long.MAX_VALUE;
    // FixedParameterClusterer dc = new FixedParameterClusterer(cc2,cc2.getClusteringScore());
    // TaskConfig.fpMaxTimeMillis = dummy;
    // if(cc2.getClusteringScore() != this.bestScore){
    // PP_DivideAndRecluster pp = new PP_DivideAndRecluster();
    // pp.initPostProcessing(cc2);
    // pp.run();
    // }
    ArrayList<ArrayList<Integer>> clusterObjectNew = new ArrayList<ArrayList<Integer>>();
    for (int i = 0; i < cc2.getNumberOfClusters(); i++) {
        ArrayList<Integer> v = new ArrayList<Integer>();
        clusterObjectNew.add(v);
    }
    int[] clustering = cc2.getClusters();
    for (int i = 0; i < clustering.length; i++) {
        clusterObjectNew.get(clustering[i]).addAll(clusterObject.get(i));
    }
    clusterObject = clusterObjectNew;
    this.bestScore = cc2.calculateClusteringScore(clustering);
// System.out.println("end merging");
}
Also used : ClusteringManager(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.taskmanaging.ClusteringManager) GreedyClusterer(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.greedy.GreedyClusterer) ConnectedComponent(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent) ArrayList(java.util.ArrayList) ICCEdges(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ICCEdges)

Example 2 with PP_DivideAndRecluster

use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PP_DivideAndRecluster in project clusterMaker2 by RBVI.

the class ClusterTrainingTask method runClustering.

private void runClustering(ConnectedComponent cc) {
    /* ====LAYOUTING PHASE ==== */
    ILayouter layouter = layoutEnum.createLayouter();
    layouter.initLayouter(cc, this.parameters);
    layouter.run();
    /* ==== CLUSTERING PHASE ==== */
    IGeometricClusterer geocluster = TaskConfig.geometricClusteringEnum.createGeometricClusterer();
    geocluster.initGeometricClusterer(cc);
    geocluster.run();
    /* ====POST-PROCESSING PHASE ==== */
    if (TaskConfig.doPostProcessing) {
        PostProcessingFactory.EnumPostProcessingClass ppEnum = TaskConfig.postProcessingEnum;
        IPostProcessing pp = ppEnum.createPostProcessor();
        pp.initPostProcessing(cc);
        /* note: training can only be done for one layouter at a time! */
        LayoutFactory.EnumLayouterClass[] layouterTypes = { this.layoutEnum };
        IParameters[] params = { this.parameters };
        if (ppEnum == PostProcessingFactory.EnumPostProcessingClass.PP_DIVIDE_AND_RECLUSTER) {
            ((PP_DivideAndRecluster) pp).setLayoutingInfo(params, layouterTypes);
        } else if (ppEnum == PostProcessingFactory.EnumPostProcessingClass.PP_DIVIDE_AND_RECLUSTER_RECURSIVELY) {
            ((PP_DivideAndReclusterRecursively) pp).setLayoutingInfo(params, layouterTypes);
        }
        pp.run();
    }
}
Also used : IParameters(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters) IGeometricClusterer(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.geometric_clustering.IGeometricClusterer) ILayouter(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.ILayouter) IPostProcessing(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.IPostProcessing) PostProcessingFactory(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PostProcessingFactory) PP_DivideAndRecluster(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PP_DivideAndRecluster)

Example 3 with PP_DivideAndRecluster

use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PP_DivideAndRecluster in project clusterMaker2 by RBVI.

the class ClusteringTask method runClustering.

private void runClustering(ConnectedComponent cc) {
    ConnectedComponent ccCopy = cc.copy(true);
    new GreedyClusterer(ccCopy);
    if (!TaskConfig.fixedParameter || cc.getNodeNumber() >= TaskConfig.fixedParameterMax)
        TaskConfig.fpStopped = true;
    if (TaskConfig.fixedParameter && cc.getNodeNumber() < TaskConfig.fixedParameterMax) {
        new FixedParameterClusterer(cc, ccCopy.getClusteringScore());
    }
    if (TaskConfig.greedy && TaskConfig.fpStopped) {
        cc.setClusteringScore(Double.MAX_VALUE);
        TaskConfig.fpStopped = false;
    } else if (TaskConfig.fpStopped) {
        // cc.initialiseClusterInfo(ccCopy.getNumberOfClusters());
        // cc.setClusters(ccCopy.getClusters());
        /* ====== LAYOUTING PHASE ====== */
        TaskConfig.fpStopped = false;
        /* iterate over layouters */
        ILayouter previousLayouter = null;
        for (int i = 0; i < this.layouterEnumTypes.length; i++) {
            IParameters param = parameters[i];
            /* create correct layouter */
            ILayouter layouter = this.layouterEnumTypes[i].createLayouter();
            if (previousLayouter == null) {
                /* initialise cc positions if in clustering mode */
                if (TaskConfig.mode == TaskConfig.CLUSTERING_MODE || TaskConfig.mode == TaskConfig.COMPARISON_MODE || TaskConfig.mode == TaskConfig.HIERARICHAL_MODE) {
                    ILayoutInitialiser li = this.layouterEnumTypes[i].createLayoutInitialiser();
                    li.initLayoutInitialiser(cc);
                    /* initialise and run layouter */
                    layouter.initLayouter(cc, li, param);
                    layouter.run();
                    previousLayouter = layouter;
                } else if (TaskConfig.mode == TaskConfig.GENERAL_TRAINING_MODE) {
                    ILayoutInitialiser li = this.layouterEnumTypes[i].createLayoutInitialiser();
                    li.initLayoutInitialiser(cc);
                    /* initialise and run layouter */
                    layouter.initLayouter(cc, li, param);
                    layouter.run();
                    previousLayouter = layouter;
                // // else positions already set for training mode
                // layouter.initLayouter(cc, param);
                // layouter.run();
                // previousLayouter = layouter;
                } else {
                }
            } else {
                /*
					 * initialise and run layouter with previous calculated
					 * positions
					 */
                layouter.initLayouter(cc, previousLayouter, param);
                layouter.run();
            }
        }
        /* ====== GEOMETRIC CLUSTERING */
        IGeometricClusterer geoClust = TaskConfig.geometricClusteringEnum.createGeometricClusterer();
        geoClust.initGeometricClusterer(cc);
        geoClust.run();
    }
    /* ====== POST-PROCESSING ====== */
    if (TaskConfig.doPostProcessing && cc.getClusteringScore() != Double.MAX_VALUE) {
        PostProcessingFactory.EnumPostProcessingClass ppEnum = TaskConfig.postProcessingEnum;
        IPostProcessing pp = ppEnum.createPostProcessor();
        pp.initPostProcessing(cc);
        // additional parameters.
        if (ppEnum.equals(PostProcessingFactory.EnumPostProcessingClass.PP_DIVIDE_AND_RECLUSTER)) {
            ((PP_DivideAndRecluster) pp).setLayoutingInfo(this.parameters, this.layouterEnumTypes);
        } else if (ppEnum.equals(PostProcessingFactory.EnumPostProcessingClass.PP_DIVIDE_AND_RECLUSTER_RECURSIVELY)) {
            ((PP_DivideAndReclusterRecursively) pp).setLayoutingInfo(this.parameters, this.layouterEnumTypes);
        }
        /* run post processing */
        pp.run();
    // ppEnum = PostProcessingFactory.EnumPostProcessingClass.PP_REARRANGE_AND_MERGE_BEST;
    // pp = ppEnum.createPostProcessor();
    // pp.initPostProcessing(cc);
    // pp.run();
    }
    if (TaskConfig.doPostProcessing && ccCopy.getClusteringScore() != Double.MAX_VALUE) {
        PostProcessingFactory.EnumPostProcessingClass ppEnum = TaskConfig.postProcessingEnum;
        IPostProcessing pp = ppEnum.createPostProcessor();
        pp.initPostProcessing(ccCopy);
        // additional parameters.
        if (ppEnum.equals(PostProcessingFactory.EnumPostProcessingClass.PP_DIVIDE_AND_RECLUSTER)) {
            ((PP_DivideAndRecluster) pp).setLayoutingInfo(this.parameters, this.layouterEnumTypes);
        } else if (ppEnum.equals(PostProcessingFactory.EnumPostProcessingClass.PP_DIVIDE_AND_RECLUSTER_RECURSIVELY)) {
            ((PP_DivideAndReclusterRecursively) pp).setLayoutingInfo(this.parameters, this.layouterEnumTypes);
        }
        /* run post processing */
        pp.run();
    // ppEnum = PostProcessingFactory.EnumPostProcessingClass.PP_REARRANGE_AND_MERGE_BEST;
    // pp = ppEnum.createPostProcessor();
    // pp.initPostProcessing(cc);
    // pp.run();
    }
    // if(ccCopy.getClusteringScore()<cc.getClusteringScore()&&ccCopy.getClusteringScore()<=ccCopy2.getClusteringScore()){
    if (ccCopy.getClusteringScore() < cc.getClusteringScore()) {
        cc.initialiseClusterInfo(ccCopy.getNumberOfClusters());
        cc.setClusters(ccCopy.getClusters());
        cc.calculateClusterDistribution();
        cc.setClusteringScore(ccCopy.getClusteringScore());
    } else // else if(ccCopy2.getClusteringScore()<cc.getClusteringScore()&&ccCopy.getClusteringScore()>ccCopy2.getClusteringScore()){
    // cc.initialiseClusterInfo(ccCopy2.getNumberOfClusters());
    // cc.setClusters(ccCopy2.getClusters());
    // cc.calculateClusterDistribution();
    // cc.setClusteringScore(ccCopy2.getClusteringScore());
    // }
    {
    }
}
Also used : IParameters(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters) GreedyClusterer(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.greedy.GreedyClusterer) IGeometricClusterer(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.geometric_clustering.IGeometricClusterer) ConnectedComponent(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent) ILayouter(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.ILayouter) IPostProcessing(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.IPostProcessing) PostProcessingFactory(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PostProcessingFactory) PP_DivideAndRecluster(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PP_DivideAndRecluster) ILayoutInitialiser(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.ILayoutInitialiser) FixedParameterClusterer(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.fixedparameterclustering.FixedParameterClusterer)

Aggregations

ConnectedComponent (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent)2 IGeometricClusterer (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.geometric_clustering.IGeometricClusterer)2 GreedyClusterer (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.greedy.GreedyClusterer)2 ILayouter (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.ILayouter)2 IParameters (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters)2 IPostProcessing (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.IPostProcessing)2 PP_DivideAndRecluster (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PP_DivideAndRecluster)2 PostProcessingFactory (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PostProcessingFactory)2 ICCEdges (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ICCEdges)1 FixedParameterClusterer (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.fixedparameterclustering.FixedParameterClusterer)1 ILayoutInitialiser (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.ILayoutInitialiser)1 ClusteringManager (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.taskmanaging.ClusteringManager)1 ArrayList (java.util.ArrayList)1