Program: 109346
Project: 109346
Buggy source:
public static void main(String[] args) throws Exception {
  if (args.length < 4) {
    System.err.println("String_Node_Str");
    return;
  }
  final File dataDir=new File(args[0]);
  Preconditions.checkArgument(dataDir.exists() && dataDir.isDirectory(),"String_Node_Str",dataDir);
  Preconditions.checkArgument(dataDir.listFiles().length > 0,"String_Node_Str",dataDir);
  int numSteps=Integer.parseInt(args[1]);
  Preconditions.checkArgument(numSteps >= 2,"String_Node_Str",numSteps);
  final double evaluationPercentage=Double.parseDouble(args[2]);
  Preconditions.checkArgument(evaluationPercentage > 0.0 && evaluationPercentage <= 1.0,"String_Node_Str",evaluationPercentage);
  Map<String,ParameterRange> parameterRanges=Maps.newHashMapWithExpectedSize(args.length);
  for (int i=3; i < args.length; i++) {
    String[] propValue=EQUALS.split(args[i]);
    String systemProperty=propValue[0];
    String[] minMax=COLON.split(propValue[1]);
    ParameterRange range;
    try {
      int min=Integer.parseInt(minMax[0]);
      int max=Integer.parseInt(minMax.length == 1 ? minMax[0] : minMax[1]);
      range=new ParameterRange(min,max);
    }
 catch (    NumberFormatException ignored) {
      double min=Double.parseDouble(minMax[0]);
      double max=Double.parseDouble(minMax.length == 1 ? minMax[0] : minMax[1]);
      range=new ParameterRange(min,max);
    }
    parameterRanges.put(systemProperty,range);
  }
  Callable<Number> evaluator=new Callable<Number>(){
    @Override public Number call() throws IOException, TasteException, InterruptedException {
      PrecisionRecallEvaluator prEvaluator=new PrecisionRecallEvaluator();
      MyrrixIRStatistics stats=(MyrrixIRStatistics)prEvaluator.evaluate(dataDir,0.9,evaluationPercentage,null);
      return stats.getMeanAveragePrecision();
    }
  }
;
  ParameterOptimizer optimizer=new ParameterOptimizer(parameterRanges,numSteps,evaluator,false);
  Map<String,Number> optimalValues=optimizer.findGoodParameterValues();
  System.out.println(optimalValues);
}

Fixed version (ground truth):
public static void main(String[] args) throws Exception {
  if (args.length < 4) {
    System.err.println("String_Node_Str");
    return;
  }
  final File dataDir=new File(args[0]);
  Preconditions.checkArgument(dataDir.exists() && dataDir.isDirectory(),"String_Node_Str",dataDir);
  Preconditions.checkArgument(dataDir.listFiles().length > 0,"String_Node_Str",dataDir);
  int numSteps=Integer.parseInt(args[1]);
  Preconditions.checkArgument(numSteps >= 2,"String_Node_Str",numSteps);
  final double evaluationPercentage=Double.parseDouble(args[2]);
  Preconditions.checkArgument(evaluationPercentage > 0.0 && evaluationPercentage <= 1.0,"String_Node_Str",evaluationPercentage);
  Map<String,ParameterRange> parameterRanges=Maps.newHashMapWithExpectedSize(args.length);
  for (int i=3; i < args.length; i++) {
    String[] propValue=EQUALS.split(args[i]);
    String systemProperty=propValue[0];
    String[] minMax=COLON.split(propValue[1]);
    ParameterRange range;
    try {
      int min=Integer.parseInt(minMax[0]);
      int max=Integer.parseInt(minMax.length == 1 ? minMax[0] : minMax[1]);
      range=new ParameterRange(min,max);
    }
 catch (    NumberFormatException ignored) {
      double min=Double.parseDouble(minMax[0]);
      double max=Double.parseDouble(minMax.length == 1 ? minMax[0] : minMax[1]);
      range=new ParameterRange(min,max);
    }
    parameterRanges.put(systemProperty,range);
  }
  Callable<Number> evaluator=new Callable<Number>(){
    @Override public Number call() throws IOException, TasteException, InterruptedException {
      MyrrixIRStatistics stats=(MyrrixIRStatistics)new PrecisionRecallEvaluator().evaluate(dataDir,0.9,evaluationPercentage,null);
      return stats == null ? null : stats.getMeanAveragePrecision();
    }
  }
;
  ParameterOptimizer optimizer=new ParameterOptimizer(parameterRanges,numSteps,evaluator,false);
  Map<String,Number> optimalValues=optimizer.findGoodParameterValues();
  System.out.println(optimalValues);
}