Skip to content

Commit

Permalink
improved termination criteria text
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasWeise committed Dec 28, 2023
1 parent 34a4780 commit de45d98
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 13 deletions.
56 changes: 56 additions & 0 deletions bibliography/bibliography.bib
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,11 @@ @string { a_chen_bo
@string { a_cheng_edwin_tai_chiu = "Edwin Tai Chiu Cheng" }
@string { a_chiong_raymond = "Raymond Chiong" }
@string { a_chretienne_philippe = "Philippe Chr{\'e}tienne" }
@string { a_clausen_anders = "Anders Clausen" }
@string { a_coffman_edward_g = "Edward G.\ Coffman" }
@string { a_cook_stephen_arthur = "Stephen Arthur Cook" }
@string { a_cook_william_john = "William John Cook" }
@string { a_crepinsek_matej = "Matej {\v{C}}repin{\v{s}}ek" }
@string { a_davis_jim = "Jim Davis" }
@string { a_de_causmaecker_patrick = "Patrick {De Causmaecker}" }
@string { a_delorme_maxence = "Maxence Delorme" }
Expand All @@ -80,6 +82,7 @@ @string { a_garey_michael_r
@string { a_geihs_kurt = "Kurt Geihs" }
@string { a_gen_mitsuo = "Mitsuo Gen" }
@string { a_gharbi_anis = "Anis Gharbi" }
@string { a_ghoreishi_seyyedeh_newsha = "Seyyedeh Newsha Ghoreishi" }
@string { a_giacobini_mario = "Mario Giacobini" }
@string { a_gonzalez_arce_teofilo_francisco = "Teofilo Francisco {Gonzalez Arce}" }
@string { a_gorldt_christian = "Christian Gorldt" }
Expand All @@ -106,6 +109,7 @@ @string { a_john_robert_i
@string { a_johnson_david_stiffler = "David Stifler Johnson" }
@string { a_johnson_e_l = "E.\ L.\ Johnson" }
@string { a_johnson_selmer_martin = "Selmer Martin Johnson" }
@string { a_jorgensen_bo_norregaard = "Bo N{\o}rregaard J{\o}rgensen" }
@string { a_juenger_michael = "Michael J{\"u}nger" }
@string { a_karp_richard_m = "Richard M.\ Karp" }
@string { a_kendall_graham = "Graham Kendall" }
Expand All @@ -126,10 +130,12 @@ @string { a_lawler_eugene_leighhton
@string { a_lawrence_stephen_r = "Stephen R.\ Lawrence" }
@string { a_lenstra_jan_karel = "Jan Karel Lenstra" }
@string { a_li_jiawei = "Jiawei Li" }
@string { a_liu_shih_hsi = "Shih{-}Hsi Liu" }
@string { a_liu_weichen = "Weichen Liu" }
@string { a_liu_zhen = "Zhen Liu" }
@string { a_lodi_anrea = "Andrea Lodi" }
@string { a_machado_penousal = "Penousal Machado" }
@string { a_madani_kurosh = "Kurosh Madani" }
@string { a_maeda_tatsuo = "Tatsuo Maeda" }
@string { a_manderick_bernard = "Bernard Manderick" }
@string { a_manner_reinhard = "Reinhard M{\"a}nner" }
Expand All @@ -142,6 +148,7 @@ @string { a_mccormack_jon
@string { a_meeran_sheik = "Sheik Meeran" }
@string { a_mehta_sanjay_v = "Sanjay V.\ Mehta" }
@string { a_merelo_guervos_juan_julian = "Juan Juli{\'a}n {Merelo Guerv{\'o}s}" }
@string { a_mernik_marjan = "Marjan Mernik" }
@string { a_michalewicz_matthew = "Matthew Michalewicz" }
@string { a_michalewicz_zbigniew = "Zbigniew Michalewicz" }
@string { a_michel_laurent = "Laurent Michel" }
Expand All @@ -155,6 +162,7 @@ @string { a_neri_ferrante
@string { a_neumann_frank = "Frank Neumann" }
@string { a_ng_chi_to_daniel = "Chi{-}To Daniel Ng" }
@string { a_oneill_michael = "Michael {O'Neill}" }
@string { a_oreilly_una_may = "Una{-}May O'Reilly" }
@string { a_otto_boris = "Boris Otto" }
@string { a_pardalos_panos_m = "Panos Miltiades Pardalos" }
@string { a_pentek_tobias = "Tobias Pentek" }
Expand All @@ -167,12 +175,14 @@ @string { a_potts_chris_n
@string { a_preuss_mike = "Mike Preu{\ss}" }
@string { a_punnen_abraham_p = "Abraham P.\ Punnen" }
@string { a_qu_rong = "Rong Qu" }
@string { a_ravber_miha = "Miha Ravber" }
@string { a_rechenberg_ingo = "Ingo Rechenberg" }
@string { a_reinelt_gerhard = "Gerhard Reinelt" }
@string { a_reinhard_kai = "Kai Reinhard" }
@string { a_rinnooy_kan_a_h_k = "Alexander Hendrik George {Rinnooy Kan}" }
@string { a_rothlauf_franz = "Franz Rothlauf" }
@string { a_sabar_nasser = "Nasser Sabar" }
@string { a_sabourin_christophe = "Christophe Sabourin" }
@string { a_sahni_sartaj = "Sartaj Sahni" }
@string { a_sannomiya_nobu = "Nobuo Sannomiya" }
@string { a_sarli_michael = "Michael Sarli" }
Expand Down Expand Up @@ -205,6 +215,7 @@ @string { a_van_hoorn_jelke_jeron
@string { a_vanden_berghe_greet = "Greet {Vanden Berghe}" }
@string { a_vilim_petr = "Petr Vil{\'i}m" }
@string { a_voigt_hans_michael = "Hans{-}Michael Voigt" }
@string { a_warwick_kevin = "Kevin Warwick" }
@string { a_watson_richard_a = "Richard A.\ Watson" }
@string { a_weise_thomas = "Thomas Weise" }
@string { a_werner_frank = "Frank Werner" }
Expand Down Expand Up @@ -244,6 +255,7 @@ @string { p_railway_technical_research_institute
@string { p_sage_publications_inc = "{{SAGE} Publications Inc.}" }
@string { p_sage_publications_ltd = "{{SAGE} Publications Ltd.}" }
@string { p_scientific_research_publishing_inc = "{Scientific Research Publishing Inc. ({SCIRP})}"}
@string { p_scitepress = "SciTePress, Science and Technology Publications, Lda" }
@string { p_siam = "{Society for Industrial and Applied Mathematics Publications~({SIAM})}" }
@string { p_springer_boston = "{Springer}" }
@string { p_springer_international_publishing = "{Springer International Publishing~{AG}}" }
Expand Down Expand Up @@ -279,6 +291,8 @@ @string { l_israel_haifa
@string { l_japan_kobe = "{{Kobe}, {Japan}}" }
@string { l_japan_tokyo = "{{Tokyo}, {Japan}}"}
@string { l_netherlands_amsterdam = "{{Amsterdam}, {The Netherlands}}" }
@string { l_portugal_funchal = "{{Funchal}, {Madeira}, {Portugal}}" }
@string { l_portugal_setubal = "{{Set{\'u}bal}, {Portugal}}"}
@string { l_spain_barcelona = "{{Barcelona}, {Spain}}" }
@string { l_spain_granada = "{{Granada}, {Spain}}" }
@string { l_switzerland_cham = "{{Cham}, {Switzerland}}" }
Expand Down Expand Up @@ -332,6 +346,7 @@ @string { pa_sage_publications_inc
@string { pa_sage_publications_ltd = l_uk_london }
@string { pa_siam = l_usa_philadelphia }
@string { pa_scientific_research_publishing_inc = l_usa_los_angeles }
@string { pa_scitepress = l_portugal_setubal }
@string { pa_springer_boston = l_usa_boston }
@string { pa_springer_international_publishing = l_switzerland_cham }
@string { pa_springer_nature_america = l_usa_new_york }
Expand All @@ -358,8 +373,21 @@ @xdata{c_gecco
address = pa_acm,
}

@xdata{c_ijcci,
issn = {2184-3236},
publisher = p_scitepress,
address = pa_scitepress,
}


%% journals
@xdata{j_asoc,
journal = {Applied Soft Computing {(ASOC)}},
issn = {1568-4946},
publisher = p_elsevier,
address = pa_elsevier
}

@xdata{j_cace,
journal = {Computers {\&} Chemical Engineering},
issn = {0098-1354},
Expand Down Expand Up @@ -923,6 +951,15 @@ @incollection{FT1963PLCOLJSSR
pages = {225--251}
}

@inproceedings{GCJ2017TCIEAAS,
author = a_ghoreishi_seyyedeh_newsha # { and } # a_clausen_anders # { and } # a_jorgensen_bo_norregaard,
title = {Termination Criteria in Evolutionary Algorithms: {A} Survey},
pages = {373--384},
doi = {10.5220/0006577903730384},
crossref = {PROC2017IJCCI},
url = {https://pdfs.semanticscholar.org/05ca/33f534824b924d415623dce9eec420b33baf.pdf}
}

@book{GJ1979CAIAGTTTONC,
author = a_garey_michael_r # { and } # a_johnson_david_stiffler,
title = {Computers and Intractability: {A} Guide to the Theory of {NP}-Completeness},
Expand Down Expand Up @@ -1390,6 +1427,14 @@ @proceedings{PROC2016HICSS
editor = a_bui_tung_x # { and } # a_sprague_jr_ralph_h,
}

@proceedings{PROC2017IJCCI,
editor = a_sabourin_christophe # { and } # a_merelo_guervos_juan_julian # { and } # a_oreilly_una_may # { and } # a_madani_kurosh # { and } # a_warwick_kevin,
booktitle = {Proceedings of the 9th International Joint Conference on Computational Intelligence {(IJCCI'17)}, } # nov # {~1-3, 2017, } # l_portugal_funchal,
date = {2017},
isbn = {978-989-758-274-5},
xdata = {c_ijcci}
}

@article{PS2009FYOSASOM,
author = a_potts_chris_n # { and } # a_strusevich_vitaly_a,
title = {Fifty Years of Scheduling: {A} Survey of Milestones},
Expand All @@ -1404,6 +1449,17 @@ @article{PS2009FYOSASOM
urldate = {2023-12-06}
}

@article{RLMC2022MNOGAASCCH,
author = a_ravber_miha # { and } # a_liu_shih_hsi # { and } # a_mernik_marjan # { and } # a_crepinsek_matej,
titl = {Maximum Number of Generations as a Stopping Criterion Considered Harmful},
xdata = {j_asoc},
volume = {128},
number = {109478},
date = {2022-10},
doi = {10.1016/J.ASOC.2022.109478},
url = {https://www.researchgate.net/publication/362640980}
}

@article{S1961TBWPAPA,
author = {Leon Steinberg},
title = {The Backboard Wiring Problem: A Placement Algorithm},
Expand Down
2 changes: 1 addition & 1 deletion notation/optimization.sty
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ A search operator $\@searchOp:\random\times\searchSpace^k\mapsto\searchSpace$ wi
\newSymbol{obspel}{\ensuremath{z}}{z}{%
an objective value returned by the objective function~\objf, see \cref{def:objectiveValue}}%
\newSymbol{goalF}{\ensuremath{z_g}}{zg}{%
a goal objective value~$z_g$ is a pre-defined limit at which the optimization process can stop, i.e., if a solution~\solspel\ with $\objfOf{\solspel}\leq z_g$ is discovered, the optimization process can terminate and \shouldTerminate\ becomes \codeil{True}.}%
a goal objective value~$z_g$ is a pre-defined limit at which the optimization process can stop, i.e., if a solution~\solspel\ with $\objfOf{\solspel}\leq z_g$ is discovered, the optimization process can terminate and \shouldTerminate\ becomes \codeil{True}, see \cref{sec:termination:defs}.}%
%
\DeclareMathOperator{\@shouldTerminate}{shouldTerminate}%
\newSymbol{shouldTerminate}{\ensuremath{\@shouldTerminate}}{shouldTerminate}{%
Expand Down
40 changes: 28 additions & 12 deletions text/main/structure/termination/termination.tex
Original file line number Diff line number Diff line change
@@ -1,37 +1,45 @@
\hsection{The Termination Criterion and the Problem of Measuring Time}%
\hsection{The Termination Criterion}%
\label{sec:terminationCriterion}%
%
We have seen that the search spaces for even small instances of the \gls{JSSP} can already be quite large.
We simply cannot enumerate all points in them, as it would take too long.
This raises the question:
While optimization algorithms usually do something much cleverer than simply checking all possible solutions, we already discovered the profoundly simply question:
\inQuotes{If we cannot look at all possible solutions, how can we find the global optimum?}
We may also ask:
We then went a step further and asked:
\inQuotes{If we cannot look at all possible solutions, how can we know whether a given candidate solution is the global optimum or not?}
In some optimization scenarios, we can have good lower bounds~\lowerBoundOf{\objf} of the objective function~\objf\ and if we find a solution~$\globalOptimumOf{\solspel}\in\solutionSpace$ with $\objfOf{\globalOptimumOf{\solspel}}\leq\lowerBoundOf{\objf}$, then we know that we have solved the problem.
However, usually the answer to both question is simply:
\emph{We cannot.}

Usually, we don't know if the best solution~\bestSoFarOf{\solspel} we know so far is the global optimum or not.
Usually, we simply don't know if the best solution~\bestSoFarOf{\solspel} we know so far is the global optimum or not.
This leads us to another problem:
If we do not know whether we found the best-possible solution or not, how do we know if we can stop the optimization process or should continue trying to solve the problem?
If we do not know whether we found the best-possible solution or not, how do we know if we can stop the optimization process (whatever that might be) or should continue trying to solve the problem?

There are two very simple answers to this question:
Either when the time is up or when we found a reasonably-good solution.
And there are some less simple answers, such as \inQuotes{when we were not able to improve upon~\bestSoFarOf{\solspel} for a while.}
At first glance, there are two very simple answers to this question:
We stop either \inQuotes{when the time is up} or \inQuotes{when we found a reasonably-good solution.}
Additionally, there are many more complicated answers~\cite{GCJ2017TCIEAAS}, such as \inQuotes{when we were not able to improve upon~\bestSoFarOf{\solspel} for a while.}%
%
\hsection{Definitions}%
\label{sec:termination:defs}%
%
\begin{definition}[Termintion Criterion]%
\begin{definition}[Termination Criterion]%
\label{def:terminationCriterion}%
The \emph{termination criterion}~$\shouldTerminate:\mathSpace{S}\mapsto\{\codeil{False}, \codeil{True}\}$ is a function of the state~\mathSpace{S} of the optimization process which becomes \codeil{True} if the optimization process should stop and remains \codeil{False} as long as it can continue.%
\end{definition}%
%
Into such a termination criterion we can embed any combination of time or solution quality limits.
We could, for instance, define a goal objective value~\goalF\ good enough so that we can stop the optimization procedure as soon as a candidate solution~$\solspel\in\solutionSpace$ has been discovered with $\objfOf{\solspel}\leq\goalF$, i.e., which is at least as good as the goal.
We could set $\goalF=\lowerBoundOf{\objf}$ if we have a reasonably good lower bound.
We could also set to some acceptable quality limit resulting from our practical application scenario,
We could also set to some acceptable quality limit resulting from our practical application scenario.

Alternatively -- or in addition -- we may define a maximum amount of time the user is willing to wait for an answer, i.e., a computational budget after which we simply need to stop.%
Alternatively -- or in addition -- we may define a maximum amount of time the user is willing to wait for an answer, i.e., a computational budget after which we simply need to stop.

Most optimization processes iteratively try to find better solutions.
We could stop when, for a certain amount of time, no better solution was discovered.
While the current-best solution may not be \inQuotes{reasonably good,} continuing to try finding better solutions may be pointless anyway when the last improvement was made one minute after we started the optimization process {\dots} and, by now, that is ten hours ago{\dots}

Some algorithms maintain sets of solutions and iteratively work on all the solutions in the sets.
A maximum number of such iterations was used as stopping criterion in some older works, but this is known to be a bad practice and, thus, strongly discouraged~\cite{RLMC2022MNOGAASCCH}.%
%
\endhsection%
%
Expand Down Expand Up @@ -74,7 +82,15 @@
\endhsection%
%
\hsection{Summary}%
TODO
In this section, we raised the question when an optimization should stop.
This is an important question, since we already know that we usually do not know whether we found the optimal solution or not.
Sometimes, termination criteria arise from our practical scenario, e.g., our application defines a time limit and then, that is when we will stop.
Sometimes, we have a lot of time available and could let the optimization process go on for quite a bit.
However, even then, we do not want to waste computational time when it is already clear that our algorithm cannot make any improvement anymore.
Finally, we may have a goal quality threshold~\goalF\ and after reaching it, we can stop.
Sometimes we have a combination of the above.
Either way, we have to stop eventually.%
\endhsection%
\endhsection%
%

0 comments on commit de45d98

Please sign in to comment.