@@ -55,6 +55,14 @@ func (ea *EA) validate() error {
5555 if err := util .ValidateAlgorithmName (ea .Algorithm ); err != nil {
5656 return err
5757 }
58+
59+ // If randomrange not given or invalid, set to default.
60+ if len (ea .RandomRange ) != 2 {
61+ ea .RandomRange = []float64 {1 , 5 }
62+ } else if ea .RandomRange [0 ] >= ea .RandomRange [1 ] {
63+ ea .RandomRange = []float64 {1 , 5 }
64+ }
65+
5866 // TODO: Validate remaining fields.
5967 return nil
6068}
@@ -100,7 +108,7 @@ func (ea *EA) registerIndividual() string {
100108 case "floatingpoint" :
101109 return fmt .Sprintf ("toolbox.register(\" attr\" , random.uniform, %f, %f)\n " , ea .RandomRange [0 ], ea .RandomRange [1 ])
102110 case "integer" :
103- return fmt .Sprintf ("toolbox.register(\" attr\" , random.randint, %f , %f )\n " , ea .RandomRange [0 ], ea .RandomRange [1 ])
111+ return fmt .Sprintf ("toolbox.register(\" attr\" , random.randint, %d , %d )\n " , int ( ea .RandomRange [0 ]), int ( ea .RandomRange [1 ]) )
104112 default :
105113 return ""
106114 }
@@ -190,6 +198,17 @@ func (ea *EA) plots() string {
190198 return plots
191199}
192200
201+ func (ea * EA ) crossoverFunction () string {
202+ switch ea .CrossoverFunction {
203+ case "cxUniform" :
204+ return fmt .Sprintf ("toolbox.register(\" mate\" , tools.%s, indpb=%f)\n " , ea .CrossoverFunction , ea .Indpb )
205+ case "cxUniformPartialyMatched" :
206+ return fmt .Sprintf ("toolbox.register(\" mate\" , tools.%s, indpb=%f)\n " , ea .CrossoverFunction , ea .Indpb )
207+ default :
208+ return fmt .Sprintf ("toolbox.register(\" mate\" , tools.%s)\n " , ea .CrossoverFunction )
209+ }
210+ }
211+
193212func (ea * EA ) deCrossOverFunctions () string {
194213 return strings .Join ([]string {
195214 "def cxBinomial(x, y, cr):" ,
@@ -336,9 +355,9 @@ func (ea *EA) Code() (string, error) {
336355 "\t return y" ,
337356 }, "\n " ) + "\n \n "
338357 code += ea .deMutationFunction () + "\n \n "
358+ code += ea .deCrossOverFunctions () + "\n \n "
339359 }
340360
341- code += ea .deCrossOverFunctions () + "\n \n "
342361 code += ea .CustomPop + "\n "
343362 code += ea .CustomMutation + "\n "
344363 code += ea .CustomSelection + "\n \n "
@@ -358,7 +377,7 @@ func (ea *EA) Code() (string, error) {
358377 code += fmt .Sprintf ("F = %f\n " , ea .ScalingFactor )
359378 code += fmt .Sprintf ("toolbox.register(\" mate\" , %s, cr=CR)\n " , ea .CrossoverFunction )
360379 } else {
361- code += fmt . Sprintf ( "toolbox.register( \" mate \" , tools.%s) \n " , ea . CrossoverFunction )
380+ code += ea . crossoverFunction () + " \n "
362381 }
363382 code += ea .selectionFunction () + "\n "
364383 code += "\n toolbox.register(\" map\" , futures.map)\n \n "
0 commit comments