IBM ILOG Solver User's Manual > Evolutionary Algorithms > Using More Advanced EA Features > Using listeners and comparators > Suggested Answers

Exercise 1

A comparator is created as follows, taking care to avoid division by zero:

ILOCOMPARATOR0(OperatorImprovementRatioComparator, IloPoolProc, left, right) {
  OperatorStatistics * s1 = GetOperatorStatistics(left);
  OperatorStatistics * s2 = GetOperatorStatistics(right);

  // Avoid illegal computation of zero divided by zero
  if (s1->invocations == 0 || s2->invocations == 0)
    return IloFalse;

  return (IloNum)s1->improvements / s1->invocations >
         (IloNum)s2->improvements / s2->invocations;
}

The comparator is then used in the main body as shown below:

    IloComparator<IloPoolProc> opComparator = IloComposeLexical(
       OperatorImprovementRatioComparator(env),
       OperatorImprovementComparator(env),
       OperatorInvocationComparator(env)
    );


Privacy Policy