Program: 17196
Project: 17196
Buggy source:
public static void main(String[] args){
  final int size=8;
  HeuristicSearchProblem<Void,NQueens,Double> p=ProblemBuilder.create().initialState(new NQueens(size)).defineProblemWithoutActions().useTransitionFunction(new StateTransitionFunction<NQueens>(){
    @Override public Iterable<NQueens> successorsOf(    NQueens state){
      Set<NQueens> states=new HashSet<NQueens>();
      for (int i=0; i < size; i++) {
        for (int j=0; j < size; j++) {
          if (state.getQueens()[i] != j) {
            int[] queens=Arrays.copyOf(state.getQueens(),size);
            queens[i]=j;
            states.add(new NQueens(queens));
          }
        }
      }
      return states;
    }
  }
).useCostFunction(new CostFunction<Void,NQueens,Double>(){
    @Override public Double evaluate(    Transition<Void,NQueens> transition){
      return 0d;
    }
  }
).useHeuristicFunction(new HeuristicFunction<NQueens,Double>(){
    @Override public Double estimate(    NQueens state){
      return (double)state.attackedQueens();
    }
  }
).build();
  System.out.println("String_Node_Str" + p.getInitialState().attackedQueens() + "String_Node_Str");
  System.out.println(p.getInitialState());
  System.out.println("String_Node_Str");
  System.out.println(Hipster.createHillClimbing(p,true).search(new Predicate<WeightedNode<Void,NQueens,Double>>(){
    @Override public boolean apply(    WeightedNode<Void,NQueens,Double> node){
      return node.getScore().equals(0d);
    }
  }
));
  System.out.println("String_Node_Str");
  HillClimbing<Void,NQueens,Double,WeightedNode<Void,NQueens,Double>>.EHCIter it=Hipster.createHillClimbing(p,true).iterator();
  int iteration=0;
  Double best=it.getBestScore();
  while (it.hasNext()) {
    iteration++;
    WeightedNode<Void,NQueens,Double> node=it.next();
    if (node.getScore() < best) {
      best=node.getScore();
      System.out.println("String_Node_Str" + best + "String_Node_Str"+ iteration);
    }
    int attacked=node.state().attackedQueens();
    if (attacked == 0) {
      System.out.println("String_Node_Str");
      System.out.println(node);
      break;
    }
  }
}

Fixed version (ground truth):
public static void main(String[] args){
  final int size=8;
  Hipster.SearchProblem<Void,NQueens,WeightedNode<Void,NQueens,Double>> p=ProblemBuilder.create().initialState(new NQueens(size)).defineProblemWithoutActions().useTransitionFunction(new StateTransitionFunction<NQueens>(){
    @Override public Iterable<NQueens> successorsOf(    NQueens state){
      Set<NQueens> states=new HashSet<NQueens>();
      for (int i=0; i < size; i++) {
        for (int j=0; j < size; j++) {
          if (state.getQueens()[i] != j) {
            int[] queens=Arrays.copyOf(state.getQueens(),size);
            queens[i]=j;
            states.add(new NQueens(queens));
          }
        }
      }
      return states;
    }
  }
).useCostFunction(new CostFunction<Void,NQueens,Double>(){
    @Override public Double evaluate(    Transition<Void,NQueens> transition){
      return 0d;
    }
  }
).useHeuristicFunction(new HeuristicFunction<NQueens,Double>(){
    @Override public Double estimate(    NQueens state){
      return (double)state.attackedQueens();
    }
  }
).build();
  System.out.println("String_Node_Str" + p.getInitialNode().state().attackedQueens() + "String_Node_Str");
  System.out.println(p.getInitialNode().state());
  System.out.println("String_Node_Str");
  System.out.println(Hipster.createHillClimbing(p,true).search(new Predicate<WeightedNode<Void,NQueens,Double>>(){
    @Override public boolean apply(    WeightedNode<Void,NQueens,Double> node){
      return node.getScore().equals(0d);
    }
  }
));
  System.out.println("String_Node_Str");
  HillClimbing<Void,NQueens,Double,WeightedNode<Void,NQueens,Double>>.EHCIter it=Hipster.createHillClimbing(p,true).iterator();
  int iteration=0;
  Double best=it.getBestScore();
  while (it.hasNext()) {
    iteration++;
    WeightedNode<Void,NQueens,Double> node=it.next();
    if (node.getScore() < best) {
      best=node.getScore();
      System.out.println("String_Node_Str" + best + "String_Node_Str"+ iteration);
    }
    int attacked=node.state().attackedQueens();
    if (attacked == 0) {
      System.out.println("String_Node_Str");
      System.out.println(node);
      break;
    }
  }
}