def test_strict_single_point_crossover(self, rand_mock):
        rand_mock.side_effect = lambda u: u[0]

        expected_root1 = GTreeNode(6)  # TODO refactor after <BUG URL HERE>
        expected_root1.addChild(GTreeNode(2))
        expected_root1.addChild(GTreeNode(6))
        expected_root2 = GTreeNode(4)
        expected_root2.addChild(GTreeNode(3))
        expected_root2.addChild(GTreeNode(5))

        self.assertCrossoverResultsEqual(
            Crossovers.GTreeCrossoverSinglePointStrict,
            GTree(expected_root1),
            None,
            genome_attr_name=None,
            assertion_name='assetTreesEqual',
            crossover_extra_kwargs={'count': 1}
        )
        self.assertCrossoverResultsEqual(
            Crossovers.GTreeCrossoverSinglePointStrict,
            GTree(expected_root1),
            GTree(expected_root2),
            genome_attr_name=None,
            assertion_name='assetTreesEqual',
            crossover_extra_kwargs={'count': 2}
        )
Example #2
0
 def setUp(self):
     mom_root = GTreeNode(1)
     mom_root.addChild(GTreeNode(2))
     mom_root.addChild(GTreeNode(3))
     self.mom = GTree(mom_root)
     self.mom.setParams(max_depth=2)
     dad_root = GTreeNode(4)
     dad_root.addChild(GTreeNode(5))
     dad_root.addChild(GTreeNode(6))
     self.dad = GTree(dad_root)
     self.dad.setParams(max_depth=2)
 def setUp(self):
     mom_root = GTreeNode(1)
     mom_root.addChild(GTreeNode(2))
     mom_root.addChild(GTreeNode(3))
     self.mom = GTree(mom_root)
     self.mom.setParams(max_depth=2)
     dad_root = GTreeNode(4)
     dad_root.addChild(GTreeNode(5))
     dad_root.addChild(GTreeNode(6))
     self.dad = GTree(dad_root)
     self.dad.setParams(max_depth=2)
Example #4
0
class GTreeCrossoversTestCase(CrossoverTestCase):
    def setUp(self):
        mom_root = GTreeNode(1)
        mom_root.addChild(GTreeNode(2))
        mom_root.addChild(GTreeNode(3))
        self.mom = GTree(mom_root)
        self.mom.setParams(max_depth=2)
        dad_root = GTreeNode(4)
        dad_root.addChild(GTreeNode(5))
        dad_root.addChild(GTreeNode(6))
        self.dad = GTree(dad_root)
        self.dad.setParams(max_depth=2)

    def assetTreesEqual(self, tree1, tree2):
        """ Compares values of simplest trees with root and leafes from root"""
        self.assertFalse((tree1 is None and tree2 is not None)
                         or (tree1 is not None and tree2 is None))
        if not (tree1 is None and tree2 is None):
            root1, root2 = tree1.getRoot(), tree2.getRoot()
            self.assertEqual(root1.node_data, root2.node_data)
            root1_childs = set([l.node_data for l in root1.getChilds()])
            root2_childs = set([l.node_data for l in root2.getChilds()])
            print(root1_childs, root2_childs)
            self.assertFalse((root1_childs and not root2_childs)
                             or (not root1_childs and root2_childs))
            print(root1_childs, root2_childs)
            self.assertFalse(root1_childs - root2_childs)

    @patch('pyevolve.Crossovers.rand_choice')
    def test_single_point_crossover(self, rand_mock):
        rand_mock.side_effect = lambda u: u[0]

        expected_root1 = GTreeNode(1)  # TODO refactor after <BUG URL HERE>
        expected_root1.addChild(GTreeNode(2))
        expected_root1.addChild(GTreeNode(6))
        expected_root2 = GTreeNode(4)
        expected_root2.addChild(GTreeNode(3))
        expected_root2.addChild(GTreeNode(5))

        self.assertCrossoverResultsEqual(Crossovers.GTreeCrossoverSinglePoint,
                                         GTree(expected_root1),
                                         None,
                                         genome_attr_name=None,
                                         assertion_name='assetTreesEqual',
                                         crossover_extra_kwargs={'count': 1})
        self.assertCrossoverResultsEqual(Crossovers.GTreeCrossoverSinglePoint,
                                         GTree(expected_root1),
                                         GTree(expected_root2),
                                         genome_attr_name=None,
                                         assertion_name='assetTreesEqual',
                                         crossover_extra_kwargs={'count': 2})

    @nottest  # patch GTreeBase.getRandomNode
    @patch('pyevolve.Crossovers.rand_choice')
    def test_strict_single_point_crossover(self, rand_mock):
        rand_mock.side_effect = lambda u: u[0]

        expected_root1 = GTreeNode(6)  # TODO refactor after <BUG URL HERE>
        expected_root1.addChild(GTreeNode(2))
        expected_root1.addChild(GTreeNode(6))
        expected_root2 = GTreeNode(4)
        expected_root2.addChild(GTreeNode(3))
        expected_root2.addChild(GTreeNode(5))

        self.assertCrossoverResultsEqual(
            Crossovers.GTreeCrossoverSinglePointStrict,
            GTree(expected_root1),
            None,
            genome_attr_name=None,
            assertion_name='assetTreesEqual',
            crossover_extra_kwargs={'count': 1})
        self.assertCrossoverResultsEqual(
            Crossovers.GTreeCrossoverSinglePointStrict,
            GTree(expected_root1),
            GTree(expected_root2),
            genome_attr_name=None,
            assertion_name='assetTreesEqual',
            crossover_extra_kwargs={'count': 2})
 def test_tree_integer_initializator(self):
     genome = GTree()
     genome.setParams(max_depth=3)
     Initializators.GTreeInitializatorInteger(genome)
     for gen in genome.getAllNodes():
         self.assertTrue(type(gen.getData()) == int)
class GTreeCrossoversTestCase(CrossoverTestCase):
    def setUp(self):
        mom_root = GTreeNode(1)
        mom_root.addChild(GTreeNode(2))
        mom_root.addChild(GTreeNode(3))
        self.mom = GTree(mom_root)
        self.mom.setParams(max_depth=2)
        dad_root = GTreeNode(4)
        dad_root.addChild(GTreeNode(5))
        dad_root.addChild(GTreeNode(6))
        self.dad = GTree(dad_root)
        self.dad.setParams(max_depth=2)

    def assetTreesEqual(self, tree1, tree2):
        """ Compares values of simplest trees with root and leafes from root"""
        self.assertFalse((tree1 is None and tree2 is not None) or (tree1 is not None and tree2 is None))
        if not(tree1 is None and tree2 is None):
            root1, root2 = tree1.getRoot(), tree2.getRoot()
            self.assertEqual(root1.node_data, root2.node_data)
            root1_childs = set([l.node_data for l in root1.getChilds()])
            root2_childs = set([l.node_data for l in root2.getChilds()])
            print root1_childs, root2_childs
            self.assertFalse((root1_childs and not root2_childs) or (not root1_childs and root2_childs))
            print root1_childs, root2_childs
            self.assertFalse(root1_childs - root2_childs)

    @patch('pyevolve.Crossovers.rand_choice')
    def test_single_point_crossover(self, rand_mock):
        rand_mock.side_effect = lambda u: u[0]

        expected_root1 = GTreeNode(1)  # TODO refactor after <BUG URL HERE>
        expected_root1.addChild(GTreeNode(2))
        expected_root1.addChild(GTreeNode(6))
        expected_root2 = GTreeNode(4)
        expected_root2.addChild(GTreeNode(3))
        expected_root2.addChild(GTreeNode(5))

        self.assertCrossoverResultsEqual(
            Crossovers.GTreeCrossoverSinglePoint,
            GTree(expected_root1),
            None,
            genome_attr_name=None,
            assertion_name='assetTreesEqual',
            crossover_extra_kwargs={'count': 1}
        )
        self.assertCrossoverResultsEqual(
            Crossovers.GTreeCrossoverSinglePoint,
            GTree(expected_root1),
            GTree(expected_root2),
            genome_attr_name=None,
            assertion_name='assetTreesEqual',
            crossover_extra_kwargs={'count': 2}
        )

    @nottest  # patch GTreeBase.getRandomNode
    @patch('pyevolve.Crossovers.rand_choice')
    def test_strict_single_point_crossover(self, rand_mock):
        rand_mock.side_effect = lambda u: u[0]

        expected_root1 = GTreeNode(6)  # TODO refactor after <BUG URL HERE>
        expected_root1.addChild(GTreeNode(2))
        expected_root1.addChild(GTreeNode(6))
        expected_root2 = GTreeNode(4)
        expected_root2.addChild(GTreeNode(3))
        expected_root2.addChild(GTreeNode(5))

        self.assertCrossoverResultsEqual(
            Crossovers.GTreeCrossoverSinglePointStrict,
            GTree(expected_root1),
            None,
            genome_attr_name=None,
            assertion_name='assetTreesEqual',
            crossover_extra_kwargs={'count': 1}
        )
        self.assertCrossoverResultsEqual(
            Crossovers.GTreeCrossoverSinglePointStrict,
            GTree(expected_root1),
            GTree(expected_root2),
            genome_attr_name=None,
            assertion_name='assetTreesEqual',
            crossover_extra_kwargs={'count': 2}
        )
 def test_tree_integer_initializator(self):
     genome = GTree()
     genome.setParams(max_depth=3)
     Initializators.GTreeInitializatorInteger(genome)
     for gen in genome.getAllNodes():
         self.assertTrue(type(gen.getData()) == int)