From 4f24396397cc4a732e46b8bc9904420aa89df3b1 Mon Sep 17 00:00:00 2001 From: takemi853 Date: Wed, 2 Nov 2022 20:32:34 +0900 Subject: [PATCH] add StoppingByEarlyStopping --- .gitignore | 1 + docs/.nojekyll | 0 examples/__init__.py | 0 examples/experiment/__init__.py | 0 examples/multiobjective/__init__.py | 0 examples/multiobjective/gde3/__init__.py | 0 examples/multiobjective/hype/__init__.py | 0 examples/multiobjective/ibea/__init__.py | 0 examples/multiobjective/mocell/__init__.py | 0 examples/multiobjective/moead/__init__.py | 0 examples/multiobjective/nsgaii/__init__.py | 0 examples/multiobjective/nsgaiii/__init__.py | 0 examples/multiobjective/omopso/__init__.py | 0 .../multiobjective/random_search/__init__.py | 0 examples/multiobjective/smpso/__init__.py | 0 examples/multiobjective/spea2/__init__.py | 0 examples/singleobjective/__init__.py | 0 .../evolution_strategy/__init__.py | 0 examples/singleobjective/gde3/__init__.py | 0 .../genetic_algorithm/__init__.py | 0 .../singleobjective/local_search/__init__.py | 0 examples/singleobjective/nsgaii/__init__.py | 0 .../simulated_annealing/__init__.py | 0 jmetal/algorithm/__init__.py | 0 jmetal/algorithm/test/__init__.py | 0 jmetal/core/__init__.py | 0 jmetal/core/test/__init__.py | 0 jmetal/lab/__init__.py | 0 jmetal/lab/statistical_test/__init__.py | 0 jmetal/operator/test/__init__.py | 0 jmetal/problem/multiobjective/__init__.py | 0 jmetal/problem/multiobjective/test/__init__.py | 0 jmetal/problem/singleobjective/__init__.py | 0 .../problem/singleobjective/test/__init__.py | 0 jmetal/util/__init__.py | 0 jmetal/util/termination_criterion.py | 18 ++++++++++++++++++ jmetal/util/test/__init__.py | 0 37 files changed, 19 insertions(+) mode change 100644 => 100755 docs/.nojekyll mode change 100644 => 100755 examples/__init__.py mode change 100644 => 100755 examples/experiment/__init__.py mode change 100644 => 100755 examples/multiobjective/__init__.py mode change 100644 => 100755 examples/multiobjective/gde3/__init__.py mode change 100644 => 100755 examples/multiobjective/hype/__init__.py mode change 100644 => 100755 examples/multiobjective/ibea/__init__.py mode change 100644 => 100755 examples/multiobjective/mocell/__init__.py mode change 100644 => 100755 examples/multiobjective/moead/__init__.py mode change 100644 => 100755 examples/multiobjective/nsgaii/__init__.py mode change 100644 => 100755 examples/multiobjective/nsgaiii/__init__.py mode change 100644 => 100755 examples/multiobjective/omopso/__init__.py mode change 100644 => 100755 examples/multiobjective/random_search/__init__.py mode change 100644 => 100755 examples/multiobjective/smpso/__init__.py mode change 100644 => 100755 examples/multiobjective/spea2/__init__.py mode change 100644 => 100755 examples/singleobjective/__init__.py mode change 100644 => 100755 examples/singleobjective/evolution_strategy/__init__.py mode change 100644 => 100755 examples/singleobjective/gde3/__init__.py mode change 100644 => 100755 examples/singleobjective/genetic_algorithm/__init__.py mode change 100644 => 100755 examples/singleobjective/local_search/__init__.py mode change 100644 => 100755 examples/singleobjective/nsgaii/__init__.py mode change 100644 => 100755 examples/singleobjective/simulated_annealing/__init__.py mode change 100644 => 100755 jmetal/algorithm/__init__.py mode change 100644 => 100755 jmetal/algorithm/test/__init__.py mode change 100644 => 100755 jmetal/core/__init__.py mode change 100644 => 100755 jmetal/core/test/__init__.py mode change 100644 => 100755 jmetal/lab/__init__.py mode change 100644 => 100755 jmetal/lab/statistical_test/__init__.py mode change 100644 => 100755 jmetal/operator/test/__init__.py mode change 100644 => 100755 jmetal/problem/multiobjective/__init__.py mode change 100644 => 100755 jmetal/problem/multiobjective/test/__init__.py mode change 100644 => 100755 jmetal/problem/singleobjective/__init__.py mode change 100644 => 100755 jmetal/problem/singleobjective/test/__init__.py mode change 100644 => 100755 jmetal/util/__init__.py mode change 100644 => 100755 jmetal/util/test/__init__.py diff --git a/.gitignore b/.gitignore index 958121ef..384dc06e 100644 --- a/.gitignore +++ b/.gitignore @@ -69,6 +69,7 @@ target/ # Jupyter Notebook .ipynb_checkpoints +*.ipynb # pyenv .python-version diff --git a/docs/.nojekyll b/docs/.nojekyll old mode 100644 new mode 100755 diff --git a/examples/__init__.py b/examples/__init__.py old mode 100644 new mode 100755 diff --git a/examples/experiment/__init__.py b/examples/experiment/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/__init__.py b/examples/multiobjective/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/gde3/__init__.py b/examples/multiobjective/gde3/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/hype/__init__.py b/examples/multiobjective/hype/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/ibea/__init__.py b/examples/multiobjective/ibea/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/mocell/__init__.py b/examples/multiobjective/mocell/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/moead/__init__.py b/examples/multiobjective/moead/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/nsgaii/__init__.py b/examples/multiobjective/nsgaii/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/nsgaiii/__init__.py b/examples/multiobjective/nsgaiii/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/omopso/__init__.py b/examples/multiobjective/omopso/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/random_search/__init__.py b/examples/multiobjective/random_search/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/smpso/__init__.py b/examples/multiobjective/smpso/__init__.py old mode 100644 new mode 100755 diff --git a/examples/multiobjective/spea2/__init__.py b/examples/multiobjective/spea2/__init__.py old mode 100644 new mode 100755 diff --git a/examples/singleobjective/__init__.py b/examples/singleobjective/__init__.py old mode 100644 new mode 100755 diff --git a/examples/singleobjective/evolution_strategy/__init__.py b/examples/singleobjective/evolution_strategy/__init__.py old mode 100644 new mode 100755 diff --git a/examples/singleobjective/gde3/__init__.py b/examples/singleobjective/gde3/__init__.py old mode 100644 new mode 100755 diff --git a/examples/singleobjective/genetic_algorithm/__init__.py b/examples/singleobjective/genetic_algorithm/__init__.py old mode 100644 new mode 100755 diff --git a/examples/singleobjective/local_search/__init__.py b/examples/singleobjective/local_search/__init__.py old mode 100644 new mode 100755 diff --git a/examples/singleobjective/nsgaii/__init__.py b/examples/singleobjective/nsgaii/__init__.py old mode 100644 new mode 100755 diff --git a/examples/singleobjective/simulated_annealing/__init__.py b/examples/singleobjective/simulated_annealing/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/algorithm/__init__.py b/jmetal/algorithm/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/algorithm/test/__init__.py b/jmetal/algorithm/test/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/core/__init__.py b/jmetal/core/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/core/test/__init__.py b/jmetal/core/test/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/lab/__init__.py b/jmetal/lab/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/lab/statistical_test/__init__.py b/jmetal/lab/statistical_test/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/operator/test/__init__.py b/jmetal/operator/test/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/problem/multiobjective/__init__.py b/jmetal/problem/multiobjective/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/problem/multiobjective/test/__init__.py b/jmetal/problem/multiobjective/test/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/problem/singleobjective/__init__.py b/jmetal/problem/singleobjective/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/problem/singleobjective/test/__init__.py b/jmetal/problem/singleobjective/test/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/util/__init__.py b/jmetal/util/__init__.py old mode 100644 new mode 100755 diff --git a/jmetal/util/termination_criterion.py b/jmetal/util/termination_criterion.py index 6dabd89e..729c2045 100644 --- a/jmetal/util/termination_criterion.py +++ b/jmetal/util/termination_criterion.py @@ -94,3 +94,21 @@ def is_met(self): met = self.value * self.degree > self.expected_value return met + +class StoppingByEarlyStopping(TerminationCriterion): + def __init__(self, early_stopping_rounds: int): + super(StoppingByEarlyStopping, self).__init__() + self.early_stopping_rounds = early_stopping_rounds + self.prev_objectives = 0 + self.duplicate_rounds = 0 + + def update(self, *args, **kwargs): + if self.prev_objectives == kwargs["SOLUTIONS"].objectives[0]: + self.duplicate_rounds += 1 + else: + self.duplicate_rounds = 0 + self.prev_objectives = kwargs["SOLUTIONS"].objectives[0] + + @property + def is_met(self): + return self.duplicate_rounds >= self.early_stopping_rounds diff --git a/jmetal/util/test/__init__.py b/jmetal/util/test/__init__.py old mode 100644 new mode 100755