You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
sbx crossover always returns the lower SBX child, so crossed genes drift towards the lower bound #369
Found while benchmarking. crossover_type="sbx" always produces the lower of the two SBX children, so every crossed gene lands below its parents' midpoint.
Here y1 <= y2 and beta_q > 0, so child < (y1 + y2) / 2 every time.
SBX (Deb & Agrawal 1995, "Simulated binary crossover for continuous search space", Complex Systems 9) makes two children, spread symmetrically around the parents' mean:
and gives each offspring one of them at random (in the bounded version of Deb's NSGA-II code, c1 uses the spread towards the lower bound and c2 the spread towards the upper bound). Always taking c1 moves every crossed gene downwards, so the operator isn't neutral: repeated crossover drifts the population towards the lower bounds. On problems whose optimum is at the lower bound, e.g. ZDT1-3, where the optimal x2..xn are 0, this bias helps; on others it hurts.
Suggested fix: take c1 or c2 with probability 1/2.
(For the exact bounded form, compute a separate beta for c2 from upper - y2, as in Deb's code; the min(...) above already keeps both children within the bounds.)
Activity
Pick either SBX child at random