class StoppingTaskBaseTestCase(TestCase): def setUp(self): self.D = 6 self.Lower, self.Upper = [2, 1, 1], [10, 10, 2] self.task = StoppingTask(Lower=self.Lower, Upper=self.Upper, D=self.D) def test_dim_ok(self): self.assertEqual(self.D, self.task.D) self.assertEqual(self.D, self.task.dim()) def test_lower(self): self.assertTrue(array_equal(fullArray(self.Lower, self.D), self.task.Lower)) self.assertTrue(array_equal(fullArray(self.Lower, self.D), self.task.bcLower())) def test_upper(self): self.assertTrue(array_equal(fullArray(self.Upper, self.D), self.task.Upper)) self.assertTrue(array_equal(fullArray(self.Upper, self.D), self.task.bcUpper())) def test_range(self): self.assertTrue(array_equal(fullArray(self.Upper, self.D) - fullArray(self.Lower, self.D), self.task.bRange)) self.assertTrue(array_equal(fullArray(self.Upper, self.D) - fullArray(self.Lower, self.D), self.task.bcRange())) def test_ngens(self): self.assertEqual(inf, self.task.nGEN) def test_nfess(self): self.assertEqual(inf, self.task.nFES) def test_stop_cond(self): self.assertFalse(self.task.stopCond()) def test_stop_condi(self): self.assertFalse(self.task.stopCondI()) def test_eval(self): self.assertRaises(AttributeError, lambda: self.task.eval([])) def test_evals(self): self.assertEqual(0, self.task.evals()) def test_iters(self): self.assertEqual(0, self.task.iters()) def test_next_iter(self): self.assertEqual(None, self.task.nextIter()) def test_is_feasible(self): self.assertFalse(self.task.isFeasible(fullArray([1, 2, 3], self.D)))
class ScaledTaskTestCase(TestCase): def setUp(self): self.D, self.nFES, self.nGEN = 10, 10, 10 self.t = StoppingTask(D=self.D, nFES=self.nFES, nGEN=self.nGEN, benchmark=MyBenchmark()) d1, d2 = self.t.bcLower() + self.t.bcRange() / 2, self.t.bcUpper() - self.t.bcRange() * 0.2 L, U = d1, d1 + d2 self.tc = ScaledTask(self.t, L, U) def test_isFeasible_fine(self): x = full(self.D, 10) self.assertTrue(self.t.isFeasible(x)) self.assertFalse(self.tc.isFeasible(x)) x = full(self.D, -10) self.assertTrue(self.t.isFeasible(x)) self.assertFalse(self.tc.isFeasible(x)) x = rnd.uniform(0, 5, self.D) self.assertTrue(self.t.isFeasible(x)) self.assertTrue(self.tc.isFeasible(x)) x = full(self.D, -20) self.assertFalse(self.t.isFeasible(x)) self.assertFalse(self.tc.isFeasible(x)) x = full(self.D, 20) self.assertFalse(self.t.isFeasible(x)) self.assertFalse(self.tc.isFeasible(x)) def test_nextIter_fine(self): for i in range(self.nGEN): self.assertFalse(self.t.stopCond()) self.assertFalse(self.tc.stopCond()) self.t.nextIter() self.assertTrue(self.t.stopCond()) self.assertTrue(self.tc.stopCond()) def test_nextIter_two_fine(self): for i in range(int(self.nGEN / 2)): self.assertFalse(self.t.stopCond()) self.assertFalse(self.tc.stopCond()) self.tc.nextIter() self.t.nextIter() self.assertTrue(self.t.stopCond()) self.assertTrue(self.tc.stopCond()) def test_stopCondI(self): for i in range(int(self.nGEN / 2)): self.assertFalse(self.t.stopCondI()) self.assertFalse(self.tc.stopCondI()) self.assertTrue(self.t.stopCondI()) self.assertTrue(self.tc.stopCondI()) def test_eval_fine(self): x = full(self.D, 0.0) for i in range(int(self.nFES / 2)): self.assertAlmostEqual(self.t.eval(x), 0.0, msg='Error at %s iteration!!!' % (i)) self.assertAlmostEqual(self.tc.eval(x), 0.0, msg='Error at %s iteration!!!' % (i)) self.assertEqual(inf, self.t.eval(x)) self.assertEqual(inf, self.tc.eval(x)) def test_eval_over_nFES_fine(self): x = full(self.D, 0.0) for i in range(int(self.nFES / 2)): self.t.eval(x) self.tc.eval(x) self.assertEqual(inf, self.t.eval(x)) self.assertEqual(inf, self.tc.eval(x)) def test_eval_over_nGEN_fine(self): x = full(self.D, 0.0) for i in range(int(self.nGEN / 2)): self.t.nextIter() self.tc.nextIter() self.assertEqual(inf, self.t.eval(x)) self.assertEqual(inf, self.tc.eval(x)) def test_nFES_count_fine(self): x = full(self.D, 0.0) for i in range(self.nFES // 2): try: self.t.eval(x) except Exception: pass self.assertEqual(self.t.evals(), 2 * i + 1, 'Error at %s. evaluation' % (i + 1)) try: self.tc.eval(x) except Exception: pass self.assertEqual(self.tc.evals(), 2 * i + 2, 'Error at %s. evaluation' % (i + 1)) def test_nGEN_count_fine(self): x = full(self.D, 0.0) for i in range(int((self.nFES - 1 if self.nFES % 2 > 0 else self.nFES - 2) / 2)): self.t.nextIter() self.assertEqual(self.t.iters(), 2 * i + 1, 'Error at %s. iteration' % (i + 1)) self.tc.nextIter() self.assertEqual(self.tc.iters(), 2 * i + 2, 'Error at %s. iteration' % (i + 1)) def test_stopCond_evals_fine(self): x = full(self.D, 0.0) for i in range(int((self.nFES - 1 if self.nFES % 2 > 0 else self.nFES - 2) / 2)): self.assertFalse(self.t.stopCond()) self.t.eval(x) self.assertFalse(self.tc.stopCond()) self.tc.eval(x) self.assertFalse(self.t.stopCond()) self.t.eval(x) self.assertFalse(self.tc.stopCond()) self.tc.eval(x) self.assertTrue(self.t.stopCond()) self.assertTrue(self.tc.stopCond()) def test_stopCond_iters_fine(self): x = full(self.D, 0.0) for i in range(int((self.nGEN - 1 if self.nGEN % 2 > 0 else self.nGEN - 2) / 2)): self.assertFalse(self.t.stopCond()) self.t.nextIter() self.assertFalse(self.tc.stopCond()) self.tc.nextIter() self.assertFalse(self.t.stopCond()) self.t.nextIter() self.assertFalse(self.tc.stopCond()) self.tc.nextIter() self.assertTrue(self.t.stopCond()) self.assertTrue(self.tc.stopCond())
class StoppingTaskTestCase(TestCase): def setUp(self): self.D, self.nFES, self.nGEN = 10, 10, 10 self.t = StoppingTask(D=self.D, nFES=self.nFES, nGEN=self.nGEN, 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, 0.0) for i in range(self.nFES): self.assertAlmostEqual(self.t.eval(x), 0.0, msg='Error at %s iteration!!!' % (i)) self.assertTrue(self.t.stopCond()) def test_eval_over_nFES_fine(self): x = full(self.D, 0.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, 0.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, 0.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, 0.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, 0.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, 0.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 eval(self, A): r"""Check if is algorithm trying to evaluate solution out of bounds.""" self.assertTrue(self.isFeasible(A), 'Solution %s is not in feasible space!!!' % A) return StoppingTask.eval(self, A)
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)
class StoppingTaskBaseTestCase(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 = 6 self.Lower, self.Upper = [2, 1, 1], [10, 10, 2] self.task = StoppingTask(Lower=self.Lower, Upper=self.Upper, D=self.D) def test_dim_ok(self): self.assertEqual(self.D, self.task.D) self.assertEqual(self.D, self.task.dim()) def test_lower(self): self.assertTrue(array_equal(fullArray(self.Lower, self.D), self.task.Lower)) self.assertTrue(array_equal(fullArray(self.Lower, self.D), self.task.bcLower())) def test_upper(self): self.assertTrue(array_equal(fullArray(self.Upper, self.D), self.task.Upper)) self.assertTrue(array_equal(fullArray(self.Upper, self.D), self.task.bcUpper())) def test_range(self): self.assertTrue(array_equal(fullArray(self.Upper, self.D) - fullArray(self.Lower, self.D), self.task.bRange)) self.assertTrue(array_equal(fullArray(self.Upper, self.D) - fullArray(self.Lower, self.D), self.task.bcRange())) def test_ngens(self): self.assertEqual(inf, self.task.nGEN) def test_nfess(self): self.assertEqual(inf, self.task.nFES) def test_stop_cond(self): self.assertFalse(self.task.stopCond()) def test_stop_condi(self): self.assertFalse(self.task.stopCondI()) def test_eval(self): self.assertRaises(AttributeError, lambda: self.task.eval([])) def test_evals(self): self.assertEqual(0, self.task.evals()) def test_iters(self): self.assertEqual(0, self.task.iters()) def test_next_iter(self): self.assertEqual(None, self.task.nextIter()) def test_is_feasible(self): self.assertFalse(self.task.isFeasible(fullArray([1, 2, 3], self.D)))