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");
}
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();
}
}
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());
// }
{
}
}
Aggregations