docs: public void evaluateConstraints(DoubleSolution solution)  {
      double[] constraint = new double[getNumberOfConstraints()];
      double[] x = new double[solution.getNumberOfVariables()];
      for (int i = 0; i < solution.getNumberOfVariables(); i++) {
        x[i] = solution.getVariableValue(i) ;
      }
  
      constraint[0] = 1 - (0.00139/(x[0]*x[1])+4.94*x[2]-0.08)             ;
      constraint[1] = 1 - (0.000306/(x[0]*x[1])+1.082*x[2]-0.0986)         ;
      constraint[2] = 50000 - (12.307/(x[0]*x[1]) + 49408.24*x[2]+4051.02) ;
      constraint[3] = 16000 - (2.098/(x[0]*x[1])+8046.33*x[2]-696.71)      ;
      constraint[4] = 10000 - (2.138/(x[0]*x[1])+7883.39*x[2]-705.04)      ;
      constraint[5] = 2000 - (0.417*x[0]*x[1] + 1721.26*x[2]-136.54)       ;
      constraint[6] = 550 - (0.164/(x[0]*x[1])+631.13*x[2]-54.48) ;
  
      double overallConstraintViolation = 0.0;
      int violatedConstraints = 0;
      for (int i = 0; i < getNumberOfConstraints(); i++) {
        if (constraint[i]<0.0){
          overallConstraintViolation+=constraint[i];
          violatedConstraints++;
        }
      }
  
      overallConstraintViolationDegree.setAttribute(solution, overallConstraintViolation);
      numberOfViolatedConstraints.setAttribute(solution, violatedConstraints);
    }