def test_apply_prop_scaling(self): # This scales the list according to the scaling type param = None # Check linear fit = FitnessProportionate(self.fitness, SCALING_LINEAR) scaling_list = fit._apply_prop_scaling(param) self.assertAlmostEqual(1.0, sum(scaling_list)) self.assertAlmostEqual(0.09375, scaling_list[0]) self.assertAlmostEqual(0.15625, scaling_list[1]) self.assertAlmostEqual(0.75, scaling_list[2]) # Check exponential fit = FitnessProportionate(self.fitness, SCALING_EXPONENTIAL) scaling_list = fit._apply_prop_scaling(param) self.assertAlmostEqual(1.0, sum(scaling_list)) self.assertAlmostEqual(0.014754098360655738, scaling_list[0]) self.assertAlmostEqual(0.040983606557377046, scaling_list[1]) self.assertAlmostEqual(0.94426229508196724, scaling_list[2]) fit = FitnessProportionate(self.fitness, SCALING_EXPONENTIAL) scaling_list = fit._apply_prop_scaling(param=1.5) self.assertAlmostEqual(1.0, sum(scaling_list)) self.assertAlmostEqual(0.038791152234464166, scaling_list[0]) self.assertAlmostEqual(0.083465270324597968, scaling_list[1]) self.assertAlmostEqual(0.87774357744093778, scaling_list[2]) # Check log fit = FitnessProportionate(self.fitness, SCALING_LOG) scaling_list = fit._apply_prop_scaling(param) self.assertAlmostEqual(1.0, sum(scaling_list)) self.assertAlmostEqual(0.10651459360996007, scaling_list[0]) self.assertAlmostEqual(0.24070711137026513, scaling_list[1]) self.assertAlmostEqual(0.6527782950197748, scaling_list[2]) # Check truncation fit = FitnessProportionate(self.fitness, SCALING_TRUNC) scaling_list = fit._apply_prop_scaling(param=2.0) self.assertAlmostEqual(1.0, sum(scaling_list)) self.assertAlmostEqual(0.0, scaling_list[0]) self.assertAlmostEqual(0.17241379310344829, scaling_list[1]) self.assertAlmostEqual(0.82758620689655171, scaling_list[2])
def test_class_init_(self): # is the scaling type set # does it check the number range fit = FitnessProportionate(self.fitness, SCALING_LINEAR) self.assertNotEqual(None, fit._scaling_type) # add some negative numbers self.fitness.extend([[-.5, 3], [-.25, 4], [2.5, 2]]) self.assertRaises(ValueError, FitnessProportionate, self.fitness, SCALING_LINEAR)
def test_select(self): fit = FitnessProportionate(self.fitness, SCALING_LINEAR) self.assertEqual(3, len([i for i in fit.select()]))
def test_set_scaling_type(self): fit = FitnessProportionate(self.fitness, SCALING_LINEAR) self.assertEqual(SCALING_LINEAR, fit._scaling_type)