-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathTerminationConditions.cpp
More file actions
87 lines (73 loc) · 2.07 KB
/
Copy pathTerminationConditions.cpp
File metadata and controls
87 lines (73 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/**
* @file TerminationConditions.cpp
* @author Ali Marouf (https://github.com/AliMarouf97)
* @brief TerminationConditions Class is a part of the Genetic Algorithm library
* @version 0.1
*
* @copyright Copyright (c) 2022
*
*/
#include "TerminationConditions.h"
void TerminationConditions::setFitnessGoal(double goal)
{
this->goal = goal;
enableGool = true;
}
void TerminationConditions::setMaxRunningTime_ms(int maxRunningTime_ms)
{
this->maxRunningTime_ms = maxRunningTime_ms;
enableTime = true;
}
void TerminationConditions::setMaxIterations(uint64_t maxIterations)
{
this->maxIterations = maxIterations;
enableIterations = true;
}
void TerminationConditions::setMaxGeneration(uint64_t maxGeneration)
{
this->maxGeneration = maxGeneration;
}
void TerminationConditions::setStartTime(chrono::high_resolution_clock::time_point startTime)
{
this->startTime = startTime;
}
void TerminationConditions::setStartTime()
{
startTime = chrono::high_resolution_clock::now();
}
bool TerminationConditions::checkTimeCondition()
{
if (!enableTime)
return false;
auto endTime = chrono::high_resolution_clock::now();
int elapsedTime_ms = chrono::duration<float, milli>(endTime - startTime).count();
return elapsedTime_ms >= maxRunningTime_ms;
}
bool TerminationConditions::checkFitnessGoalCondition(double bestFitness)
{
if (!enableGool)
return false;
if (maximizeFitness)
return bestFitness >= goal;
return bestFitness <= goal;
}
bool TerminationConditions::checkIterationsCondition(double bestFitness)
{
if (!enableIterations)
return false;
if (isFirstTime)
{
isFirstTime = false;
lastFitness = bestFitness;
iterations = 0;
return false;
}
if ((maximizeFitness) ? bestFitness > lastFitness : bestFitness < lastFitness)
{
lastFitness = bestFitness;
iterations = 0;
return false;
}
++iterations;
return iterations >= maxIterations;
}