Fix SBX prob_bin parameter to control parent exchange probability #725
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR fixes the
prob_bin
parameter in the SBX (Simulated Binary Crossover) implementation to properly control the probability of parent value exchange.Problem
The current implementation has a semantic issue where
prob_bin
controls random swapping based on value magnitude rather than parent identity. This creates inconsistent behavior depending on which parent has larger/smaller values.Solution
prob_bin
represent the probability that parents exchange valuesprob_bin=0.0
np.where
syntax for child assignment and exchangeBehavior
With this fix:
prob_bin=0.0
: Child1←Parent1, Child2←Parent2 (no exchange)prob_bin=0.25
: 25% chance of exchange (Child1←Parent2, Child2←Parent1)prob_bin=0.5
: 50% chance of exchange (equivalent to old behavior)prob_bin=1.0
: Always exchange (Child1←Parent2, Child2←Parent1)Backward Compatibility
The fix maintains equivalent behavior at
prob_bin=0.5
(the default), ensuring backward compatibility while providing the correct semantics at other values.Closes #673