class StoppingTaskTestCase(TestCase): r"""Test case for testing `Task`, `StoppingTask` and `CountingTask` classes. Date: April 2019 Author: Klemen Berkovič See Also: * :class:`NiaPy.util.Task` * :class:`NiaPy.util.CountingTask` * :class:`NiaPy.util.StoppingTask` """ def setUp(self): self.D, self.nFES, self.nGEN = 10, 10, 10 self.t = StoppingTask(D=self.D, nFES=self.nFES, nGEN=self.nGEN, refValue=1, benchmark=MyBenchmark()) def test_isFeasible_fine(self): x = full(self.D, 10) self.assertTrue(self.t.isFeasible(x)) x = full(self.D, -10) self.assertTrue(self.t.isFeasible(x)) x = rnd.uniform(-10, 10, self.D) self.assertTrue(self.t.isFeasible(x)) x = full(self.D, -20) self.assertFalse(self.t.isFeasible(x)) x = full(self.D, 20) self.assertFalse(self.t.isFeasible(x)) def test_nextIter_fine(self): for i in range(self.nGEN): self.assertFalse(self.t.stopCond()) self.t.nextIter() self.assertTrue(self.t.stopCond()) def test_stopCondI(self): for i in range(self.nGEN): self.assertFalse(self.t.stopCondI(), msg='Error at %s iteration!!!' % (i)) self.assertTrue(self.t.stopCondI()) def test_eval_fine(self): x = full(self.D, 1.0) for i in range(self.nFES): self.assertAlmostEqual(self.t.eval(x), self.D, msg='Error at %s iteration!!!' % (i)) self.assertTrue(self.t.stopCond()) def test_eval_over_nFES_fine(self): x = full(self.D, 1.0) for i in range(self.nFES): self.t.eval(x) self.assertEqual(inf, self.t.eval(x)) self.assertTrue(self.t.stopCond()) def test_eval_over_nGEN_fine(self): x = full(self.D, 1.0) for i in range(self.nGEN): self.t.nextIter() self.assertEqual(inf, self.t.eval(x)) self.assertTrue(self.t.stopCond()) def test_nFES_count_fine(self): x = full(self.D, 1.0) for i in range(self.nFES): self.t.eval(x) self.assertEqual(self.t.Evals, i + 1, 'Error at %s. evaluation' % (i + 1)) def test_nGEN_count_fine(self): x = full(self.D, 1.0) for i in range(self.nGEN): self.t.nextIter() self.assertEqual(self.t.Iters, i + 1, 'Error at %s. iteration' % (i + 1)) def test_stopCond_evals_fine(self): x = full(self.D, 1.0) for i in range(self.nFES - 1): self.t.eval(x) self.assertFalse(self.t.stopCond()) self.t.eval(x) self.assertTrue(self.t.stopCond()) def test_stopCond_iters_fine(self): x = full(self.D, 1.0) for i in range(self.nGEN - 1): self.t.nextIter() self.assertFalse(self.t.stopCond()) self.t.nextIter() self.assertTrue(self.t.stopCond()) def test_stopCond_refValue_fine(self): x = full(self.D, 1.0) for i in range(self.nGEN - 5): self.assertFalse(self.t.stopCond()) self.assertEqual(self.D, self.t.eval(x)) self.t.nextIter() x = full(self.D, 0.0) self.assertEqual(0, self.t.eval(x)) self.assertTrue(self.t.stopCond()) self.assertEqual(self.nGEN - 5, self.t.Iters) def test_print_conv_one_fine(self): r1, r2 = [], [] for i in range(self.nFES): x = full(self.D, 10 - i) r1.append(i + 1), r2.append(self.t.eval(x)) t_r1, t_r2 = self.t.return_conv() self.assertTrue(array_equal(r1, t_r1)) self.assertTrue(array_equal(r2, t_r2)) def test_print_conv_two_fine(self): r1, r2 = [], [] for i in range(self.nFES): x = full(self.D, 10 - i if i not in (3, 4, 5) else 4) r1.append(i + 1), r2.append(self.t.eval(x)) t_r1, t_r2 = self.t.return_conv() self.assertTrue(array_equal(r2, t_r2)) self.assertTrue(array_equal(r1, t_r1))
# encoding=utf8 # This is temporary fix to import module from parent folder # It will be removed when package is published on PyPI import sys sys.path.append('../') # End of fix from NiaPy.task import StoppingTask, OptimizationType from NiaPy.benchmarks import Sphere from NiaPy.algorithms.basic import DifferentialEvolution # Storing improvements during the evolutionary cycle for i in range(1): task = StoppingTask(D=10, nFES=10000, benchmark=Sphere()) algo = DifferentialEvolution(NP=40, CR=0.9, F=0.5) best = algo.run(task) evals, x_f = task.return_conv() print(evals) # print function evaluations print(x_f) # print values