/* returns all the solutions as strings, one per line
  */
 public String getAllSolutionStrings() {
   StringBuffer sb = new StringBuffer();
   for (int i = 0; i < solutions.length; i++) {
     sb.append(solutions[i]);
   }
   return sb.toString();
 }
  /* returns a string with info on the ranges, obj constraints, etc
   */
  public String getSpaceDefinitionString() {
    StringBuffer sb = new StringBuffer();

    sb.append("\nRanges:\n");
    sb.append("\t_Name_\t_Min_\t_Max_\n");
    for (int i = 0; i < ranges.length; i++) {
      sb.append("\t");
      sb.append(ranges[i].getName());
      sb.append("\t");
      sb.append(ranges[i].getMin());
      sb.append("\t");
      sb.append(ranges[i].getMax());
      sb.append("\n");
    }
    sb.append("\nObjective Constraint:\n");
    sb.append("\t_Name_\t_Is Maximizing?_\n");
    sb.append("\t");
    sb.append(objConstraints.getName());
    sb.append("\t");
    sb.append(objConstraints.isMaximizing());
    sb.append("\n");
    return (sb.toString());
  }
  /**
   * Construct a string representing the current status of the population, best members, maybe worst
   * members, whatever.
   */
  public String statusString() {
    StringBuffer sb = new StringBuffer(1024);
    sb.append("\nBest performance ");
    sb.append(solutions[bestSolution].getObjective());
    sb.append(" looking for ");
    sb.append(this.convergenceTarget);
    sb.append("\n    -");
    sb.append(solutions[bestSolution]);

    sb.append('\n');
    sb.append("Worst performance : ");
    sb.append(solutions[worstSolution].getObjective());
    sb.append('\n');
    sb.append("Average performance : ");
    sb.append(this.getAverage());
    sb.append('\n');
    return sb.toString();
  }