def fitness(self, ind: Expression) -> float:
        counter: float = 0.0
        for word in self.X:
            counter += 1.0 if ind.consume(word) else 0.0

        for word in self.Y:
            counter += 1.0 if ind.consume(word) is None else 0.0

        return counter / self.WordSetSize
Пример #2
0
def RandomWalk():
    a = Terminal('a')
    b = Terminal('b')
    B = Expression('B')
    B = a >> ~b
    hit = set()
    uniqueExpr = set()
    for _ in range(1000):
        (ret, _) = randomWalk(B, 1)
        assert (ret is not None)
        hit.add(hex(id(ret)))
        uniqueExpr.add(ret.__str__())
    assert (len(hit) == 4)
    assert (len(uniqueExpr) == 4)
    A: Expression = induce(['aba', 'abb', 'abc'], ['aa', 'ab', 'ac', 'abcd'])
    hit.clear()
    uniqueExpr.clear()
    for _ in range(1000):
        (ret, _) = randomWalk(A, 1)
        assert (ret is not None)
        hit.add(hex(id(ret)))
        uniqueExpr.add(ret.__str__())

    assert (len(hit) == 10)
    assert (len(uniqueExpr) == 10)
Пример #3
0
def SimpleWalkTest():
    a = Terminal('a')
    b = Terminal('b')
    A = Expression('A')
    A = a | ~b >> a | ~b
    assert (walkWithParent(A, 1)[1] == None)
    assert (walkWithParent(A, 1)[0].symbol == '|')
    assert (walkWithParent(A, 2)[1].symbol == '|')
    assert (walkWithParent(A, 2)[0].symbol == '|')
    assert (walkWithParent(A, 3)[1].symbol == '|')
    assert (walkWithParent(A, 3)[0].symbol == 'a')
    assert (walkWithParent(A, 4)[1].symbol == '|')
    assert (walkWithParent(A, 4)[0].symbol == '>>')
    assert (walkWithParent(A, 5)[1].symbol == '>>')
    assert (walkWithParent(A, 5)[0].symbol == '~')
    assert (walkWithParent(A, 6)[1].symbol == '~')
    assert (walkWithParent(A, 6)[0].symbol == 'b')
    assert (walkWithParent(A, 7)[1].symbol == '>>')
    assert (walkWithParent(A, 7)[0].symbol == 'a')
    assert (walkWithParent(A, 8)[1].symbol == '|')
    assert (walkWithParent(A, 8)[0].symbol == '~')
    assert (walkWithParent(A, 9)[1].symbol == '~')
    assert (walkWithParent(A, 9)[0].symbol == 'b')
    assert (walkWithParent(A, 10)[0] == None)
    assert (walkWithParent(A, 10)[1] == None)
Пример #4
0
def TestCount():
    A: Expression = induce(['aba', 'abb', 'abc'], ['aa', 'ab', 'ac', 'abcd'])
    assert (count(A) == 12)

    a = Terminal('a')
    B = Expression('B')
    B = a >> a
    assert (count(B) == 3)
Пример #5
0
def TestHeightUp():
    a = Terminal('a')
    b = Terminal('b')
    c = Terminal('c')
    d = Terminal('d')
    A = Expression('A')
    A = a >> b >> (b | a | c >> ~d)

    (exp, parExp) = walkWithParent(A, 8)
    assert (heightUp(A, exp, parExp) == 3)

    (exp, parExp) = walkWithParent(A, 12)
    assert (heightUp(A, exp, parExp) == 4)

    (exp, parExp) = walkWithParent(A, 4)
    assert (heightUp(A, exp, parExp) == 2)

    (exp, parExp) = walkWithParent(A, 2)
    assert (heightUp(A, exp, parExp) == 1)
Пример #6
0
def TestBasicSwitch():
    X = ['aba', 'abb', 'abc']
    Y = ['aa', 'ab', 'ac', 'abcd']

    A: Expression
    B: Expression
    A2: Expression
    B2: Expression
    for _ in range(1000):
        a = Terminal('a')
        b = Terminal('b')
        A = Expression('A')
        A = a >> b >> ~b >> a
        B = Expression('B')
        B = b >> a >> a >> b

        (A2, A2Par) = randomWalk(A, 2)
        (B2, B2Par) = randomWalk(B, 2)

        switch(A2, A2Par, B2, B2Par)

        for word in zip(X, Y):
            A.consume(word)
            B.consume(word)
Пример #7
0
def TestSwitchConsistency4():
    #unary 2

    a = Terminal('a')
    b = Terminal('b')
    c = Terminal('c')
    A = Expression('A')
    B = Expression('B')
    A = a >> ~a | c
    B = a | b >> b

    (nodeA, parA) = walkWithParent(A, 5)
    (nodeB, parB) = walkWithParent(B, 3)

    switch(nodeA, parA, nodeB, parB)

    assert (A.__str__() == 'a >> ~(b >> b) | c')
    assert (B.__str__() == 'a | a')
Пример #8
0
def TestSwitchConsistency1():
    #non terminal

    a = Terminal('a')
    b = Terminal('b')
    c = Terminal('c')
    A = Expression('A')
    B = Expression('B')
    A = a >> ~a | c
    B = a | b >> b

    (nodeA, parA) = walkWithParent(A, 2)
    (nodeB, parB) = walkWithParent(B, 3)

    switch(nodeA, parA, nodeB, parB)

    assert (A.__str__() == 'b >> b | c')
    assert (B.__str__() == 'a | a >> ~a')
Пример #9
0
def TestHeight3():
    a = Terminal('a')
    B = Expression('B')
    B = a >> a
    assert (height(B) == 1)
Пример #10
0
def TestHeight2():
    a = Terminal('a')
    b = Terminal('b')
    B = Expression('B')
    B = a | ~b >> a | ~b
    assert (height(B) == 4)