class FitnessFunctionTest(unittest.TestCase): def setUp(self): values = [({'x': i , 'y': j}, 4 * i + 2 * j) for i in range(0, 10) for j in range(0, 10)] self.f = FitnessFunction(values) def test_exact_value(self): answer = Node(Operations.PLUS, Node(Operations.MULTIPLICATION, left=Node(Operations.IDENTITY, value='x'), right=Node(Operations.NUMBER, value=4)), Node(Operations.MULTIPLICATION, left=Node(Operations.IDENTITY, value='y'), right=Node(Operations.NUMBER, value=2))) e = Expression(root=answer, variables=['x', 'y']) self.assertEqual(self.f.expression_value(e), 0.0) def test_wrong_value(self): wrong = Node(Operations.MINUS, Node(Operations.MULTIPLICATION, left=Node(Operations.IDENTITY, value='x'), right=Node(Operations.NUMBER, value=4)), Node(Operations.MULTIPLICATION, left=Node(Operations.IDENTITY, value='y'), right=Node(Operations.NUMBER, value=2))) e = Expression(root=wrong, variables=['x', 'y']) self.assertGreater(self.f.expression_value(e), 0.0)
def test_solve_is_not_crashing(self): values = [] for i in range(0,5): x = i values.append(({'x': x}, x * x )) f = FitnessFunction(values) exchanger = SimpleRandomExchanger( lambda: [Expression.generate_random(max_height=2, variables=['x']) for i in range(0, 5)]) config = ExpressionsImmuneSystemConfig() config.number_of_lymphocytes = 10 config.number_of_iterations = 5 immuneSystem = ExpressionsImmuneSystem(exact_values=values, variables=['x'], exchanger=exchanger, config=config) best = immuneSystem.solve() self.assertGreaterEqual(f.expression_value(best), 0)
Shows progress bar. Progress is passed in percent. """ print('\r[{0}] {1}%'.format('#' * (progress // 10), progress), end='') if __name__ == "__main__": number_of_lymphocytes = 100 max_height = 4 DataFileStorageHelper.save_to_file( 'test_x_y.txt', ['x', 'y'], lambda x, y: x * x + x * y * math.sin(x * y), 100) variables, values = DataFileStorageHelper.load_from_file('test_x_y.txt') f = FitnessFunction(values) exchanger = SimpleRandomExchanger(lambda: [ Expression.generate_random(max_height=max_height, variables=variables) for i in range(0, number_of_lymphocytes // 2) ]) config = ExpressionsImmuneSystemConfig() results = [] iterations = 5 start = time.clock() for i in range(0, iterations): immuneSystem = ExpressionsImmuneSystem(exact_values=values, variables=variables, exchanger=exchanger, config=config)
def setUp(self): values = [({'x': i , 'y': j}, 4 * i + 2 * j) for i in range(0, 10) for j in range(0, 10)] self.f = FitnessFunction(values)
def update_progress(progress:int): """ Shows progress bar. Progress is passed in percent. """ print('\r[{0}] {1}%'.format('#' * (progress // 10), progress), end='') if __name__ == "__main__": number_of_lymphocytes = 100 max_height = 4 DataFileStorageHelper.save_to_file('test_x_y.txt', ['x', 'y'], lambda x, y: x*x + x*y*math.sin(x*y), 100) variables, values = DataFileStorageHelper.load_from_file('test_x_y.txt') f = FitnessFunction(values) exchanger = SimpleRandomExchanger( lambda: [Expression.generate_random(max_height=max_height, variables=variables) for i in range(0, number_of_lymphocytes // 2)]) config = ExpressionsImmuneSystemConfig() results = [] iterations = 5 start = time.clock() for i in range(0, iterations): immuneSystem = ExpressionsImmuneSystem(exact_values=values, variables=variables, exchanger=exchanger, config=config) best = immuneSystem.solve()