use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters in project clusterMaker2 by RBVI.
the class ClusteringManagerTask method run.
public void run() {
try {
TaskConfig.monitor.setStatusMessage("-----------------------------------");
TaskConfig.monitor.setStatusMessage("Running ... " + TaskConfig.NAME + " v" + TaskConfig.VERSION);
Date date = new Date(System.currentTimeMillis());
TaskConfig.monitor.setStatusMessage(date.toString());
TaskConfig.monitor.setStatusMessage("-----------------------------------");
if (TaskConfig.mode == TaskConfig.CLUSTERING_MODE) {
long time = System.currentTimeMillis();
this.clusterManager = new ClusteringManager(TaskConfig.cmPath);
try {
this.clusterManager.initParametersAndCCs();
this.clusterManager.runClustering();
// System.out.println(this.clusterManager.getConnectedComponents().size());
time = System.currentTimeMillis() - time;
TaskConfig.monitor.setStatusMessage("Time taken for complete clustering process: " + TaskUtility.convertTime(time));
} catch (InvalidInputFileException e) {
TaskConfig.monitor.showMessage(TaskMonitor.Level.ERROR, e.getMessage());
// e.printStackTrace();
System.exit(-1);
} catch (InvalidTypeException e) {
TaskConfig.monitor.showMessage(TaskMonitor.Level.ERROR, e.getMessage());
// e.printStackTrace();
System.exit(-1);
}
} else /* start general training */
if (TaskConfig.mode == TaskConfig.GENERAL_TRAINING_MODE) {
try {
long time = System.currentTimeMillis();
ClusteringManager clustermanage = new ClusteringManager(TaskConfig.cmPath);
GeneralParameterTraining generalParameterTraining = new GeneralParameterTraining(clustermanage);
IParameters[] layoutParams = generalParameterTraining.runGeneralTraining();
/* save newly found parameters to config file */
TaskConfig.saveConfigurationsToConfigFile(TaskConfig.outConfigPath);
/* print out information about training */
TaskConfig.monitor.setStatusMessage(TaskConfig.NL + "###### Best Parameter Configurations Found ######");
for (int i = 0; i < layoutParams.length; i++) {
TaskConfig.monitor.setStatusMessage(layoutParams[i].toString());
InfoFile.appendLnProjectResults(layoutParams[i].toString());
}
time = System.currentTimeMillis() - time;
TaskConfig.monitor.setStatusMessage("Time taken for complete general training: " + TaskUtility.convertTime(time));
} catch (InvalidInputFileException e) {
TaskConfig.monitor.showMessage(TaskMonitor.Level.ERROR, e.getMessage());
// e.printStackTrace();
} catch (InvalidTypeException e) {
TaskConfig.monitor.showMessage(TaskMonitor.Level.ERROR, e.getMessage());
// e.printStackTrace();
}
} else if (TaskConfig.mode == TaskConfig.COMPARISON_MODE || TaskConfig.mode == TaskConfig.HIERARICHAL_MODE) {
Thread t = new IteratorThread();
t.start();
} else /* no such mode */
{
TaskConfig.monitor.showMessage(TaskMonitor.Level.ERROR, "ERROR: This mode does not exist: " + TaskConfig.mode);
}
/* create info file */
if (TaskConfig.info) {
InfoFile info = new InfoFile();
info.instantiateFile(TaskConfig.infoPath);
info.createAndCloseInfoFile();
/* clear information from StringBuffers in InfoFile */
InfoFile.clearData();
}
// /* ====== CLEAN UP AT END ====== */
} catch (Exception e) {
TaskConfig.monitor.showMessage(TaskMonitor.Level.ERROR, "ERROR occured in run with the following message: " + e.getMessage());
// e.printStackTrace();
}
/* release permit in semaphore if necessary */
if (semaphore != null) {
semaphore.release();
}
/* reset the run button back to "RUN" and reset action command */
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters 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());
// }
{
}
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters in project clusterMaker2 by RBVI.
the class GeneralParameterTraining method createInitialParameterGeneration.
private IParameters[][] createInitialParameterGeneration() {
// create enough random configurations to start with
ArrayList<FORCEnDParameters> parameters = new ArrayList<FORCEnDParameters>();
for (double attraction = 1; attraction <= 100; attraction += 5) {
// if((attraction*10)<=repulsion||(repulsion*10)<=attraction) continue;
for (float temperature = 100; temperature <= 1000; temperature += 100) {
for (int iterations = 50; iterations < 500; iterations += 50) {
FORCEnDParameters fndparam = new FORCEnDParameters();
fndparam.setAttractionFactor(attraction);
fndparam.setRepulsionFactor(attraction);
fndparam.setTemperature(temperature);
fndparam.setIterations(iterations);
parameters.add(fndparam);
// System.out.println(" iterations " + iterations);
}
// System.out.println(" temperature " + temperature);
}
// System.out.println(" repulsion " + repulsion);
// }
// System.out.println(" attraction " + attraction);
}
// int initialSize = this.generationSize + 10;
IParameters[][] paramsGen = new IParameters[parameters.size()][TaskConfig.layouterEnumTypes.length];
// }
for (int i = 0; i < paramsGen.length; i++) {
paramsGen[i][0] = parameters.get(i);
}
return paramsGen;
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters in project clusterMaker2 by RBVI.
the class GeneralParameterTraining method runGeneralTraining.
/**
* Starts the general parameter training using a simple evolutionary method
* for the whole input directory (or just one file if
* this was given). Saves the best found parameters of each layout algorithm to the
* respective config classes. But does not create a config file.
*
* @return The best set of IParameters as an Array.
* @throws InvalidInputFileException If the input file/directory is somehow
* incorrect or cannot be read.
* @throws InvalidTypeException If an method type does not exist or hasn't
* been included properly.
*/
public IParameters[] runGeneralTraining() throws InvalidInputFileException, InvalidTypeException {
/* initialise connected components and parameters */
this.clusteringManager.initParametersAndCCs();
ArrayList<File> connectedComponents = clusteringManager.getConnectedComponents();
/*
* initialise positions of the cc with respect to the FIRST layouter - the same
* initial positions are used for all training rounds
*/
for (File cc : connectedComponents) {
ILayoutInitialiser li = TaskConfig.layouterEnumTypes[0].createLayoutInitialiser();
li.initLayoutInitialiser(new CostMatrixReader(cc).getConnectedComponent());
li.run();
}
boolean terminateTraining = false;
/* run initial generation */
IParameters[][] initialGeneration = createInitialParameterGeneration();
runOneGeneration(initialGeneration, connectedComponents, 0);
terminateTraining = terminateTraining(initialGeneration);
/* add the best 10 random configs to the bestConfigs collection Vector */
for (int i = 0; i < initialGeneration.length; i++) {
this.bestConfigs.add(initialGeneration[i]);
}
/* run all following generations */
IParameters[][] generation;
for (int i = 1; i <= this.noOfGenerations; i++) {
if (terminateTraining) {
break;
}
generation = createParameterGeneration();
runOneGeneration(generation, connectedComponents, i);
terminateTraining = terminateTraining(generation);
for (int j = 0; j < this.generationSize / 2; j++) {
this.bestConfigs.add(initialGeneration[j]);
}
}
/* convert best configurations vector to array */
IParameters[][] bestConfigsArray = new IParameters[bestConfigs.size()][TaskConfig.layouterEnumTypes.length];
for (int i = 0; i < bestConfigs.size(); i++) {
bestConfigsArray[i] = bestConfigs.get(i);
}
/*
* sort the IParameters array according to their score and return the
* best parameter set.
*/
Arrays.sort(bestConfigsArray, this.paramComparator);
this.bestPreviousIParameters = bestConfigsArray[0];
for (int i = 0; i < bestConfigsArray[0].length; i++) {
bestConfigsArray[0][i].saveParametersToConfig();
}
for (int i = 0; i < 30; i++) {
FORCEnDParameters ip = (FORCEnDParameters) bestConfigsArray[i][0];
ip.printParamters();
}
return bestConfigsArray[0];
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters in project clusterMaker2 by RBVI.
the class GeneralParameterTraining method createParameterGeneration.
private IParameters[][] createParameterGeneration() {
IParameters[][] paramsGen = new IParameters[this.generationSize][TaskConfig.layouterEnumTypes.length];
/* add mean of best configs */
IParameters param = null;
for (int i = 0; i < TaskConfig.layouterEnumTypes.length; i++) {
/* get array of best configurations for one layouter */
IParameters[] bestConfigsArray = new IParameters[bestConfigs.size()];
for (int j = 0; j < bestConfigs.size(); j++) {
bestConfigsArray[j] = bestConfigs.get(j)[i];
}
param = TaskConfig.layouterEnumTypes[i].createIParameters();
param.combineConfigurationsRandomly(bestConfigsArray);
paramsGen[0][i] = param;
}
int currentPosition = 0;
int third = (this.generationSize - 1) / 3;
/* add combinations of the best configurations for first third */
for (int i = currentPosition; i < currentPosition + third; i++) {
for (int j = 0; j < TaskConfig.layouterEnumTypes.length; j++) {
/* get array of best configurations for one layouter */
IParameters[] bestConfigsArray = new IParameters[bestConfigs.size()];
for (int k = 0; k < bestConfigs.size(); k++) {
bestConfigsArray[k] = bestConfigs.get(k)[j];
}
param = TaskConfig.layouterEnumTypes[j].createIParameters();
param.combineConfigurationsRandomly(bestConfigsArray);
paramsGen[i][j] = param;
}
}
currentPosition += third;
/* add combinations of best half plus new random parameters */
for (int i = currentPosition; i < currentPosition + third; i++) {
for (int j = 0; j < TaskConfig.layouterEnumTypes.length; j++) {
/* get array of best configurations for one layouter */
IParameters[] bestConfigsArray = new IParameters[bestConfigs.size()];
for (int k = 0; k < bestConfigs.size(); k++) {
bestConfigsArray[k] = bestConfigs.get(k)[j];
}
param = TaskConfig.layouterEnumTypes[j].createIParameters();
param.combineParametersRandomlyAndGetNewRandom(bestConfigsArray);
paramsGen[i][j] = param;
}
}
currentPosition += third;
/* fill the rest with random configuratons */
for (int i = currentPosition; i < this.generationSize; i++) {
paramsGen[i] = this.createRandomParametersForLayouters();
}
return paramsGen;
}
Aggregations