in src/main/java/com/twitter/sbf/core/MHAlgorithm.java [102:137]
public SparseBinaryMatrix optimize() {
double wtCoeff = config.wtCoeff;
diagnosticsWriter.println("WeightCoeff: " + wtCoeff);
diagnosticsWriter.println(Util.repeatString(100, "-"));
diagnosticsWriter.println(headerLine(metricFieldsToUse(g, config)));
diagnosticsWriter.println(
getMetricsLine(initMatrix, 0, 0, 0, 0, true)
);
int epoch;
for (epoch = 1; epoch <= config.maxEpoch; epoch++) {
int acceptCount = runEpoch(initMatrix, epoch,
config.maxEpoch < 1000 || epoch % config.evalEvery == 0);
double acceptRate = acceptCount * 1.0 / g.getNumVertices();
if (!config.runAllEpochs && acceptRate < config.eps) {
break;
}
}
if (config.divideResultIntoConnectedComponents) {
SparseBinaryMatrix dividedZ = divideIntoConnectedComponents(initMatrix);
// divideIntoConnectedComponents already removes clusters smaller than 2 i.e. singletons
if (config.minClusterSize > 2) {
return removeSmallClusters(dividedZ, config.minClusterSize);
} else {
return dividedZ;
}
} else {
if (config.minClusterSize > 1) {
return removeSmallClusters(initMatrix, config.minClusterSize);
} else {
return initMatrix;
}
}
}