@Override protected boolean operateInternal(Set<Triangle> triangles) { Triangle winner = random.choice(triangles); float perfectness = new BigDecimal("2").divide(winner.perfectness(), MathContext.DECIMAL128).floatValue(); float myRate = Math.max(perfectness, rate); if (!random.rate(myRate)) { return false; } for (Triangle t : triangles) { if (t == winner) { continue; } Segment common = TriangleUtils.segmentInCommon(winner, t); if (common != null) { boolean swapped = swap(triangles, winner, t, common); return swapped; } } return false; }