public Move findBestBucketMove() {
    Move bestMove = null;
    double bestImprovement = 0;
    for (Member source : members.values()) {
      for (Bucket bucket : source.getBuckets()) {
        for (Member target : members.values()) {
          if (bucket.getMembersHosting().contains(target)) {
            continue;
          }
          if (!target.willAcceptBucket(bucket, source, true).willAccept()) {
            continue;
          }
          double improvement = improvement(source.getTotalLoad(), source.getWeight(),
              target.getTotalLoad(), target.getWeight(), bucket.getLoad(), getAverageLoad());
          if (improvement > bestImprovement && improvement > getMinImprovement()) {
            Move move = new Move(source, target, bucket);
            if (!attemptedBucketMoves.contains(move)) {
              bestImprovement = improvement;
              bestMove = move;
            }
          }
        }
      }
    }
    return bestMove;
  }
Calculate how much the variance in load will decrease for a given move.

@param sLoad the current load on the source member
@param sWeight the weight of the source member
@param tLoad the current load on the target member
@param tWeight the weight of the target member
@param bucketSize the size of the bucket we're considering moving
@param average the target weighted load for all members.
@return the change in variance that would occur by making this move. Essentially
        variance_before - variance_after, so a positive change is a means the variance is
        decreasing.
geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/rebalance/model/PartitionedRegionLoadModel.java