use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters in project clusterMaker2 by RBVI.
the class ClusterPostProcessingTask method runClustering.
private void runClustering(ConnectedComponent cc) {
ConnectedComponent ccCopy = cc.copy(true);
// ccCopy.setClusteringScore(Double.MAX_VALUE);
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 = this.allparameters[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) {
// else positions already set for training mode
layouter.initLayouter(cc, param);
layouter.run();
previousLayouter = layouter;
}
} 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) {
IPostProcessing pp = PostProcessingFactory.EnumPostProcessingClass.PP_REARRANGE_AND_MERGE_BEST.createPostProcessor();
pp.initPostProcessing(cc);
/* run post processing */
pp.run();
}
if (TaskConfig.doPostProcessing && ccCopy.getClusteringScore() != Double.MAX_VALUE) {
IPostProcessing pp = PostProcessingFactory.EnumPostProcessingClass.PP_REARRANGE_AND_MERGE_BEST.createPostProcessor();
pp.initPostProcessing(ccCopy);
/* run post processing */
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 if(ccCopy2.getClusteringScore()<cc.getClusteringScore()&&ccCopy.getClusteringScore()>ccCopy2.getClusteringScore()){
// cc.initialiseClusterInfo(ccCopy2.getNumberOfClusters());
// cc.setClusters(ccCopy2.getClusters());
// cc.calculateClusterDistribution();
// cc.setClusteringScore(ccCopy2.getClusteringScore());
// }else{
// }
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters 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.layout.IParameters in project clusterMaker2 by RBVI.
the class FORCEnDLayouter method initLayouter.
/**
* This Constructor is for the parameter training. Here the positions should
* have already been initialised. If this is not so, then the positions are
* initialised with the correct {@link ILayoutInitialiser} implementation.
*
* @param cc
* The connected Component.
* @param parameters
* The parameters for FORCEnD.
*/
public void initLayouter(ConnectedComponent cc, IParameters parameters) {
this.dim = TaskConfig.dimension;
this.cc = cc;
this.parameters = (FORCEnDParameters) parameters;
if (cc.getCCPositions() == null) {
log.warning("Positions have not been initialised, perhaps" + "wrong use of this constructor!");
ILayoutInitialiser li;
li = LayoutFactory.EnumLayouterClass.FORCEND.createLayoutInitialiser();
li.initLayoutInitialiser(cc);
li.run();
}
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters in project clusterMaker2 by RBVI.
the class ParameterTraining_SE method runOneGeneration.
private void runOneGeneration(IParameters[] generationParameterSet, ConnectedComponent cc, int gen) {
int size = generationParameterSet.length;
// List<Semaphore> parallelSem = new ArrayList<Semaphore>();
for (int i = 0; i < size; i++) {
/* copy the cc (ConnectedComponent) - shares same resources! */
ConnectedComponent newCC = cc.copy();
/* sets a new positions array for the copy */
newCC.setCCPositions(cc.copyCCPositions());
/* start clustering */
ClusterTrainingTask clusteringTask = new ClusterTrainingTask(newCC, generationParameterSet[i], layouterEnum);
/*check whether threads are being used and do things related to this */
// if(TaskConfig.useThreads){
// Semaphore semaphore = new Semaphore(1, true);
// clusteringTask.setSemaphore(semaphore);
// parallelSem.add(semaphore);
// Thread t = new Thread(clusteringTask);
// clusteringTask.setMaxThreadSemaphore(maxThreadSemaphore, this.allThreads, t);
// t.start();
// }else{
clusteringTask.run();
// }
}
/* wait until all threads are done! */
// if (TaskConfig.useThreads) {
//
// /*
// * For each semaphore it is tested if a permit can be aquired.
// * This forces the main program thread to wait until all threads
// * are finished.
// */
// for (Semaphore sem : parallelSem) {
// sem.acquire();
// }
// }
//
// } catch (InterruptedException e) {
// /*
// * Exception created by Semaphore.aquire() - if the thread is
// * interrupted
// */
// log.severe(e.getMessage());
// e.printStackTrace();
// }
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters in project clusterMaker2 by RBVI.
the class ParameterTraining_SE method createParameterGeneration.
private IParameters[] createParameterGeneration() {
IParameters[] paramsGen = new IParameters[this.generationSize];
IParameters param;
/* convert best configurations vector to array */
IParameters[] bestConfigsArray = new IParameters[bestConfigs.size()];
for (int i = 0; i < bestConfigs.size(); i++) {
bestConfigsArray[i] = bestConfigs.get(i);
}
/* add mean of best configs */
param = layouterEnum.createIParameters();
param.combineConfigurationsRandomly(bestConfigsArray);
paramsGen[0] = param;
int currentPosition = 1;
int third = (this.generationSize - 1) / 3;
/* add combinations of the best configurations for first third */
for (int i = currentPosition; i < currentPosition + third; i++) {
param = layouterEnum.createIParameters();
param.combineConfigurationsRandomly(bestConfigsArray);
paramsGen[i] = param;
}
currentPosition += third;
/* add combinations of best half plus new random parameters */
for (int i = currentPosition; i < currentPosition + third; i++) {
param = layouterEnum.createIParameters();
param.combineParametersRandomlyAndGetNewRandom(bestConfigsArray);
paramsGen[i] = param;
}
currentPosition += third;
/* fill the rest with random configuratons */
for (int i = currentPosition; i < this.generationSize; i++) {
param = layouterEnum.createIParameters();
param.createRandomConfiguration();
paramsGen[i] = param;
}
return paramsGen;
}
Aggregations