Opened 7 years ago
Closed 7 years ago
#2792 closed enhancement (done)
Genetic algorithm should choose a mutation operator by default
Reported by: | abeham | Owned by: | mkommend |
---|---|---|---|
Priority: | medium | Milestone: | HeuristicLab 3.3.15 |
Component: | Algorithms.GeneticAlgorithm | Version: | 3.3.14 |
Keywords: | Cc: |
Description
The mutation operator is an OptionalConstrainedValueParameter which by default is set to null, meaning no mutation operator is chosen. We know however that genetic algorithms usually work better with mutation.
Any user that creates a new GA, drops some problem to it and clicks run, essentially runs a bad configuration. I consider it a separate problem to chose the best mutation operator, but any mutation operator may be better than choosing no mutation.
Change History (18)
comment:1 Changed 7 years ago by abeham
comment:2 Changed 7 years ago by abeham
- Owner set to abeham
- Status changed from new to accepted
comment:3 Changed 7 years ago by abeham
r15006: changed mutator parameter from optional constrained value to constrained value
comment:4 Changed 7 years ago by abeham
Shall we adapt the OS variants also? In OS mutation is not as important as it is for the standard GA. Nevertheless, the default configuration would be more consistent if in addition to the default 5% mutation probability, a mutation operator would also be selected.
comment:5 Changed 7 years ago by abeham
r15007: adapted wiring code to be the same as with crossover, choosing the default manipulator intead of the first (by name)
comment:6 Changed 7 years ago by abeham
r15008: small fix
comment:7 Changed 7 years ago by abeham
- Owner changed from abeham to mkommend
- Status changed from accepted to reviewing
comment:8 Changed 7 years ago by mkommend
Pretty neat feature. Please adapt the OSGA as well!
comment:9 Changed 7 years ago by mkommend
r15047: Adapted symbolic data analysis problems to use the MultiSymbolicExpressionTreeManipulator as default.
comment:10 Changed 7 years ago by mkommend
- Owner changed from mkommend to abeham
- Status changed from reviewing to assigned
comment:11 Changed 7 years ago by abeham
- Owner changed from abeham to mkommend
- Status changed from assigned to reviewing
- adapted OSGA, Island-GA, Island-OSGA, and SASEGASA as well
- added default crossover logic to SASEGASA
comment:12 Changed 7 years ago by abeham
- Owner changed from mkommend to abeham
- Status changed from reviewing to assigned
This should also be changed in ALPS
comment:13 Changed 7 years ago by mkommend
comment:14 Changed 7 years ago by abeham
- Owner changed from abeham to mkommend
- Status changed from assigned to reviewing
comment:15 Changed 7 years ago by mkommend
- Owner changed from mkommend to abeham
- Status changed from reviewing to readytorelease
Reviewed r15070: looks fantastic.
comment:16 Changed 7 years ago by abeham
- Owner changed from abeham to mkommend
- Status changed from readytorelease to reviewing
r15107: also adapted NSGA-II
comment:17 Changed 7 years ago by mkommend
- Status changed from reviewing to readytorelease
Reviewed and tested r15107.
comment:18 Changed 7 years ago by mkommend
- Resolution set to done
- Status changed from readytorelease to closed
The cleanest solution in my opinion would be to change the parameter type from OptionalConstrainedValueParameter<IManipulator> to ConstrainedValueParameter<IManipulator>. We do have the mutation probability parameter which, if set to 0%, can produce the same configuration compared to selecting no mutation operator.
Of course this would break API backwards compatibility.(actually, the parameter was never exposed as an optional constrained value parameter, but as interface type)Another option would be to check in OnProblemChanged if the user loads a problem for the first time and then select a mutation operator by default. This is a bit more tricky, because the user could deliberately change mutation to "-" in which case we must not overrule with a default choice.