public SparseBinaryMatrix optimize()

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;
      }
    }
  }