diff --git a/dependencies.xml b/dependencies.xml
index d12e2e978a..0dabc06ab0 100644
--- a/dependencies.xml
+++ b/dependencies.xml
@@ -43,7 +43,7 @@ Note all install methods after "main" take
1.0
- 2023
+ 2023.12
1.6
3.5
0.13
@@ -84,11 +84,9 @@ Note all install methods after "main" take
-
- 3.9.0=20_linux64_openblas
3.9.0=20_win64_mkl
- 3.9.0=20_osx64_openblas
+ 69
diff --git a/developer_tools/XSDSchemas/Optimizers.xsd b/developer_tools/XSDSchemas/Optimizers.xsd
index 74f659e1b4..8d5e089034 100644
--- a/developer_tools/XSDSchemas/Optimizers.xsd
+++ b/developer_tools/XSDSchemas/Optimizers.xsd
@@ -1,6 +1,6 @@
-
+
-
+
@@ -227,19 +227,79 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/user_manual/generated/generateOptimizerDoc.py b/doc/user_manual/generated/generateOptimizerDoc.py
index 946522370c..b44e867b29 100644
--- a/doc/user_manual/generated/generateOptimizerDoc.py
+++ b/doc/user_manual/generated/generateOptimizerDoc.py
@@ -152,7 +152,7 @@ def insertSolnExport(tex, obj):
- 20
+ 10
rouletteWheel
@@ -177,32 +177,32 @@ def insertSolnExport(tex, obj):
uniform_dist_woRepl_1
- 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
+ 1,2,3,4,5,6,7,8,9,10
uniform_dist_woRepl_1
- 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1
+ 2,3,4,5,6,7,8,9,10,1
uniform_dist_woRepl_1
- 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2
+ 3,4,5,6,7,8,9,10,1,2
uniform_dist_woRepl_1
- 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3
+ 4,5,6,7,8,9,10,1,2,3
uniform_dist_woRepl_1
- 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3,4
+ 5,6,7,8,9,10,1,2,3,4
uniform_dist_woRepl_1
- 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5
+ 6,7,8,9,10,1,2,3,4,5
ans
diff --git a/ravenframework/Optimizers/BayesianOptimizer.py b/ravenframework/Optimizers/BayesianOptimizer.py
index 8378e334c6..ff1d743727 100644
--- a/ravenframework/Optimizers/BayesianOptimizer.py
+++ b/ravenframework/Optimizers/BayesianOptimizer.py
@@ -150,6 +150,7 @@ def __init__(self):
self._paramSelectionOptions = {'ftol':1e-10, 'maxiter':200, 'disp':False} # Optimizer options for hyperparameter selection
self._externalParamOptimizer = 'fmin_l_bfgs_b' # Optimizer for external hyperparameter selection
self._resetModel = False # Reset regression model if True
+ self._canHandleMultiObjective = False # boolean indicator whether optimization is a sinlge-objective problem or a multi-objective problem
def handleInput(self, paramInput):
"""
@@ -232,8 +233,8 @@ def initialize(self, externalSeeding=None, solutionExport=None):
elif len(self._model.supervisedContainer[0].target) != 1:
self.raiseAnError(RuntimeError, f'Only one target allowed when using GPR ROM for Bayesian Optimizer! '
f'Received {len(self._model.supervisedContainer[0].target)}')
- elif self._objectiveVar not in self._model.supervisedContainer[0].target:
- self.raiseAnError(RuntimeError, f'GPR ROM should be obective variable: {self._objectiveVar}, '
+ elif self._objectiveVar[0] not in self._model.supervisedContainer[0].target:
+ self.raiseAnError(RuntimeError, f'GPR ROM should be obective variable: {self._objectiveVar[0]}, '
f'Received {self._model.supervisedContainer[0].target}')
if self._resetModel:
@@ -265,8 +266,8 @@ def initialize(self, externalSeeding=None, solutionExport=None):
trainingData = self.normalizeData(trainingData)
for varName in self.toBeSampled.keys():
self._trainingInputs[0][varName] = list(trainingData[varName])
- self._trainingTargets.append(list(trainingData[self._objectiveVar]))
- self.raiseAMessage(f"{self._model.name} ROM has been already trained with {len(trainingData[self._objectiveVar])} samples!",
+ self._trainingTargets.append(list(trainingData[self._objectiveVar[0]]))
+ self.raiseAMessage(f"{self._model.name} ROM has been already trained with {len(trainingData[self._objectiveVar[0]])} samples!",
"This pre-trained ROM will be used by Optimizer to evaluate the next best point!")
# retrieving the best solution is based on the acqusition function's utility
# Constraints are considered in the following method.
@@ -333,7 +334,7 @@ def _useRealization(self, info, rlz):
# Add new inputs and model evaluations to the dataset
for varName in list(self.toBeSampled):
self._trainingInputs[traj][varName].extend(getattr(rlz, varName).values)
- self._trainingTargets[traj].extend(getattr(rlz, self._objectiveVar).values)
+ self._trainingTargets[traj].extend(getattr(rlz, self._objectiveVar[0]).values)
# Generate posterior with training data
self._generatePredictiveModel(traj)
self._resolveMultiSample(traj, rlz, info)
@@ -343,10 +344,10 @@ def _useRealization(self, info, rlz):
# Add new input and model evaluation to the dataset
for varName in list(self.toBeSampled):
self._trainingInputs[traj][varName].append(rlz[varName])
- self._trainingTargets[traj].append(rlz[self._objectiveVar])
+ self._trainingTargets[traj].append(rlz[self._objectiveVar[0]])
# Generate posterior with training data
self._generatePredictiveModel(traj)
- optVal = rlz[self._objectiveVar]
+ optVal = rlz[self._objectiveVar[0]]
self._resolveNewOptPoint(traj, rlz, optVal, info)
# Use acquisition to select next point
@@ -555,7 +556,7 @@ def _trainRegressionModel(self, traj):
for varName in list(self.toBeSampled):
trainingSet[varName] = np.asarray(self._trainingInputs[traj][varName])
- trainingSet[self._objectiveVar] = np.asarray(self._trainingTargets[traj])
+ trainingSet[self._objectiveVar[0]] = np.asarray(self._trainingTargets[traj])
self._model.train(trainingSet)
# NOTE It would be preferrable to use targetEvaluation;
# however, there does not appear a built in normalization method and as
@@ -596,8 +597,8 @@ def _evaluateRegressionModel(self, featurePoint):
# Evaluating the regression model
resultsDict = self._model.evaluate(featurePoint)
# NOTE only allowing single targets, needs to be fixed when multi-objective optimization is added
- mu = resultsDict[self._objectiveVar]
- std = resultsDict[self._objectiveVar+'_std']
+ mu = resultsDict[self._objectiveVar[0]]
+ std = resultsDict[self._objectiveVar[0]+'_std']
return mu, std
# * * * * * * * * * * * *
@@ -627,7 +628,7 @@ def _resolveMultiSample(self, traj, rlz, info):
for index in range(info['batchSize']):
for varName in rlzVars:
singleRlz[varName] = getattr(rlz, varName)[index].values
- optVal = singleRlz[self._objectiveVar]
+ optVal = singleRlz[self._objectiveVar[0]]
self._resolveNewOptPoint(traj, singleRlz, optVal, info)
singleRlz = {} # FIXME is this necessary?
self.raiseADebug(f'Multi-sample resolution completed')
@@ -664,7 +665,7 @@ def _resolveNewOptPoint(self, traj, rlz, optVal, info):
currentPoint = {}
for decisionVarName in list(self.toBeSampled):
currentPoint[decisionVarName] = rlz[decisionVarName]
- rlz[self._objectiveVar] = self._evaluateRegressionModel(currentPoint)[0][0]
+ rlz[self._objectiveVar[0]] = self._evaluateRegressionModel(currentPoint)[0][0]
self.raiseADebug('*' * 80)
if acceptable in ['accepted', 'first']:
# record history
@@ -675,13 +676,13 @@ def _resolveNewOptPoint(self, traj, rlz, optVal, info):
# If the last recommended solution point is the same, update the expected function value
if all(old[var] == xStar[var] for var in list(self.toBeSampled)):
newEstimate = copy.copy(old)
- newEstimate[self._objectiveVar] = muStar
+ newEstimate[self._objectiveVar[0]] = muStar
self._optPointHistory[traj].append((newEstimate, info))
else:
newRealization = copy.copy(old)
for var in list(self.toBeSampled):
newRealization[var] = xStar[var]
- newRealization[self._objectiveVar] = muStar
+ newRealization[self._objectiveVar[0]] = muStar
else:
self.raiseAnError(f'Unrecognized acceptability: "{acceptable}"')
diff --git a/ravenframework/Optimizers/GeneticAlgorithm.py b/ravenframework/Optimizers/GeneticAlgorithm.py
index e7d9e3b941..1150fe3019 100644
--- a/ravenframework/Optimizers/GeneticAlgorithm.py
+++ b/ravenframework/Optimizers/GeneticAlgorithm.py
@@ -17,12 +17,239 @@
Genetic Algorithm-based optimization. Multiple strategies for
mutations, cross-overs, etc. are available.
Created June,3,2020
- @authors: Mohammad Abdo, Diego Mandelli, Andrea Alfonsi
+ Updated Sepember,17,2023
+ @authors: Mohammad Abdo, Diego Mandelli, Andrea Alfonsi, Junyung Kim
References
----------
- .. [1] Holland, John H. "Genetic algorithms." Scientific American 267.1 (1992): 66-73.
- [2] Z. Michalewicz, "Genetic Algorithms. + Data Structures. = Evolution Programs," Third, Revised
- and Extended Edition, Springer (1996).
+ [1] Holland, John H. "Genetic algorithms." Scientific American 267.1 (1992): 66-73.
+ [2] Z. Michalewicz, "Genetic Algorithms. + Data Structures. = Evolution Programs," Third, Revised and Extended Edition, Springer (1996).
+ [3] Deb, Kalyanmoy, et al. "A fast and elitist multiobjective genetic algorithm: NSGA-II." IEEE transactions on evolutionary computation 6.2 (2002): 182-197.
+ [4] Deb, Kalyanmoy. "An efficient constraint handling method for genetic algorithms." Computer methods in applied mechanics and engineering 186.2-4 (2000): 311-338.
+ +--------------------------+
+ | AdaptiveSampler |
+ |--------------------------|
+ | |
+ +--------------------------+
+ .
+ /_\
+ |
+ |
+ |
+ |
+ |
+ +--------------------------------+
+ | Optimizer |
+ |--------------------------------|
+ | _activeTraj |
+ | _cancelledTraj |
+ | _constraintFunctions |
+ | _convergedTraj |
+ | _impConstraintFunctions |
+ | _initSampler |
+ | _initialValues |
+ | _initialValuesFromInput |
+ | _minMax |
+ | _numRepeatSamples |
+ | _objectiveVar |
+ | _requireSolnExport |
+ | _seed |
+ | _trajCounter |
+ | _variableBounds |
+ | assemblerDict |
+ | metadataKeys |
+ | optAssemblerList |
+ |--------------------------------|
+ | __init__ |
+ | _addTrackingInfo |
+ | _closeTrajectory |
+ | _collectOptPoint |
+ | _collectOptValue |
+ | _initializeInitSampler |
+ | _localGenerateAssembler |
+ | _localWhatDoINeed |
+ | _updateSolutionExport |
+ | amIreadyToProvideAnInput |
+ | checkConvergence |
+ | denormalizeData |
+ | denormalizeVariable |
+ | flush |
+ | getInputSpecification |
+ | handleInput |
+ | initialize |
+ | initializeTrajectory |
+ | localInputAndChecks |
+ | needDenormalized |
+ | normalizeData |
+ | userManualDescription |
+ +--------------------------------+
+ .
+ /_\
+ |
+ |
+ |
+ |
+ |
+ +------------------------------------+
+ | RavenSampled |
+ |------------------------------------|
+ | __stepCounter |
+ | _maxHistLen |
+ | _optPointHistory |
+ | _rerunsSinceAccept |
+ | _stepTracker |
+ | _submissionQueue |
+ | _writeSteps |
+ | batch |
+ | batchId |
+ | convFormat |
+ | inputInfo |
+ | limit |
+ | type |
+ | values |
+ |------------------------------------|
+ | __init__ |
+ | _addToSolutionExport |
+ | _applyBoundaryConstraints |
+ | _applyFunctionalConstraints |
+ | _cancelAssociatedJobs |
+ | _checkAcceptability |
+ | _checkBoundaryConstraints |
+ | _checkForImprovement |
+ | _checkFunctionalConstraints |
+ | _checkImpFunctionalConstraints |
+ | _closeTrajectory |
+ | _handleExplicitConstraints |
+ | _handleImplicitConstraints |
+ | _initializeStep |
+ | _rejectOptPoint |
+ | _resolveNewOptPoint |
+ | _updateConvergence |
+ | _updatePersistence |
+ | _updateSolutionExport |
+ | _useRealization |
+ | amIreadyToProvideAnInput |
+ | checkConvergence |
+ | finalizeSampler |
+ | flush |
+ | getInputSpecification |
+ | getIteration |
+ | getSolutionExportVariableNames |
+ | handleInput |
+ | incrementIteration |
+ | initialize |
+ | initializeTrajectory |
+ | localFinalizeActualSampling |
+ | localGenerateInput |
+ +------------------------------------+
+ .
+ /_\
+ |
+ |
+ |
+ |
+ |
+ +------------------------------------+
+ | GeneticAlgorithm |
+ |------------------------------------|
+ | _acceptHistory |
+ | _acceptRerun |
+ | _canHandleMultiObjective |
+ | _convergenceCriteria |
+ | _convergenceInfo |
+ | _crossoverInstance |
+ | _crossoverPoints |
+ | _crossoverProb |
+ | _crossoverType |
+ | _expConstr |
+ | _fitnessInstance |
+ | _fitnessType |
+ | _impConstr |
+ | _kSelection |
+ | _mutationInstance |
+ | _mutationLocs |
+ | _mutationProb |
+ | _mutationType |
+ | _nChildren |
+ | _nParents |
+ | _numOfConst |
+ | _objCoeff |
+ | _objectiveVar |
+ | _parentSelection |
+ | _parentSelectionInstance |
+ | _parentSelectionType |
+ | _penaltyCoeff |
+ | _populationSize |
+ | _repairInstance |
+ | _requiredPersistence |
+ | _stepTracker |
+ | _submissionQueue |
+ | _survivorSelectionInstance |
+ | _survivorSelectionType |
+ | ahd |
+ | ahdp |
+ | batch |
+ | batchId |
+ | bestFitness |
+ | bestObjective |
+ | bestPoint |
+ | constraintsV |
+ | convergenceOptions |
+ | crowdingDistance |
+ | fitness |
+ | hdsm |
+ | multiBestCD |
+ | multiBestConstraint |
+ | multiBestFitness |
+ | multiBestObjective |
+ | multiBestPoint |
+ | multiBestRank |
+ | objectiveVal |
+ | popAge |
+ | population |
+ | rank |
+ |------------------------------------|
+ | _GD |
+ | _GDp |
+ | __init__ |
+ | _addToSolutionExport |
+ | _ahd |
+ | _ahdp |
+ | _applyFunctionalConstraints |
+ | _checkAcceptability |
+ | _checkConvAHD |
+ | _checkConvAHDp |
+ | _checkConvHDSM |
+ | _checkConvObjective |
+ | _checkForImprovement |
+ | _checkFunctionalConstraints |
+ | _checkImpFunctionalConstraints |
+ | _collectOptPoint |
+ | _collectOptPointMulti |
+ | _envelopeSize |
+ | _formatSolutionExportVariableNames |
+ | _handleExplicitConstraints |
+ | _handleImplicitConstraints |
+ | _hdsm |
+ | _popDist |
+ | _rejectOptPoint |
+ | _resolveNewGeneration |
+ | _resolveNewGenerationMulti |
+ | _solutionExportUtilityUpdate |
+ | _submitRun |
+ | _updateConvergence |
+ | _updatePersistence |
+ | _useRealization |
+ | checkConvergence |
+ | flush |
+ | getInputSpecification |
+ | getSolutionExportVariableNames |
+ | handleInput |
+ | initialize |
+ | initializeTrajectory |
+ | multiObjectiveConstraintHandling |
+ | needDenormalized |
+ | singleObjectiveConstraintHandling |
+ +------------------------------------+
"""
# External Modules----------------------------------------------------------------------------------
from collections import deque, defaultdict
@@ -32,13 +259,18 @@
# External Modules End------------------------------------------------------------------------------
# Internal Modules----------------------------------------------------------------------------------
-from ..utils import mathUtils, InputData, InputTypes
+from ..utils import mathUtils, InputData, InputTypes, frontUtils
from ..utils.gaUtils import dataArrayToDict, datasetToDataArray
from .RavenSampled import RavenSampled
from .parentSelectors.parentSelectors import returnInstance as parentSelectionReturnInstance
from .crossOverOperators.crossovers import returnInstance as crossoversReturnInstance
+from .crossOverOperators.crossovers import getLinearCrossoverProbability
+from .crossOverOperators.crossovers import getQuadraticCrossoverProbability
from .mutators.mutators import returnInstance as mutatorsReturnInstance
+from .mutators.mutators import getLinearMutationProbability
+from .mutators.mutators import getQuadraticMutationProbability
from .survivorSelectors.survivorSelectors import returnInstance as survivorSelectionReturnInstance
+from .survivorSelection import survivorSelection as survivorSelectionProcess
from .fitness.fitness import returnInstance as fitnessReturnInstance
from .repairOperators.repair import returnInstance as repairReturnInstance
# Internal Modules End------------------------------------------------------------------------------
@@ -71,38 +303,50 @@ def __init__(self):
self._acceptRerun = {} # by traj, if True then override accept for point rerun
self._convergenceInfo = {} # by traj, the persistence and convergence information for most recent opt
self._requiredPersistence = 0 # consecutive persistence required to mark convergence
- self.needDenormalized() # the default in all optimizers is to normalize the data which is not the case here
+ self.needDenormalized() # the default in all optimizers is to normalize the data which is not the case here
self.batchId = 0
- self.population = None # panda Dataset container containing the population at the beginning of each generation iteration
- self.popAge = None # population age
- self.fitness = None # population fitness
- self.ahdp = np.NaN # p-Average Hausdorff Distance between populations
- self.ahd = np.NaN # Hausdorff Distance between populations
- self.hdsm = np.NaN # Hausdorff Distance Similarity metric between populations
- self.bestPoint = None
- self.bestFitness = None
- self.bestObjective = None
- self.objectiveVal = None
- self._populationSize = None
- self._parentSelectionType = None
- self._parentSelectionInstance = None
- self._nParents = None
- self._nChildren = None
- self._crossoverType = None
- self._crossoverPoints = None
- self._crossoverProb = None
- self._crossoverInstance = None
- self._mutationType = None
- self._mutationLocs = None
- self._mutationProb = None
- self._mutationInstance = None
- self._survivorSelectionType = None
- self._survivorSelectionInstance = None
- self._fitnessType = None
- self._objCoeff = None
- self._penaltyCoeff = None
- self._fitnessInstance = None
- self._repairInstance = None
+ self.population = None # panda Dataset container containing the population at the beginning of each generation iteration
+ self.popAge = None # population age
+ self.fitness = None # population fitness
+ self.rank = None # population rank (for Multi-objective optimization only)
+ self.constraintsV = None # calculated contraints value
+ self.crowdingDistance = None # population crowding distance (for Multi-objective optimization only)
+ self.ahdp = np.NaN # p-Average Hausdorff Distance between populations
+ self.ahd = np.NaN # Hausdorff Distance between populations
+ self.hdsm = np.NaN # Hausdorff Distance Similarity metric between populations
+ self.bestPoint = None # the best solution (chromosome) found among population in a specific batchId
+ self.bestFitness = None # fitness value of the best solution found
+ self.bestObjective = None # objective value of the best solution found
+ self.multiBestPoint = None # the best solutions (chromosomes) found among population in a specific batchId
+ self.multiBestFitness = None # fitness values of the best solutions found
+ self.multiBestObjective = None # objective values of the best solutions found
+ self.multiBestConstraint = None # constraint values of the best solutions found
+ self.multiBestRank = None # rank values of the best solutions found
+ self.multiBestCD = None # crowding distance (CD) values of the best solutions found
+ self.objectiveVal = None # objective values of solutions
+ self._populationSize = None # number of population size
+ self._parentSelectionType = None # type of the parent selection process chosen
+ self._parentSelectionInstance = None # instance of the parent selection process chosen
+ self._nParents = None # number of parents
+ self._kSelection = None # number of chromosomes selected for tournament selection
+ self._nChildren = None # number of children
+ self._crossoverType = None # type of the crossover process chosen
+ self._crossoverPoints = None # point where crossover process will happen
+ self._crossoverProb = None # probability of crossover process will happen
+ self._crossoverInstance = None # instance of the crossover process chosen
+ self._mutationType = None # type of the mutation process chosen
+ self._mutationLocs = None # point where mutation process will happen
+ self._mutationProb = None # probability of mutation process will happen
+ self._mutationInstance = None # instance of the mutation process chosen
+ self._survivorSelectionType = None # type of the survivor selection process chosen
+ self._survivorSelectionInstance = None # instance of the survivor selection process chosen
+ self._fitnessType = None # type of the fitness calculation chosen
+ self._objCoeff = None # weight coefficients of objectives for fitness calculation
+ self._objectiveVar = None # objective variable names
+ self._penaltyCoeff = None # weight coefficients corresponding to constraints and objectives for fitness calculation
+ self._fitnessInstance = None # instance of fitness
+ self._repairInstance = None # instance of repair
+ self._canHandleMultiObjective = True # boolean indicator whether optimization is a sinlge-objective problem or a multi-objective problem
##########################
# Initialization Methods #
@@ -116,118 +360,130 @@ def getInputSpecification(cls):
@ Out, specs, InputData.ParameterInput, class to use for specifying input of cls.
"""
specs = super(GeneticAlgorithm, cls).getInputSpecification()
- specs.description = r"""The \xmlNode{GeneticAlgorithm} optimizer is a metaheuristic approach
- to perform a global search in large design spaces. The methodology rose
- from the process of natural selection, and like others in the large class
- of the evolutionary algorithms, it utilizes genetic operations such as
- selection, crossover, and mutations to avoid being stuck in local minima
- and hence facilitates finding the global minima. More information can
- be found in:
- Holland, John H. "Genetic algorithms." Scientific American 267.1 (1992): 66-73."""
+ specs.description = r"""The \xmlNode{GeneticAlgorithm} is a metaheuristic optimization technique inspired by the principles
+ of natural selection and genetics. Introduced by John Holland in the 1960s, GA mimics the process of
+ biological evolution to solve complex optimization and search problems. They operate by maintaining a population of
+ potential solutions represented as as arrays of fixed length variables (genes), and each such array is called a chromosome.
+ These solutions undergo iterative refinement through processes such as mutation, crossover, and survivor selection. Mutation involves randomly altering certain genes within
+ individual solutions, introducing diversity into the population and enabling exploration of new regions in the solution space.
+ Crossover, on the other hand, mimics genetic recombination by exchanging genetic material between two parent solutions to create
+ offspring with combined traits. Survivor selection determines which solutions will advance to the next generation based on
+ their fitness—how well they perform in solving the problem at hand. Solutions with higher fitness scores are more likely to
+ survive and reproduce, passing their genetic material to subsequent generations. This iterative process continues
+ until a stopping criterion is met, typically when a satisfactory solution is found or after a predetermined number of generations.
+ More information can be found in:\\\\
+
+ Holland, John H. "Genetic algorithms." Scientific American 267.1 (1992): 66-73.\\\\
+
+ Non-dominated Sorting Genetic Algorithm II (NSGA-II) is a variant of GAs designed for multiobjective optimization problems.
+ NSGA-II extends traditional GAs by incorporating a ranking-based approach and crowding distance estimation to maintain a diverse set of
+ non-dominated (Pareto-optimal) solutions. This enables NSGA-II to efficiently explore trade-offs between conflicting objectives,
+ providing decision-makers with a comprehensive view of the problem's solution space. More information about NSGA-II can be found in:\\\\
+
+ Deb, Kalyanmoy, et al. "A fast and elitist multiobjective genetic algorithm: NSGA-II." IEEE transactions on evolutionary computation 6.2 (2002): 182-197.\\\\
+
+ GA in RAVEN supports for both single and multi-objective optimization problem."""
# GA Params
GAparams = InputData.parameterInputFactory('GAparams', strictMode=True,
printPriority=108,
- descr=r""" Genetic Algorithm Parameters:\begin{itemize}
- \item populationSize.
- \item parentSelectors:
- \begin{itemize}
- \item rouletteWheel.
- \item tournamentSelection.
- \item rankSelection.
- \end{itemize}
- \item Reproduction:
- \begin{itemize}
- \item crossover:
- \begin{itemize}
- \item onePointCrossover.
- \item twoPointsCrossover.
- \item uniformCrossover
- \end{itemize}
- \item mutators:
- \begin{itemize}
- \item swapMutator.
- \item scrambleMutator.
- \item inversionMutator.
- \item bitFlipMutator.
- \item randomMutator.
- \end{itemize}
- \end{itemize}
- \item survivorSelectors:
- \begin{itemize}
- \item ageBased.
- \item fitnessBased.
- \end{itemize}
- \end{itemize}""")
+ descr=r""" """)
# Population Size
populationSize = InputData.parameterInputFactory('populationSize', strictMode=True,
contentType=InputTypes.IntegerType,
printPriority=108,
descr=r"""The number of chromosomes in each population.""")
GAparams.addSub(populationSize)
+
+ #NOTE An indicator saying whather GA will handle constraint hardly or softly will be upgraded later @JunyungKim
+ # # Constraint Handling
+ # constraintHandling = InputData.parameterInputFactory('constraintHandling', strictMode=True,
+ # contentType=InputTypes.StringType,
+ # printPriority=108,
+ # descr=r"""a node indicating whether GA will handle constraints hardly or softly.""")
+ # GAparams.addSub(constraintHandling)
+
# Parent Selection
parentSelection = InputData.parameterInputFactory('parentSelection', strictMode=True,
contentType=InputTypes.StringType,
printPriority=108,
- descr=r"""A node containing the criterion based on which the parents are selected. This can be a
- fitness proportional selection such as:
- a. \textbf{\textit{rouletteWheel}},
- b. \textbf{\textit{tournamentSelection}},
- c. \textbf{\textit{rankSelection}}
- for all methods nParents is computed such that the population size is kept constant.
- $nChildren = 2 \times {nParents \choose 2} = nParents \times (nParents-1) = popSize$
- solving for nParents we get:
- $nParents = ceil(\frac{1 + \sqrt{1+4*popSize}}{2})$
- This will result in a popSize a little larger than the initial one, these excessive children will be later thrawn away and only the first popSize child will be kept""")
+ descr=r"""A node containing the criterion based on which the parents are selected. This can be a fitness proportional selection for all methods.
+ The number of parents (i.e., nParents) is computed such that the population size is kept constant. \\\\
+ $nParents = ceil(\frac{1 + \sqrt{1+4*popSize}}{2})$. \\\\
+ The number of children (i.e., nChildren) is computed by \\\\
+ $nChildren = 2 \times {nParents \choose 2} = nParents \times (nParents-1) = popSize$ \\\\
+ This will result in a popSize a little larger than the initial one, and the excessive children will be later thrawn away and only the first popSize child will be kept. \\\\
+ You can choose three options for parentSelection:
+ \begin{itemize}
+ \item \textit{rouletteWheel} - It assigns probabilities to chromosomes based on their fitness,
+ allowing for selection proportionate to their likelihood of being chosen for reproduction.
+ \item \textit{tournamentSelection} - Chromosomes are randomly chosen from the population to compete in a tournament,
+ and the fittest individual among them is selected for reproduction.
+ \item \textit{rankSelection} - Chromosomes with higher fitness values are selected.
+ \end{itemize}
+ """)
GAparams.addSub(parentSelection)
# Reproduction
reproduction = InputData.parameterInputFactory('reproduction', strictMode=True,
printPriority=108,
- descr=r"""a node containing the reproduction methods.
- This accepts subnodes that specifies the types of crossover and mutation.""")
+ descr=r"""a node containing the reproduction methods. This accepts subnodes that specifies the types of crossover and mutation. """)
+ # 0. k-selectionNumber of Parents
+ kSelection = InputData.parameterInputFactory('kSelection', strictMode=True,
+ contentType=InputTypes.IntegerType,
+ printPriority=108,
+ descr=r"""Number of chromosome selected for tournament selection""")
+ reproduction.addSub(kSelection)
# 1. Crossover
crossover = InputData.parameterInputFactory('crossover', strictMode=True,
contentType=InputTypes.StringType,
printPriority=108,
- descr=r"""a subnode containing the implemented crossover mechanisms.
- This includes: a. onePointCrossover,
- b. twoPointsCrossover,
- c. uniformCrossover.""")
+ descr=r"""a subnode containing the implemented crossover mechanisms. You can choose one of the crossover options listed below:
+ \begin{itemize}
+ \item \textit{onePointCrossover} - It selects a random crossover point along the chromosome of parent individuals and swapping the genetic material beyond that point to create offspring.
+ \item \textit{twoPointsCrossover} - It selects two random crossover points along the chromosome of parent individuals and swapping the genetic material beyond that point to create offspring.
+ \item \textit{uniformCrossover} - It randomly selects genes from two parent chromosomes with equal probability, creating offspring by exchanging genes at corresponding positions.
+ \end{itemize}""")
crossover.addParam("type", InputTypes.StringType, True,
- descr="type of crossover operation to be used (e.g., OnePoint, MultiPoint, or Uniform)")
+ descr="type of crossover operation to be used. See the list of options above.")
crossoverPoint = InputData.parameterInputFactory('points', strictMode=True,
contentType=InputTypes.IntegerListType,
printPriority=108,
descr=r""" point/gene(s) at which crossover will occur.""")
crossover.addSub(crossoverPoint)
crossoverProbability = InputData.parameterInputFactory('crossoverProb', strictMode=True,
- contentType=InputTypes.FloatType,
- printPriority=108,
- descr=r""" The probability governing the crossover step, i.e., the probability that if exceeded crossover will occur.""")
+ contentType=InputTypes.FloatOrStringType,
+ printPriority=108,
+ descr=r""" The probability governing the crossover step, i.e., the probability that if exceeded crossover will occur.""")
+ crossoverProbability.addParam("type", InputTypes.makeEnumType('crossoverProbability','crossoverProbabilityType',['static','adaptive']), False,
+ descr="type of crossover operation to be used (e.g., static,adaptive)")
crossover.addSub(crossoverProbability)
reproduction.addSub(crossover)
# 2. Mutation
mutation = InputData.parameterInputFactory('mutation', strictMode=True,
contentType=InputTypes.StringType,
printPriority=108,
- descr=r"""a subnode containing the implemented mutation mechanisms.
- This includes: a. bitFlipMutation,
- b. swapMutation,
- c. scrambleMutation,
- d. inversionMutation, or
- e. randomMutator.""")
+ descr=r"""a subnode containing the implemented mutation mechanisms. You can choose one of the mutation options listed below:
+ \begin{itemize}
+ \item \textit{swapMutator} - It randomly selects two genes within an chromosome and swaps their positions.
+ \item \textit{scrambleMutator} - It randomly selects a subset of genes within an chromosome and shuffles their positions.
+ \item \textit{inversionMutator} - It selects a contiguous subset of genes within an chromosome and reverses their order.
+ \item \textit{bitFlipMutator} - It randomly selects genes within an chromosome and flips their values.
+ \item \textit{randomMutator} - It randomly selects a gene within an chromosome and mutates the gene.
+ \end{itemize} """)
mutation.addParam("type", InputTypes.StringType, True,
- descr="type of mutation operation to be used (e.g., bit, swap, or scramble)")
+ descr="type of mutation operation to be used. See the list of options above.")
mutationLocs = InputData.parameterInputFactory('locs', strictMode=True,
contentType=InputTypes.IntegerListType,
printPriority=108,
descr=r""" locations at which mutation will occur.""")
mutation.addSub(mutationLocs)
mutationProbability = InputData.parameterInputFactory('mutationProb', strictMode=True,
- contentType=InputTypes.FloatType,
+ contentType=InputTypes.FloatOrStringType,
printPriority=108,
descr=r""" The probability governing the mutation step, i.e., the probability that if exceeded mutation will occur.""")
+ mutationProbability.addParam("type", InputTypes.makeEnumType('mutationProbability','mutationProbabilityType',['static','adaptive']), False,
+ descr="type of mutation probability operation to be used (e.g., static, adaptive)")
mutation.addSub(mutationProbability)
reproduction.addSub(mutation)
GAparams.addSub(reproduction)
@@ -236,37 +492,45 @@ def getInputSpecification(cls):
survivorSelection = InputData.parameterInputFactory('survivorSelection', strictMode=True,
contentType=InputTypes.StringType,
printPriority=108,
- descr=r"""a subnode containing the implemented survivor selection mechanisms.
- This includes: a. ageBased, or
- b. fitnessBased.""")
+ descr=r"""a subnode containing the implemented survivor selection mechanisms. You can choose one of the survivor selection options listed below:
+ \begin{itemize}
+ \item \textit{fitnessBased} - Individuals with higher fitness scores are more likely to be selected to survive and
+ proceed to the next generation. It suppoort only single-objective optimization problem.
+ \item \textit{ageBased} - Individuals are selected for survival based on their age or generation, with older individuals being prioritized
+ for retention. It suppoort only single-objective optimization problem.
+ \item \textit{rankNcrowdingBased} - Individuals with low rank and crowding distance are more likely to be selected to survive and
+ proceed to the next generation. It suppoort only multi-objective optimization problem.
+ \end{itemize}""")
GAparams.addSub(survivorSelection)
# Fitness
fitness = InputData.parameterInputFactory('fitness', strictMode=True,
contentType=InputTypes.StringType,
printPriority=108,
- descr=r"""a subnode containing the implemented fitness functions.
- This includes: \begin{itemize}
- \item invLinear:
- \[fitness = -a \times obj - b \times \sum\\_{j=1}^{nConstraint} max(0,-penalty\\_j) \].
-
- \item logistic:
- \[fitness = \frac{1}{1+e^{a\times(obj-b)}}\].
-
- \item
- feasibleFirst: \[fitness =
- -obj \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{for} \ \ g\\_j(x)\geq 0 \; \forall j\] and
- \[fitness = -obj\\_{worst} - \Sigma\\_{j=1}^{J} \ \ \ \ \ \ \ \ otherwise \]
- \end{itemize}.""")
+ descr=r"""a subnode containing the implemented fitness functions.You can choose one of the fitness options listed below:
+ \begin{itemize}
+ \item \textit{invLinear} - It assigns fitness values inversely proportional to the individual's objective function values,
+ prioritizing solutions with lower objective function values (i.e., minimization) for selection and reproduction. It suppoort only single-objective optimization problem.\\\\
+ $fitness = -a \times obj - b \times \sum_{j=1}^{nConstraint} max(0,-penalty_{j}) $\\
+ where j represents an index of objects
+ \\
+
+ \item \textit{logistic} - It applies a logistic function to transform raw objective function values into fitness scores. It suppoort only single-objective optimization problem.\\\\
+ $fitness = \frac{1}{1+e^{a\times(obj-b)}}$\\
+ \item \textit{feasibleFirst} - It prioritizes solutions that meet constraints by assigning higher fitness scores to feasible solutions,
+
+ encouraging the evolution of individuals that satisfy the problem's constraints. It suppoort single-and multi-objective optimization problem.\\\\
+ $fitness = \left\{\begin{matrix} -obj & g_{j}(x)\geq 0 \; \forall j \\ -obj_{worst}- \Sigma_{j=1}^{J} & otherwise \\ \end{matrix}\right$\\
+ \end{itemize} """)
fitness.addParam("type", InputTypes.StringType, True,
descr=r"""[invLin, logistic, feasibleFirst]""")
objCoeff = InputData.parameterInputFactory('a', strictMode=True,
- contentType=InputTypes.FloatType,
+ contentType=InputTypes.FloatListType,
printPriority=108,
descr=r""" a: coefficient of objective function.""")
fitness.addSub(objCoeff)
penaltyCoeff = InputData.parameterInputFactory('b', strictMode=True,
- contentType=InputTypes.FloatType,
+ contentType=InputTypes.FloatListType,
printPriority=108,
descr=r""" b: coefficient of constraint penalty.""")
fitness.addSub(penaltyCoeff)
@@ -304,6 +568,8 @@ def getSolutionExportVariableNames(cls):
new = {}
# new = {'': 'the size of step taken in the normalized input space to arrive at each optimal point'}
new['conv_{CONV}'] = 'status of each given convergence criteria'
+ new['rank'] = 'It refers to the sorting of solutions into non-dominated fronts based on their Pareto dominance relationships'
+ new['CD'] = 'It measures the density of solutions within each front to guide the selection of diverse individuals for the next generation'
new['fitness'] = 'fitness of the current chromosome'
new['age'] = 'age of current chromosome'
new['batchId'] = 'Id of the batch to whom the chromosome belongs'
@@ -311,6 +577,7 @@ def getSolutionExportVariableNames(cls):
new['AHD'] = 'Hausdorff Distance between populations'
new['HDSM'] = 'Hausdorff Distance Similarity Measure between populations'
new['ConstraintEvaluation_{CONSTRAINT}'] = 'Constraint function evaluation (negative if violating and positive otherwise)'
+ new['FitnessEvaluation_{OBJ}'] = 'Fitness evaluation of each objective'
ok.update(new)
return ok
@@ -322,56 +589,142 @@ def handleInput(self, paramInput):
@ Out, None
"""
RavenSampled.handleInput(self, paramInput)
- # GAparams
+ ####################################################################################
+ # GAparams #
+ ####################################################################################
gaParamsNode = paramInput.findFirst('GAparams')
- # populationSize
+
+ ####################################################################################
+ # populationSize #
+ ####################################################################################
populationSizeNode = gaParamsNode.findFirst('populationSize')
self._populationSize = populationSizeNode.value
- # parent selection
+
+ ####################################################################################
+ # parent selection node #
+ ####################################################################################
parentSelectionNode = gaParamsNode.findFirst('parentSelection')
self._parentSelectionType = parentSelectionNode.value
self._parentSelectionInstance = parentSelectionReturnInstance(self, name=parentSelectionNode.value)
- # reproduction node
+
+ if len(self._objectiveVar) >=2 and self._parentSelectionType != 'tournamentSelection':
+ self.raiseAnError(IOError, f'tournamentSelection in is a sole mechanism supportive in multi-objective optimization.')
+
+ ####################################################################################
+ # reproduction node #
+ ####################################################################################
reproductionNode = gaParamsNode.findFirst('reproduction')
self._nParents = int(np.ceil(1/2 + np.sqrt(1+4*self._populationSize)/2))
self._nChildren = int(2*comb(self._nParents,2))
- # crossover node
+
+ ####################################################################################
+ # k-Selection node #
+ ####################################################################################
+ if reproductionNode.findFirst('kSelection') is None:
+ self._kSelection = 3 # Default value is set to 3.
+ else:
+ self._kSelection = reproductionNode.findFirst('kSelection').value
+
+ ####################################################################################
+ # crossover node #
+ ####################################################################################
crossoverNode = reproductionNode.findFirst('crossover')
self._crossoverType = crossoverNode.parameterValues['type']
+ if self._crossoverType not in ['onePointCrossover','twoPointsCrossover','uniformCrossover']:
+ self.raiseAnError(IOError, f'Currently constrained Genetic Algorithms only support onePointCrossover, twoPointsCrossover and uniformCrossover as a crossover, whereas provided crossover is {self._crossoverType}')
if crossoverNode.findFirst('points') is None:
self._crossoverPoints = None
else:
self._crossoverPoints = crossoverNode.findFirst('points').value
+ crossoverProbNode = crossoverNode.findFirst('crossoverProb')
+ try:
+ self._crossoverProbType = crossoverProbNode.parameterValues['type']
+ except:
+ self._crossoverProbType = 'static'
self._crossoverProb = crossoverNode.findFirst('crossoverProb').value
self._crossoverInstance = crossoversReturnInstance(self,name = self._crossoverType)
- # mutation node
+ ####################################################################################
+ # mutation node #
+ ####################################################################################
mutationNode = reproductionNode.findFirst('mutation')
self._mutationType = mutationNode.parameterValues['type']
+ if self._mutationType not in ['swapMutator','scrambleMutator','inversionMutator','bitFlipMutator','randomMutator']:
+ self.raiseAnError(IOError, f'Currently constrained Genetic Algorithms only support swapMutator, scrambleMutator, inversionMutator, bitFlipMutator, and randomMutator as a mutator, whereas provided mutator is {self._mutationType}')
if mutationNode.findFirst('locs') is None:
self._mutationLocs = None
else:
self._mutationLocs = mutationNode.findFirst('locs').value
+ mutationProbNode = mutationNode.findFirst('mutationProb')
+ try:
+ self._mutationProbType = mutationProbNode.parameterValues['type']
+ except:
+ self._mutationProbType = 'static'
self._mutationProb = mutationNode.findFirst('mutationProb').value
self._mutationInstance = mutatorsReturnInstance(self,name = self._mutationType)
- # Survivor selection
+
+ ####################################################################################
+ # survivor selection node #
+ ####################################################################################
survivorSelectionNode = gaParamsNode.findFirst('survivorSelection')
self._survivorSelectionType = survivorSelectionNode.value
self._survivorSelectionInstance = survivorSelectionReturnInstance(self,name = self._survivorSelectionType)
- # Fitness
+ if self._survivorSelectionType not in ['ageBased','fitnessBased','rankNcrowdingBased']:
+ self.raiseAnError(IOError, f'Currently constrained Genetic Algorithms only support ageBased, fitnessBased, and rankNcrowdingBased as a survivorSelector, whereas provided survivorSelector is {self._survivorSelectionType}')
+ if len(self._objectiveVar) == 1 and self._survivorSelectionType == 'rankNcrowdingBased':
+ self.raiseAnError(IOError, f'(rankNcrowdingBased) in only supports when the number of objective in is bigger than two. ')
+ if len(self._objectiveVar) > 1 and self._survivorSelectionType != 'rankNcrowdingBased':
+ self.raiseAnError(IOError, f'The only option supported in for Multi-objective Optimization is (rankNcrowdingBased).')
+
+ ####################################################################################
+ # fitness node #
+ ####################################################################################
fitnessNode = gaParamsNode.findFirst('fitness')
self._fitnessType = fitnessNode.parameterValues['type']
- # Check if the fitness requested is among the constrained optimization fitnesses
- # Currently, only InvLin and feasibleFirst Fitnesses deal with constrained optimization
+ ####################################################################################
+ # constraint node #
+ ####################################################################################
# TODO: @mandd, please explore the possibility to convert the logistic fitness into a constrained optimization fitness.
- if 'Constraint' in self.assemblerObjects and self._fitnessType not in ['invLinear','feasibleFirst']:
- self.raiseAnError(IOError, f'Currently constrained Genetic Algorithms only support invLinear and feasibleFirst fitnesses, whereas provided fitness is {self._fitnessType}')
+ if 'Constraint' in self.assemblerObjects and self._fitnessType not in ['invLinear','logistic', 'feasibleFirst']:
+ self.raiseAnError(IOError, f'Currently constrained Genetic Algorithms only support invLinear, logistic, and feasibleFirst as a fitness, whereas provided fitness is {self._fitnessType}')
+ self._expConstr = self.assemblerObjects['Constraint'] if 'Constraint' in self.assemblerObjects else None
+ self._impConstr = self.assemblerObjects['ImplicitConstraint'] if 'ImplicitConstraint' in self.assemblerObjects else None
+ if self._expConstr != None and self._impConstr != None:
+ self._numOfConst = len([ele for ele in self._expConstr if ele != 'Functions' if ele !='External']) + len([ele for ele in self._impConstr if ele != 'Functions' if ele !='External'])
+ elif self._expConstr == None and self._impConstr != None:
+ self._numOfConst = len([ele for ele in self._impConstr if ele != 'Functions' if ele !='External'])
+ elif self._expConstr != None and self._impConstr == None:
+ self._numOfConst = len([ele for ele in self._expConstr if ele != 'Functions' if ele !='External'])
+ else:
+ self._numOfConst = 0
+ if (self._expConstr != None) and (self._impConstr != None) and (self._penaltyCoeff != None):
+ if len(self._penaltyCoeff) != len(self._objectiveVar) * self._numOfConst:
+ self.raiseAnError(IOError, f'The number of penaltyCoeff. in should be identical with the number of objective in and the number of constraints (i.e., and )')
+ else:
+ pass
self._objCoeff = fitnessNode.findFirst('a').value if fitnessNode.findFirst('a') is not None else None
- self._penaltyCoeff = fitnessNode.findFirst('b').value if fitnessNode.findFirst('b') is not None else None
+ #NOTE the code lines below are for 'feasibleFirst' temperarily. It will be generalized for invLinear as well.
+ if self._fitnessType == 'feasibleFirst':
+ if self._numOfConst != 0 and fitnessNode.findFirst('b') is not None:
+ self._penaltyCoeff = fitnessNode.findFirst('b').value
+ self._objCoeff = fitnessNode.findFirst('a').value
+ elif self._numOfConst == 0 and fitnessNode.findFirst('b') is not None:
+ self.raiseAnError(IOError, f'The number of constraints used are 0 but there are penalty coefficieints')
+ elif self._numOfConst != 0 and fitnessNode.findFirst('b') is None:
+ self._penaltyCoeff = [1] * self._numOfConst * len(self._objectiveVar) #list(np.repeat(1, self._numOfConst * len(self._objectiveVar))) #NOTE if penaltyCoeff is not provided, then assume they are all 1.
+ self._objCoeff = fitnessNode.findFirst('a').value if fitnessNode.findFirst('a') is not None else [1] * len(self._objectiveVar) #list(np.repeat(
+ else:
+ self._penaltyCoeff = [0] * len(self._objectiveVar) #list(np.repeat(0, len(self._objectiveVar)))
+ self._objCoeff = [1] * len(self._objectiveVar)
+ else:
+ self._penaltyCoeff = fitnessNode.findFirst('b').value if fitnessNode.findFirst('b') is not None else None
+ self._objCoeff = fitnessNode.findFirst('a').value if fitnessNode.findFirst('a') is not None else None
self._fitnessInstance = fitnessReturnInstance(self,name = self._fitnessType)
self._repairInstance = repairReturnInstance(self,name='replacementRepair') # currently only replacement repair is implemented.
- # Convergence Criterion
+ ####################################################################################
+ # convergence criterion node #
+ ####################################################################################
convNode = paramInput.findFirst('convergence')
if convNode is not None:
for sub in convNode.subparts:
@@ -427,60 +780,101 @@ def needDenormalized(self):
# overload as needed in inheritors
return True
- ###############
- # Run Methods #
- ###############
-
- def _useRealization(self, info, rlz):
+ def singleObjectiveConstraintHandling(self, info, rlz):
"""
- Used to feedback the collected runs into actionable items within the sampler.
- This is called by localFinalizeActualSampling, and hence should contain the main skeleton.
- @ In, info, dict, identifying information about the realization
- @ In, rlz, xr.Dataset, new batched realizations
+ This function handles the constraints for a single objective optimization.
+ @ In, info, dict, dictionary containing information about the run
+ @ In, rlz, dict, dictionary containing the results of the run
@ Out, None
"""
- # The whole skeleton should be here, this should be calling all classes and _private methods.
traj = info['traj']
for t in self._activeTraj[1:]:
self._closeTrajectory(t, 'cancel', 'Currently GA is single trajectory', 0)
self.incrementIteration(traj)
- info['step'] = self.counter
- # Developer note: each algorithm step is indicated by a number followed by the generation number
- # e.g., '5 @ n-1' refers to step 5 for generation n-1 (i.e., previous generation)
- # for more details refer to GRP-Raven-development/Disceret_opt channel on MS Teams
-
- # 5 @ n-1: Survivor Selection from previous iteration (children+parents merging from previous generation)
-
- # 5.1 @ n-1: fitnessCalculation(rlz)
- # perform fitness calculation for newly obtained children (rlz)
+ if not self._canHandleMultiObjective or len(self._objectiveVar) == 1: # This is for a single-objective Optimization case.
+ offSprings = datasetToDataArray(rlz, list(self.toBeSampled))
+ objectiveVal = list(np.atleast_1d(rlz[self._objectiveVar[0]].data))
+
+ # Collect parameters that the constraints functions need (neglecting the default params such as inputs and objective functions)
+ constraintData = {}
+ if self._constraintFunctions or self._impConstraintFunctions:
+ params = []
+ for y in (self._constraintFunctions + self._impConstraintFunctions):
+ params += y.parameterNames()
+ for p in list(set(params) -set([self._objectiveVar[0]]) -set(list(self.toBeSampled.keys()))):
+ constraintData[p] = list(np.atleast_1d(rlz[p].data))
+ # Compute constraint function g_j(x) for all constraints (j = 1 .. J) and all x's (individuals) in the population
+ g0 = np.zeros((np.shape(offSprings)[0],len(self._constraintFunctions)+len(self._impConstraintFunctions)))
+
+ g = xr.DataArray(g0,
+ dims=['chromosome','Constraint'],
+ coords={'chromosome':np.arange(np.shape(offSprings)[0]),
+ 'Constraint':[y.name for y in (self._constraintFunctions + self._impConstraintFunctions)]})
+ for index,individual in enumerate(offSprings):
+ newOpt = individual
+ opt = {self._objectiveVar[0]:objectiveVal[index]}
+ for p, v in constraintData.items():
+ opt[p] = v[index]
+
+ for constIndex, constraint in enumerate(self._constraintFunctions + self._impConstraintFunctions):
+ if constraint in self._constraintFunctions:
+ g.data[index, constIndex] = self._handleExplicitConstraints(newOpt, constraint)
+ else:
+ g.data[index, constIndex] = self._handleImplicitConstraints(newOpt, opt, constraint)
+
+ offSpringFitness = self._fitnessInstance(rlz,
+ objVar=self._objectiveVar[0],
+ a=self._objCoeff,
+ b=self._penaltyCoeff,
+ penalty=None,
+ constraintFunction=g,
+ constraintNum = self._numOfConst,
+ type=self._minMax)
+
+ self._collectOptPoint(rlz, offSpringFitness, objectiveVal, g)
+ self._resolveNewGeneration(traj, rlz, objectiveVal, offSpringFitness, g, info)
+ return traj, g, objectiveVal, offSprings, offSpringFitness
+
+ def multiObjectiveConstraintHandling(self, info, rlz):
+ """
+ This function handles the constraints for a multi-objective optimization.
+ @ In, info, dict, dictionary containing information about the run
+ @ In, rlz, dict, dictionary containing the results of the run
+ @ Out, None
+ """
+ traj = info['traj']
+ for t in self._activeTraj[1:]:
+ self._closeTrajectory(t, 'cancel', 'Currently GA is single trajectory', 0)
+ self.incrementIteration(traj)
+ objectiveVal = []
offSprings = datasetToDataArray(rlz, list(self.toBeSampled))
- objectiveVal = list(np.atleast_1d(rlz[self._objectiveVar].data))
+ for i in range(len(self._objectiveVar)):
+ objectiveVal.append(list(np.atleast_1d(rlz[self._objectiveVar[i]].data)))
- # collect parameters that the constraints functions need (neglecting the default params such as inputs and objective functions)
+ # Collect parameters that the constraints functions need (neglecting the default params such as inputs and objective functions)
constraintData = {}
if self._constraintFunctions or self._impConstraintFunctions:
params = []
for y in (self._constraintFunctions + self._impConstraintFunctions):
params += y.parameterNames()
- for p in list(set(params) -set([self._objectiveVar]) -set(list(self.toBeSampled.keys()))):
+ for p in list(set(params) -set(self._objectiveVar) -set(list(self.toBeSampled.keys()))):
constraintData[p] = list(np.atleast_1d(rlz[p].data))
- # Compute constraint function g_j(x) for all constraints (j = 1 .. J)
- # and all x's (individuals) in the population
+ # Compute constraint function g_j(x) for all constraints (j = 1 .. J) and all x's (individuals) in the population
g0 = np.zeros((np.shape(offSprings)[0],len(self._constraintFunctions)+len(self._impConstraintFunctions)))
g = xr.DataArray(g0,
- dims=['chromosome','Constraint'],
- coords={'chromosome':np.arange(np.shape(offSprings)[0]),
- 'Constraint':[y.name for y in (self._constraintFunctions + self._impConstraintFunctions)]})
- # FIXME The constraint handling is following the structure of the RavenSampled.py,
- # there are many utility functions that can be simplified and/or merged together
- # _check, _handle, and _apply, for explicit and implicit constraints.
- # This can be simplified in the near future in GradientDescent, SimulatedAnnealing, and here in GA
+ dims=['chromosome','Constraint'],
+ coords={'chromosome':np.arange(np.shape(offSprings)[0]),
+ 'Constraint':[y.name for y in (self._constraintFunctions + self._impConstraintFunctions)]})
+
for index,individual in enumerate(offSprings):
newOpt = individual
- opt = {self._objectiveVar:objectiveVal[index]}
+ objOpt = dict(zip(self._objectiveVar,
+ list(map(lambda x:-1 if x=="max" else 1 , self._minMax))))
+ opt = dict(zip(self._objectiveVar, [item[index] for item in objectiveVal]))
+ opt = {k: objOpt[k]*opt[k] for k in opt}
for p, v in constraintData.items():
opt[p] = v[index]
@@ -489,58 +883,98 @@ def _useRealization(self, info, rlz):
g.data[index, constIndex] = self._handleExplicitConstraints(newOpt, constraint)
else:
g.data[index, constIndex] = self._handleImplicitConstraints(newOpt, opt, constraint)
+
offSpringFitness = self._fitnessInstance(rlz,
objVar=self._objectiveVar,
a=self._objCoeff,
b=self._penaltyCoeff,
- penalty=None,
constraintFunction=g,
- type=self._minMax)
+ constraintNum = self._numOfConst,
+ type = self._minMax)
+ return traj, g, objectiveVal, offSprings, offSpringFitness
+
+ #########################################################################################################
+ # Run Methods #
+ #########################################################################################################
+
+ #########################################################################################################
+ # Developer note:
+ # Each algorithm step is indicated by a number followed by the generation number
+ # e.g., '0 @ n-1' refers to step 0 for generation n-1 (i.e., previous generation)
+ # for more details refer to GRP-Raven-development/Disceret_opt channel on MS Teams.
+ #########################################################################################################
+
+ def _useRealization(self, info, rlz):
+ """
+ Used to feedback the collected runs into actionable items within the sampler.
+ This is called by localFinalizeActualSampling, and hence should contain the main skeleton.
+ @ In, info, dict, identifying information about the realization
+ @ In, rlz, xr.Dataset, new batched realizations
+ @ Out, None
+ """
+
+ info['step'] = self.counter
+
+ # 0 @ n-1: Survivor Selection from previous iteration (children+parents merging from previous generation)
+ # 0.1 @ n-1: fitnessCalculation(rlz): Perform fitness calculation for newly obtained children (rlz)
+
+ objInd = int(len(self._objectiveVar)>1) + 1 #if len(self._objectiveVar) == 1 else 2
+ constraintFuncs: dict = {1: GeneticAlgorithm.singleObjectiveConstraintHandling, 2: GeneticAlgorithm.multiObjectiveConstraintHandling}
+ const = constraintFuncs.get(objInd, GeneticAlgorithm.singleObjectiveConstraintHandling)
+ traj, g, objectiveVal, offSprings, offSpringFitness = const(self, info, rlz)
- self._collectOptPoint(rlz, offSpringFitness, objectiveVal,g)
- self._resolveNewGeneration(traj, rlz, objectiveVal, offSpringFitness, g, info)
+ # 0.2@ n-1: Survivor selection(rlz): Update population container given obtained children
if self._activeTraj:
- # 5.2@ n-1: Survivor selection(rlz)
- # update population container given obtained children
- if self.counter > 1:
- self.population,self.fitness,age,self.objectiveVal = self._survivorSelectionInstance(age=self.popAge,
- variables=list(self.toBeSampled),
- population=self.population,
- fitness=self.fitness,
- newRlz=rlz,
- offSpringsFitness=offSpringFitness,
- popObjectiveVal=self.objectiveVal)
- self.popAge = age
- else:
- self.population = offSprings
- self.fitness = offSpringFitness
- self.objectiveVal = rlz[self._objectiveVar].data
+ survivorSelectionFuncs: dict = {1: survivorSelectionProcess.singleObjSurvivorSelect, 2: survivorSelectionProcess.multiObjSurvivorSelect}
+ survivorSelection = survivorSelectionFuncs.get(objInd, survivorSelectionProcess.singleObjSurvivorSelect)
+ survivorSelection(self, info, rlz, traj, offSprings, offSpringFitness, objectiveVal, g)
# 1 @ n: Parent selection from population
- # pair parents together by indexes
+ # Pair parents together by indexes
parents = self._parentSelectionInstance(self.population,
variables=list(self.toBeSampled),
- fitness=self.fitness,
- nParents=self._nParents)
-
- # 2 @ n: Crossover from set of parents
- # create childrenCoordinates (x1,...,xM)
+ fitness = self.fitness,
+ kSelection = self._kSelection,
+ nParents=self._nParents,
+ rank = self.rank,
+ crowdDistance = self.crowdingDistance,
+ objVal = self._objectiveVar
+ )
+
+ # 2 @ n: Crossover from set of parents
+ # Create childrenCoordinates (x1,...,xM)
+ # if crossover probability is a float, keep it as is. But, If it's a string, called appropriate function.
+ if(self._crossoverProbType == "static"):
+ crossoverProb = self._crossoverProb
+ elif(self._crossoverProb.lower() == "linear"):
+ crossoverProb = getLinearCrossoverProbability(self.getIteration(traj),self.limit)
+ elif(self._crossoverProb.lower() == "quadratic"):
+ crossoverProb = getQuadraticCrossoverProbability(self.getIteration(traj),self.limit)
+ else:
+ self.raiseAnError(IOError, "{} is not implemeted!. Currently only 'linear' and 'quadratic' are implemented".format(self._crossoverProb))
childrenXover = self._crossoverInstance(parents=parents,
- variables=list(self.toBeSampled),
- crossoverProb=self._crossoverProb,
- points=self._crossoverPoints)
-
- # 3 @ n: Mutation
- # perform random directly on childrenCoordinates
+ variables=list(self.toBeSampled),
+ crossoverProb=crossoverProb,
+ points=self._crossoverPoints)
+
+ # 3 @ n: Mutation
+ # Perform random directly on childrenCoordinates
+ if(self._mutationProbType == "static"):
+ mutationProb = self._mutationProb
+ elif(self._mutationProb == "linear"):
+ mutationProb = getLinearMutationProbability(self.getIteration(traj),self.limit)
+ elif(self._mutationProb == "quadratic"):
+ mutationProb = getQuadraticMutationProbability(self.getIteration(traj),self.limit)
+ else:
+ self.raiseAnError(IOError, "{} is not implemeted!. Currently only 'linear' and 'quadratic' are implemented".format(self._mutationProb))
childrenMutated = self._mutationInstance(offSprings=childrenXover,
- distDict=self.distDict,
- locs=self._mutationLocs,
- mutationProb=self._mutationProb,
- variables=list(self.toBeSampled))
-
+ distDict=self.distDict,
+ locs=self._mutationLocs,
+ mutationProb=mutationProb,
+ variables=list(self.toBeSampled))
# 4 @ n: repair/replacement
- # repair should only happen if multiple genes in a single chromosome have the same values (),
+ # Repair should only happen if multiple genes in a single chromosome have the same values (),
# and at the same time the sampling of these genes should be with Out replacement.
needsRepair = False
for chrom in range(self._nChildren):
@@ -559,12 +993,12 @@ def _useRealization(self, info, rlz):
children = children[:self._populationSize, :]
daChildren = xr.DataArray(children,
- dims=['chromosome','Gene'],
- coords={'chromosome': np.arange(np.shape(children)[0]),
- 'Gene':list(self.toBeSampled)})
+ dims=['chromosome','Gene'],
+ coords={'chromosome': np.arange(np.shape(children)[0]),
+ 'Gene':list(self.toBeSampled)})
# 5 @ n: Submit children batch
- # submit children coordinates (x1,...,xm), i.e., self.childrenCoordinates
+ # Submit children coordinates (x1,...,xm), i.e., self.childrenCoordinates
for i in range(self.batch):
newRlz = {}
for _, var in enumerate(self.toBeSampled.keys()):
@@ -588,7 +1022,6 @@ def _submitRun(self, point, traj, step, moreInfo=None):
})
# NOTE: Currently, GA treats explicit and implicit constraints similarly
# while box constraints (Boundary constraints) are automatically handled via limits of the distribution
- #
self.raiseADebug(f'Adding run to queue: {self.denormalizeData(point)} | {info}')
self._submissionQueue.append((point, info))
@@ -602,6 +1035,8 @@ def flush(self):
self.population = None
self.popAge = None
self.fitness = None
+ self.rank = None
+ self.crowdingDistance = None
self.ahdp = np.NaN
self.ahd = np.NaN
self.hdsm = np.NaN
@@ -609,6 +1044,12 @@ def flush(self):
self.bestFitness = None
self.bestObjective = None
self.objectiveVal = None
+ self.multiBestPoint = None
+ self.multiBestFitness = None
+ self.multiBestObjective = None
+ self.multiBestConstraint = None
+ self.multiBestRank = None
+ self.multiBestCD = None
# END queuing Runs
# * * * * * * * * * * * * * * * *
@@ -654,13 +1095,19 @@ def _resolveNewGeneration(self, traj, rlz, objectiveVal, fitness, g, info):
# NOTE: the solution export needs to be updated BEFORE we run rejectOptPoint or extend the opt
# point history.
if self._writeSteps == 'every':
- self._solutionExportUtilityUpdate(traj, rlz, fitness, g, acceptable)
-
+ for i in range(rlz.sizes['RAVEN_sample_ID']):
+ varList = self._solutionExport.getVars('input') + self._solutionExport.getVars('output') + list(self.toBeSampled.keys())
+ rlzDict = dict((var,np.atleast_1d(rlz[var].data)[i]) for var in set(varList) if var in rlz.data_vars)
+ rlzDict[self._objectiveVar[0]] = np.atleast_1d(rlz[self._objectiveVar[0]].data)[i]
+ rlzDict['fitness'] = np.atleast_1d(fitness.to_array()[:,i])
+ for ind, consName in enumerate(g['Constraint'].values):
+ rlzDict['ConstraintEvaluation_'+consName] = g[i,ind]
+ self._updateSolutionExport(traj, rlzDict, acceptable, None)
# decide what to do next
if acceptable in ['accepted', 'first']:
# record history
bestRlz = {}
- bestRlz[self._objectiveVar] = self.bestObjective
+ bestRlz[self._objectiveVar[0]] = self.bestObjective
bestRlz['fitness'] = self.bestFitness
bestRlz.update(self.bestPoint)
self._optPointHistory[traj].append((bestRlz, info))
@@ -669,6 +1116,77 @@ def _resolveNewGeneration(self, traj, rlz, objectiveVal, fitness, g, info):
else: # e.g. rerun
pass # nothing to do, just keep moving
+ def _resolveNewGenerationMulti(self, traj, rlz, info):
+ """
+ Store a new Generation after checking convergence
+ @ In, traj, int, trajectory for this new point
+ @ In, rlz, dict, realized realization
+ @ In, objectiveVal, list, objective values at each chromosome of the realization
+ @ In, fitness, xr.DataArray, fitness values at each chromosome of the realization
+ @ In, g, xr.DataArray, the constraint evaluation function
+ @ In, info, dict, identifying information about the realization
+ """
+ self.raiseADebug('*'*80)
+ self.raiseADebug(f'Trajectory {traj} iteration {info["step"]} resolving new state ...')
+ # note the collection of the opt point
+ self._stepTracker[traj]['opt'] = (rlz, info)
+ acceptable = 'accepted' if self.counter > 1 else 'first'
+ old = self.population
+ converged = self._updateConvergence(traj, rlz, old, acceptable)
+ if converged:
+ self._closeTrajectory(traj, 'converge', 'converged', self.multiBestObjective)
+ # NOTE: the solution export needs to be updated BEFORE we run rejectOptPoint or extend the opt
+ # point history.
+ objVal = [[] for x in range(len(self.objectiveVal[0]))]
+ for i in range(len(self.objectiveVal[0])):
+ objVal[i] = [item[i] for item in self.objectiveVal]
+
+ objVal = xr.DataArray(objVal,
+ dims=['chromosome','obj'],
+ coords={'chromosome':np.arange(np.shape(objVal)[0]),
+ 'obj': self._objectiveVar})
+ if self._writeSteps == 'every':
+ print("### rlz.sizes['RAVEN_sample_ID'] = {}".format(rlz.sizes['RAVEN_sample_ID']))
+ print("### self.population.shape is {}".format(self.population.shape))
+ for i in range(rlz.sizes['RAVEN_sample_ID']):
+ varList = self._solutionExport.getVars('input') + self._solutionExport.getVars('output') + list(self.toBeSampled.keys())
+ # rlzDict = dict((var,np.atleast_1d(rlz[var].data)[i]) for var in set(varList) if var in rlz.data_vars)
+ rlzDict = dict((var,self.population.data[i][j]) for j, var in enumerate(self.population.Gene.data))
+ rlzDict.update(dict((var,objVal.data[i][j]) for j, var in enumerate(objVal.obj.data)))
+ rlzDict['batchId'] = rlz['batchId'].data[i]
+ for j in range(len(self._objectiveVar)):
+ rlzDict[self._objectiveVar[j]] = objVal.data[i][j]
+ rlzDict['rank'] = np.atleast_1d(self.rank.data)[i]
+ rlzDict['CD'] = np.atleast_1d(self.crowdingDistance.data)[i]
+ for ind, fitName in enumerate(list(self.fitness.keys())):
+ rlzDict['FitnessEvaluation_'+fitName] = self.fitness[fitName].data[i]
+ for ind, consName in enumerate([y.name for y in (self._constraintFunctions + self._impConstraintFunctions)]):
+ rlzDict['ConstraintEvaluation_'+consName] = self.constraintsV.data[i,ind]
+ self._updateSolutionExport(traj, rlzDict, acceptable, None)
+
+ # decide what to do next
+ if acceptable in ['accepted', 'first']:
+ # record history
+ bestRlz = {}
+ varList = self._solutionExport.getVars('input') + self._solutionExport.getVars('output') + list(self.toBeSampled.keys())
+ bestRlz = dict((var,np.atleast_1d(rlz[var].data)) for var in set(varList) if var in rlz.data_vars)
+ for i in range(len(self._objectiveVar)):
+ bestRlz[self._objectiveVar[i]] = [item[i] for item in self.multiBestObjective]
+
+ bestRlz['rank'] = self.multiBestRank
+ bestRlz['CD'] = self.multiBestCD
+ if len(self.multiBestConstraint) != 0: # No constraints
+ for ind, consName in enumerate(self.multiBestConstraint.Constraint):
+ bestRlz['ConstraintEvaluation_'+consName.values.tolist()] = self.multiBestConstraint[ind].values
+ for ind, fitName in enumerate(list(self.multiBestFitness.keys())):
+ bestRlz['FitnessEvaluation_'+ fitName] = self.multiBestFitness[fitName].data
+ bestRlz.update(self.multiBestPoint)
+ self._optPointHistory[traj].append((bestRlz, info))
+ elif acceptable == 'rejected':
+ self._rejectOptPoint(traj, info, old)
+ else: # e.g. rerun
+ pass # nothing to do, just keep moving
+
def _collectOptPoint(self, rlz, fitness, objectiveVal, g):
"""
Collects the point (dict) from a realization
@@ -677,12 +1195,14 @@ def _collectOptPoint(self, rlz, fitness, objectiveVal, g):
@ In, fitness, xr.DataArray, fitness values at each chromosome of the realization
@ Out, point, dict, point used in this realization
"""
-
varList = list(self.toBeSampled.keys()) + self._solutionExport.getVars('input') + self._solutionExport.getVars('output')
varList = set(varList)
selVars = [var for var in varList if var in rlz.data_vars]
population = datasetToDataArray(rlz, selVars)
- optPoints,fit,obj,gOfBest = zip(*[[x,y,z,w] for x, y, z,w in sorted(zip(np.atleast_2d(population.data),np.atleast_1d(fitness.data),objectiveVal,np.atleast_2d(g.data)),reverse=True,key=lambda x: (x[1]))])
+ if self._fitnessType == 'hardConstraint':
+ optPoints,fit,obj,gOfBest = zip(*[[x,y,z,w] for x, y, z,w in sorted(zip(np.atleast_2d(population.data),datasetToDataArray(fitness, self._objectiveVar).data,objectiveVal,np.atleast_2d(g.data)),reverse=True,key=lambda x: (x[1],-x[2]))])
+ else:
+ optPoints,fit,obj,gOfBest = zip(*[[x,y,z,w] for x, y, z,w in sorted(zip(np.atleast_2d(population.data),datasetToDataArray(fitness, self._objectiveVar).data,objectiveVal,np.atleast_2d(g.data)),reverse=True,key=lambda x: (x[1]))])
point = dict((var,float(optPoints[0][i])) for i, var in enumerate(selVars) if var in rlz.data_vars)
gOfBest = dict(('ConstraintEvaluation_'+name,float(gOfBest[0][i])) for i, name in enumerate(g.coords['Constraint'].values))
if (self.counter > 1 and obj[0] <= self.bestObjective and fit[0] >= self.bestFitness) or self.counter == 1:
@@ -693,6 +1213,51 @@ def _collectOptPoint(self, rlz, fitness, objectiveVal, g):
return point
+ def _collectOptPointMulti(self, population, rank, CD, objVal, fitness, constraintsV):
+ """
+ Collects the point (dict) from a realization
+ @ In, population, Dataset, container containing the population
+ @ In, objectiveVal, list, objective values at each chromosome of the realization
+ @ In, rank, xr.DataArray, rank values at each chromosome of the realization
+ @ In, crowdingDistance, xr.DataArray, crowdingDistance values at each chromosome of the realization
+ @ Out, point, dict, point used in this realization
+ """
+ rankOneIDX = [i for i, rankValue in enumerate(rank.data) if rankValue == 1]
+ optPoints = population[rankOneIDX]
+ optObjVal = np.array([list(ele) for ele in list(zip(*objVal))])[rankOneIDX]
+ count = 0
+ for i in list(fitness.keys()):
+ data = fitness[i][rankOneIDX]
+ if count == 0:
+ fitSet = data.to_dataset(name = i)
+ else:
+ fitSet[i] = data
+ count = count + 1
+ optConstraintsV = constraintsV.data[rankOneIDX]
+ optRank = rank.data[rankOneIDX]
+ optCD = CD.data[rankOneIDX]
+
+ optPointsDic = dict((var,np.array(optPoints)[:,i]) for i, var in enumerate(population.Gene.data))
+ optConstNew = []
+ for i in range(len(optConstraintsV)):
+ optConstNew.append(optConstraintsV[i])
+ optConstNew = list(map(list, zip(*optConstNew)))
+ if (len(optConstNew)) != 0:
+ optConstNew = xr.DataArray(optConstNew,
+ dims=['Constraint','Evaluation'],
+ coords={'Constraint':[y.name for y in (self._constraintFunctions + self._impConstraintFunctions)],
+ 'Evaluation':np.arange(np.shape(optConstNew)[1])})
+
+ self.multiBestPoint = optPointsDic
+ self.multiBestFitness = fitSet
+ self.multiBestObjective = optObjVal
+ self.multiBestConstraint = optConstNew
+ self.multiBestRank = optRank
+ self.multiBestCD = optCD
+
+ return #optPointsDic
+
+
def _checkAcceptability(self, traj):
"""
This is an abstract method for all RavenSampled Optimizer, whereas for GA all children are accepted
@@ -709,16 +1274,26 @@ def checkConvergence(self, traj, new, old):
@ Out, any(convs.values()), bool, True of any of the convergence criteria was reached
@ Out, convs, dict, on the form convs[conv] = bool, where conv is in self._convergenceCriteria
"""
- convs = {}
- for conv in self._convergenceCriteria:
- fName = conv[:1].upper() + conv[1:]
- # get function from lookup
- f = getattr(self, f'_checkConv{fName}')
- # check convergence function
- okay = f(traj, new=new, old=old)
- # store and update
- convs[conv] = okay
-
+ if len(self._objectiveVar) == 1:
+ convs = {}
+ for conv in self._convergenceCriteria:
+ fName = conv[:1].upper() + conv[1:]
+ # get function from lookup
+ f = getattr(self, f'_checkConv{fName}')
+ # check convergence function
+ okay = f(traj, new=new, old=old)
+ # store and update
+ convs[conv] = okay
+ else:
+ convs = {}
+ for conv in self._convergenceCriteria:
+ fName = conv[:1].upper() + conv[1:]
+ # get function from lookup
+ f = getattr(self, f'_checkConv{fName}')
+ # check convergence function
+ okay = f(traj, new=new, old=old)
+ # store and update
+ convs[conv] = okay
return any(convs.values()), convs
def _checkConvObjective(self, traj, **kwargs):
@@ -728,16 +1303,23 @@ def _checkConvObjective(self, traj, **kwargs):
@ In, kwargs, dict, dictionary of parameters for convergence criteria
@ Out, converged, bool, convergence state
"""
- if len(self._optPointHistory[traj]) < 2:
- return False
- o1, _ = self._optPointHistory[traj][-1]
- obj = o1[self._objectiveVar]
- converged = (obj == self._convergenceCriteria['objective'])
- self.raiseADebug(self.convFormat.format(name='objective',
- conv=str(converged),
- got=obj,
- req=self._convergenceCriteria['objective']))
-
+ if len(self._objectiveVar) == 1: # This is for a single-objective Optimization case.
+ if len(self._optPointHistory[traj]) < 2:
+ return False
+ o1, _ = self._optPointHistory[traj][-1]
+ obj = o1[self._objectiveVar[0]]
+ converged = (obj == self._convergenceCriteria['objective'])
+ self.raiseADebug(self.convFormat.format(name='objective',
+ conv=str(converged),
+ got=obj,
+ req=self._convergenceCriteria['objective']))
+ else: # This is for a multi-objective Optimization case.
+ if len(self._optPointHistory[traj]) < 2:
+ return False
+ o1, _ = self._optPointHistory[traj][-1]
+ obj1 = o1[self._objectiveVar[0]]
+ obj2 = o1[self._objectiveVar[1]]
+ converged = (obj1 == self._convergenceCriteria['objective'] and obj2 == self._convergenceCriteria['objective'])
return converged
def _checkConvAHDp(self, traj, **kwargs):
@@ -909,14 +1491,24 @@ def _updateConvergence(self, traj, new, old, acceptable):
@ Out, converged, bool, True if converged on ANY criteria
"""
# NOTE we have multiple "if acceptable" trees here, as we need to update soln export regardless
- if acceptable == 'accepted':
- self.raiseADebug(f'Convergence Check for Trajectory {traj}:')
- # check convergence
- converged, convDict = self.checkConvergence(traj, new, old)
- else:
- converged = False
- convDict = dict((var, False) for var in self._convergenceInfo[traj])
- self._convergenceInfo[traj].update(convDict)
+ if len(self._objectiveVar) == 1: # This is for a single-objective Optimization case.
+ if acceptable == 'accepted':
+ self.raiseADebug(f'Convergence Check for Trajectory {traj}:')
+ # check convergence
+ converged, convDict = self.checkConvergence(traj, new, old)
+ else:
+ converged = False
+ convDict = dict((var, False) for var in self._convergenceInfo[traj])
+ self._convergenceInfo[traj].update(convDict)
+ else: # This is for a multi-objective Optimization case.
+ if acceptable == 'accepted':
+ self.raiseADebug(f'Convergence Check for Trajectory {traj}:')
+ # check convergence
+ converged, convDict = self.checkConvergence(traj, new, old)
+ else:
+ converged = False
+ convDict = dict((var, False) for var in self._convergenceInfo[traj])
+ self._convergenceInfo[traj].update(convDict)
return converged
@@ -952,8 +1544,9 @@ def _rejectOptPoint(self, traj, info, old):
"""
return
- # * * * * * * * * * * * *
- # Constraint Handling
+ ###############################
+ # Constraint Handling #
+ ###############################
def _handleExplicitConstraints(self, point, constraint):
"""
Computes explicit (i.e. input-based) constraints
@@ -1016,9 +1609,9 @@ def _checkImpFunctionalConstraints(self, point, opt, impConstraint):
g = impConstraint.evaluate('implicitConstraint', inputs)
return g
-
- # END constraint handling
- # * * * * * * * * * * * *
+ ###############################
+ # END constraint handling #
+ ###############################
def _addToSolutionExport(self, traj, rlz, acceptable):
"""
Contributes additional entries to the solution export.
@@ -1030,10 +1623,14 @@ def _addToSolutionExport(self, traj, rlz, acceptable):
# meta variables
toAdd = {'age': 0 if self.popAge is None else self.popAge,
'batchId': self.batchId,
- 'fitness': rlz['fitness'],
+ # 'fitness': rlz['fitness'],
'AHDp': self.ahdp,
'AHD': self.ahd,
- 'HDSM': self.hdsm}
+ 'rank': 0 if ((type(self._objectiveVar) == list and len(self._objectiveVar) == 1) or type(self._objectiveVar) == str) else rlz['rank'],
+ 'CD': 0 if ((type(self._objectiveVar) == list and len(self._objectiveVar) == 1) or type(self._objectiveVar) == str) else rlz['CD'],
+ 'HDSM': self.hdsm
+ }
+
for var, val in self.constants.items():
toAdd[var] = val
@@ -1060,6 +1657,8 @@ def _formatSolutionExportVariableNames(self, acceptable):
new.extend([template.format(CONV=conv) for conv in self._convergenceCriteria])
elif '{VAR}' in template:
new.extend([template.format(VAR=var) for var in self.toBeSampled])
+ elif '{OBJ}' in template:
+ new.extend([template.format(OBJ=obj) for obj in self._objectiveVar])
elif '{CONSTRAINT}' in template:
new.extend([template.format(CONSTRAINT=constraint.name) for constraint in self._constraintFunctions + self._impConstraintFunctions])
else:
diff --git a/ravenframework/Optimizers/GradientDescent.py b/ravenframework/Optimizers/GradientDescent.py
index 452f579f4e..7a37205c28 100644
--- a/ravenframework/Optimizers/GradientDescent.py
+++ b/ravenframework/Optimizers/GradientDescent.py
@@ -212,6 +212,7 @@ def __init__(self):
self._followerProximity = 1e-2 # distance at which annihilation can start occurring, in ?normalized? space
self._trajectoryFollowers = defaultdict(list) # map of trajectories to the trajectories following them
self._functionalConstraintExplorationLimit = 500 # number of input-space explorations allowable for functional constraints
+ self._canHandleMultiObjective = False # Currently Gradient Descent cannot handle multiobjective optimization
# __private
# additional methods
# register adaptive sample identification criteria
@@ -338,7 +339,11 @@ def _useRealization(self, info, rlz):
@ Out, None
"""
traj = info['traj']
- optVal = rlz[self._objectiveVar]
+ # if not self._canHandleMultiObjective and len(self._objectiveVar) == 1:
+ # self._objectiveVar = self._objectiveVar[0]
+ if len(self._objectiveVar) > 1 and type(self._objectiveVar)==list:
+ self.raiseAnError(IOError, 'Gradient Descent does not support multiObjective optimization yet! objective variable must be a single variable for now!')
+ optVal = rlz[self._objectiveVar[0]]
info['optVal'] = optVal
purpose = info['purpose']
if purpose.startswith('opt'):
@@ -353,13 +358,13 @@ def _useRealization(self, info, rlz):
gradMag, gradVersor, _ = self._gradientInstance.evaluate(opt,
grads,
gradInfos,
- self._objectiveVar)
+ self._objectiveVar[0])
self.raiseADebug(' ... gradient calculated ...')
self._gradHistory[traj].append((gradMag, gradVersor))
# get new step information
try:
newOpt, stepSize, stepInfo = self._stepInstance.step(opt,
- objVar=self._objectiveVar,
+ objVar=self._objectiveVar[0],
optHist=self._optPointHistory[traj],
gradientHist=self._gradHistory[traj],
prevStepSize=self._stepHistory[traj],
@@ -378,7 +383,7 @@ def _useRealization(self, info, rlz):
except NoConstraintResolutionFound:
# we've tried everything, but we just can't hack it
self.raiseAMessage(f'Optimizer "{self.name}" trajectory {traj} was unable to continue due to functional or boundary constraints.')
- self._closeTrajectory(traj, 'converge', 'no constraint resolution', opt[self._objectiveVar])
+ self._closeTrajectory(traj, 'converge', 'no constraint resolution', opt[self._objectiveVar[0]])
return
# update values if modified by constraint handling
@@ -598,7 +603,7 @@ def _checkAcceptability(self, traj, opt, optVal, info):
# Check acceptability
if self._optPointHistory[traj]:
old, _ = self._optPointHistory[traj][-1]
- oldVal = old[self._objectiveVar]
+ oldVal = old[self._objectiveVar[0]]
# check if following another trajectory
if self._terminateFollowers:
following = self._stepInstance.trajIsFollowing(traj, self.denormalizeData(opt), info,
@@ -815,7 +820,7 @@ def _checkConvObjective(self, traj):
return False
o1, _ = self._optPointHistory[traj][-1]
o2, _ = self._optPointHistory[traj][-2]
- delta = mathUtils.relativeDiff(o2[self._objectiveVar], o1[self._objectiveVar])
+ delta = mathUtils.relativeDiff(o2[self._objectiveVar[0]], o1[self._objectiveVar[0]])
converged = abs(delta) < self._convergenceCriteria['objective']
self.raiseADebug(self.convFormat.format(name='objective',
conv=str(converged),
diff --git a/ravenframework/Optimizers/Optimizer.py b/ravenframework/Optimizers/Optimizer.py
index e731bb9dc1..9606a6394c 100644
--- a/ravenframework/Optimizers/Optimizer.py
+++ b/ravenframework/Optimizers/Optimizer.py
@@ -78,10 +78,10 @@ def getInputSpecification(cls):
specs.description = 'Optimizers'
# objective variable
- specs.addSub(InputData.parameterInputFactory('objective', contentType=InputTypes.StringType, strictMode=True,
+ specs.addSub(InputData.parameterInputFactory('objective', contentType=InputTypes.StringListType, strictMode=True,
printPriority=90, # more important than
- descr=r"""Name of the response variable (or ``objective function'') that should be optimized
- (minimized or maximized)."""))
+ descr=r"""Name of the objective variable(s) (or ``objective function'') that should be optimized
+ (minimized or maximized). It can be a single string or a list of strings if it is a multi-objective problem. """))
# modify Sampler variable nodes
variable = specs.getSub('variable')
@@ -103,7 +103,8 @@ def getInputSpecification(cls):
descr=r"""seed for random number generation. Note that by default RAVEN uses an internal seed,
so this seed must be changed to observe changed behavior. \default{RAVEN-determined}""")
minMaxEnum = InputTypes.makeEnumType('MinMax', 'MinMaxType', ['min', 'max'])
- minMax = InputData.parameterInputFactory('type', contentType=minMaxEnum,
+ minMaxList = InputTypes.StringListType()
+ minMax = InputData.parameterInputFactory('type', contentType=minMaxList,
descr=r"""the type of optimization to perform. \xmlString{min} will search for the lowest
\xmlNode{objective} value, while \xmlString{max} will search for the highest value.""")
init.addSub(seed)
@@ -160,7 +161,7 @@ def __init__(self):
# public
# _protected
self._seed = None # random seed to apply
- self._minMax = 'min' # maximization or minimization?
+ self._minMax = ['min'] # maximization or minimization?
self._activeTraj = [] # tracks live trajectories
self._cancelledTraj = {} # tracks cancelled trajectories, and reasons
self._convergedTraj = {} # tracks converged trajectories, and values obtained
@@ -248,7 +249,6 @@ def handleInput(self, paramInput):
@ Out, None
"""
# the reading of variables (dist or func) and constants already happened in _readMoreXMLbase in Sampler
- # objective var
self._objectiveVar = paramInput.findFirst('objective').value
# sampler init
@@ -263,6 +263,10 @@ def handleInput(self, paramInput):
minMax = init.findFirst('type')
if minMax is not None:
self._minMax = minMax.value
+ if len(self._minMax) != len(self._objectiveVar):
+ self.raiseAnError(IOError, 'The length of in -- and in - must be of the same length!')
+ if list(set(self._minMax)-set(['min','max'])) != []:
+ self.raiseAnError(IOError, " under - must be a either 'min' and/or 'max'")
# variables additional reading
for varNode in paramInput.findAll('variable'):
diff --git a/ravenframework/Optimizers/RavenSampled.py b/ravenframework/Optimizers/RavenSampled.py
index 61bc4c9841..f36292a08a 100644
--- a/ravenframework/Optimizers/RavenSampled.py
+++ b/ravenframework/Optimizers/RavenSampled.py
@@ -301,8 +301,16 @@ def localFinalizeActualSampling(self, jobObject, model, myInput):
# # testing suggests no big deal on smaller problem
# the sign of the objective function is flipped in case we do maximization
# so get the correct-signed value into the realization
- if self._minMax == 'max':
- rlz[self._objectiveVar] *= -1
+
+ if 'max' in self._minMax:
+ if not self._canHandleMultiObjective and len(self._objectiveVar) == 1:
+ rlz[self._objectiveVar[0]] *= -1
+ elif type(self._objectiveVar) == list:
+ for i in range(len(self._objectiveVar)):
+ if self._minMax[i] == 'max':
+ rlz[self._objectiveVar[i]] *= -1
+ else:
+ rlz[self._objectiveVar] *= -1
# TODO FIXME let normalizeData work on an xr.DataSet (batch) not just a dictionary!
rlz = self.normalizeData(rlz)
self._useRealization(info, rlz)
@@ -313,57 +321,140 @@ def finalizeSampler(self, failedRuns):
@ In, failedRuns, list, runs that failed as part of this sampling
@ Out, None
"""
- # get and print the best trajectory obtained
- bestValue = None
- bestTraj = None
- bestPoint = None
- s = -1 if self._minMax == 'max' else 1
- # check converged trajectories
- self.raiseAMessage('*' * 80)
- self.raiseAMessage('Optimizer Final Results:')
- self.raiseADebug('')
- self.raiseADebug(' - Trajectory Results:')
- self.raiseADebug(' TRAJ STATUS VALUE')
- statusTemplate = ' {traj:2d} {status:^11s} {val: 1.3e}'
- # print cancelled traj
- for traj, info in self._cancelledTraj.items():
- val = info['value']
- status = info['reason']
- self.raiseADebug(statusTemplate.format(status=status, traj=traj, val=s * val))
- # check converged traj
- for traj, info in self._convergedTraj.items():
+ if not self._canHandleMultiObjective or len(self._objectiveVar) == 1:
+ # get and print the best trajectory obtained
+ bestValue = None
+ bestTraj = None
+ bestPoint = None
+ s = -1 if 'max' in self._minMax else 1
+ # check converged trajectories
+ self.raiseAMessage('*' * 80)
+ self.raiseAMessage('Optimizer Final Results:')
+ self.raiseADebug('')
+ self.raiseADebug(' - Trajectory Results:')
+ self.raiseADebug(' TRAJ STATUS VALUE')
+ statusTemplate = ' {traj:2d} {status:^11s} {val: 1.3e}'
+ # print cancelled traj
+ for traj, info in self._cancelledTraj.items():
+ val = info['value']
+ status = info['reason']
+ self.raiseADebug(statusTemplate.format(status=status, traj=traj, val=s * val))
+ # check converged traj
+ for traj, info in self._convergedTraj.items():
+ opt = self._optPointHistory[traj][-1][0]
+ val = info['value']
+ self.raiseADebug(statusTemplate.format(status='converged', traj=traj, val=s * val))
+ if bestValue is None or val < bestValue:
+ bestTraj = traj
+ bestValue = val
+ # further check active unfinished trajectories
+ # FIXME why should there be any active, unfinished trajectories when we're cleaning up sampler?
+ traj = 0 # FIXME why only 0?? what if it's other trajectories that are active and unfinished?
+ # sanity check: if there's no history (we never got any answers) then report rather than crash
+ if len(self._optPointHistory[traj]) == 0:
+ self.raiseAnError(RuntimeError, f'There is no optimization history for traj {traj}! ' +
+ 'Perhaps the Model failed?')
opt = self._optPointHistory[traj][-1][0]
- val = info['value']
- self.raiseADebug(statusTemplate.format(status='converged', traj=traj, val=s * val))
+ val = opt[self._objectiveVar[0]]
+ self.raiseADebug(statusTemplate.format(status='active', traj=traj, val=s * val))
if bestValue is None or val < bestValue:
- bestTraj = traj
bestValue = val
- # further check active unfinished trajectories
- # FIXME why should there be any active, unfinished trajectories when we're cleaning up sampler?
- traj = 0 # FIXME why only 0?? what if it's other trajectories that are active and unfinished?
- # sanity check: if there's no history (we never got any answers) then report than rather than crash
- if len(self._optPointHistory[traj]) == 0:
- self.raiseAnError(RuntimeError, f'There is no optimization history for traj {traj}! ' +
- 'Perhaps the Model failed?')
- opt = self._optPointHistory[traj][-1][0]
- val = opt[self._objectiveVar]
- self.raiseADebug(statusTemplate.format(status='active', traj=traj, val=s * val))
- if bestValue is None or val < bestValue:
- bestValue = val
- bestTraj = traj
- bestOpt = self.denormalizeData(self._optPointHistory[bestTraj][-1][0])
- bestPoint = dict((var, bestOpt[var]) for var in self.toBeSampled)
- self.raiseADebug('')
- self.raiseAMessage(' - Final Optimal Point:')
- finalTemplate = ' {name:^20s} {value: 1.3e}'
- finalTemplateInt = ' {name:^20s} {value: 3d}'
- self.raiseAMessage(finalTemplate.format(name=self._objectiveVar, value=s * bestValue))
- self.raiseAMessage(finalTemplateInt.format(name='trajID', value=bestTraj))
- for var, val in bestPoint.items():
- self.raiseAMessage(finalTemplate.format(name=var, value=val))
- self.raiseAMessage('*' * 80)
- # write final best solution to soln export
- self._updateSolutionExport(bestTraj, self.normalizeData(bestOpt), 'final', 'None')
+ bestTraj = traj
+ bestOpt = self.denormalizeData(self._optPointHistory[bestTraj][-1][0])
+ bestPoint = dict((var, bestOpt[var]) for var in self.toBeSampled)
+ self.raiseADebug('')
+ self.raiseAMessage(' - Final Optimal Point:')
+ finalTemplate = ' {name:^20s} {value: 1.3e}'
+ finalTemplateInt = ' {name:^20s} {value: 3d}'
+ self.raiseAMessage(finalTemplate.format(name=self._objectiveVar[0], value=s * bestValue))
+ self.raiseAMessage(finalTemplateInt.format(name='trajID', value=bestTraj))
+ for var, val in bestPoint.items():
+ self.raiseAMessage(finalTemplate.format(name=var, value=val))
+ self.raiseAMessage('*' * 80)
+ # write final best solution to soln export
+ self._updateSolutionExport(bestTraj, self.normalizeData(bestOpt), 'final', 'None')
+ else:
+ # get and print the best trajectory obtained
+ bestValue = None
+ bestTraj = None
+ bestPoint = None
+ s = [1 if w == 'min' else -1 for w in self._minMax]
+ # check converged trajectories
+ self.raiseAMessage('*' * 80)
+ self.raiseAMessage('Optimizer Final Results:')
+ self.raiseADebug('')
+ self.raiseADebug(' - Trajectory Results:')
+ self.raiseADebug(' TRAJ STATUS VALUE')
+ statusTemplate = ' {traj:2d} {status:^11s} {val: 1.3e}'
+ templateNoValue = ' {traj:2d} {status:^11s}'
+ # Define the template for the values
+ valueTemplate = '{val: 1.3e}'
+
+ # print cancelled traj
+ for traj, info in self._cancelledTraj.items():
+ val = info['value']
+ status = info['reason']
+ if isinstance(val,int):
+ self.raiseADebug(statusTemplate.format(status=status, traj=traj, val=val))
+ # TODO: else: maybe error out?
+
+ # check converged traj
+ for traj, info in self._convergedTraj.items():
+ opt = self._optPointHistory[traj][-1][0]
+ val = info['value']
+
+ # Format the values in the array
+ formatted_values = np.vectorize(lambda v: valueTemplate.format(val=v))(s*val)
+
+ # Combine the formatted values into a single string with appropriate spacing
+ formatted_values_string = '\n'.join([' '.join(row) for row in formatted_values])
+
+ # Raise debug message for the entire formatted string
+ self.raiseADebug(templateNoValue.format(status='converged', traj=traj)+formatted_values_string.format(formatted_values))
+ if bestValue is None or val < bestValue:
+ bestTraj = traj
+ bestValue = val
+ # further check active unfinished trajectories
+ # FIXME why should there be any active, unfinished trajectories when we're cleaning up sampler?
+ traj = 0 # FIXME why only 0?? what if it's other trajectories that are active and unfinished?
+ # sanity check: if there's no history (we never got any answers) then report rather than crash
+ if len(self._optPointHistory[traj]) == 0:
+ self.raiseAnError(RuntimeError, f'There is no optimization history for traj {traj}! ' +
+ 'Perhaps the Model failed?')
+
+ if len(self._objectiveVar) == 1:
+ opt = self._optPointHistory[traj][-1][0]
+ val = opt[self._objectiveVar]
+ self.raiseADebug(statusTemplate.format(status='active', traj=traj, val=s * val))
+ if bestValue is None or val < bestValue:
+ bestValue = val
+ bestTraj = traj
+ bestOpt = self.denormalizeData(self._optPointHistory[bestTraj][-1][0])
+ bestPoint = dict((var, bestOpt[var]) for var in self.toBeSampled)
+ self.raiseADebug('')
+ self.raiseAMessage(' - Final Optimal Point:')
+ finalTemplate = ' {name:^20s} {value: 1.3e}'
+ finalTemplateInt = ' {name:^20s} {value: 3d}'
+ # self.raiseAMessage(finalTemplate.format(name=self._objectiveVar, value=s * bestValue))
+ self.raiseAMessage(finalTemplateInt.format(name='trajID', value=bestTraj))
+ for var, val in bestPoint.items():
+ self.raiseAMessage(finalTemplate.format(name=var, value=val))
+ self.raiseAMessage('*' * 80)
+ # write final best solution to soln export
+ self._updateSolutionExport(bestTraj, self.normalizeData(bestOpt), 'final', 'None')
+ else:
+ for i in range(len(self._optPointHistory[traj][-1][0][self._objectiveVar[0]])):
+ opt = self._optPointHistory[traj][-1][0]
+ key = list(opt.keys())
+ val = [item[i] for item in opt.values()]
+ optElm = {key[a]: val[a] for a in range(len(key))}
+ optVal = [(-1*(self._minMax[b]=='max')+(self._minMax[b]=='min'))*optElm[self._objectiveVar[b]] for b in range(len(self._objectiveVar))]
+
+ bestTraj = traj
+ bestOpt = self.denormalizeData(optElm)
+ bestPoint = dict((var, bestOpt[var]) for var in self.toBeSampled)
+
+ self._updateSolutionExport(bestTraj, self.normalizeData(bestOpt), 'final', 'None')
def flush(self):
"""
@@ -499,10 +590,10 @@ def _handleImplicitConstraints(self, previous):
@ Out, accept, bool, whether point was satisfied implicit constraints
"""
normed = copy.deepcopy(previous)
- oldVal = normed[self._objectiveVar]
- normed.pop(self._objectiveVar, oldVal)
+ oldVal = normed[self._objectiveVar[0]]
+ normed.pop(self._objectiveVar[0], oldVal)
denormed = self.denormalizeData(normed)
- denormed[self._objectiveVar] = oldVal
+ denormed[self._objectiveVar[0]] = oldVal
accept = self._checkImpFunctionalConstraints(denormed)
return accept
@@ -570,9 +661,12 @@ def _resolveNewOptPoint(self, traj, rlz, optVal, info):
# TODO could we ever use old rerun gradients to inform the gradient direction as well?
self._rerunsSinceAccept[traj] += 1
N = self._rerunsSinceAccept[traj] + 1
- oldVal = self._optPointHistory[traj][-1][0][self._objectiveVar]
+ if len(self._objectiveVar) == 1:
+ oldVal = self._optPointHistory[traj][-1][0][self._objectiveVar[0]]
+ else:
+ oldVal = self._optPointHistory[traj][-1][0][self._objectiveVar[0]]
newAvg = ((N-1)*oldVal + optVal) / N
- self._optPointHistory[traj][-1][0][self._objectiveVar] = newAvg
+ self._optPointHistory[traj][-1][0][self._objectiveVar[0]] = newAvg
else:
self.raiseAnError(f'Unrecognized acceptability: "{acceptable}"')
@@ -637,15 +731,22 @@ def _updateSolutionExport(self, traj, rlz, acceptable, rejectReason):
'modelRuns': self.counter
})
# optimal point input and output spaces
- objValue = rlz[self._objectiveVar]
- if self._minMax == 'max':
- objValue *= -1
- toExport[self._objectiveVar] = objValue
+ if len(self._objectiveVar) == 1: # Single Objective Optimization
+ objValue = rlz[self._objectiveVar[0]]
+ if 'max' in self._minMax:
+ objValue *= -1
+ toExport[self._objectiveVar[0]] = objValue
+ else: # Multi Objective Optimization
+ for i in range(len(self._objectiveVar)):
+ objValue = rlz[self._objectiveVar[i]]
+ if self._minMax[i] == 'max':
+ objValue *= -1
+ toExport[self._objectiveVar[i]] = objValue
toExport.update(self.denormalizeData(dict((var, rlz[var]) for var in self.toBeSampled)))
# constants and functions
toExport.update(self.constants)
toExport.update(dict((var, rlz[var]) for var in self.dependentSample if var in rlz))
- # additional from from inheritors
+ # additional from inheritors
toExport.update(self._addToSolutionExport(traj, rlz, acceptable))
# check for anything else that solution export wants that rlz might provide
for var in self._solutionExport.getVars():
@@ -721,4 +822,4 @@ def _closeTrajectory(self, traj, action, reason, value):
"""
Optimizer._closeTrajectory(self, traj, action, reason, value)
# kill jobs associated with trajectory
- self._cancelAssociatedJobs(traj)
+ self._cancelAssociatedJobs(traj)
\ No newline at end of file
diff --git a/ravenframework/Optimizers/SimulatedAnnealing.py b/ravenframework/Optimizers/SimulatedAnnealing.py
index 81df017856..123868498b 100644
--- a/ravenframework/Optimizers/SimulatedAnnealing.py
+++ b/ravenframework/Optimizers/SimulatedAnnealing.py
@@ -191,6 +191,7 @@ def __init__(self):
self._coolingMethod = None # initializing cooling method
self._coolingParameters = {} # initializing the cooling schedule parameters
self.info = {}
+ self._canHandleMultiObjective = False # Currently Simulated Annealing can only handle single objective
def handleInput(self, paramInput):
"""
@@ -319,9 +320,11 @@ def _useRealization(self, info, rlz):
@ Out, None
"""
traj = info['traj']
- info['optVal'] = rlz[self._objectiveVar]
+ if len(self._objectiveVar) > 1 and type(self._objectiveVar)==str:
+ self.raiseAnError(IOError, 'Simulated Annealing does not support multiObjective yet! objective variable must be a single variable for now!')
+ info['optVal'] = rlz[self._objectiveVar[0]]
self.incrementIteration(traj)
- self._resolveNewOptPoint(traj, rlz, rlz[self._objectiveVar], info)
+ self._resolveNewOptPoint(traj, rlz, rlz[self._objectiveVar[0]], info)
if self._stepTracker[traj]['opt'] is None:
# revert to the last accepted point
rlz = self._optPointHistory[traj][-1][0]
@@ -340,7 +343,7 @@ def _useRealization(self, info, rlz):
except NoConstraintResolutionFound:
# we've tried everything, but we just can't hack it
self.raiseAMessage(f'Optimizer "{self.name}" trajectory {traj} was unable to continue due to functional or boundary constraints.')
- self._closeTrajectory(traj, 'converge', 'no constraint resolution', newPoint[self._objectiveVar])
+ self._closeTrajectory(traj, 'converge', 'no constraint resolution', newPoint[self._objectiveVar[0]])
return
suggested = self.denormalizeData(suggested)
@@ -420,7 +423,7 @@ def _checkConvObjective(self, traj):
return False
o1, _ = self._optPointHistory[traj][-1]
o2, _ = self._optPointHistory[traj][-2]
- delta = o2[self._objectiveVar]-o1[self._objectiveVar]
+ delta = o2[self._objectiveVar[0]]-o1[self._objectiveVar[0]]
converged = abs(delta) < self._convergenceCriteria['objective']
self.raiseADebug(self.convFormat.format(name='objective',
conv=str(converged),
@@ -469,9 +472,9 @@ def _checkAcceptability(self, traj, opt, optVal, info):
# NOTE: if self._optPointHistory[traj]: -> faster to use "try" for all but the first time
try:
old, _ = self._optPointHistory[traj][-1]
- oldVal = old[self._objectiveVar]
+ oldVal = old[self._objectiveVar[0]]
# check if same point
- self.raiseADebug(f' ... change: {opt[self._objectiveVar]-oldVal:1.3e} new objective: {opt[self._objectiveVar]:1.6e} old objective: {oldVal:1.6e}')
+ self.raiseADebug(f' ... change: {opt[self._objectiveVar[0]]-oldVal:1.3e} new objective: {opt[self._objectiveVar[0]]:1.6e} old objective: {oldVal:1.6e}')
# if this is an opt point rerun, accept it without checking.
if self._acceptRerun[traj]:
acceptable = 'rerun'
@@ -480,7 +483,7 @@ def _checkAcceptability(self, traj, opt, optVal, info):
# this is the classic "same point" trap; we accept the same point, and check convergence later
acceptable = 'accepted'
else:
- if self._acceptabilityCriterion(oldVal,opt[self._objectiveVar])>randomUtils.random(dim=1, samples=1): # TODO replace it back
+ if self._acceptabilityCriterion(oldVal,opt[self._objectiveVar[0]])>randomUtils.random(dim=1, samples=1): # TODO replace it back
acceptable = 'accepted'
else:
acceptable = 'rejected'
diff --git a/ravenframework/Optimizers/acquisitionFunctions/ExpectedImprovement.py b/ravenframework/Optimizers/acquisitionFunctions/ExpectedImprovement.py
index eac639237a..360765d3ae 100644
--- a/ravenframework/Optimizers/acquisitionFunctions/ExpectedImprovement.py
+++ b/ravenframework/Optimizers/acquisitionFunctions/ExpectedImprovement.py
@@ -67,7 +67,7 @@ def evaluate(self, var, bayesianOptimizer, vectorized=False):
"""
# Need to retrieve current optimum point
best = bayesianOptimizer._optPointHistory[0][-1][0]
- fopt = best[bayesianOptimizer._objectiveVar]
+ fopt = best[bayesianOptimizer._objectiveVar[0]]
# Need to convert array input "x" into dict point
featurePoint = bayesianOptimizer.arrayToFeaturePoint(var)
@@ -112,7 +112,7 @@ def gradient(self, var, bayesianOptimizer):
# Need to retrieve current optimum point
best = bayesianOptimizer._optPointHistory[0][-1][0]
- fopt = best[bayesianOptimizer._objectiveVar]
+ fopt = best[bayesianOptimizer._objectiveVar[0]]
# Other common quantities
beta = (fopt - mu)/s
phi = norm.pdf(beta)
diff --git a/ravenframework/Optimizers/acquisitionFunctions/LowerConfidenceBound.py b/ravenframework/Optimizers/acquisitionFunctions/LowerConfidenceBound.py
index b3b8e1311a..787c204d5f 100644
--- a/ravenframework/Optimizers/acquisitionFunctions/LowerConfidenceBound.py
+++ b/ravenframework/Optimizers/acquisitionFunctions/LowerConfidenceBound.py
@@ -197,8 +197,8 @@ def _converged(self, bayesianOptimizer):
if self._optValue is None:
converged = False
return converged
- optDiff = np.absolute(-1*self._optValue - bayesianOptimizer._optPointHistory[0][-1][0][bayesianOptimizer._objectiveVar])
- optDiff /= np.absolute(bayesianOptimizer._optPointHistory[0][-1][0][bayesianOptimizer._objectiveVar])
+ optDiff = np.absolute(-1*self._optValue - bayesianOptimizer._optPointHistory[0][-1][0][bayesianOptimizer._objectiveVar[0]])
+ optDiff /= np.absolute(bayesianOptimizer._optPointHistory[0][-1][0][bayesianOptimizer._objectiveVar[0]])
if optDiff <= bayesianOptimizer._acquisitionConv:
converged = True
else:
diff --git a/ravenframework/Optimizers/acquisitionFunctions/ProbabilityOfImprovement.py b/ravenframework/Optimizers/acquisitionFunctions/ProbabilityOfImprovement.py
index 7f66d31dc5..04742a2b1a 100644
--- a/ravenframework/Optimizers/acquisitionFunctions/ProbabilityOfImprovement.py
+++ b/ravenframework/Optimizers/acquisitionFunctions/ProbabilityOfImprovement.py
@@ -129,7 +129,7 @@ def evaluate(self, var, bayesianOptimizer, vectorized=False):
"""
# Need to retrieve current optimum point
best = bayesianOptimizer._optPointHistory[0][-1][0]
- fopt = best[bayesianOptimizer._objectiveVar]
+ fopt = best[bayesianOptimizer._objectiveVar[0]]
# Need to convert array input "x" into dict point
featurePoint = bayesianOptimizer.arrayToFeaturePoint(var)
diff --git a/ravenframework/Optimizers/crossOverOperators/crossovers.py b/ravenframework/Optimizers/crossOverOperators/crossovers.py
index f03d03ef07..45b9a43568 100644
--- a/ravenframework/Optimizers/crossOverOperators/crossovers.py
+++ b/ravenframework/Optimizers/crossOverOperators/crossovers.py
@@ -151,6 +151,26 @@ def twoPointsCrossover(parents, **kwargs):
return children
+def getLinearCrossoverProbability(iter, limit):
+ """
+ This method is designed to ILC(Increasing Low Crossover) adaptive crossover methodology each iteration with probability.
+ @ In, Current iteration number, Total iteration number
+ @ Out, (iteration / limit) as crossover rate
+ """
+ return iter/limit
+
+def getQuadraticCrossoverProbability(iter, limit):
+ """
+ This method is designed to quadratic adaptive crossover methodology each iteration with probability.
+ @ In, Current iteration number, Total iteration number
+ @ Out, (iteration+1/limit)^2 as crossover rate
+ """
+ if(iter == 0):
+ crossoverProb = 0
+ else:
+ crossoverProb = ((iter+1)/(limit))**2
+ return crossoverProb
+
__crossovers = {}
__crossovers['onePointCrossover'] = onePointCrossover
__crossovers['twoPointsCrossover'] = twoPointsCrossover
diff --git a/ravenframework/Optimizers/fitness/fitness.py b/ravenframework/Optimizers/fitness/fitness.py
index 53a27ff1c6..db58da1754 100644
--- a/ravenframework/Optimizers/fitness/fitness.py
+++ b/ravenframework/Optimizers/fitness/fitness.py
@@ -16,11 +16,17 @@
currently the implemented fitness function is a linear combination of the objective function and penalty function for constraint violation:
Created June,16,2020
- @authors: Mohammad Abdo, Diego Mandelli, Andrea Alfonsi
+ Updated September,17,2023
+ @authors: Mohammad Abdo, Diego Mandelli, Andrea Alfonsi, Junyung Kim
"""
+# Internal Modules----------------------------------------------------------------------------------
+from ...utils import frontUtils
+from ..parentSelectors.parentSelectors import countConstViolation
+
# External Imports
import numpy as np
import xarray as xr
+import sys
# Internal Imports
# [MANDD] Note: the fitness function are bounded by 2 parameters: a and b
@@ -53,27 +59,25 @@ def invLinear(rlz,**kwargs):
the farthest from violating the constraint it is, The highest negative value it have the largest the violation is.
@ Out, fitness, xr.DataArray, the fitness function of the given objective corresponding to a specific chromosome.
"""
- if kwargs['a'] == None:
- a = 1.0
- else:
- a = kwargs['a']
- if kwargs['b'] == None:
- b = 10.0
- else:
- b = kwargs['b']
- if kwargs['constraintFunction'].all() == None:
- penalty = 0.0
- else:
- penalty = kwargs['constraintFunction'].data
-
- objVar = kwargs['objVar']
- data = np.atleast_1d(rlz[objVar].data)
+ #NOTE invLinear is not yet support Multi-objective optimization problem solving. Further literature reivew applying invLinear method to multi-objective optimization
+ # needs to be involved. Potentially, applying obj_Worst in fitness function (i.e., -a[j] * (rlz[objVar][objVar[j]].data).reshape(-1,1) - b[j] * np.sum(np.maximum(0,-penalty),axis=-1).reshape(-1,1))
+ # should be considerd .
+ a = [1.0] if kwargs['a'] == None else kwargs['a']
+ b = [10.0] if kwargs['b'] == None else kwargs['b']
+ penalty = 0.0 if kwargs['constraintFunction'].all() == None else kwargs['constraintFunction'].data
+ objVar = [kwargs['objVar']] if isinstance(kwargs['objVar'], str) == True else kwargs['objVar']
+ for j in range(len(objVar)):
+ data = np.atleast_1d(rlz[objVar][objVar[j]].data)
+ fitness = -a[j] * (rlz[objVar][objVar[j]].data).reshape(-1,1) - b[j] * np.sum(np.maximum(0,-penalty),axis=-1).reshape(-1,1)
+ fitness = xr.DataArray(np.squeeze(fitness),
+ dims=['chromosome'],
+ coords={'chromosome': np.arange(len(data))})
+ if j == 0:
+ fitnessSet = fitness.to_dataset(name = objVar[j])
+ else:
+ fitnessSet[objVar[j]] = fitness
+ return fitnessSet
- fitness = -a * (rlz[objVar].data).reshape(-1,1) - b * np.sum(np.maximum(0,-penalty),axis=-1).reshape(-1,1)
- fitness = xr.DataArray(np.squeeze(fitness),
- dims=['chromosome'],
- coords={'chromosome': np.arange(len(data))})
- return fitness
def feasibleFirst(rlz,**kwargs):
r"""
@@ -83,12 +87,14 @@ def feasibleFirst(rlz,**kwargs):
1. As the objective function decreases (comes closer to the min value), the fitness value increases
2. As the objective function increases (away from the min value), the fitness value decreases
3. As the solution violates the constraints the fitness should decrease and hence the solution is less favored by the algorithm.
- 4. For the violating solutions, the fitness is starts from the worst solution in the population
+ 4. For the violating solutions, the fitness starts from the worst solution in the population
(i.e., max objective in minimization problems and min objective in maximization problems)
For maximization problems the objective value is multiplied by -1 and hence the previous trends are inverted.
A great quality of this fitness is that if the objective value is equal for multiple solutions it selects the furthest from constraint violation.
+ Reference: Deb, Kalyanmoy. "An efficient constraint handling method for genetic algorithms." Computer methods in applied mechanics and engineering 186.2-4 (2000): 311-338.
+
.. math::
fitness = \[ \\begin{cases}
@@ -105,23 +111,41 @@ def feasibleFirst(rlz,**kwargs):
'constraintFunction', xr.Dataarray, containing all constraint functions (explicit and implicit) evaluations for the whole population
@ Out, fitness, xr.DataArray, the fitness function of the given objective corresponding to a specific chromosome.
"""
- objVar = kwargs['objVar']
- g = kwargs['constraintFunction']
- data = np.atleast_1d(rlz[objVar].data)
- worstObj = max(data)
- fitness = []
- for ind in range(data.size):
- if np.all(g.data[ind, :]>=0):
- fit=(data[ind])
- else:
- fit = worstObj
- for constInd,_ in enumerate(g['Constraint'].data):
- fit+=(max(0,-1 * g.data[ind, constInd]))
- fitness.append(-1 * fit)
- fitness = xr.DataArray(np.array(fitness),
+ objVar = [kwargs['objVar']] if isinstance(kwargs['objVar'], str) == True else kwargs['objVar']
+ a = [1.0]*len(objVar) if kwargs['a'] == None else kwargs['a']
+ if kwargs['constraintNum'] == 0:
+ pen = kwargs['b']
+ else:
+ g = kwargs['constraintFunction']
+ penalty = kwargs['b']
+ pen = [penalty[i:i+len(g['Constraint'].data)] for i in range(0, len(penalty), len(g['Constraint'].data))]
+ objPen = dict(map(lambda i,j : (i,j), objVar, pen))
+
+ for i in range(len(objVar)):
+ data = np.atleast_1d(rlz[objVar][objVar[i]].data)
+ worstObj = max(data)
+ fitness = []
+ for ind in range(data.size):
+ if kwargs['constraintNum'] == 0 or np.all(g.data[ind, :]>=0):
+ fit=(a[i]*data[ind])
+ else:
+ fit = a[i]*worstObj
+ for constInd,_ in enumerate(g['Constraint'].data):
+ fit = a[i]*fit + objPen[objVar[i]][constInd]*(max(0,-1*g.data[ind, constInd])) #NOTE: objPen[objVar[i]][constInd] is "objective & Constraint specific penalty."
+ if len(kwargs['type']) == 1:
+ fitness.append(-1*fit)
+ else:
+ fitness.append(fit)
+
+ fitness = xr.DataArray(np.array(fitness),
dims=['chromosome'],
coords={'chromosome': np.arange(len(data))})
- return fitness
+ if i == 0:
+ fitnessSet = fitness.to_dataset(name = objVar[i])
+ else:
+ fitnessSet[objVar[i]] = fitness
+
+ return fitnessSet
def logistic(rlz,**kwargs):
"""
@@ -141,31 +165,39 @@ def logistic(rlz,**kwargs):
@ Out, fitness, xr.DataArray, the fitness function of the given objective corresponding to a specific chromosome.
"""
if kwargs['a'] == None:
- a = 1.0
+ a = [1.0]
else:
a = kwargs['a']
-
if kwargs['b'] == None:
- b = 0.0
+ b = [0.0]
else:
b = kwargs['b']
+ if isinstance(kwargs['objVar'], str) == True:
+ objVar = [kwargs['objVar']]
+ else:
+ objVar = kwargs['objVar']
+ for i in range(len(objVar)):
+ val = rlz[objVar][objVar[i]].data
+ data = np.atleast_1d(rlz[objVar][objVar[i]].data)
+ denom = 1.0 + np.exp(-a[0] * (val - b[0]))
+ fitness = 1.0 / denom
+ fitness = xr.DataArray(fitness.data,
+ dims=['chromosome'],
+ coords={'chromosome': np.arange(len(data))})
+ if i == 0:
+ fitnessSet = fitness.to_dataset(name = objVar[i])
+ else:
+ fitnessSet[objVar[i]] = fitness
- objVar = kwargs['objVar']
- val = rlz[objVar]
- data = np.atleast_1d(rlz[objVar].data)
- denom = 1.0 + np.exp(-a * (val - b))
- fitness = 1.0 / denom
- fitness = xr.DataArray(np.array(fitness),
- dims=['chromosome'],
- coords={'chromosome': np.arange(len(data))})
-
- return fitness
+ return fitnessSet
__fitness = {}
__fitness['invLinear'] = invLinear
__fitness['logistic'] = logistic
__fitness['feasibleFirst'] = feasibleFirst
+#NOTE hardConstraint method will be used later once constraintHandling is realized. Until then, it will be commented. @JunyungKim
+# __fitness['hardConstraint'] = hardConstraint
def returnInstance(cls, name):
@@ -176,5 +208,5 @@ def returnInstance(cls, name):
@ Out, __crossovers[name], instance of class
"""
if name not in __fitness:
- cls.raiseAnError (IOError, "{} FITNESS FUNCTION NOT IMPLEMENTED!!!!!".format(name))
+ cls.raiseAnError (IOError, "{} is not a supported fitness function. ".format(name))
return __fitness[name]
diff --git a/ravenframework/Optimizers/mutators/mutators.py b/ravenframework/Optimizers/mutators/mutators.py
index 1b541ce508..ed17f6e29b 100644
--- a/ravenframework/Optimizers/mutators/mutators.py
+++ b/ravenframework/Optimizers/mutators/mutators.py
@@ -21,7 +21,7 @@
5. randomMutator
Created June,16,2020
- @authors: Mohammad Abdo, Diego Mandelli, Andrea Alfonsi
+ @authors: Mohammad Abdo, Diego Mandelli, Andrea Alfonsi, Junyung Kim
"""
import numpy as np
import xarray as xr
@@ -34,14 +34,19 @@ def swapMutator(offSprings, distDict, **kwargs):
E.g.:
child=[a,b,c,d,e] --> b and d are selected --> child = [a,d,c,b,e]
@ In, offSprings, xr.DataArray, children resulting from the crossover process
- @ In, distDict, dict, dictionary containing distribution associated with each gene
@ In, kwargs, dict, dictionary of parameters for this mutation method:
locs, list, the 2 locations of the genes to be swapped
mutationProb, float, probability that governs the mutation process, i.e., if prob < random number, then the mutation will occur
variables, list, variables names.
@ Out, children, xr.DataArray, the mutated chromosome, i.e., the child.
"""
- loc1,loc2 = locationsGenerator(offSprings, kwargs['locs'])
+ if kwargs['locs'] == None:
+ locs = list(set(randomUtils.randomChoice(list(np.arange(offSprings.data.shape[1])),size=2,replace=False)))
+ loc1 = np.minimum(locs[0], locs[1])
+ loc2 = np.maximum(locs[0], locs[1])
+ else:
+ loc1 = np.minimum(kwargs['locs'][0], kwargs['locs'][1])
+ loc2 = np.maximum(kwargs['locs'][0], kwargs['locs'][1])
# initializing children
children = xr.DataArray(np.zeros((np.shape(offSprings))),
@@ -65,7 +70,6 @@ def scrambleMutator(offSprings, distDict, **kwargs):
This method performs the scramble mutator. For each child, a subset of genes is chosen
and their values are shuffled randomly.
@ In, offSprings, xr.DataArray, offsprings after crossover
- @ In, distDict, dict, dictionary containing distribution associated with each gene
@ In, kwargs, dict, dictionary of parameters for this mutation method:
chromosome, numpy.array, the chromosome that will mutate to the new child
locs, list, the locations of the genes to be randomly scrambled
@@ -73,7 +77,12 @@ def scrambleMutator(offSprings, distDict, **kwargs):
variables, list, variables names.
@ Out, child, np.array, the mutated chromosome, i.e., the child.
"""
- loc1,loc2 = locationsGenerator(offSprings, kwargs['locs'])
+ if kwargs['locs'] == None:
+ locs = list(set(randomUtils.randomChoice(list(np.arange(offSprings.data.shape[1])),size=2,replace=False)))
+ locs.sort()
+ else:
+ locs = [kwargs['locs'][0], kwargs['locs'][1]]
+ locs.sort()
# initializing children
children = xr.DataArray(np.zeros((np.shape(offSprings))),
@@ -86,9 +95,9 @@ def scrambleMutator(offSprings, distDict, **kwargs):
children[i,j] = distDict[offSprings[i].coords['Gene'].values[j]].cdf(float(offSprings[i,j].values))
for i in range(np.shape(offSprings)[0]):
- for ind,element in enumerate([loc1,loc2]):
+ for ind,element in enumerate(locs):
if randomUtils.random(dim=1,samples=1)< kwargs['mutationProb']:
- children[i,loc1:loc2+1] = randomUtils.randomPermutation(list(children.data[i,loc1:loc2+1]),None)
+ children[i,locs[0]:locs[-1]+1] = randomUtils.randomPermutation(list(children.data[i,locs[0]:locs[-1]+1]),None)
for i in range(np.shape(offSprings)[0]):
for j in range(np.shape(offSprings)[1]):
@@ -103,7 +112,6 @@ def bitFlipMutator(offSprings, distDict, **kwargs):
The gene to be flipped is completely random.
The new value of the flipped gene is is completely random.
@ In, offSprings, xr.DataArray, children resulting from the crossover process
- @ In, distDict, dict, dictionary containing distribution associated with each gene
@ In, kwargs, dict, dictionary of parameters for this mutation method:
mutationProb, float, probability that governs the mutation process, i.e., if prob < random number, then the mutation will occur
@ Out, offSprings, xr.DataArray, children resulting from the crossover process
@@ -129,7 +137,6 @@ def randomMutator(offSprings, distDict, **kwargs):
"""
This method is designed to randomly mutate a single gene in each chromosome with probability = mutationProb.
@ In, offSprings, xr.DataArray, children resulting from the crossover process
- @ In, distDict, dict, dictionary containing distribution associated with each gene
@ In, kwargs, dict, dictionary of parameters for this mutation method:
mutationProb, float, probability that governs the mutation process, i.e., if prob < random number, then the mutation will occur
@ Out, offSprings, xr.DataArray, children resulting from the crossover process
@@ -156,13 +163,18 @@ def inversionMutator(offSprings, distDict, **kwargs):
E.g. given chromosome C = [0,1,2,3,4,5,6,7,8,9] and sampled locL=2 locU=6;
New chromosome C' = [0,1,6,5,4,3,2,7,8,9]
@ In, offSprings, xr.DataArray, children resulting from the crossover process
- @ In, distDict, dict, dictionary containing distribution associated with each gene
@ In, kwargs, dict, dictionary of parameters for this mutation method:
mutationProb, float, probability that governs the mutation process, i.e., if prob < random number, then the mutation will occur
@ Out, offSprings, xr.DataArray, children resulting from the crossover process
"""
# sample gene locations: i.e., determine locL and locU
- locL,locU = locationsGenerator(offSprings, kwargs['locs'])
+ if kwargs['locs'] == None:
+ locs = list(set(randomUtils.randomChoice(list(np.arange(offSprings.data.shape[1])),size=2,replace=False)))
+ locL = np.minimum(locs[0], locs[1])
+ locU = np.maximum(locs[0], locs[1])
+ else:
+ locL = np.minimum(kwargs['locs'][0], kwargs['locs'][1])
+ locU = np.maximum(kwargs['locs'][0], kwargs['locs'][1])
for child in offSprings:
# the mutation is performed for each child independently
@@ -171,7 +183,7 @@ def inversionMutator(offSprings, distDict, **kwargs):
seq = np.arange(locL,locU+1)
allElems = []
for i,elem in enumerate(seq):
- allElems.append(distDict[child.coords['Gene'].values[i]].cdf(float(child[elem].values)))
+ allElems.append(distDict[child.coords['Gene'].values[i]].cdf(float(child[elem].values)))
mirrSeq = allElems[::-1]
mirrElems = []
@@ -182,22 +194,25 @@ def inversionMutator(offSprings, distDict, **kwargs):
return offSprings
-def locationsGenerator(offSprings,locs):
+def getLinearMutationProbability(iter, limit):
"""
- Methods designed to process the locations for the mutators. These locations can be either user specified or
- randomly generated.
- @ In, offSprings, xr.DataArray, children resulting from the crossover process
- @ In, locs, list, the two locations of the genes to be swapped
- @ Out, loc1, loc2, int, the two ordered processed locations required by the mutators
+ This method is designed to DHM(Decreasing High Mutation) adaptive mutation methodology each iteration with probability.
+ @ In, Current iteration number, Total iteration number
+ @ Out, 1-(iteration / limit) as mutation rate
"""
- if locs == None:
- locs = list(set(randomUtils.randomChoice(list(np.arange(offSprings.data.shape[1])),size=2,replace=False)))
- loc1 = np.minimum(locs[0], locs[1])
- loc2 = np.maximum(locs[0], locs[1])
+ return 1-(iter/limit)
+
+def getQuadraticMutationProbability(iter, limit):
+ """
+ This method is designed to Quadratic adaptive mutation methodology each iteration with probability.
+ @ In, Current iteration number, Total iteration number
+ @ Out, 1-(((1+iteration)/limit))^2 as mutation rate
+ """
+ if(iter == 0):
+ mutationProb = 1
else:
- loc1 = np.minimum(locs[0], locs[1])
- loc2 = np.maximum(locs[0], locs[1])
- return loc1, loc2
+ mutationProb = 1-(((iter+1)/(limit))**2)
+ return mutationProb
__mutators = {}
__mutators['swapMutator'] = swapMutator
diff --git a/ravenframework/Optimizers/parentSelectors/parentSelectors.py b/ravenframework/Optimizers/parentSelectors/parentSelectors.py
index fc82522271..480011d534 100644
--- a/ravenframework/Optimizers/parentSelectors/parentSelectors.py
+++ b/ravenframework/Optimizers/parentSelectors/parentSelectors.py
@@ -21,10 +21,15 @@
Created June,16,2020
@authors: Mohammad Abdo, Diego Mandelli, Andrea Alfonsi
"""
-
+# External Modules----------------------------------------------------------------------------------
import numpy as np
import xarray as xr
from ...utils import randomUtils
+# External Modules----------------------------------------------------------------------------------
+
+# Internal Modules----------------------------------------------------------------------------------
+from ...utils.gaUtils import dataArrayToDict, datasetToDataArray
+# Internal Modules End------------------------------------------------------------------------------
# For mandd: to be updated with RAVEN official tools
from itertools import combinations
@@ -42,7 +47,8 @@ def rouletteWheel(population,**kwargs):
"""
# Arguments
pop = population
- fitness = kwargs['fitness']
+ fitness = np.array([item for sublist in datasetToDataArray(kwargs['fitness'], list(kwargs['fitness'].keys())).data for item in sublist])
+ # fitness = kwargs['fitness'].data
nParents= kwargs['nParents']
# if nparents = population size then do nothing (whole population are parents)
if nParents == pop.shape[0]:
@@ -62,15 +68,15 @@ def rouletteWheel(population,**kwargs):
roulettePointer = randomUtils.random(dim=1, samples=1)
# initialize Probability
counter = 0
- if np.all(fitness.data>=0) or np.all(fitness.data<=0):
- selectionProb = fitness.data/np.sum(fitness.data) # Share of the pie (rouletteWheel)
+ if np.all(fitness>=0) or np.all(fitness<=0):
+ selectionProb = fitness/np.sum(fitness) # Share of the pie (rouletteWheel)
else:
# shift the fitness to be all positive
- shiftedFitness = fitness.data + abs(min(fitness.data))
+ shiftedFitness = fitness + abs(min(fitness))
selectionProb = shiftedFitness/np.sum(shiftedFitness) # Share of the pie (rouletteWheel)
sumProb = selectionProb[counter]
- while sumProb < roulettePointer :
+ while sumProb <= roulettePointer :
counter += 1
sumProb += selectionProb[counter]
selectedParent[i,:] = pop.values[counter,:]
@@ -78,6 +84,15 @@ def rouletteWheel(population,**kwargs):
fitness = np.delete(fitness,counter,axis=0)
return selectedParent
+def countConstViolation(const):
+ """
+ Counts the number of constraints that are violated
+ @ In, const, list, list of constraints
+ @ Out, count, int, number of constraints that are violated
+ """
+ count = sum(1 for i in const if i < 0)
+ return count
+
def tournamentSelection(population,**kwargs):
"""
Tournament Selection mechanism for parent selection
@@ -88,65 +103,50 @@ def tournamentSelection(population,**kwargs):
variables, list, variable names
@ Out, newPopulation, xr.DataArray, selected parents,
"""
- fitness = kwargs['fitness']
- nParents= kwargs['nParents']
+
+ nParents = kwargs['nParents']
+ nObjVal = len(kwargs['objVal'])
+ kSelect = kwargs['kSelection']
pop = population
popSize = population.values.shape[0]
- if 'rank' in kwargs:
- # the key rank is used in multi-objective optimization where rank identifies which front the point belongs to
- rank = kwargs['rank']
- multiObjectiveRanking = True
- matrixOperationRaw = np.zeros((popSize,3))
- matrixOperationRaw[:,0] = np.transpose(np.arange(popSize))
- matrixOperationRaw[:,1] = np.transpose(fitness.data)
- matrixOperationRaw[:,2] = np.transpose(rank.data)
- matrixOperation = np.zeros((popSize,3))
- else:
- multiObjectiveRanking = False
- matrixOperationRaw = np.zeros((popSize,2))
- matrixOperationRaw[:,0] = np.transpose(np.arange(popSize))
- matrixOperationRaw[:,1] = np.transpose(fitness.data)
- matrixOperation = np.zeros((popSize,2))
-
- indexes = list(np.arange(popSize))
- indexesShuffled = randomUtils.randomChoice(indexes, size=popSize, replace=False, engine=None)
-
- if popSize<2*nParents:
- raise ValueError('In tournamentSelection the number of parents cannot be larger than half of the population size.')
-
- for idx, val in enumerate(indexesShuffled):
- matrixOperation[idx,:] = matrixOperationRaw[val,:]
-
- selectedParent = xr.DataArray(
- np.zeros((nParents,np.shape(pop)[1])),
- dims=['chromosome','Gene'],
- coords={'chromosome':np.arange(nParents),
- 'Gene': kwargs['variables']})
+ selectedParent = xr.DataArray(np.zeros((nParents,np.shape(pop)[1])),
+ dims=['chromosome','Gene'],
+ coords={'chromosome':np.arange(nParents),
+ 'Gene': kwargs['variables']})
- if not multiObjectiveRanking: # single-objective implementation of tournamentSelection
+ if nObjVal == 1: # single-objective Case
+ fitness = np.array([item for sublist in datasetToDataArray(kwargs['fitness'], list(kwargs['fitness'].keys())).data for item in sublist])
for i in range(nParents):
- if matrixOperation[2*i,1] > matrixOperation[2*i+1,1]:
- index = int(matrixOperation[2*i,0])
+ matrixOperationRaw = np.zeros((kSelect,2))
+ selectChromoIndexes = list(np.arange(len(pop))) #NOTE: JYK - selectChromoIndexes should cover all chromosomes in population.
+ selectedChromo = randomUtils.randomChoice(selectChromoIndexes, size=kSelect, replace=False, engine=None) #NOTE: JYK - randomly select several indices with size of kSelect.
+ matrixOperationRaw[:,0] = selectedChromo
+ matrixOperationRaw[:,1] = np.transpose(fitness[selectedChromo])
+ tournamentWinnerIndex = int(matrixOperationRaw[np.argmax(matrixOperationRaw[:,1]),0])
+ selectedParent[i,:] = pop.values[tournamentWinnerIndex,:]
+
+ else: # multi-objective Case
+ # the key rank is used in multi-objective optimization where rank identifies which front the point belongs to.
+ rank = kwargs['rank']
+ crowdDistance = kwargs['crowdDistance']
+ for i in range(nParents):
+ matrixOperationRaw = np.zeros((kSelect,3))
+ selectChromoIndexes = list(np.arange(kSelect))
+ selectedChromo = randomUtils.randomChoice(selectChromoIndexes, size=kSelect, replace=False, engine=None)
+ matrixOperationRaw[:,0] = selectedChromo
+ matrixOperationRaw[:,1] = np.transpose(rank.data[selectedChromo])
+ matrixOperationRaw[:,2] = np.transpose(crowdDistance.data[selectedChromo])
+ minRankIndex = list(np.where(matrixOperationRaw[:,1] == matrixOperationRaw[:,1].min())[0])
+ if len(minRankIndex) != 1: # More than one chrosome having same rank.
+ minRankNmaxCDIndex = list(np.where(matrixOperationRaw[minRankIndex,2] == matrixOperationRaw[minRankIndex,2].max())[0])
else:
- index = int(matrixOperation[2*i+1,0])
- selectedParent[i,:] = pop.values[index,:]
- else: # multi-objective implementation of tournamentSelection
- for i in range(nParents-1):
- if matrixOperation[2*i,2] > matrixOperation[2*i+1,2]:
- index = int(matrixOperation[i,0])
- elif matrixOperation[2*i,2] < matrixOperation[2*i+1,2]:
- index = int(matrixOperation[i+1,0])
- else: # same rank case
- if matrixOperation[2*i,1] > matrixOperation[2*i+1,1]:
- index = int(matrixOperation[i,0])
- else:
- index = int(matrixOperation[i+1,0])
- selectedParent[i,:] = pop.values[index,:]
+ minRankNmaxCDIndex = minRankIndex
+ tournamentWinnerIndex = minRankNmaxCDIndex[0]
+ selectedParent[i,:] = pop.values[tournamentWinnerIndex,:]
return selectedParent
-
def rankSelection(population,**kwargs):
"""
Rank Selection mechanism for parent selection
@@ -163,7 +163,7 @@ def rankSelection(population,**kwargs):
index = np.arange(0,pop.shape[0])
rank = np.arange(0,pop.shape[0])
- data = np.vstack((fitness,index))
+ data = np.vstack((np.array(fitness.variables['test_RankSelection']),index))
dataOrderedByDecreasingFitness = data[:,(-data[0]).argsort()]
dataOrderedByDecreasingFitness[0,:] = rank
dataOrderedByIncreasingPos = dataOrderedByDecreasingFitness[:,dataOrderedByDecreasingFitness[1].argsort()]
@@ -173,6 +173,7 @@ def rankSelection(population,**kwargs):
dims=['chromosome'],
coords={'chromosome': np.arange(np.shape(orderedRank)[0])})
+ rank = rank.to_dataset(name = 'test_RankSelection')
selectedParent = rouletteWheel(population, fitness=rank , nParents=kwargs['nParents'],variables=kwargs['variables'])
return selectedParent
diff --git a/ravenframework/Optimizers/survivorSelection/__init__.py b/ravenframework/Optimizers/survivorSelection/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/ravenframework/Optimizers/survivorSelection/survivorSelection.py b/ravenframework/Optimizers/survivorSelection/survivorSelection.py
new file mode 100644
index 0000000000..54bd84f050
--- /dev/null
+++ b/ravenframework/Optimizers/survivorSelection/survivorSelection.py
@@ -0,0 +1,107 @@
+# Copyright 2017 Battelle Energy Alliance, LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""
+ Implementation of survivorSelection step for new generation
+ selection process in Genetic Algorithm.
+
+ Created Apr,3,2024
+ @authors: Mohammad Abdo, Junyung Kim
+"""
+# External Modules----------------------------------------------------------------------------------
+import numpy as np
+import xarray as xr
+from ravenframework.utils import frontUtils
+# External Modules End------------------------------------------------------------------------------
+
+# Internal Modules----------------------------------------------------------------------------------
+from ...utils.gaUtils import dataArrayToDict, datasetToDataArray
+# Internal Modules End------------------------------------------------------------------------------
+
+# @profile
+
+def singleObjSurvivorSelect(self, info, rlz, traj, offSprings, offSpringFitness, objectiveVal, g):
+ """
+ process of selecting survivors for single objective problems
+ @ In, info, dict, dictionary of information
+ @ In, rlz, dict, dictionary of realizations
+ @ In, traj, dict, dictionary of trajectories
+ @ In, offSprings, list, list of offsprings
+ @ In, offSpringFitness, list, list of offspring fitness
+ """
+ if self.counter > 1:
+ self.population, self.fitness,\
+ self.popAge,self.objectiveVal = self._survivorSelectionInstance(age=self.popAge,
+ variables=list(self.toBeSampled),
+ population=self.population,
+ fitness=self.fitness,
+ newRlz=rlz,
+ offSpringsFitness=offSpringFitness,
+ popObjectiveVal=self.objectiveVal)
+ else:
+ self.population = offSprings
+ self.fitness = offSpringFitness
+ self.objectiveVal = rlz[self._objectiveVar[0]].data
+
+def multiObjSurvivorSelect(self, info, rlz, traj, offSprings, offSpringFitness, objectiveVal, g):
+ """
+ process of selecting survivors for multi objective problems
+ @ In, info, dict, dictionary of information
+ @ In, rlz, dict, dictionary of realizations
+ @ In, traj, dict, dictionary of trajectories
+ """
+ if self.counter > 1:
+ self.population,self.rank, \
+ self.popAge,self.crowdingDistance, \
+ self.objectiveVal,self.fitness, \
+ self.constraintsV = self._survivorSelectionInstance(age=self.popAge,
+ variables=list(self.toBeSampled),
+ population=self.population,
+ offsprings=rlz,
+ popObjectiveVal=self.objectiveVal,
+ offObjectiveVal=objectiveVal,
+ popFit = self.fitness,
+ offFit = offSpringFitness,
+ popConstV = self.constraintsV,
+ offConstV = g)
+ else:
+ self.population = offSprings
+ self.fitness = offSpringFitness
+ self.constraintsV = g
+ # offspringObjsVals for Rank and CD calculation
+ offObjVal = []
+ for i in range(len(self._objectiveVar)):
+ offObjVal.append(list(np.atleast_1d(rlz[self._objectiveVar[i]].data)))
+ # offspringFitVals for Rank and CD calculation
+ fitVal = datasetToDataArray(self.fitness, self._objectiveVar).data
+ offspringFitVals = fitVal.tolist()
+ offSpringRank = frontUtils.rankNonDominatedFrontiers(np.array(offspringFitVals))
+ self.rank = xr.DataArray(offSpringRank,
+ dims=['rank'],
+ coords={'rank': np.arange(np.shape(offSpringRank)[0])})
+ offSpringCD = frontUtils.crowdingDistance(rank=offSpringRank,
+ popSize=len(offSpringRank),
+ objectives=np.array(offspringFitVals))
+ self.crowdingDistance = xr.DataArray(offSpringCD,
+ dims=['CrowdingDistance'],
+ coords={'CrowdingDistance': np.arange(np.shape(offSpringCD)[0])})
+ self.objectiveVal = []
+ for i in range(len(self._objectiveVar)):
+ self.objectiveVal.append(list(np.atleast_1d(rlz[self._objectiveVar[i]].data)))
+ self._collectOptPointMulti(self.population,
+ self.rank,
+ self.crowdingDistance,
+ self.objectiveVal,
+ self.fitness,
+ self.constraintsV)
+ self._resolveNewGenerationMulti(traj, rlz, info)
\ No newline at end of file
diff --git a/ravenframework/Optimizers/survivorSelectors/survivorSelectors.py b/ravenframework/Optimizers/survivorSelectors/survivorSelectors.py
index 1b754af494..d5649880a4 100644
--- a/ravenframework/Optimizers/survivorSelectors/survivorSelectors.py
+++ b/ravenframework/Optimizers/survivorSelectors/survivorSelectors.py
@@ -19,13 +19,20 @@
2. fitnessBased
Created June,16,2020
- @authors: Mohammad Abdo, Diego Mandelli, Andrea Alfonsi
+ @authors: Mohammad Abdo, Junyung Kim, Diego Mandelli, Andrea Alfonsi
"""
-
+# External Modules----------------------------------------------------------------------------------
import numpy as np
import xarray as xr
+from ravenframework.utils import frontUtils
+# External Modules End------------------------------------------------------------------------------
+
+# Internal Modules----------------------------------------------------------------------------------
+from ...utils.gaUtils import dataArrayToDict, datasetToDataArray
+# Internal Modules End------------------------------------------------------------------------------
# @profile
+
def ageBased(newRlz,**kwargs):
"""
ageBased survivorSelection mechanism for new generation selection.
@@ -80,7 +87,7 @@ def fitnessBased(newRlz,**kwargs):
It combines the parents and children/offsprings then keeps the fittest individuals
to revert to the same population size.
@ In, newRlz, xr.DataSet, containing either a single realization, or a batch of realizations.
- @ In, kwargs, dict, dictionary of parameters for this mutation method:
+ @ In, kwargs, dict, dictionary of parameters for this survivor slection method:
age, list, ages of each chromosome in the population of the previous generation
offSpringsFitness, xr.DataArray, fitness of each new child, i.e., np.shape(offSpringsFitness) = nChildren x nGenes
variables
@@ -96,11 +103,12 @@ def fitnessBased(newRlz,**kwargs):
else:
popAge = kwargs['age']
- offSpringsFitness = np.atleast_1d(kwargs['offSpringsFitness'])
+ offSpringsFitness = datasetToDataArray(kwargs['offSpringsFitness'], list(kwargs['offSpringsFitness'].keys())).data
+ offSpringsFitness = np.array([item for sublist in offSpringsFitness for item in sublist])
offSprings = np.atleast_2d(newRlz[kwargs['variables']].to_array().transpose().data)
population = np.atleast_2d(kwargs['population'].data)
- popFitness = np.atleast_1d(kwargs['fitness'].data)
-
+ popFitness = datasetToDataArray(kwargs['fitness'], list(kwargs['fitness'].keys())).data
+ popFitness = np.array([item for sublist in popFitness for item in sublist])
newPopulation = population
newFitness = popFitness
newAge = list(map(lambda x:x+1, popAge))
@@ -116,19 +124,122 @@ def fitnessBased(newRlz,**kwargs):
newAge = sortedAgeT[:-len(offSprings)]
newPopulationArray = xr.DataArray(newPopulationSorted,
- dims=['chromosome','Gene'],
- coords={'chromosome':np.arange(np.shape(newPopulationSorted)[0]),
- 'Gene': kwargs['variables']})
+ dims=['chromosome','Gene'],
+ coords={'chromosome':np.arange(np.shape(newPopulationSorted)[0]),
+ 'Gene': kwargs['variables']})
newFitness = xr.DataArray(newFitness,
dims=['chromosome'],
coords={'chromosome':np.arange(np.shape(newFitness)[0])})
+ # newFitness = newFitness.to_dataset(name = list(kwargs['fitness'].keys())[0])
+ newFitness = newFitness.to_dataset(name = list(kwargs['variables'])[0])
#return newPopulationArray,newFitness,newAge
return newPopulationArray,newFitness,newAge,kwargs['popObjectiveVal']
+# @profile
+def rankNcrowdingBased(offsprings, **kwargs):
+ """
+ rankNcrowdingBased survivorSelection mechanism for new generation selection
+ It combines the parents and children/offsprings then calculates their rank and crowding distance.
+ After having ranks and crowding distance, it keeps the lowest ranks (and highest crowding distance if indivisuals have same rank.
+ @ In, newRlz, xr.DataSet, containing either a single realization, or a batch of realizations.
+ @ In, kwargs, dict, dictionary of parameters for this survivor slection method:
+ variables
+ population
+ @ Out, newPopulation, xr.DataArray, newPopulation for the new generation, i.e. np.shape(newPopulation) = populationSize x nGenes.
+ @ Out, newRank, xr.DataArray, rank of each chromosome in the new population
+ @ Out, newCD, xr.DataArray, crowding distance of each chromosome in the new population.
+ """
+ popSize = np.shape(kwargs['population'])[0]
+ if ('age' not in kwargs.keys() or kwargs['age'] == None):
+ popAge = [0]*popSize
+ else:
+ popAge = kwargs['age']
+
+ population = np.atleast_2d(kwargs['population'].data)
+ offSprings = np.atleast_2d(offsprings[kwargs['variables']].to_array().transpose().data)
+ popObjectiveVal = kwargs['popObjectiveVal']
+ offObjectiveVal = kwargs['offObjectiveVal']
+ popFit = kwargs['popFit']
+ popFitArray = []
+ offFit = kwargs['offFit']
+ offFitArray = []
+ for i in list(popFit.keys()): #NOTE popFit.keys() and offFit.keys() must be same.
+ popFitArray.append(popFit[i].data.tolist())
+ offFitArray.append(offFit[i].data.tolist())
+
+ newFitMerged = np.array([i + j for i, j in zip(popFitArray, offFitArray)])
+ newFitMerged_pair = [list(ele) for ele in list(zip(*newFitMerged))]
+
+ popConstV = kwargs['popConstV'].data
+ offConstV = kwargs['offConstV'].data
+ newConstVMerged = np.array(popConstV.tolist() + offConstV.tolist())
+
+ newObjectivesMerged = np.array([i + j for i, j in zip(popObjectiveVal, offObjectiveVal)])
+ newObjectivesMerged_pair = [list(ele) for ele in list(zip(*newObjectivesMerged))]
+
+ newPopRank = frontUtils.rankNonDominatedFrontiers(np.array(newFitMerged_pair))
+ newPopRank = xr.DataArray(newPopRank,
+ dims=['rank'],
+ coords={'rank': np.arange(np.shape(newPopRank)[0])})
+
+ newPopCD = frontUtils.crowdingDistance(rank=newPopRank, popSize=len(newPopRank), objectives=np.array(newFitMerged_pair))
+ newPopCD = xr.DataArray(newPopCD,
+ dims=['CrowdingDistance'],
+ coords={'CrowdingDistance': np.arange(np.shape(newPopCD)[0])})
+
+ newAge = list(map(lambda x:x+1, popAge))
+ newPopulationMerged = np.concatenate([population,offSprings])
+ newAge.extend([0]*len(offSprings))
+
+ sortedRank,sortedCD,sortedAge,sortedPopulation,sortedFit,sortedObjectives,sortedConstV = \
+ zip(*[(x,y,z,i,j,k,a) for x,y,z,i,j,k,a in \
+ sorted(zip(newPopRank.data, newPopCD.data, newAge, newPopulationMerged.tolist(), newFitMerged_pair, newObjectivesMerged_pair, newConstVMerged),reverse=False,key=lambda x: (x[0], -x[1]))])
+ sortedRankT, sortedCDT, sortedAgeT, sortedPopulationT, sortedFitT, sortedObjectivesT, sortedConstVT = \
+ np.atleast_1d(list(sortedRank)), list(sortedCD), list(sortedAge),np.atleast_1d(list(sortedPopulation)),np.atleast_1d(list(sortedFit)),np.atleast_1d(list(sortedObjectives)),np.atleast_1d(list(sortedConstV))
+
+ newPopulation = sortedPopulationT[:-len(offSprings)]
+ newObjectives = sortedObjectivesT[:-len(offSprings)]
+ newFit = sortedFitT[:-len(offSprings)]
+
+ newRank = frontUtils.rankNonDominatedFrontiers(newObjectives)
+ newRank = xr.DataArray(newRank,
+ dims=['rank'],
+ coords={'rank': np.arange(np.shape(newRank)[0])})
+
+ newObjectivesP = [list(ele) for ele in list(zip(*newObjectives))]
+ newCD = frontUtils.crowdingDistance(rank=newRank, popSize=len(newRank), objectives=newObjectives)
+ newCD = xr.DataArray(newCD,
+ dims=['CrowdingDistance'],
+ coords={'CrowdingDistance': np.arange(np.shape(newCD)[0])})
+
+ newAge = sortedAgeT[:-len(offSprings)]
+ newConstV = sortedConstVT[:-len(offSprings)]
+
+ for i in range(len(list(popFit.keys()))):
+ fitness = xr.DataArray(newFit[:,i],
+ dims=['chromosome'],
+ coords={'chromosome': np.arange(len(newFit[:,i]))})
+ if i == 0:
+ newFitnessSet = fitness.to_dataset(name = list(popFit.keys())[i])
+ else:
+ newFitnessSet[list(popFit.keys())[i]] = fitness
+
+ newPopulationArray = xr.DataArray(newPopulation,
+ dims=['chromosome','Gene'],
+ coords={'chromosome':np.arange(np.shape(newPopulation)[0]),
+ 'Gene': kwargs['variables']})
+ newConstV = xr.DataArray(newConstV,
+ dims=['chromosome','ConstEvaluation'],
+ coords={'chromosome':np.arange(np.shape(newPopulation)[0]),
+ 'ConstEvaluation':np.arange(np.shape(newConstV)[1])})
+
+ return newPopulationArray,newRank,newAge,newCD,newObjectivesP,newFitnessSet,newConstV
+
__survivorSelectors = {}
__survivorSelectors['ageBased'] = ageBased
__survivorSelectors['fitnessBased'] = fitnessBased
+__survivorSelectors['rankNcrowdingBased'] = rankNcrowdingBased
def returnInstance(cls, name):
"""
@@ -138,5 +249,5 @@ def returnInstance(cls, name):
@ Out, __crossovers[name], instance of class
"""
if name not in __survivorSelectors:
- cls.raiseAnError (IOError, "{} MECHANISM NOT IMPLEMENTED!!!!!".format(name))
+ cls.raiseAnError (IOError, "{} is not an valid option for survivor selector. Please review the spelling of the survivor selector. ".format(name))
return __survivorSelectors[name]
diff --git a/ravenframework/utils/frontUtils.py b/ravenframework/utils/frontUtils.py
index c63eca57fc..ca999e02be 100644
--- a/ravenframework/utils/frontUtils.py
+++ b/ravenframework/utils/frontUtils.py
@@ -44,6 +44,7 @@ def nonDominatedFrontier(data, returnMask, minMask=None):
Reference: the following code has been adapted from https://stackoverflow.com/questions/32791911/fast-calculation-of-pareto-front-in-python
"""
+
if minMask is None:
pass
elif minMask is not None and minMask.shape[0] != data.shape[1]:
@@ -56,8 +57,8 @@ def nonDominatedFrontier(data, returnMask, minMask=None):
isEfficient = np.arange(data.shape[0])
nPoints = data.shape[0]
nextPointIndex = 0
- while nextPointIndex= 0,
+ so if:
+ 1) f(x,y) >= 0 then g = f
+ 2) f(x,y) >= a then g = f - a
+ 3) f(x,y) <= b then g = b - f
+ 4) f(x,y) = c then g = 1e-6 - abs((f(x,y) - c)) (equality constraint)
+ """
+ g = eval(Input.name)(Input)
+ return g
+
+
+def expConstr1(Input):#You are free to pick this name but it has to be similar to the one in the xml#
+ """
+ Let's assume that the constraint is:
+ $ x3+x4 < 8 $
+ then g the constraint evaluation function (which has to be > 0) is taken to be:
+ g = 8 - (x3+x4)
+ in this case if g(\vec(x)) < 0 then this x violates the constraint and vice versa
+ @ In, Input, object, RAVEN container
+ @ out, g, float, explicit constraint 1 evaluation function
+ """
+ g = 8 - Input.x3 - Input.x4
+ return g
+
+def expConstr2(Input):
+ """
+ Explicit Equality Constraint:
+ let's consider the constraint x1**2 + x2**2 = 25
+ The way to write g is to use a very small number for instance, epsilon = 1e-12
+ and then g = epsilon - abs(constraint)
+ @ In, Input, object, RAVEN container
+ @ out, g, float, explicit constraint 2 evaluation function
+ """
+ g = 1e-12 - abs(Input.x1**2 + Input.x2**2 - 25)
+ return g
+
+def expConstr3(Input):
+ """
+ @ In, Input, object, RAVEN container
+ @ out, g, float, explicit constraint 3 evaluation function
+ """
+ g = 10 - Input.x3 - Input.x4
+ return g
+
+def impConstr1(Input):
+ """
+ The implicit constraint involves variables from the output space, for example the objective variable or
+ a dependent variable that is not in the optimization search space
+ @ In, Input, object, RAVEN container
+ @ out, g, float, implicit constraint 1 evaluation function
+ """
+ g = 10 - Input.x1**2 - Input.obj
+ return g
+
+def impConstr2(Input):
+ """
+ The implicit constraint involves variables from the output space, for example the objective variable or
+ a dependent variable that is not in the optimization search space
+ @ In, Input, object, RAVEN container
+ @ out, g, float, implicit constraint 2 evaluation function
+ """
+ g = Input.x1**2 + Input.obj1 - 10
+ return g
+
+def impConstr3(Input):
+ """
+ The implicit constraint involves variables from the output space, for example the objective variable or
+ a dependent variable that is not in the optimization search space
+ @ In, Input, object, RAVEN container
+ @ out, g, float, implicit constraint #3 evaluation function
+ """
+ g = 100 - Input.obj1
+ return g
diff --git a/tests/framework/AnalyticModels/optimizing/myLocalSum.py b/tests/framework/AnalyticModels/optimizing/myLocalSum.py
index faec353eb6..d4b6fec246 100644
--- a/tests/framework/AnalyticModels/optimizing/myLocalSum.py
+++ b/tests/framework/AnalyticModels/optimizing/myLocalSum.py
@@ -81,5 +81,4 @@ def constrain(self):
and negative if violated.
"""
explicitConstrain = constraint(self)
- return explicitConstrain
-
+ return explicitConstrain
\ No newline at end of file
diff --git a/tests/framework/AnalyticModels/optimizing/myLocalSum_multi.py b/tests/framework/AnalyticModels/optimizing/myLocalSum_multi.py
new file mode 100644
index 0000000000..2bad9f6b44
--- /dev/null
+++ b/tests/framework/AnalyticModels/optimizing/myLocalSum_multi.py
@@ -0,0 +1,37 @@
+# Copyright 2017 Battelle Energy Alliance, LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# @author: Mohammad Abdo (@Jimmy-INL)
+
+def evaluate(Inputs):
+ Sum = 0
+ LocalSum1 = 0
+ LocalSum2 = 0
+ for ind,var in enumerate(Inputs.keys()):
+ # write the objective function here
+ Sum += (ind + 1) * Inputs[var]
+ if (ind == 0) or (ind == 1):
+ LocalSum1 += (ind + 1) * Inputs[var]
+ if (ind == 2) or (ind == 3):
+ LocalSum2 += (ind + 1) * Inputs[var]
+ return Sum[:], LocalSum1[:], LocalSum2[:]
+
+def run(self,Inputs):
+ """
+ RAVEN API
+ @ In, self, object, RAVEN container
+ @ In, Inputs, dict, additional inputs
+ @ Out, None
+ """
+ self.obj1,self.obj2,self.obj3 = evaluate(Inputs)
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/MultiObjectiveBeale-Bealeflipped.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/MultiObjectiveBeale-Bealeflipped.xml
new file mode 100644
index 0000000000..e1162630ae
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/MultiObjectiveBeale-Bealeflipped.xml
@@ -0,0 +1,134 @@
+
+
+
+ raven/tests/framework/Optimizers/GeneticAlgorithms.NSGAII
+ Mohammad Abdo
+ 2024-02-18
+
+ NSGA-II min-max test
+
+
+
+ Multi_beale_bealeFlipped
+ optimize,print
+ 4
+
+
+
+
+ placeholder
+ beale
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x,y,obj1,obj2
+
+
+
+
+
+ 0
+ 5
+
+
+
+
+
+
+ 5
+ 42
+ final
+ min, max
+
+
+ 50
+ tournamentSelection
+
+
+ 0.8
+
+
+ 0.8
+
+
+
+ rankNcrowdingBased
+
+
+ 0.0
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 50
+ 050877
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+
+
+
+
+
+ x,y
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x, y , obj1, obj2
+
+
+
+ x, y , obj1, obj2
+ batchId
+ png
+
+
+
\ No newline at end of file
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation.xml
new file mode 100644
index 0000000000..951b9c6adf
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation.xml
@@ -0,0 +1,196 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Mohammad Abdo
+ 2023-02-21
+
+ ZDT1 test using NSGA-II.
+ design variable $\vec{x} = [x_1,x_2,...x_n]$; n here is equal to 3
+
+ $obj_1(x) = x_1$
+
+ $g(x) = 1 + \frac{9}{n-1} \sum_{2}^{n} x_i = 1 + 4.5 * (x_2 + x_3)$
+
+ $h(obj1,g(x)) = 1 - \sqrt{\frac{obj_1}{g(x)}} = 1 - \sqrt(\frac{x_1}{1 + 4.5 * (x_2 + x_3)})$
+
+ $obj_2 = g(x) * h(obj_1,g(x)) = [1 + 4.5 * (x_2 + x_3)] * \sqrt(x_1) * \sqrt(1 + 4.5 * (x_2 + x_3))$
+
+ The analytic solution of this problem is as follows:
+ Pareto front:
+ $\vec{x}$:
+
+ $0 \leq x_1 \leq 1, x_2 = 0, x_3 = 0,$
+
+ $obj_1$:
+
+ $0 \leq obj_1 \leq 1$
+
+ $obj_2$
+
+ $1 \geq obj_1 \geq 0$
+
+ \begin{filecontents*}{\jobname.art}
+
+ 1.0 *
+ *
+ *
+ *
+ 0.8 *
+ * o
+ * o
+ * o
+ 0.6 * o
+ * o
+obj_2 * o
+ * o
+ 0.4 * o
+ * o
+ * o
+ * o
+ 0.2 * o
+ * o
+ * o
+ * o
+ 0 * o
+ /.......................................................................
+ 0 0.2 0.4 0.6 0.8 1.0
+ obj_1 = x_1
+\end{filecontents*}
+
+
+
+
+ ZDT1-adaptive-LinearXover-LinearMutation
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ linear
+
+
+ linear
+
+
+
+
+ rankNcrowdingBased
+
+
+
+ 0.0
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation.xml
new file mode 100644
index 0000000000..39ec790e17
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation.xml
@@ -0,0 +1,196 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Mohammad Abdo
+ 2024-07-28
+
+ ZDT1 test using NSGA-II.
+ design variable $\vec{x} = [x_1,x_2,...x_n]$; n here is equal to 3
+
+ $obj_1(x) = x_1$
+
+ $g(x) = 1 + \frac{9}{n-1} \sum_{2}^{n} x_i = 1 + 4.5 * (x_2 + x_3)$
+
+ $h(obj1,g(x)) = 1 - \sqrt{\frac{obj_1}{g(x)}} = 1 - \sqrt(\frac{x_1}{1 + 4.5 * (x_2 + x_3)})$
+
+ $obj_2 = g(x) * h(obj_1,g(x)) = [1 + 4.5 * (x_2 + x_3)] * \sqrt(x_1) * \sqrt(1 + 4.5 * (x_2 + x_3))$
+
+ The analytic solution of this problem is as follows:
+ Pareto front:
+ $\vec{x}$:
+
+ $0 \leq x_1 \leq 1, x_2 = 0, x_3 = 0,$
+
+ $obj_1$:
+
+ $0 \leq obj_1 \leq 1$
+
+ $obj_2$
+
+ $1 \geq obj_1 \geq 0$
+
+ \begin{filecontents*}{\jobname.art}
+
+ 1.0 *
+ *
+ *
+ *
+ 0.8 *
+ * o
+ * o
+ * o
+ 0.6 * o
+ * o
+obj_2 * o
+ * o
+ 0.4 * o
+ * o
+ * o
+ * o
+ 0.2 * o
+ * o
+ * o
+ * o
+ 0 * o
+ /.......................................................................
+ 0 0.2 0.4 0.6 0.8 1.0
+ obj_1 = x_1
+\end{filecontents*}
+
+
+
+
+ ZDT1-static-0.0Xover-0.1Mutation
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ 0.0
+
+
+ 0.1
+
+
+
+
+ rankNcrowdingBased
+
+
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation.xml
new file mode 100644
index 0000000000..03c251d8ef
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation.xml
@@ -0,0 +1,196 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Mohammad Abdo
+ 2024-07-28
+
+ ZDT1 test using NSGA-II.
+ design variable $\vec{x} = [x_1,x_2,...x_n]$; n here is equal to 3
+
+ $obj_1(x) = x_1$
+
+ $g(x) = 1 + \frac{9}{n-1} \sum_{2}^{n} x_i = 1 + 4.5 * (x_2 + x_3)$
+
+ $h(obj1,g(x)) = 1 - \sqrt{\frac{obj_1}{g(x)}} = 1 - \sqrt(\frac{x_1}{1 + 4.5 * (x_2 + x_3)})$
+
+ $obj_2 = g(x) * h(obj_1,g(x)) = [1 + 4.5 * (x_2 + x_3)] * \sqrt(x_1) * \sqrt(1 + 4.5 * (x_2 + x_3))$
+
+ The analytic solution of this problem is as follows:
+ Pareto front:
+ $\vec{x}$:
+
+ $0 \leq x_1 \leq 1, x_2 = 0, x_3 = 0,$
+
+ $obj_1$:
+
+ $0 \leq obj_1 \leq 1$
+
+ $obj_2$
+
+ $1 \geq obj_1 \geq 0$
+
+ \begin{filecontents*}{\jobname.art}
+
+ 1.0 *
+ *
+ *
+ *
+ 0.8 *
+ * o
+ * o
+ * o
+ 0.6 * o
+ * o
+obj_2 * o
+ * o
+ 0.4 * o
+ * o
+ * o
+ * o
+ 0.2 * o
+ * o
+ * o
+ * o
+ 0 * o
+ /.......................................................................
+ 0 0.2 0.4 0.6 0.8 1.0
+ obj_1 = x_1
+\end{filecontents*}
+
+
+
+
+ ZDT1-static-0.0Xover-0.9Mutation
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ 0.0
+
+
+ 0.9
+
+
+
+
+ rankNcrowdingBased
+
+
+
+ 0.0
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation.xml
new file mode 100644
index 0000000000..6f0f820f05
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation.xml
@@ -0,0 +1,196 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Mohammad Abdo
+ 2024-07-28
+
+ ZDT1 test using NSGA-II.
+ design variable $\vec{x} = [x_1,x_2,...x_n]$; n here is equal to 3
+
+ $obj_1(x) = x_1$
+
+ $g(x) = 1 + \frac{9}{n-1} \sum_{2}^{n} x_i = 1 + 4.5 * (x_2 + x_3)$
+
+ $h(obj1,g(x)) = 1 - \sqrt{\frac{obj_1}{g(x)}} = 1 - \sqrt(\frac{x_1}{1 + 4.5 * (x_2 + x_3)})$
+
+ $obj_2 = g(x) * h(obj_1,g(x)) = [1 + 4.5 * (x_2 + x_3)] * \sqrt(x_1) * \sqrt(1 + 4.5 * (x_2 + x_3))$
+
+ The analytic solution of this problem is as follows:
+ Pareto front:
+ $\vec{x}$:
+
+ $0 \leq x_1 \leq 1, x_2 = 0, x_3 = 0,$
+
+ $obj_1$:
+
+ $0 \leq obj_1 \leq 1$
+
+ $obj_2$
+
+ $1 \geq obj_1 \geq 0$
+
+ \begin{filecontents*}{\jobname.art}
+
+ 1.0 *
+ *
+ *
+ *
+ 0.8 *
+ * o
+ * o
+ * o
+ 0.6 * o
+ * o
+obj_2 * o
+ * o
+ 0.4 * o
+ * o
+ * o
+ * o
+ 0.2 * o
+ * o
+ * o
+ * o
+ 0 * o
+ /.......................................................................
+ 0 0.2 0.4 0.6 0.8 1.0
+ obj_1 = x_1
+\end{filecontents*}
+
+
+
+
+ ZDT1-static-0.0Xover-1.0Mutation
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ 0.0
+
+
+ 1.0
+
+
+
+
+ rankNcrowdingBased
+
+
+
+ 0.0
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation.xml
new file mode 100644
index 0000000000..d9f37b7577
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation.xml
@@ -0,0 +1,196 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Mohammad Abdo
+ 2024-07-28
+
+ ZDT1 test using NSGA-II.
+ design variable $\vec{x} = [x_1,x_2,...x_n]$; n here is equal to 3
+
+ $obj_1(x) = x_1$
+
+ $g(x) = 1 + \frac{9}{n-1} \sum_{2}^{n} x_i = 1 + 4.5 * (x_2 + x_3)$
+
+ $h(obj1,g(x)) = 1 - \sqrt{\frac{obj_1}{g(x)}} = 1 - \sqrt(\frac{x_1}{1 + 4.5 * (x_2 + x_3)})$
+
+ $obj_2 = g(x) * h(obj_1,g(x)) = [1 + 4.5 * (x_2 + x_3)] * \sqrt(x_1) * \sqrt(1 + 4.5 * (x_2 + x_3))$
+
+ The analytic solution of this problem is as follows:
+ Pareto front:
+ $\vec{x}$:
+
+ $0 \leq x_1 \leq 1, x_2 = 0, x_3 = 0,$
+
+ $obj_1$:
+
+ $0 \leq obj_1 \leq 1$
+
+ $obj_2$
+
+ $1 \geq obj_1 \geq 0$
+
+ \begin{filecontents*}{\jobname.art}
+
+ 1.0 *
+ *
+ *
+ *
+ 0.8 *
+ * o
+ * o
+ * o
+ 0.6 * o
+ * o
+obj_2 * o
+ * o
+ 0.4 * o
+ * o
+ * o
+ * o
+ 0.2 * o
+ * o
+ * o
+ * o
+ 0 * o
+ /.......................................................................
+ 0 0.2 0.4 0.6 0.8 1.0
+ obj_1 = x_1
+\end{filecontents*}
+
+
+
+
+ ZDT1-static-0.1Xover-0.0Mutation
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ 0.1
+
+
+ 0.0
+
+
+
+
+ rankNcrowdingBased
+
+
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation.xml
new file mode 100644
index 0000000000..177e153590
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation.xml
@@ -0,0 +1,196 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Mohammad Abdo
+ 2024-07-28
+
+ ZDT1 test using NSGA-II.
+ design variable $\vec{x} = [x_1,x_2,...x_n]$; n here is equal to 3
+
+ $obj_1(x) = x_1$
+
+ $g(x) = 1 + \frac{9}{n-1} \sum_{2}^{n} x_i = 1 + 4.5 * (x_2 + x_3)$
+
+ $h(obj1,g(x)) = 1 - \sqrt{\frac{obj_1}{g(x)}} = 1 - \sqrt(\frac{x_1}{1 + 4.5 * (x_2 + x_3)})$
+
+ $obj_2 = g(x) * h(obj_1,g(x)) = [1 + 4.5 * (x_2 + x_3)] * \sqrt(x_1) * \sqrt(1 + 4.5 * (x_2 + x_3))$
+
+ The analytic solution of this problem is as follows:
+ Pareto front:
+ $\vec{x}$:
+
+ $0 \leq x_1 \leq 1, x_2 = 0, x_3 = 0,$
+
+ $obj_1$:
+
+ $0 \leq obj_1 \leq 1$
+
+ $obj_2$
+
+ $1 \geq obj_1 \geq 0$
+
+ \begin{filecontents*}{\jobname.art}
+
+ 1.0 *
+ *
+ *
+ *
+ 0.8 *
+ * o
+ * o
+ * o
+ 0.6 * o
+ * o
+obj_2 * o
+ * o
+ 0.4 * o
+ * o
+ * o
+ * o
+ 0.2 * o
+ * o
+ * o
+ * o
+ 0 * o
+ /.......................................................................
+ 0 0.2 0.4 0.6 0.8 1.0
+ obj_1 = x_1
+\end{filecontents*}
+
+
+
+
+ ZDT1-static-0.1Xover-0.9Mutation
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ 0.1
+
+
+ 0.9
+
+
+
+
+ rankNcrowdingBased
+
+
+
+ 0.0
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation.xml
new file mode 100644
index 0000000000..d1c91b625d
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation.xml
@@ -0,0 +1,196 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Mohammad Abdo
+ 2024-07-28
+
+ ZDT1 test using NSGA-II.
+ design variable $\vec{x} = [x_1,x_2,...x_n]$; n here is equal to 3
+
+ $obj_1(x) = x_1$
+
+ $g(x) = 1 + \frac{9}{n-1} \sum_{2}^{n} x_i = 1 + 4.5 * (x_2 + x_3)$
+
+ $h(obj1,g(x)) = 1 - \sqrt{\frac{obj_1}{g(x)}} = 1 - \sqrt(\frac{x_1}{1 + 4.5 * (x_2 + x_3)})$
+
+ $obj_2 = g(x) * h(obj_1,g(x)) = [1 + 4.5 * (x_2 + x_3)] * \sqrt(x_1) * \sqrt(1 + 4.5 * (x_2 + x_3))$
+
+ The analytic solution of this problem is as follows:
+ Pareto front:
+ $\vec{x}$:
+
+ $0 \leq x_1 \leq 1, x_2 = 0, x_3 = 0,$
+
+ $obj_1$:
+
+ $0 \leq obj_1 \leq 1$
+
+ $obj_2$
+
+ $1 \geq obj_1 \geq 0$
+
+ \begin{filecontents*}{\jobname.art}
+
+ 1.0 *
+ *
+ *
+ *
+ 0.8 *
+ * o
+ * o
+ * o
+ 0.6 * o
+ * o
+obj_2 * o
+ * o
+ 0.4 * o
+ * o
+ * o
+ * o
+ 0.2 * o
+ * o
+ * o
+ * o
+ 0 * o
+ /.......................................................................
+ 0 0.2 0.4 0.6 0.8 1.0
+ obj_1 = x_1
+\end{filecontents*}
+
+
+
+
+ ZDT1-static-0.5Xover-0.5Mutation
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ 0.5
+
+
+ 0.5
+
+
+
+
+ rankNcrowdingBased
+
+
+
+ 0.0
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation.xml
new file mode 100644
index 0000000000..d8803d31ff
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation.xml
@@ -0,0 +1,196 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Mohammad Abdo
+ 2024-07-28
+
+ ZDT1 test using NSGA-II.
+ design variable $\vec{x} = [x_1,x_2,...x_n]$; n here is equal to 3
+
+ $obj_1(x) = x_1$
+
+ $g(x) = 1 + \frac{9}{n-1} \sum_{2}^{n} x_i = 1 + 4.5 * (x_2 + x_3)$
+
+ $h(obj1,g(x)) = 1 - \sqrt{\frac{obj_1}{g(x)}} = 1 - \sqrt(\frac{x_1}{1 + 4.5 * (x_2 + x_3)})$
+
+ $obj_2 = g(x) * h(obj_1,g(x)) = [1 + 4.5 * (x_2 + x_3)] * \sqrt(x_1) * \sqrt(1 + 4.5 * (x_2 + x_3))$
+
+ The analytic solution of this problem is as follows:
+ Pareto front:
+ $\vec{x}$:
+
+ $0 \leq x_1 \leq 1, x_2 = 0, x_3 = 0,$
+
+ $obj_1$:
+
+ $0 \leq obj_1 \leq 1$
+
+ $obj_2$
+
+ $1 \geq obj_1 \geq 0$
+
+ \begin{filecontents*}{\jobname.art}
+
+ 1.0 *
+ *
+ *
+ *
+ 0.8 *
+ * o
+ * o
+ * o
+ 0.6 * o
+ * o
+obj_2 * o
+ * o
+ 0.4 * o
+ * o
+ * o
+ * o
+ 0.2 * o
+ * o
+ * o
+ * o
+ 0 * o
+ /.......................................................................
+ 0 0.2 0.4 0.6 0.8 1.0
+ obj_1 = x_1
+\end{filecontents*}
+
+
+
+
+ ZDT1-static-0.9Xover-0.0Mutation
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ 0.9
+
+
+ 0.0
+
+
+
+
+ rankNcrowdingBased
+
+
+
+ 0.0
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation.xml
new file mode 100644
index 0000000000..dc81978727
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation.xml
@@ -0,0 +1,196 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Mohammad Abdo
+ 2024-07-28
+
+ ZDT1 test using NSGA-II.
+ design variable $\vec{x} = [x_1,x_2,...x_n]$; n here is equal to 3
+
+ $obj_1(x) = x_1$
+
+ $g(x) = 1 + \frac{9}{n-1} \sum_{2}^{n} x_i = 1 + 4.5 * (x_2 + x_3)$
+
+ $h(obj1,g(x)) = 1 - \sqrt{\frac{obj_1}{g(x)}} = 1 - \sqrt(\frac{x_1}{1 + 4.5 * (x_2 + x_3)})$
+
+ $obj_2 = g(x) * h(obj_1,g(x)) = [1 + 4.5 * (x_2 + x_3)] * \sqrt(x_1) * \sqrt(1 + 4.5 * (x_2 + x_3))$
+
+ The analytic solution of this problem is as follows:
+ Pareto front:
+ $\vec{x}$:
+
+ $0 \leq x_1 \leq 1, x_2 = 0, x_3 = 0,$
+
+ $obj_1$:
+
+ $0 \leq obj_1 \leq 1$
+
+ $obj_2$
+
+ $1 \geq obj_1 \geq 0$
+
+ \begin{filecontents*}{\jobname.art}
+
+ 1.0 *
+ *
+ *
+ *
+ 0.8 *
+ * o
+ * o
+ * o
+ 0.6 * o
+ * o
+obj_2 * o
+ * o
+ 0.4 * o
+ * o
+ * o
+ * o
+ 0.2 * o
+ * o
+ * o
+ * o
+ 0 * o
+ /.......................................................................
+ 0 0.2 0.4 0.6 0.8 1.0
+ obj_1 = x_1
+\end{filecontents*}
+
+
+
+
+ ZDT1-static-1.0Xover-0.0Mutation
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ 1.0
+
+
+ 0.0
+
+
+
+
+ rankNcrowdingBased
+
+
+
+ 0.0
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1.xml
new file mode 100644
index 0000000000..b78cf8c1dc
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/ZDT1.xml
@@ -0,0 +1,144 @@
+
+
+
+ raven/tests/framework/Optimizers/GA.MultiObjZDT1
+ Junyung Kim
+ 2023-02-21
+
+ ZDT1 test using NSGA-II
+
+
+
+ ZDT1
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ ZDT
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+
+ 15
+ 42
+ every
+ min,min
+
+
+
+ 10
+ tournamentSelection
+
+
+ 1.0
+
+
+ 1.0
+
+
+
+
+ rankNcrowdingBased
+
+
+
+ 0.0
+
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+ 10
+ 050877
+
+
+ unifDist
+
+
+ unifDist
+
+
+ unifDist
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/test_ensembleModel_withGA_Code_and_Functions.xml b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/test_ensembleModel_withGA_Code_and_Functions.xml
index 16c9e6d553..7fd44cde31 100644
--- a/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/test_ensembleModel_withGA_Code_and_Functions.xml
+++ b/tests/framework/Optimizers/GeneticAlgorithms/continuous/unconstrained/test_ensembleModel_withGA_Code_and_Functions.xml
@@ -11,7 +11,7 @@
#2304 (see \\url{https://github.com/idaholab/raven/issues/2304}).
-
+
metaModelWithCodeAndFunctionsAndGenetic
@@ -107,13 +107,13 @@
MC_samp
-
+
decay_A
-
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/MinwoRepMultiObjective.xml b/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/MinwoRepMultiObjective.xml
new file mode 100644
index 0000000000..fd780f04a6
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/MinwoRepMultiObjective.xml
@@ -0,0 +1,164 @@
+
+
+
+ raven/tests/framework/Optimizers/GeneticAlgorithms.NSGAII
+ Junyung Kim
+ 2022-12-21
+
+ NSGA-II min-min test
+
+
+
+ Multi_MinwoReplacement
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ myLocalSum
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+ x1,x2,x3,x4,x5,x6,obj1,obj2,obj3
+
+
+
+
+
+ x1,x2,x3,x4,x5,x6
+
+
+ x1,x2,x3,x4,x5,x6,obj1
+
+
+ x1,x2,x3,x4,x5,x6,obj1
+
+
+
+
+
+ 2
+ 7
+ withoutReplacement
+
+
+
+
+
+
+ 5
+ 42
+ every
+ min, max, min
+
+
+ 50
+ tournamentSelection
+
+
+ 0.8
+
+
+ 0.8
+
+
+
+
+
+ rankNcrowdingBased
+
+
+ 0.0
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+ obj1, obj2, obj3
+ optOut
+ MC_samp
+ expConstr3
+ impConstr2
+ impConstr3
+
+
+
+
+
+
+ 50
+ 050877
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+
+
+
+
+
+ x1,x2,x3,x4,x5,x6
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/MinwoRepMultiObjectiveFeasibleFirst.xml b/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/MinwoRepMultiObjectiveFeasibleFirst.xml
new file mode 100644
index 0000000000..d4d4370f3b
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/MinwoRepMultiObjectiveFeasibleFirst.xml
@@ -0,0 +1,167 @@
+
+
+
+ raven/tests/framework/Optimizers/GeneticAlgorithms.NSGAII
+ Mohammad Abdo
+ 2024-04-27
+
+ NSGA-II min-min test
+
+
+
+ MultiwoReplacementFeasibleFirst
+ optimize,print
+ 1
+
+
+
+
+ placeholder
+ myLocalSum
+ GAopt
+ opt_export
+
+
+
+
+ opt_export
+ optOut
+
+
+
+
+
+
+
+
+
+ x1,x2,x3,obj1,obj2
+
+
+
+
+
+ x1,x2,x3
+
+
+ x1,x2,x3,obj1
+
+
+ x1,x2,x3,obj1
+
+
+
+
+
+ 2
+ 4
+ withoutReplacement
+
+
+
+
+
+
+ 10
+ 42
+ every
+ min, max
+
+
+ 5
+ tournamentSelection
+
+
+ 0.8
+
+
+ 0.8
+
+
+
+
+
+ rankNcrowdingBased
+
+
+ 0.0
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+ obj1, obj2
+ optOut
+ MC_samp
+
+
+
+
+
+
+
+ 5
+ 050877
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+ woRep_dist
+
+
+
+
+
+
+
+
+ x1,x2,x3
+
+
+
+ trajID
+
+
+
+
+
+
+ csv
+
+
+
+ csv
+
+ trajID
+
+
+
+ x1, x2, x3, obj1, obj2
+
+
+
+ x1, x2, x3, obj1, obj2
+ batchId
+ png
+
+
+
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/testGAMinwRepConstrained.xml b/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/testGAMinwRepConstrained.xml
index 4da8636350..08267e5c89 100644
--- a/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/testGAMinwRepConstrained.xml
+++ b/tests/framework/Optimizers/GeneticAlgorithms/discrete/constrained/testGAMinwRepConstrained.xml
@@ -55,14 +55,14 @@
- 20
+ 5
42
every
20
- rouletteWheel
+ tournamentSelection
0.8
@@ -71,7 +71,7 @@
0.9
-
+
fitnessBased
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/Multi_beale_bealeFlipped/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/Multi_beale_bealeFlipped/opt_export_0.csv
new file mode 100644
index 0000000000..6b0e8ed5eb
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/Multi_beale_bealeFlipped/opt_export_0.csv
@@ -0,0 +1,2 @@
+x,y,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+3.06781874459,0.550223824231,0.0314037357266,-0.0314037357266,4.0,5.0,1.0,inf,0.0314037357266,0.0314037357266,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/1-opt_path.png
new file mode 100644
index 0000000000..dac1f05119
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/1-population.png
new file mode 100644
index 0000000000..c07a4f22f7
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/opt_export_0.csv
new file mode 100644
index 0000000000..08c0b23a10
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/opt_export_0.csv
@@ -0,0 +1,157 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+0.902940987587,0.947612243227,0.840374259707,0.902940987587,3.96681957049,0.0,1.0,3.0,inf,0.902940987587,3.96681957049,first
+0.227236453264,0.847510234417,0.362760231915,0.227236453264,3.60499993579,0.0,1.0,2.0,inf,0.227236453264,3.60499993579,first
+0.766431005617,0.192211290866,0.39961784645,0.766431005617,1.3169883176,0.0,1.0,1.0,inf,0.766431005617,1.3169883176,first
+0.633202111729,0.793545654927,0.564774226762,0.633202111729,3.28234279694,0.0,1.0,2.0,2.0,0.633202111729,3.28234279694,first
+0.306377726911,0.00975325447734,0.613563748918,0.306377726911,1.93224686343,0.0,1.0,1.0,1.32735741676,0.306377726911,1.93224686343,first
+0.110044764846,0.604534715322,0.738899003886,0.110044764846,4.28628616584,0.0,1.0,1.0,inf,0.110044764846,4.28628616584,first
+0.331692186261,0.571854743308,0.965348788995,0.331692186261,4.24730587019,0.0,1.0,3.0,inf,0.331692186261,4.24730587019,first
+0.267873673297,0.166777967281,0.847808119107,0.267873673297,3.00298144409,0.0,1.0,1.0,0.749061564967,0.267873673297,3.00298144409,first
+0.713407223745,0.641621648018,0.334449647072,0.713407223745,2.25417202135,0.0,1.0,2.0,inf,0.713407223745,2.25417202135,first
+0.13264102096,0.630711117673,0.405532905694,0.13264102096,3.37050011696,0.0,1.0,1.0,0.672642583243,0.13264102096,3.37050011696,first
+0.766431005617,0.192211290866,0.39961784645,0.766431005617,1.3169883176,0.0,2.0,1.0,inf,0.766431005617,1.3169883176,accepted
+0.110044764846,0.604534715322,0.738899003886,0.110044764846,4.28628616584,0.0,2.0,1.0,inf,0.110044764846,4.28628616584,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,0.0,2.0,1.0,1.65715637093,0.227236453264,1.41712807233,accepted
+0.13264102096,0.630711117673,0.405532905694,0.13264102096,3.37050011696,0.0,2.0,1.0,1.14481568274,0.13264102096,3.37050011696,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,0.0,2.0,2.0,inf,0.227236453264,1.70412941407,accepted
+0.227236453264,0.304242241034,0.362760231915,0.227236453264,2.17521187389,0.0,2.0,3.0,inf,0.227236453264,2.17521187389,accepted
+0.766431005617,0.399860977754,0.39961784645,0.766431005617,1.78453837074,0.0,2.0,3.0,inf,0.766431005617,1.78453837074,accepted
+0.306377726911,0.00975325447734,0.613563748918,0.306377726911,1.93224686343,0.0,2.0,3.0,2.0,0.306377726911,1.93224686343,accepted
+0.713407223745,0.641621648018,0.334449647072,0.713407223745,2.25417202135,0.0,2.0,4.0,inf,0.713407223745,2.25417202135,accepted
+0.227236453264,0.192211290866,0.785175960228,0.227236453264,2.98689433584,0.0,2.0,4.0,inf,0.227236453264,2.98689433584,accepted
+0.110044764846,0.207941663733,0.738899003886,0.110044764846,3.19042251763,0.0,3.0,1.0,inf,0.110044764846,3.19042251763,accepted
+0.766431005617,0.184854460225,0.39961784645,0.766431005617,1.300728344,0.0,3.0,1.0,inf,0.766431005617,1.300728344,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,0.0,3.0,1.0,1.2940861679,0.227236453264,1.41712807233,accepted
+0.182236086852,0.192211290866,0.39961784645,0.182236086852,2.0642954793,0.0,3.0,1.0,1.11694361992,0.182236086852,2.0642954793,accepted
+0.766431005617,0.192211290866,0.39961784645,0.766431005617,1.3169883176,0.0,3.0,2.0,inf,0.766431005617,1.3169883176,accepted
+0.110044764846,0.192211290866,0.926658862253,0.110044764846,3.66420727224,0.0,3.0,2.0,inf,0.110044764846,3.66420727224,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,0.0,3.0,2.0,1.84044490677,0.227236453264,1.70412941407,accepted
+0.13264102096,0.630711117673,0.405532905694,0.13264102096,3.37050011696,0.0,3.0,2.0,1.01360466361,0.13264102096,3.37050011696,accepted
+0.110044764846,0.604534715322,0.738899003886,0.110044764846,4.28628616584,0.0,3.0,3.0,inf,0.110044764846,4.28628616584,accepted
+0.766431005617,0.192211290866,0.570443976105,0.766431005617,1.70051534965,0.0,3.0,3.0,inf,0.766431005617,1.70051534965,accepted
+0.00552212237509,0.184854460225,0.738899003886,0.00552212237509,3.62695044328,2.0,4.0,1.0,inf,0.00552212237509,3.62695044328,accepted
+0.766431005617,0.207941663733,0.19884240306,0.766431005617,0.915842035695,2.0,4.0,1.0,inf,0.766431005617,0.915842035695,accepted
+0.665922352268,0.184854460225,0.39961784645,0.665922352268,1.39932612833,2.0,4.0,1.0,0.89351985107,0.665922352268,1.39932612833,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,2.0,4.0,1.0,0.880944925422,0.227236453264,1.41712807233,accepted
+0.0954101160391,0.184854460225,0.39961784645,0.0954101160391,2.24087050472,2.0,4.0,1.0,0.703540383401,0.0954101160391,2.24087050472,accepted
+0.182236086852,0.192211290866,0.39961784645,0.182236086852,2.0642954793,2.0,4.0,1.0,0.402939765529,0.182236086852,2.0642954793,accepted
+0.110044764846,0.184854460225,0.358465725174,0.110044764846,2.09198900401,2.0,4.0,1.0,0.179238433786,0.110044764846,2.09198900401,accepted
+0.110044764846,0.207941663733,0.738899003886,0.110044764846,3.19042251763,2.0,4.0,2.0,inf,0.110044764846,3.19042251763,accepted
+0.766431005617,0.184854460225,0.39961784645,0.766431005617,1.300728344,2.0,4.0,2.0,inf,0.766431005617,1.300728344,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,2.0,4.0,2.0,2.0,0.227236453264,1.70412941407,accepted
+0.766431005617,0.184854460225,0.19884240306,0.766431005617,0.867088049375,3.0,5.0,1.0,inf,0.766431005617,0.867088049375,accepted
+0.00552212237509,0.207941663733,0.295633687939,0.00552212237509,2.39297828847,3.0,5.0,1.0,inf,0.00552212237509,2.39297828847,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,3.0,5.0,1.0,1.07146017775,0.227236453264,1.41712807233,accepted
+0.665922352268,0.184854460225,0.39961784645,0.665922352268,1.39932612833,3.0,5.0,1.0,1.06909063159,0.665922352268,1.39932612833,accepted
+0.182236086852,0.192211290866,0.39961784645,0.182236086852,2.0642954793,3.0,5.0,1.0,0.596288978535,0.182236086852,2.0642954793,accepted
+0.0954101160391,0.184854460225,0.39961784645,0.0954101160391,2.24087050472,3.0,5.0,1.0,0.334620389874,0.0954101160391,2.24087050472,accepted
+0.110044764846,0.184854460225,0.358465725174,0.110044764846,2.09198900401,3.0,5.0,1.0,0.22982758571,0.110044764846,2.09198900401,accepted
+0.00552212237509,0.184854460225,0.738899003886,0.00552212237509,3.62695044328,3.0,5.0,2.0,inf,0.00552212237509,3.62695044328,accepted
+0.766431005617,0.207941663733,0.19884240306,0.766431005617,0.915842035695,3.0,5.0,2.0,inf,0.766431005617,0.915842035695,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,3.0,5.0,2.0,2.0,0.227236453264,1.70412941407,accepted
+0.766431005617,0.184854460225,0.19884240306,0.766431005617,0.867088049375,3.0,6.0,1.0,inf,0.766431005617,0.867088049375,accepted
+0.00552212237509,0.184854460225,0.168291045858,0.00552212237509,1.95279477934,3.0,6.0,1.0,inf,0.00552212237509,1.95279477934,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,3.0,6.0,1.0,1.21523841571,0.337615172224,1.35454356648,accepted
+0.148086928797,0.207941663733,0.19884240306,0.148086928797,1.64693687254,3.0,6.0,1.0,0.784761584293,0.148086928797,1.64693687254,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,3.0,6.0,1.0,0.518392889684,0.227236453264,1.41712807233,accepted
+0.766431005617,0.207941663733,0.19884240306,0.766431005617,0.915842035695,3.0,6.0,2.0,inf,0.766431005617,0.915842035695,accepted
+0.00552212237509,0.207941663733,0.246876063581,0.00552212237509,2.25018682722,3.0,6.0,2.0,inf,0.00552212237509,2.25018682722,accepted
+0.665922352268,0.184854460225,0.39961784645,0.665922352268,1.39932612833,3.0,6.0,2.0,1.29938646081,0.665922352268,1.39932612833,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,3.0,6.0,2.0,1.13401806942,0.227236453264,1.70412941407,accepted
+0.182236086852,0.192211290866,0.39961784645,0.182236086852,2.0642954793,3.0,6.0,2.0,0.700613539195,0.182236086852,2.0642954793,accepted
+0.00552212237509,0.184854460225,0.168291045858,0.00552212237509,1.95279477934,5.0,7.0,1.0,inf,0.00552212237509,1.95279477934,accepted
+0.766431005617,0.0407751416882,0.19884240306,0.766431005617,0.571080029164,5.0,7.0,1.0,inf,0.766431005617,0.571080029164,accepted
+0.148086928797,0.207941663733,0.19884240306,0.148086928797,1.64693687254,5.0,7.0,1.0,0.679063477319,0.148086928797,1.64693687254,accepted
+0.632305827838,0.184854460225,0.19884240306,0.632305827838,0.984837137052,5.0,7.0,1.0,0.676143517677,0.632305827838,0.984837137052,accepted
+0.508198781523,0.184854460225,0.168291045858,0.508198781523,1.03640028761,5.0,7.0,1.0,0.654858439339,0.508198781523,1.03640028761,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,5.0,7.0,1.0,0.644793005003,0.337615172224,1.35454356648,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,5.0,7.0,1.0,0.460697650205,0.227236453264,1.41712807233,accepted
+0.766431005617,0.184854460225,0.19884240306,0.766431005617,0.867088049375,5.0,7.0,2.0,inf,0.766431005617,0.867088049375,accepted
+0.00552212237509,0.184854460225,0.168291045858,0.00552212237509,1.95279477934,5.0,7.0,2.0,inf,0.00552212237509,1.95279477934,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,5.0,7.0,2.0,2.0,0.227236453264,1.70412941407,accepted
+0.00552212237509,0.184854460225,0.168291045858,0.00552212237509,1.95279477934,2.0,8.0,1.0,inf,0.00552212237509,1.95279477934,accepted
+0.766431005617,0.0407751416882,0.19884240306,0.766431005617,0.571080029164,2.0,8.0,1.0,inf,0.766431005617,0.571080029164,accepted
+0.508198781523,0.184854460225,0.168291045858,0.508198781523,1.03640028761,2.0,8.0,1.0,0.693742530979,0.508198781523,1.03640028761,accepted
+0.148086928797,0.207941663733,0.19884240306,0.148086928797,1.64693687254,2.0,8.0,1.0,0.679063477319,0.148086928797,1.64693687254,accepted
+0.632305827838,0.184854460225,0.19884240306,0.632305827838,0.984837137052,2.0,8.0,1.0,0.676143517677,0.632305827838,0.984837137052,accepted
+0.278871351918,0.184854460225,0.168291045858,0.278871351918,1.30159890633,2.0,8.0,1.0,0.644793005003,0.278871351918,1.30159890633,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,2.0,8.0,1.0,0.421813558565,0.227236453264,1.41712807233,accepted
+0.766431005617,0.184854460225,0.19884240306,0.766431005617,0.867088049375,2.0,8.0,2.0,inf,0.766431005617,0.867088049375,accepted
+0.00552212237509,0.184854460225,0.168291045858,0.00552212237509,1.95279477934,2.0,8.0,2.0,inf,0.00552212237509,1.95279477934,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,2.0,8.0,2.0,2.0,0.337615172224,1.35454356648,accepted
+0.766431005617,0.0407751416882,0.19884240306,0.766431005617,0.571080029164,3.0,9.0,1.0,inf,0.766431005617,0.571080029164,accepted
+0.00552212237509,0.0407751416882,0.168291045858,0.00552212237509,1.53240621278,3.0,9.0,1.0,inf,0.00552212237509,1.53240621278,accepted
+0.632305827838,0.184854460225,0.19884240306,0.632305827838,0.984837137052,3.0,9.0,1.0,0.823413315749,0.632305827838,0.984837137052,accepted
+0.508198781523,0.184854460225,0.168291045858,0.508198781523,1.03640028761,3.0,9.0,1.0,0.793994864618,0.508198781523,1.03640028761,accepted
+0.278871351918,0.184854460225,0.168291045858,0.278871351918,1.30159890633,3.0,9.0,1.0,0.765290023902,0.278871351918,1.30159890633,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,3.0,9.0,1.0,0.599333027327,0.227236453264,1.41712807233,accepted
+0.00552212237509,0.184854460225,0.168291045858,0.00552212237509,1.95279477934,3.0,9.0,2.0,inf,0.00552212237509,1.95279477934,accepted
+0.766431005617,0.0407751416882,0.19884240306,0.766431005617,0.571080029164,3.0,9.0,2.0,inf,0.766431005617,0.571080029164,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,3.0,9.0,2.0,1.59127768637,0.337615172224,1.35454356648,accepted
+0.148086928797,0.207941663733,0.19884240306,0.148086928797,1.64693687254,3.0,9.0,2.0,0.869419963837,0.148086928797,1.64693687254,accepted
+0.00552212237509,0.0407751416882,0.168291045858,0.00552212237509,1.53240621278,4.0,10.0,1.0,inf,0.00552212237509,1.53240621278,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,4.0,10.0,1.0,inf,0.766431005617,0.538308670754,accepted
+0.632305827838,0.184854460225,0.19884240306,0.632305827838,0.984837137052,4.0,10.0,1.0,0.840422423679,0.632305827838,0.984837137052,accepted
+0.508198781523,0.184854460225,0.168291045858,0.508198781523,1.03640028761,4.0,10.0,1.0,0.78313242357,0.508198781523,1.03640028761,accepted
+0.278871351918,0.184854460225,0.168291045858,0.278871351918,1.30159890633,4.0,10.0,1.0,0.752234050871,0.278871351918,1.30159890633,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,4.0,10.0,1.0,0.591418149324,0.227236453264,1.41712807233,accepted
+0.766431005617,0.0407751416882,0.19884240306,0.766431005617,0.571080029164,4.0,10.0,2.0,inf,0.766431005617,0.571080029164,accepted
+0.00552212237509,0.184854460225,0.168291045858,0.00552212237509,1.95279477934,4.0,10.0,2.0,inf,0.00552212237509,1.95279477934,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,4.0,10.0,2.0,1.59127768637,0.337615172224,1.35454356648,accepted
+0.148086928797,0.207941663733,0.19884240306,0.148086928797,1.64693687254,4.0,10.0,2.0,0.869419963837,0.148086928797,1.64693687254,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,0.0,11.0,1.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,0.0,11.0,1.0,inf,0.00552212237509,1.4844779937,accepted
+0.632305827838,0.184854460225,0.19884240306,0.632305827838,0.984837137052,0.0,11.0,1.0,0.865803069054,0.632305827838,0.984837137052,accepted
+0.508198781523,0.184854460225,0.168291045858,0.508198781523,1.03640028761,0.0,11.0,1.0,0.799273265661,0.508198781523,1.03640028761,accepted
+0.278871351918,0.184854460225,0.168291045858,0.278871351918,1.30159890633,0.0,11.0,1.0,0.771634330983,0.278871351918,1.30159890633,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,0.0,11.0,1.0,0.552524102262,0.227236453264,1.41712807233,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,0.0,11.0,2.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,0.0,11.0,2.0,inf,0.00552212237509,1.4844779937,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,0.0,11.0,2.0,2.0,0.337615172224,1.35454356648,accepted
+0.766431005617,0.0243159611766,0.20891871704,0.766431005617,0.55834262277,0.0,11.0,3.0,inf,0.766431005617,0.55834262277,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,5.0,12.0,1.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,5.0,12.0,1.0,inf,0.00552212237509,1.4844779937,accepted
+0.465598022674,0.0243159611766,0.168291045858,0.465598022674,0.720715223923,5.0,12.0,1.0,1.1111041135,0.465598022674,0.720715223923,accepted
+0.278871351918,0.184854460225,0.168291045858,0.278871351918,1.30159890633,5.0,12.0,1.0,1.04929307801,0.278871351918,1.30159890633,accepted
+0.578280141246,0.0243159611766,0.168291045858,0.578280141246,0.622612895643,5.0,12.0,1.0,0.588144322025,0.578280141246,0.622612895643,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,5.0,12.0,1.0,0.552524102262,0.227236453264,1.41712807233,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,5.0,12.0,2.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,5.0,12.0,2.0,inf,0.00552212237509,1.4844779937,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,5.0,12.0,2.0,1.13419693095,0.337615172224,1.35454356648,accepted
+0.508198781523,0.184854460225,0.168291045858,0.508198781523,1.03640028761,5.0,12.0,2.0,1.42623057891,0.508198781523,1.03640028761,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,7.0,13.0,1.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,7.0,13.0,1.0,inf,0.00552212237509,1.4844779937,accepted
+0.465598022674,0.0243159611766,0.168291045858,0.465598022674,0.720715223923,7.0,13.0,1.0,1.1111041135,0.465598022674,0.720715223923,accepted
+0.278871351918,0.184854460225,0.168291045858,0.278871351918,1.30159890633,7.0,13.0,1.0,1.04929307801,0.278871351918,1.30159890633,accepted
+0.578280141246,0.0243159611766,0.168291045858,0.578280141246,0.622612895643,7.0,13.0,1.0,0.588144322025,0.578280141246,0.622612895643,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,7.0,13.0,1.0,0.552524102262,0.227236453264,1.41712807233,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,7.0,13.0,2.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,7.0,13.0,2.0,inf,0.00552212237509,1.4844779937,accepted
+0.508198781523,0.184854460225,0.168291045858,0.508198781523,1.03640028761,7.0,13.0,2.0,1.42623057891,0.508198781523,1.03640028761,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,7.0,13.0,2.0,1.13419693095,0.337615172224,1.35454356648,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,8.0,14.0,1.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,8.0,14.0,1.0,inf,0.00552212237509,1.4844779937,accepted
+0.465598022674,0.0243159611766,0.168291045858,0.465598022674,0.720715223923,8.0,14.0,1.0,1.1111041135,0.465598022674,0.720715223923,accepted
+0.278871351918,0.184854460225,0.168291045858,0.278871351918,1.30159890633,8.0,14.0,1.0,1.04929307801,0.278871351918,1.30159890633,accepted
+0.578280141246,0.0243159611766,0.168291045858,0.578280141246,0.622612895643,8.0,14.0,1.0,0.588144322025,0.578280141246,0.622612895643,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,8.0,14.0,1.0,0.552524102262,0.227236453264,1.41712807233,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,8.0,14.0,2.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,8.0,14.0,2.0,inf,0.00552212237509,1.4844779937,accepted
+0.508198781523,0.184854460225,0.168291045858,0.508198781523,1.03640028761,8.0,14.0,2.0,1.42623057891,0.508198781523,1.03640028761,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,8.0,14.0,2.0,1.13419693095,0.337615172224,1.35454356648,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,9.0,15.0,1.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,9.0,15.0,1.0,inf,0.00552212237509,1.4844779937,accepted
+0.465598022674,0.0243159611766,0.168291045858,0.465598022674,0.720715223923,9.0,15.0,1.0,1.1111041135,0.465598022674,0.720715223923,accepted
+0.278871351918,0.184854460225,0.168291045858,0.278871351918,1.30159890633,9.0,15.0,1.0,1.04929307801,0.278871351918,1.30159890633,accepted
+0.578280141246,0.0243159611766,0.168291045858,0.578280141246,0.622612895643,9.0,15.0,1.0,0.588144322025,0.578280141246,0.622612895643,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,9.0,15.0,1.0,0.552524102262,0.227236453264,1.41712807233,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,9.0,15.0,2.0,inf,0.766431005617,0.538308670754,accepted
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,9.0,15.0,2.0,inf,0.00552212237509,1.4844779937,accepted
+0.508198781523,0.184854460225,0.168291045858,0.508198781523,1.03640028761,9.0,15.0,2.0,1.42623057891,0.508198781523,1.03640028761,accepted
+0.337615172224,0.207941663733,0.19884240306,0.337615172224,1.35454356648,9.0,15.0,2.0,1.13419693095,0.337615172224,1.35454356648,accepted
+0.766431005617,0.0243159611766,0.19884240306,0.766431005617,0.538308670754,9.0,15.0,1.0,inf,0.766431005617,0.538308670754,final
+0.00552212237509,0.0243159611766,0.168291045858,0.00552212237509,1.4844779937,9.0,15.0,1.0,inf,0.00552212237509,1.4844779937,final
+0.465598022674,0.0243159611766,0.168291045858,0.465598022674,0.720715223923,9.0,15.0,1.0,1.1111041135,0.465598022674,0.720715223923,final
+0.278871351918,0.184854460225,0.168291045858,0.278871351918,1.30159890633,9.0,15.0,1.0,1.04929307801,0.278871351918,1.30159890633,final
+0.578280141246,0.0243159611766,0.168291045858,0.578280141246,0.622612895643,9.0,15.0,1.0,0.588144322025,0.578280141246,0.622612895643,final
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,9.0,15.0,1.0,0.552524102262,0.227236453264,1.41712807233,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.0Mutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.0Mutation/1-opt_path.png
new file mode 100644
index 0000000000..54d6e00232
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.0Mutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.0Mutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.0Mutation/1-population.png
new file mode 100644
index 0000000000..0c76337b86
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.0Mutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.0Mutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.0Mutation/opt_export_0.csv
new file mode 100644
index 0000000000..2a0bde507a
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.0Mutation/opt_export_0.csv
@@ -0,0 +1,156 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+2.70882296276,2.84283672968,2.52112277912,2.70882296276,10.2875510042,0.0,1.0,3.0,inf,2.70882296276,10.2875510042,first
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,1.0,2.0,inf,0.681709359792,9.0451225346,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,1.0,1.0,inf,2.29929301685,2.51248918399,first
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,1.0,2.0,2.0,1.89960633519,8.21268741777,first
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,1.0,1.0,1.32021710558,0.919133180734,4.14503351583,first
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,1.0,1.0,inf,0.330134294538,11.0120200748,first
+0.995076558784,1.71556422993,2.89604636698,0.995076558784,10.9927238578,0.0,1.0,3.0,inf,0.995076558784,10.9927238578,first
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,1.0,1.0,0.753429911187,0.80362101989,7.27790740376,first
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,1.0,2.0,inf,2.14022167123,5.20847490655,first
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,1.0,1.0,0.679782894419,0.397923062881,8.29912156345,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,2.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,2.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,2.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,2.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,2.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,2.0,2.0,inf,0.681709359792,9.0451225346,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,2.0,2.0,inf,2.29929301685,2.51248918399,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,2.0,2.0,1.48896603993,1.89960633519,8.21268741777,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,2.0,2.0,1.11966153306,2.14022167123,5.20847490655,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,2.0,3.0,inf,0.681709359792,9.0451225346,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,1.0,3.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,1.0,3.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,1.0,3.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,1.0,3.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,1.0,3.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,1.0,3.0,2.0,inf,0.681709359792,9.0451225346,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,1.0,3.0,2.0,inf,2.29929301685,2.51248918399,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,1.0,3.0,2.0,1.48896603993,1.89960633519,8.21268741777,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,1.0,3.0,2.0,1.11966153306,2.14022167123,5.20847490655,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,1.0,3.0,3.0,inf,0.681709359792,9.0451225346,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,3.0,4.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,3.0,4.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,3.0,4.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,3.0,4.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,3.0,4.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,3.0,4.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,3.0,4.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,3.0,4.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,4.0,5.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,4.0,5.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,4.0,5.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,4.0,5.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,4.0,5.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,4.0,5.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,4.0,5.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,4.0,5.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,5.0,6.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,5.0,6.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,5.0,6.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,5.0,6.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,5.0,6.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,5.0,6.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,5.0,6.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,5.0,6.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,6.0,7.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,6.0,7.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,6.0,7.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,6.0,7.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,6.0,7.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,6.0,7.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,6.0,7.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,6.0,7.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,7.0,8.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,7.0,8.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,7.0,8.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,7.0,8.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,7.0,8.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,7.0,8.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,7.0,8.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,7.0,8.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,8.0,9.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,8.0,9.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,8.0,9.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,8.0,9.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,8.0,9.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,8.0,9.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,8.0,9.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,8.0,9.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,9.0,10.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,9.0,10.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,9.0,10.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,9.0,10.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,9.0,10.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,9.0,10.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,9.0,10.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,9.0,10.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,10.0,11.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,10.0,11.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,10.0,11.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,10.0,11.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,10.0,11.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,10.0,11.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,10.0,11.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,10.0,11.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,11.0,12.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,11.0,12.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,11.0,12.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,11.0,12.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,11.0,12.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,11.0,12.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,11.0,12.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,11.0,12.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,12.0,13.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,12.0,13.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,12.0,13.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,12.0,13.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,12.0,13.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,12.0,13.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,12.0,13.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,12.0,13.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,13.0,14.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,13.0,14.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,13.0,14.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,13.0,14.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,13.0,14.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,13.0,14.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,13.0,14.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,13.0,14.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,14.0,15.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,14.0,15.0,1.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,14.0,15.0,1.0,0.753429911187,0.80362101989,7.27790740376,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,14.0,15.0,1.0,0.679782894419,0.397923062881,8.29912156345,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,14.0,15.0,2.0,inf,0.330134294538,11.0120200748,accepted
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,14.0,15.0,2.0,1.19207310321,1.89960633519,8.21268741777,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,14.0,15.0,2.0,1.12637811137,0.681709359792,9.0451225346,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,14.0,15.0,2.0,0.873621888634,2.14022167123,5.20847490655,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,1.0,inf,2.29929301685,2.51248918399,final
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,14.0,15.0,1.0,inf,0.330134294538,11.0120200748,final
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,14.0,15.0,1.0,1.32021710558,0.919133180734,4.14503351583,final
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,14.0,15.0,1.0,0.753429911187,0.80362101989,7.27790740376,final
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,14.0,15.0,1.0,0.679782894419,0.397923062881,8.29912156345,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/1-opt_path.png
new file mode 100644
index 0000000000..5be99b8f64
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/1-population.png
new file mode 100644
index 0000000000..2605ce1543
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/opt_export_0.csv
new file mode 100644
index 0000000000..a027d4b21a
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/opt_export_0.csv
@@ -0,0 +1,155 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+2.70882296276,2.84283672968,2.52112277912,2.70882296276,10.2875510042,0.0,1.0,3.0,inf,2.70882296276,10.2875510042,first
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,1.0,2.0,inf,0.681709359792,9.0451225346,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,1.0,1.0,inf,2.29929301685,2.51248918399,first
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,1.0,2.0,2.0,1.89960633519,8.21268741777,first
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,1.0,1.0,1.32021710558,0.919133180734,4.14503351583,first
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,1.0,1.0,inf,0.330134294538,11.0120200748,first
+0.995076558784,1.71556422993,2.89604636698,0.995076558784,10.9927238578,0.0,1.0,3.0,inf,0.995076558784,10.9927238578,first
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,1.0,1.0,0.753429911187,0.80362101989,7.27790740376,first
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,1.0,2.0,inf,2.14022167123,5.20847490655,first
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,1.0,1.0,0.679782894419,0.397923062881,8.29912156345,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,1.0,2.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.0691872853947,2.54253070325,1.19885353935,0.0691872853947,11.3045028251,1.0,2.0,1.0,inf,0.0691872853947,11.3045028251,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,1.0,2.0,1.0,1.51076101891,0.681709359792,3.97319160496,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,1.0,2.0,1.0,0.958242948032,0.397923062881,8.29912156345,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,1.0,2.0,1.0,0.489238981091,0.330134294538,11.0120200748,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,1.0,2.0,2.0,inf,0.681709359792,3.97319160496,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,1.0,2.0,3.0,inf,0.681709359792,9.0451225346,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,1.0,2.0,3.0,inf,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,1.0,2.0,3.0,2.0,0.80362101989,7.27790740376,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,1.0,2.0,4.0,inf,2.14022167123,5.20847490655,accepted
+0.0691872853947,2.54253070325,1.19885353935,0.0691872853947,11.3045028251,2.0,3.0,1.0,inf,0.0691872853947,11.3045028251,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,2.0,3.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,3.0,1.0,1.54658987618,0.681709359792,3.97319160496,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,2.0,3.0,1.0,0.874329075334,0.397923062881,8.29912156345,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,2.0,3.0,1.0,0.45341012382,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,3.0,2.0,inf,0.681709359792,3.97319160496,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,2.0,3.0,3.0,inf,0.681709359792,9.0451225346,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,2.0,3.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,2.0,4.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,2.0,4.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,4.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,2.0,4.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,2.0,4.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,4.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,2.0,4.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,2.0,4.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,2.0,4.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.0691872853947,2.54253070325,1.19885353935,0.0691872853947,11.3045028251,2.0,4.0,4.0,inf,0.0691872853947,11.3045028251,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,3.0,5.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,3.0,5.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,5.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,3.0,5.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,3.0,5.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,5.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,3.0,5.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,3.0,5.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,3.0,5.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.0691872853947,2.54253070325,1.19885353935,0.0691872853947,11.3045028251,3.0,5.0,4.0,inf,0.0691872853947,11.3045028251,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,0.0,6.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,0.0,6.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,0.0,6.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,0.0,6.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,0.0,6.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,0.0,6.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,0.0,6.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,0.0,6.0,4.0,inf,0.0691872853947,5.66486511656,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,6.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,0.0,6.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,1.0,7.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,1.0,7.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,1.0,7.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,1.0,7.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,1.0,7.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,1.0,7.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,1.0,7.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,1.0,7.0,4.0,inf,0.0691872853947,5.66486511656,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,1.0,7.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,1.0,7.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,2.0,8.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,2.0,8.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,8.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,2.0,8.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,2.0,8.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,8.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,2.0,8.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,2.0,8.0,4.0,inf,0.0691872853947,5.66486511656,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,2.0,8.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,2.0,8.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,3.0,9.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,3.0,9.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,9.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,3.0,9.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,3.0,9.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,9.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,3.0,9.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,3.0,9.0,4.0,inf,0.0691872853947,5.66486511656,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,3.0,9.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,3.0,9.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,4.0,10.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,4.0,10.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,4.0,10.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,4.0,10.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,4.0,10.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,4.0,10.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,4.0,10.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,4.0,10.0,4.0,inf,0.0691872853947,5.66486511656,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,4.0,10.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,4.0,10.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,5.0,11.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,5.0,11.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,5.0,11.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,5.0,11.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,5.0,11.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,5.0,11.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,5.0,11.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,5.0,11.0,4.0,inf,0.0691872853947,5.66486511656,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,5.0,11.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,5.0,11.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,6.0,12.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,6.0,12.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.482424169193,0.576633872599,0.692681462432,0.482424169193,3.28496558597,6.0,12.0,1.0,2.0,0.482424169193,3.28496558597,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,6.0,12.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,6.0,12.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,6.0,12.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,6.0,12.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,6.0,12.0,4.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,6.0,12.0,3.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,6.0,12.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,7.0,13.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,7.0,13.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.482424169193,0.576633872599,0.692681462432,0.482424169193,3.28496558597,7.0,13.0,1.0,2.0,0.482424169193,3.28496558597,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,7.0,13.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,7.0,13.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,7.0,13.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,7.0,13.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,7.0,13.0,4.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,7.0,13.0,3.0,2.0,0.681709359792,3.97319160496,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,7.0,13.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,12.0,14.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,12.0,14.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.917091069025,0.576633872599,0.692681462432,0.917091069025,2.7081068823,12.0,14.0,1.0,1.24559277753,0.917091069025,2.7081068823,accepted
+0.482424169193,0.576633872599,0.692681462432,0.482424169193,3.28496558597,12.0,14.0,1.0,1.08726072887,0.482424169193,3.28496558597,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,12.0,14.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,12.0,14.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,12.0,14.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,12.0,14.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,12.0,14.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,12.0,14.0,3.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,13.0,15.0,1.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,13.0,15.0,1.0,inf,0.0691872853947,5.66486511656,accepted
+0.917091069025,0.576633872599,0.692681462432,0.917091069025,2.7081068823,13.0,15.0,1.0,1.24559277753,0.917091069025,2.7081068823,accepted
+0.482424169193,0.576633872599,0.692681462432,0.482424169193,3.28496558597,13.0,15.0,1.0,1.08726072887,0.482424169193,3.28496558597,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,13.0,15.0,2.0,inf,0.0691872853947,5.66486511656,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,13.0,15.0,2.0,inf,2.29929301685,1.48305853709,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,13.0,15.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,13.0,15.0,3.0,inf,2.29929301685,1.48305853709,accepted
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,13.0,15.0,3.0,inf,0.0691872853947,5.66486511656,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,13.0,15.0,3.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,0.692681462432,2.29929301685,1.48305853709,13.0,15.0,1.0,inf,2.29929301685,1.48305853709,final
+0.0691872853947,0.576633872599,1.19885353935,0.0691872853947,5.66486511656,13.0,15.0,1.0,inf,0.0691872853947,5.66486511656,final
+0.917091069025,0.576633872599,0.692681462432,0.917091069025,2.7081068823,13.0,15.0,1.0,1.24559277753,0.917091069025,2.7081068823,final
+0.482424169193,0.576633872599,0.692681462432,0.482424169193,3.28496558597,13.0,15.0,1.0,1.08726072887,0.482424169193,3.28496558597,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/1-opt_path.png
new file mode 100644
index 0000000000..0d46248acb
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/1-population.png
new file mode 100644
index 0000000000..a57208035e
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/opt_export_0.csv
new file mode 100644
index 0000000000..c9d9279c2a
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/opt_export_0.csv
@@ -0,0 +1,161 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+2.70882296276,2.84283672968,2.52112277912,2.70882296276,10.2875510042,0.0,1.0,3.0,inf,2.70882296276,10.2875510042,first
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,1.0,2.0,inf,0.681709359792,9.0451225346,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,1.0,1.0,inf,2.29929301685,2.51248918399,first
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,1.0,2.0,2.0,1.89960633519,8.21268741777,first
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,1.0,1.0,1.32021710558,0.919133180734,4.14503351583,first
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,1.0,1.0,inf,0.330134294538,11.0120200748,first
+0.995076558784,1.71556422993,2.89604636698,0.995076558784,10.9927238578,0.0,1.0,3.0,inf,0.995076558784,10.9927238578,first
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,1.0,1.0,0.753429911187,0.80362101989,7.27790740376,first
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,1.0,2.0,inf,2.14022167123,5.20847490655,first
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,1.0,1.0,0.679782894419,0.397923062881,8.29912156345,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,1.0,2.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,1.0,2.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,1.0,2.0,1.0,1.64639261039,0.681709359792,2.61066784112,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,1.0,2.0,1.0,1.16698967723,0.397923062881,8.29912156345,accepted
+0.681709359792,0.576633872599,0.873687420244,0.681709359792,3.44104184873,1.0,2.0,2.0,inf,0.681709359792,3.44104184873,accepted
+2.29929301685,1.19958293326,1.19885353935,2.29929301685,3.85440885282,1.0,2.0,3.0,inf,2.29929301685,3.85440885282,accepted
+0.681709359792,0.576633872599,1.3682099712,0.681709359792,4.67602183377,1.0,2.0,3.0,inf,0.681709359792,4.67602183377,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,1.0,2.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.681709359792,0.912726723103,1.08828069574,0.681709359792,4.81806783617,1.0,2.0,4.0,inf,0.681709359792,4.81806783617,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,1.0,2.0,5.0,inf,2.14022167123,5.20847490655,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,2.0,3.0,1.0,inf,0.330134294538,3.10008399988,accepted
+2.29929301685,0.576633872599,0.935133219681,2.29929301685,1.96776997747,2.0,3.0,1.0,inf,2.29929301685,1.96776997747,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,2.0,3.0,1.0,2.0,0.681709359792,2.61066784112,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.554563380674,2.21669701166,0.330134294538,7.56027081822,2.0,3.0,2.0,inf,0.330134294538,7.56027081822,accepted
+0.681709359792,0.576633872599,0.873687420244,0.681709359792,3.44104184873,2.0,3.0,2.0,1.27715878806,0.681709359792,3.44104184873,accepted
+0.546708260557,0.576633872599,1.19885353935,0.546708260557,4.46669634616,2.0,3.0,2.0,0.994588123401,0.546708260557,4.46669634616,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,2.0,3.0,3.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,2.0,3.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+2.29929301685,0.576633872599,0.935133219681,2.29929301685,1.96776997747,3.0,4.0,1.0,inf,2.29929301685,1.96776997747,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,3.0,4.0,1.0,inf,0.0165663671253,4.02358870566,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,3.0,4.0,1.0,1.41341943597,0.681709359792,2.61066784112,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,3.0,4.0,1.0,0.586580564034,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,3.0,4.0,1.0,0.451178031062,0.330134294538,3.10008399988,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,3.0,4.0,2.0,inf,0.330134294538,3.10008399988,accepted
+2.29929301685,0.576633872599,1.07539717552,2.29929301685,2.25544409662,3.0,4.0,2.0,inf,2.29929301685,2.25544409662,accepted
+2.29929301685,0.576633872599,1.18464455036,2.29929301685,2.48273298759,3.0,4.0,3.0,inf,2.29929301685,2.48273298759,accepted
+0.330134294538,0.576633872599,0.596527209179,0.330134294538,3.29799382136,3.0,4.0,3.0,inf,0.330134294538,3.29799382136,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,4.0,inf,2.29929301685,2.51248918399,accepted
+2.29929301685,0.576633872599,0.935133219681,2.29929301685,1.96776997747,1.0,5.0,1.0,inf,2.29929301685,1.96776997747,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,1.0,5.0,1.0,inf,0.0165663671253,4.02358870566,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,1.0,5.0,1.0,1.0213401646,0.94306794413,2.27873260351,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,1.0,5.0,1.0,0.668034641708,0.681709359792,2.61066784112,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,1.0,5.0,1.0,0.578058789325,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,1.0,5.0,1.0,0.400601046073,0.330134294538,3.10008399988,accepted
+0.323674284928,0.576633872599,0.520093941716,0.323674284928,3.11178535312,1.0,5.0,1.0,0.0590987596982,0.323674284928,3.11178535312,accepted
+2.29929301685,0.576633872599,1.07539717552,2.29929301685,2.25544409662,1.0,5.0,2.0,inf,2.29929301685,2.25544409662,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,1.0,5.0,2.0,inf,0.0165663671253,4.02358870566,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,1.0,5.0,2.0,2.0,0.330134294538,3.10008399988,accepted
+2.29929301685,0.576633872599,0.49396755162,2.29929301685,1.09986401737,2.0,6.0,1.0,inf,2.29929301685,1.09986401737,accepted
+0.0165663671253,0.576633872599,0.504873137573,0.0165663671253,3.97934883427,2.0,6.0,1.0,inf,0.0165663671253,3.97934883427,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,2.0,6.0,1.0,1.23329759651,0.94306794413,2.27873260351,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,2.0,6.0,1.0,0.55375192001,0.681709359792,2.61066784112,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,2.0,6.0,1.0,0.435826779956,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,2.0,6.0,1.0,0.330875623538,0.330134294538,3.10008399988,accepted
+0.323674284928,0.576633872599,0.520093941716,0.323674284928,3.11178535312,2.0,6.0,1.0,0.0476953382817,0.323674284928,3.11178535312,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,2.0,6.0,2.0,inf,0.0165663671253,4.02358870566,accepted
+2.58219174915,0.576633872599,0.935133219681,2.58219174915,1.75466518141,2.0,6.0,2.0,inf,2.58219174915,1.75466518141,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,2.0,6.0,2.0,2.0,0.330134294538,3.10008399988,accepted
+2.29929301685,0.576633872599,0.49396755162,2.29929301685,1.09986401737,0.0,7.0,1.0,inf,2.29929301685,1.09986401737,accepted
+0.0165663671253,0.576633872599,0.504873137573,0.0165663671253,3.97934883427,0.0,7.0,1.0,inf,0.0165663671253,3.97934883427,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,0.0,7.0,1.0,1.00352765002,1.60732404133,1.60993297207,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,0.0,7.0,1.0,0.753025984749,0.94306794413,2.27873260351,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,0.0,7.0,1.0,0.55375192001,0.681709359792,2.61066784112,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,0.0,7.0,1.0,0.435826779956,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,0.0,7.0,1.0,0.330875623538,0.330134294538,3.10008399988,accepted
+0.323674284928,0.576633872599,0.520093941716,0.323674284928,3.11178535312,0.0,7.0,1.0,0.0476953382817,0.323674284928,3.11178535312,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,0.0,7.0,2.0,inf,0.0165663671253,4.02358870566,accepted
+2.29929301685,0.660723144575,0.49396755162,2.29929301685,1.26029154367,0.0,7.0,2.0,inf,2.29929301685,1.26029154367,accepted
+2.29929301685,0.576633872599,0.279308292381,2.29929301685,0.703654966355,2.0,8.0,1.0,inf,2.29929301685,0.703654966355,accepted
+0.0165663671253,0.566121332945,0.504873137573,0.0165663671253,3.94879819265,2.0,8.0,1.0,inf,0.0165663671253,3.94879819265,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,2.0,8.0,1.0,0.989640981681,1.60732404133,1.60993297207,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,2.0,8.0,1.0,0.521611177667,0.681709359792,2.61066784112,accepted
+1.04762870982,0.576633872599,0.504873137573,1.04762870982,2.13580528603,2.0,8.0,1.0,0.497084880919,1.04762870982,2.13580528603,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,2.0,8.0,1.0,0.392463421696,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,2.0,8.0,1.0,0.311266125207,0.330134294538,3.10008399988,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,2.0,8.0,1.0,0.306629471416,0.94306794413,2.27873260351,accepted
+0.323674284928,0.576633872599,0.520093941716,0.323674284928,3.11178535312,2.0,8.0,1.0,0.044488253045,0.323674284928,3.11178535312,accepted
+2.29929301685,0.576633872599,0.49396755162,2.29929301685,1.09986401737,2.0,8.0,2.0,inf,2.29929301685,1.09986401737,accepted
+2.29929301685,0.576633872599,0.279308292381,2.29929301685,0.703654966355,0.0,9.0,1.0,inf,2.29929301685,0.703654966355,accepted
+0.0165663671253,0.566121332945,0.504873137573,0.0165663671253,3.94879819265,0.0,9.0,1.0,inf,0.0165663671253,3.94879819265,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,0.0,9.0,1.0,0.613026890829,1.60732404133,1.60993297207,accepted
+1.04762870982,0.576633872599,0.504873137573,1.04762870982,2.13580528603,0.0,9.0,1.0,0.497084880919,1.04762870982,2.13580528603,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,0.0,9.0,1.0,0.601626336597,0.286230348117,3.18204053684,accepted
+1.94889870262,0.576633872599,0.279308292381,1.94889870262,0.930909274558,0.0,9.0,1.0,0.376614090852,1.94889870262,0.930909274558,accepted
+1.70492579828,0.566121332945,0.279308292381,1.70492579828,1.08086424166,0.0,9.0,1.0,0.35887755978,1.70492579828,1.08086424166,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,0.0,9.0,1.0,0.318884020842,0.681709359792,2.61066784112,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,0.0,9.0,1.0,0.306629471416,0.94306794413,2.27873260351,accepted
+0.536468121581,0.576633872599,0.504873137573,0.536468121581,2.73553122795,0.0,9.0,1.0,0.349318620176,0.536468121581,2.73553122795,accepted
+0.0165663671253,0.566121332945,0.504873137573,0.0165663671253,3.94879819265,1.0,10.0,1.0,inf,0.0165663671253,3.94879819265,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,1.0,10.0,1.0,inf,2.29929301685,-0.15504942379,accepted
+1.94889870262,0.576633872599,0.279308292381,1.94889870262,0.930909274558,1.0,10.0,1.0,0.561535729348,1.94889870262,0.930909274558,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,1.0,10.0,1.0,0.523396042985,0.286230348117,3.18204053684,accepted
+1.04762870982,0.576633872599,0.504873137573,1.04762870982,2.13580528603,1.0,10.0,1.0,0.45396132027,1.04762870982,2.13580528603,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,1.0,10.0,1.0,0.545005301149,1.60732404133,1.60993297207,accepted
+1.70492579828,0.566121332945,0.279308292381,1.70492579828,1.08086424166,1.0,10.0,1.0,0.315094761129,1.70492579828,1.08086424166,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,1.0,10.0,1.0,0.276010787985,0.94306794413,2.27873260351,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,1.0,10.0,1.0,0.289430082384,0.681709359792,2.61066784112,accepted
+0.536468121581,0.576633872599,0.504873137573,0.536468121581,2.73553122795,1.0,10.0,1.0,0.312477055172,0.536468121581,2.73553122795,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,2.0,11.0,1.0,inf,2.29929301685,-0.15504942379,accepted
+0.0165663671253,0.0155545813068,0.504873137573,0.0165663671253,2.35529491162,2.0,11.0,1.0,inf,0.0165663671253,2.35529491162,accepted
+0.889530419346,0.566121332945,0.279308292381,0.889530419346,1.76269463637,2.0,11.0,1.0,0.993783566786,0.889530419346,1.76269463637,accepted
+1.94889870262,0.576633872599,0.279308292381,1.94889870262,0.930909274558,2.0,11.0,1.0,0.752704335555,1.94889870262,0.930909274558,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,2.0,11.0,1.0,0.628810689078,1.60732404133,1.60993297207,accepted
+1.70492579828,0.566121332945,0.279308292381,1.70492579828,1.08086424166,2.0,11.0,1.0,0.420124762384,1.70492579828,1.08086424166,accepted
+0.0165663671253,0.212822740249,0.504873137573,0.0165663671253,2.92453740416,2.0,11.0,2.0,inf,0.0165663671253,2.92453740416,accepted
+2.38737801821,0.566121332945,0.279308292381,2.38737801821,0.630698001726,2.0,11.0,2.0,inf,2.38737801821,0.630698001726,accepted
+1.04762870982,0.576633872599,0.504873137573,1.04762870982,2.13580528603,2.0,11.0,2.0,1.69830997081,1.04762870982,2.13580528603,accepted
+0.536468121581,0.576633872599,0.504873137573,0.536468121581,2.73553122795,2.0,11.0,2.0,0.778746474716,0.536468121581,2.73553122795,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,3.0,12.0,1.0,inf,2.29929301685,-0.15504942379,accepted
+0.0165663671253,0.0155545813068,0.504873137573,0.0165663671253,2.35529491162,3.0,12.0,1.0,inf,0.0165663671253,2.35529491162,accepted
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,3.0,12.0,1.0,1.12224718366,1.62190535935,0.136268174271,accepted
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,3.0,12.0,1.0,1.04820003519,0.64746306875,0.845638450782,accepted
+0.256042378316,0.0463698338825,0.279308292381,0.256042378316,1.26555382083,3.0,12.0,1.0,0.877752816342,0.256042378316,1.26555382083,accepted
+0.0165663671253,0.212822740249,0.504873137573,0.0165663671253,2.92453740416,3.0,12.0,2.0,inf,0.0165663671253,2.92453740416,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,3.0,12.0,2.0,inf,2.29929301685,-0.15504942379,accepted
+0.889530419346,0.566121332945,0.279308292381,0.889530419346,1.76269463637,3.0,12.0,2.0,1.20474196581,0.889530419346,1.76269463637,accepted
+0.536468121581,0.576633872599,0.504873137573,0.536468121581,2.73553122795,3.0,12.0,2.0,0.759693920337,0.536468121581,2.73553122795,accepted
+1.94889870262,0.576633872599,0.279308292381,1.94889870262,0.930909274558,3.0,12.0,2.0,1.24030607966,1.94889870262,0.930909274558,accepted
+0.0165663671253,0.0463698338825,0.28247097374,0.0165663671253,1.8051127766,1.0,13.0,1.0,inf,0.0165663671253,1.8051127766,accepted
+2.56638173982,0.0463698338825,0.279308292381,2.56638173982,-0.275480866156,1.0,13.0,1.0,inf,2.56638173982,-0.275480866156,accepted
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,1.0,13.0,1.0,0.950464546741,0.64746306875,0.845638450782,accepted
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,1.0,13.0,1.0,0.86028218204,1.62190535935,0.136268174271,accepted
+0.256042378316,0.0463698338825,0.279308292381,0.256042378316,1.26555382083,1.0,13.0,1.0,0.481225952421,0.256042378316,1.26555382083,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,1.0,13.0,1.0,0.431135314415,2.29929301685,-0.15504942379,accepted
+1.83516223748,0.0155545813068,0.279308292381,1.83516223748,0.0248773879521,1.0,13.0,1.0,0.405678029353,1.83516223748,0.0248773879521,accepted
+0.34821792863,0.0155545813068,0.279308292381,0.34821792863,1.07449754844,1.0,13.0,1.0,0.355334212104,0.34821792863,1.07449754844,accepted
+0.0165663671253,0.0155545813068,0.504873137573,0.0165663671253,2.35529491162,1.0,13.0,2.0,inf,0.0165663671253,2.35529491162,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,1.0,13.0,2.0,inf,2.29929301685,-0.15504942379,accepted
+2.56638173982,0.0463698338825,0.279308292381,2.56638173982,-0.275480866156,1.0,14.0,1.0,inf,2.56638173982,-0.275480866156,accepted
+0.0165663671253,0.0463698338825,0.0795339234358,0.0165663671253,1.22663622198,1.0,14.0,1.0,inf,0.0165663671253,1.22663622198,accepted
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,1.0,14.0,1.0,1.12412612106,0.64746306875,0.845638450782,accepted
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,1.0,14.0,1.0,1.01220095823,1.62190535935,0.136268174271,accepted
+0.34821792863,0.0155545813068,0.279308292381,0.34821792863,1.07449754844,1.0,14.0,1.0,0.501068913648,0.34821792863,1.07449754844,accepted
+1.83516223748,0.0155545813068,0.279308292381,1.83516223748,0.0248773879521,1.0,14.0,1.0,0.459599462745,1.83516223748,0.0248773879521,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,1.0,14.0,1.0,0.392539119948,2.29929301685,-0.15504942379,accepted
+2.43361253814,0.0463698338825,0.28247097374,2.43361253814,-0.212210365713,1.0,14.0,1.0,0.109879966702,2.43361253814,-0.212210365713,accepted
+2.4612805104,0.0463698338825,0.28247097374,2.4612805104,-0.224673842253,1.0,14.0,1.0,0.0941910081714,2.4612805104,-0.224673842253,accepted
+0.0165663671253,0.0463698338825,0.28247097374,0.0165663671253,1.8051127766,1.0,14.0,2.0,inf,0.0165663671253,1.8051127766,accepted
+0.0165663671253,0.0463698338825,0.0795339234358,0.0165663671253,1.22663622198,0.0,15.0,1.0,inf,0.0165663671253,1.22663622198,accepted
+2.6013498168,0.0463698338825,0.279308292381,2.6013498168,-0.29077470027,0.0,15.0,1.0,inf,2.6013498168,-0.29077470027,accepted
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,0.0,15.0,1.0,1.11107304875,0.64746306875,0.845638450782,accepted
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,0.0,15.0,1.0,1.00039229833,1.62190535935,0.136268174271,accepted
+0.34821792863,0.0155545813068,0.279308292381,0.34821792863,1.07449754844,0.0,15.0,1.0,0.495165176902,0.34821792863,1.07449754844,accepted
+1.83516223748,0.0155545813068,0.279308292381,1.83516223748,0.0248773879521,0.0,15.0,1.0,0.454050796875,1.83516223748,0.0248773879521,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,0.0,15.0,1.0,0.318843290473,2.29929301685,-0.15504942379,accepted
+2.56638173982,0.0463698338825,0.279308292381,2.56638173982,-0.275480866156,0.0,15.0,1.0,0.0977515647743,2.56638173982,-0.275480866156,accepted
+2.4612805104,0.0463698338825,0.28247097374,2.4612805104,-0.224673842253,0.0,15.0,1.0,0.161991897714,2.4612805104,-0.224673842253,accepted
+2.32923887398,0.0463698338825,0.279308292381,2.32923887398,-0.168888576555,0.0,15.0,1.0,0.108553351541,2.32923887398,-0.168888576555,accepted
+0.0165663671253,0.0463698338825,0.0795339234358,0.0165663671253,1.22663622198,0.0,15.0,1.0,inf,0.0165663671253,1.22663622198,final
+2.6013498168,0.0463698338825,0.279308292381,2.6013498168,-0.29077470027,0.0,15.0,1.0,inf,2.6013498168,-0.29077470027,final
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,0.0,15.0,1.0,1.11107304875,0.64746306875,0.845638450782,final
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,0.0,15.0,1.0,1.00039229833,1.62190535935,0.136268174271,final
+0.34821792863,0.0155545813068,0.279308292381,0.34821792863,1.07449754844,0.0,15.0,1.0,0.495165176902,0.34821792863,1.07449754844,final
+1.83516223748,0.0155545813068,0.279308292381,1.83516223748,0.0248773879521,0.0,15.0,1.0,0.454050796875,1.83516223748,0.0248773879521,final
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,0.0,15.0,1.0,0.318843290473,2.29929301685,-0.15504942379,final
+2.56638173982,0.0463698338825,0.279308292381,2.56638173982,-0.275480866156,0.0,15.0,1.0,0.0977515647743,2.56638173982,-0.275480866156,final
+2.4612805104,0.0463698338825,0.28247097374,2.4612805104,-0.224673842253,0.0,15.0,1.0,0.161991897714,2.4612805104,-0.224673842253,final
+2.32923887398,0.0463698338825,0.279308292381,2.32923887398,-0.168888576555,0.0,15.0,1.0,0.108553351541,2.32923887398,-0.168888576555,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/1-opt_path.png
new file mode 100644
index 0000000000..0b8754ab24
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/1-population.png
new file mode 100644
index 0000000000..c0ded8f836
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/opt_export_0.csv
new file mode 100644
index 0000000000..a2bf3d395e
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/opt_export_0.csv
@@ -0,0 +1,161 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+2.70882296276,2.84283672968,2.52112277912,2.70882296276,10.2875510042,0.0,1.0,3.0,inf,2.70882296276,10.2875510042,first
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,1.0,2.0,inf,0.681709359792,9.0451225346,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,1.0,1.0,inf,2.29929301685,2.51248918399,first
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,1.0,2.0,2.0,1.89960633519,8.21268741777,first
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,1.0,1.0,1.32021710558,0.919133180734,4.14503351583,first
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,1.0,1.0,inf,0.330134294538,11.0120200748,first
+0.995076558784,1.71556422993,2.89604636698,0.995076558784,10.9927238578,0.0,1.0,3.0,inf,0.995076558784,10.9927238578,first
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,1.0,1.0,0.753429911187,0.80362101989,7.27790740376,first
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,1.0,2.0,inf,2.14022167123,5.20847490655,first
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,1.0,1.0,0.679782894419,0.397923062881,8.29912156345,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,2.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,2.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,0.0,2.0,1.0,1.64639261039,0.681709359792,2.61066784112,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,2.0,1.0,1.16698967723,0.397923062881,8.29912156345,accepted
+0.681709359792,0.576633872599,0.873687420244,0.681709359792,3.44104184873,0.0,2.0,2.0,inf,0.681709359792,3.44104184873,accepted
+0.681709359792,0.912726723103,1.08828069574,0.681709359792,4.81806783617,0.0,2.0,3.0,inf,0.681709359792,4.81806783617,accepted
+2.29929301685,1.19958293326,1.19885353935,2.29929301685,3.85440885282,0.0,2.0,3.0,inf,2.29929301685,3.85440885282,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,2.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,2.0,4.0,inf,2.14022167123,5.20847490655,accepted
+0.681709359792,0.576633872599,2.35552788068,0.681709359792,7.21223378317,0.0,2.0,4.0,inf,0.681709359792,7.21223378317,accepted
+0.330134294538,0.623824991198,2.21669701166,0.330134294538,7.74860366347,0.0,3.0,1.0,inf,0.330134294538,7.74860366347,accepted
+2.29929301685,0.554563380674,1.19885353935,2.29929301685,2.46628833849,0.0,3.0,1.0,inf,2.29929301685,2.46628833849,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,0.0,3.0,1.0,1.2687160992,0.681709359792,2.61066784112,accepted
+0.546708260557,0.576633872599,1.19885353935,0.546708260557,4.46669634616,0.0,3.0,1.0,1.15120812779,0.546708260557,4.46669634616,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,3.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.77997658676,0.330134294538,9.15814861866,0.0,3.0,2.0,inf,0.330134294538,9.15814861866,accepted
+0.681709359792,0.576633872599,0.873687420244,0.681709359792,3.44104184873,0.0,3.0,2.0,1.83631338476,0.681709359792,3.44104184873,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,3.0,2.0,1.03881756568,0.397923062881,8.29912156345,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,3.0,3.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.71133192831,2.29929301685,3.61167393926,0.0,3.0,3.0,inf,2.29929301685,3.61167393926,accepted
+2.29929301685,0.554563380674,1.19885353935,2.29929301685,2.46628833849,0.0,4.0,1.0,inf,2.29929301685,2.46628833849,accepted
+0.330134294538,0.623824991198,1.11245476527,0.330134294538,4.77714419988,0.0,4.0,1.0,inf,0.330134294538,4.77714419988,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,0.0,4.0,1.0,1.75567377328,0.681709359792,2.61066784112,accepted
+0.546708260557,0.576633872599,1.19885353935,0.546708260557,4.46669634616,0.0,4.0,1.0,1.11606194435,0.546708260557,4.46669634616,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,4.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.347607163793,2.21669701166,0.330134294538,6.99885569603,0.0,4.0,2.0,inf,0.330134294538,6.99885569603,accepted
+0.681709359792,0.576633872599,0.873687420244,0.681709359792,3.44104184873,0.0,4.0,2.0,2.0,0.681709359792,3.44104184873,accepted
+0.330134294538,0.623824991198,2.21669701166,0.330134294538,7.74860366347,0.0,4.0,3.0,inf,0.330134294538,7.74860366347,accepted
+2.29929301685,0.576633872599,1.71133192831,2.29929301685,3.61167393926,0.0,4.0,3.0,inf,2.29929301685,3.61167393926,accepted
+0.992694073355,0.623824991198,2.21669701166,0.992694073355,6.447155147,0.0,4.0,3.0,2.0,0.992694073355,6.447155147,accepted
+0.330134294538,0.554563380674,0.417994360537,0.330134294538,2.78041411247,0.0,5.0,1.0,inf,0.330134294538,2.78041411247,accepted
+2.29929301685,0.554563380674,0.230939737808,2.29929301685,0.578452746596,0.0,5.0,1.0,inf,2.29929301685,0.578452746596,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,0.0,5.0,1.0,2.0,0.681709359792,2.61066784112,accepted
+0.330134294538,0.623824991198,1.11245476527,0.330134294538,4.77714419988,0.0,5.0,2.0,inf,0.330134294538,4.77714419988,accepted
+2.29929301685,0.554563380674,0.60918368879,2.29929301685,1.27772606957,0.0,5.0,2.0,inf,2.29929301685,1.27772606957,accepted
+2.08435480857,0.554563380674,1.19885353935,2.08435480857,2.64796841028,0.0,5.0,2.0,1.43965225129,2.08435480857,2.64796841028,accepted
+0.681709359792,0.576633872599,0.873687420244,0.681709359792,3.44104184873,0.0,5.0,2.0,1.3005876629,0.681709359792,3.44104184873,accepted
+0.546708260557,0.576633872599,1.19885353935,0.546708260557,4.46669634616,0.0,5.0,2.0,0.560347748708,0.546708260557,4.46669634616,accepted
+0.330134294538,0.347607163793,2.21669701166,0.330134294538,6.99885569603,0.0,5.0,3.0,inf,0.330134294538,6.99885569603,accepted
+2.29929301685,0.623824991198,0.655321315316,2.29929301685,1.50236927602,0.0,5.0,3.0,inf,2.29929301685,1.50236927602,accepted
+2.29929301685,0.554563380674,0.230939737808,2.29929301685,0.578452746596,1.0,6.0,1.0,inf,2.29929301685,0.578452746596,accepted
+0.330134294538,0.554563380674,0.110660847302,0.330134294538,2.00120081998,1.0,6.0,1.0,inf,0.330134294538,2.00120081998,accepted
+1.01284551667,0.554563380674,0.230939737808,1.01284551667,1.51270203028,1.0,6.0,1.0,2.0,1.01284551667,1.51270203028,accepted
+0.330134294538,0.554563380674,0.417994360537,0.330134294538,2.78041411247,1.0,6.0,2.0,inf,0.330134294538,2.78041411247,accepted
+2.29929301685,0.554563380674,0.60918368879,2.29929301685,1.27772606957,1.0,6.0,2.0,inf,2.29929301685,1.27772606957,accepted
+0.444260786391,0.554563380674,0.417994360537,0.444260786391,2.59840502226,1.0,6.0,2.0,2.0,0.444260786391,2.59840502226,accepted
+2.29929301685,0.623824991198,0.655321315316,2.29929301685,1.50236927602,1.0,6.0,3.0,inf,2.29929301685,1.50236927602,accepted
+0.330134294538,0.554563380674,0.504873137573,0.330134294538,3.00382955184,1.0,6.0,3.0,inf,0.330134294538,3.00382955184,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,1.0,6.0,3.0,2.0,0.681709359792,2.61066784112,accepted
+2.08435480857,0.554563380674,1.19885353935,2.08435480857,2.64796841028,1.0,6.0,4.0,inf,2.08435480857,2.64796841028,accepted
+2.29929301685,0.554563380674,0.230939737808,2.29929301685,0.578452746596,5.0,7.0,1.0,inf,2.29929301685,0.578452746596,accepted
+0.330134294538,0.554563380674,0.110660847302,0.330134294538,2.00120081998,5.0,7.0,1.0,inf,0.330134294538,2.00120081998,accepted
+1.01284551667,0.554563380674,0.230939737808,1.01284551667,1.51270203028,5.0,7.0,1.0,1.49192428646,1.01284551667,1.51270203028,accepted
+1.60732404133,0.554563380674,0.110660847302,1.60732404133,0.801358047226,5.0,7.0,1.0,1.30994926091,1.60732404133,0.801358047226,accepted
+0.330134294538,0.554563380674,0.417994360537,0.330134294538,2.78041411247,5.0,7.0,2.0,inf,0.330134294538,2.78041411247,accepted
+2.29929301685,0.660723144575,0.230939737808,2.29929301685,0.768121650983,5.0,7.0,2.0,inf,2.29929301685,0.768121650983,accepted
+0.444260786391,0.554563380674,0.417994360537,0.444260786391,2.59840502226,5.0,7.0,2.0,2.0,0.444260786391,2.59840502226,accepted
+2.29929301685,0.554563380674,0.60918368879,2.29929301685,1.27772606957,5.0,7.0,3.0,inf,2.29929301685,1.27772606957,accepted
+0.330134294538,0.554563380674,0.504873137573,0.330134294538,3.00382955184,5.0,7.0,3.0,inf,0.330134294538,3.00382955184,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,5.0,7.0,3.0,2.0,0.681709359792,2.61066784112,accepted
+0.330134294538,0.554563380674,0.110660847302,0.330134294538,2.00120081998,1.0,8.0,1.0,inf,0.330134294538,2.00120081998,accepted
+2.29929301685,0.0275911479321,0.230939737808,2.29929301685,-0.244953753413,1.0,8.0,1.0,inf,2.29929301685,-0.244953753413,accepted
+1.60732404133,0.554563380674,0.110660847302,1.60732404133,0.801358047226,1.0,8.0,1.0,1.43581575549,1.60732404133,0.801358047226,accepted
+1.01284551667,0.554563380674,0.230939737808,1.01284551667,1.51270203028,1.0,8.0,1.0,0.782909308636,1.01284551667,1.51270203028,accepted
+0.836614055754,0.554563380674,0.230939737808,0.836614055754,1.68076984555,1.0,8.0,1.0,0.564184244509,0.836614055754,1.68076984555,accepted
+0.330134294538,0.554563380674,0.417994360537,0.330134294538,2.78041411247,1.0,8.0,2.0,inf,0.330134294538,2.78041411247,accepted
+2.33962663434,0.554563380674,0.230939737808,2.33962663434,0.554192691253,1.0,8.0,2.0,inf,2.33962663434,0.554192691253,accepted
+0.444260786391,0.554563380674,0.417994360537,0.444260786391,2.59840502226,1.0,8.0,2.0,1.96903104073,0.444260786391,2.59840502226,accepted
+2.29929301685,0.554563380674,0.230939737808,2.29929301685,0.578452746596,1.0,8.0,2.0,1.86144934905,2.29929301685,0.578452746596,accepted
+2.29929301685,0.660723144575,0.230939737808,2.29929301685,0.768121650983,1.0,8.0,3.0,inf,2.29929301685,0.768121650983,accepted
+0.330134294538,0.554563380674,0.110660847302,0.330134294538,2.00120081998,4.0,9.0,1.0,inf,0.330134294538,2.00120081998,accepted
+2.29929301685,0.0275911479321,0.230939737808,2.29929301685,-0.244953753413,4.0,9.0,1.0,inf,2.29929301685,-0.244953753413,accepted
+0.751385465206,0.554563380674,0.110660847302,0.751385465206,1.49537107651,4.0,9.0,1.0,1.06229744833,0.751385465206,1.49537107651,accepted
+1.71601259958,0.554563380674,0.110660847302,1.71601259958,0.728380891981,4.0,9.0,1.0,0.817226947976,1.71601259958,0.728380891981,accepted
+1.46022645185,0.554563380674,0.110660847302,1.46022645185,0.904175494315,4.0,9.0,1.0,0.743650514659,1.46022645185,0.904175494315,accepted
+1.60732404133,0.554563380674,0.110660847302,1.60732404133,0.801358047226,4.0,9.0,1.0,0.208160850443,1.60732404133,0.801358047226,accepted
+0.330134294538,0.554563380674,0.417994360537,0.330134294538,2.78041411247,4.0,9.0,2.0,inf,0.330134294538,2.78041411247,accepted
+2.59250269146,0.554563380674,0.110660847302,2.59250269146,0.208866358436,4.0,9.0,2.0,inf,2.59250269146,0.208866358436,accepted
+1.01284551667,0.554563380674,0.230939737808,1.01284551667,1.51270203028,4.0,9.0,2.0,1.72667564655,1.01284551667,1.51270203028,accepted
+2.29929301685,0.554563380674,0.230939737808,2.29929301685,0.578452746596,4.0,9.0,2.0,1.20525533637,2.29929301685,0.578452746596,accepted
+0.330134294538,0.554563380674,0.110660847302,0.330134294538,2.00120081998,4.0,10.0,1.0,inf,0.330134294538,2.00120081998,accepted
+2.22230584599,0.0275911479321,0.110660847302,2.22230584599,-0.358382615104,4.0,10.0,1.0,inf,2.22230584599,-0.358382615104,accepted
+0.751385465206,0.554563380674,0.110660847302,0.751385465206,1.49537107651,4.0,10.0,1.0,0.960485818159,0.751385465206,1.49537107651,accepted
+1.71601259958,0.554563380674,0.110660847302,1.71601259958,0.728380891981,4.0,10.0,1.0,0.816516057706,1.71601259958,0.728380891981,accepted
+1.46022645185,0.554563380674,0.110660847302,1.46022645185,0.904175494315,4.0,10.0,1.0,0.746483042101,1.46022645185,0.904175494315,accepted
+0.420252040825,0.554563380674,0.110660847302,0.420252040825,1.87364881651,4.0,10.0,1.0,0.437000900192,0.420252040825,1.87364881651,accepted
+1.60732404133,0.554563380674,0.110660847302,1.60732404133,0.801358047226,4.0,10.0,1.0,0.209683655746,1.60732404133,0.801358047226,accepted
+2.29929301685,0.0275911479321,0.230939737808,2.29929301685,-0.244953753413,4.0,10.0,2.0,inf,2.29929301685,-0.244953753413,accepted
+0.330134294538,0.554563380674,0.417994360537,0.330134294538,2.78041411247,4.0,10.0,2.0,inf,0.330134294538,2.78041411247,accepted
+1.01284551667,0.554563380674,0.230939737808,1.01284551667,1.51270203028,4.0,10.0,2.0,2.0,1.01284551667,1.51270203028,accepted
+0.330134294538,0.554563380674,0.110660847302,0.330134294538,2.00120081998,2.0,11.0,1.0,inf,0.330134294538,2.00120081998,accepted
+2.22230584599,0.0275911479321,0.110660847302,2.22230584599,-0.358382615104,2.0,11.0,1.0,inf,2.22230584599,-0.358382615104,accepted
+1.39679406802,0.0275911479321,0.110660847302,1.39679406802,0.00900964708887,2.0,11.0,1.0,1.56299909981,1.39679406802,0.00900964708887,accepted
+0.751385465206,0.554563380674,0.110660847302,0.751385465206,1.49537107651,2.0,11.0,1.0,1.30633675387,0.751385465206,1.49537107651,accepted
+0.420252040825,0.554563380674,0.110660847302,0.420252040825,1.87364881651,2.0,11.0,1.0,0.437000900192,0.420252040825,1.87364881651,accepted
+2.29929301685,0.0275911479321,0.230939737808,2.29929301685,-0.244953753413,2.0,11.0,2.0,inf,2.29929301685,-0.244953753413,accepted
+0.330134294538,0.0275911479321,0.750754092063,0.330134294538,2.28574564347,2.0,11.0,2.0,inf,0.330134294538,2.28574564347,accepted
+1.01284551667,0.554563380674,0.230939737808,1.01284551667,1.51270203028,2.0,11.0,2.0,1.31918114721,1.01284551667,1.51270203028,accepted
+2.22230584599,0.281945810486,0.110660847302,2.22230584599,-0.0221304938764,2.0,11.0,2.0,0.680818852794,2.22230584599,-0.0221304938764,accepted
+1.71601259958,0.554563380674,0.110660847302,1.71601259958,0.728380891981,2.0,11.0,2.0,1.22068705872,1.71601259958,0.728380891981,accepted
+2.22230584599,0.0275911479321,0.110660847302,2.22230584599,-0.358382615104,2.0,12.0,1.0,inf,2.22230584599,-0.358382615104,accepted
+0.330134294538,0.281619869005,0.110660847302,0.330134294538,1.32910973409,2.0,12.0,1.0,inf,0.330134294538,1.32910973409,accepted
+1.39679406802,0.0275911479321,0.110660847302,1.39679406802,0.00900964708887,2.0,12.0,1.0,2.0,1.39679406802,0.00900964708887,accepted
+0.330134294538,0.554563380674,0.110660847302,0.330134294538,2.00120081998,2.0,12.0,2.0,inf,0.330134294538,2.00120081998,accepted
+2.29929301685,0.0275911479321,0.230939737808,2.29929301685,-0.244953753413,2.0,12.0,2.0,inf,2.29929301685,-0.244953753413,accepted
+1.71601259958,0.554563380674,0.110660847302,1.71601259958,0.728380891981,2.0,12.0,2.0,0.989160081281,1.71601259958,0.728380891981,accepted
+0.751385465206,0.554563380674,0.110660847302,0.751385465206,1.49537107651,2.0,12.0,2.0,1.1679068739,0.751385465206,1.49537107651,accepted
+1.91481176063,0.554563380674,0.110660847302,1.91481176063,0.600646737056,2.0,12.0,2.0,0.591243119146,1.91481176063,0.600646737056,accepted
+2.22230584599,0.281945810486,0.110660847302,2.22230584599,-0.0221304938764,2.0,12.0,2.0,0.571717381354,2.22230584599,-0.0221304938764,accepted
+0.420252040825,0.554563380674,0.110660847302,0.420252040825,1.87364881651,2.0,12.0,2.0,0.439122537365,0.420252040825,1.87364881651,accepted
+2.22230584599,0.0275911479321,0.110660847302,2.22230584599,-0.358382615104,7.0,13.0,1.0,inf,2.22230584599,-0.358382615104,accepted
+0.144176776322,0.0275911479321,0.110660847302,0.144176776322,0.963120117663,7.0,13.0,1.0,inf,0.144176776322,0.963120117663,accepted
+1.30155495375,0.0275911479321,0.110660847302,1.30155495375,0.0577804289819,7.0,13.0,1.0,1.32475105339,1.30155495375,0.0577804289819,accepted
+1.39679406802,0.0275911479321,0.110660847302,1.39679406802,0.00900964708887,7.0,13.0,1.0,0.757983752596,1.39679406802,0.00900964708887,accepted
+0.330134294538,0.281619869005,0.110660847302,0.330134294538,1.32910973409,7.0,13.0,2.0,inf,0.330134294538,1.32910973409,accepted
+2.29929301685,0.0275911479321,0.230939737808,2.29929301685,-0.244953753413,7.0,13.0,2.0,inf,2.29929301685,-0.244953753413,accepted
+1.71601259958,0.554563380674,0.110660847302,1.71601259958,0.728380891981,7.0,13.0,2.0,1.26753983802,1.71601259958,0.728380891981,accepted
+1.91481176063,0.554563380674,0.110660847302,1.91481176063,0.600646737056,7.0,13.0,2.0,0.733910121367,1.91481176063,0.600646737056,accepted
+2.22230584599,0.281945810486,0.110660847302,2.22230584599,-0.0221304938764,7.0,13.0,2.0,0.732460161977,2.22230584599,-0.0221304938764,accepted
+0.330134294538,0.554563380674,0.110660847302,0.330134294538,2.00120081998,7.0,13.0,3.0,inf,0.330134294538,2.00120081998,accepted
+0.144176776322,0.0275911479321,0.110660847302,0.144176776322,0.963120117663,2.0,14.0,1.0,inf,0.144176776322,0.963120117663,accepted
+2.53462593573,0.0275911479321,0.110660847302,2.53462593573,-0.47888527232,2.0,14.0,1.0,inf,2.53462593573,-0.47888527232,accepted
+0.845564319018,0.0275911479321,0.110660847302,0.845564319018,0.321015988433,2.0,14.0,1.0,1.11200143643,0.845564319018,0.321015988433,accepted
+1.30155495375,0.0275911479321,0.110660847302,1.30155495375,0.0577804289819,2.0,14.0,1.0,0.446966472614,1.30155495375,0.0577804289819,accepted
+1.88682852823,0.0275911479321,0.110660847302,1.88682852823,-0.219074468874,2.0,14.0,1.0,0.414011590831,1.88682852823,-0.219074468874,accepted
+2.22230584599,0.0275911479321,0.110660847302,2.22230584599,-0.358382615104,2.0,14.0,1.0,0.366643659721,2.22230584599,-0.358382615104,accepted
+1.64391564826,0.0275911479321,0.110660847302,1.64391564826,-0.110281555921,2.0,14.0,1.0,0.363168285924,1.64391564826,-0.110281555921,accepted
+1.39679406802,0.0275911479321,0.110660847302,1.39679406802,0.00900964708887,2.0,14.0,1.0,0.259767640834,1.39679406802,0.00900964708887,accepted
+2.41044278406,0.0275911479321,0.110660847302,2.41044278406,-0.431913545356,2.0,14.0,1.0,0.214219331903,2.41044278406,-0.431913545356,accepted
+0.330134294538,0.281619869005,0.110660847302,0.330134294538,1.32910973409,2.0,14.0,2.0,inf,0.330134294538,1.32910973409,accepted
+0.144176776322,0.0275911479321,0.110660847302,0.144176776322,0.963120117663,4.0,15.0,1.0,inf,0.144176776322,0.963120117663,accepted
+2.87040265367,0.0275911479321,0.110660847302,2.87040265367,-0.600416298659,4.0,15.0,1.0,inf,2.87040265367,-0.600416298659,accepted
+0.845564319018,0.0275911479321,0.110660847302,0.845564319018,0.321015988433,4.0,15.0,1.0,0.704629371176,0.845564319018,0.321015988433,accepted
+1.30155495375,0.0275911479321,0.110660847302,1.30155495375,0.0577804289819,4.0,15.0,1.0,0.36506593516,1.30155495375,0.0577804289819,accepted
+0.892905512101,0.0275911479321,0.110660847302,0.892905512101,0.290814965047,4.0,15.0,1.0,0.335619852656,0.892905512101,0.290814965047,accepted
+2.22230584599,0.0275911479321,0.110660847302,2.22230584599,-0.358382615104,4.0,15.0,1.0,0.403785617585,2.22230584599,-0.358382615104,accepted
+1.64391564826,0.0275911479321,0.110660847302,1.64391564826,-0.110281555921,4.0,15.0,1.0,0.325625370568,1.64391564826,-0.110281555921,accepted
+1.88682852823,0.0275911479321,0.110660847302,1.88682852823,-0.219074468874,4.0,15.0,1.0,0.370837266347,1.88682852823,-0.219074468874,accepted
+2.53462593573,0.0275911479321,0.110660847302,2.53462593573,-0.47888527232,4.0,15.0,1.0,0.392525624748,2.53462593573,-0.47888527232,accepted
+1.39679406802,0.0275911479321,0.110660847302,1.39679406802,0.00900964708887,4.0,15.0,1.0,0.233068830687,1.39679406802,0.00900964708887,accepted
+0.144176776322,0.0275911479321,0.110660847302,0.144176776322,0.963120117663,4.0,15.0,1.0,inf,0.144176776322,0.963120117663,final
+2.87040265367,0.0275911479321,0.110660847302,2.87040265367,-0.600416298659,4.0,15.0,1.0,inf,2.87040265367,-0.600416298659,final
+0.845564319018,0.0275911479321,0.110660847302,0.845564319018,0.321015988433,4.0,15.0,1.0,0.704629371176,0.845564319018,0.321015988433,final
+1.30155495375,0.0275911479321,0.110660847302,1.30155495375,0.0577804289819,4.0,15.0,1.0,0.36506593516,1.30155495375,0.0577804289819,final
+0.892905512101,0.0275911479321,0.110660847302,0.892905512101,0.290814965047,4.0,15.0,1.0,0.335619852656,0.892905512101,0.290814965047,final
+2.22230584599,0.0275911479321,0.110660847302,2.22230584599,-0.358382615104,4.0,15.0,1.0,0.403785617585,2.22230584599,-0.358382615104,final
+1.64391564826,0.0275911479321,0.110660847302,1.64391564826,-0.110281555921,4.0,15.0,1.0,0.325625370568,1.64391564826,-0.110281555921,final
+1.88682852823,0.0275911479321,0.110660847302,1.88682852823,-0.219074468874,4.0,15.0,1.0,0.370837266347,1.88682852823,-0.219074468874,final
+2.53462593573,0.0275911479321,0.110660847302,2.53462593573,-0.47888527232,4.0,15.0,1.0,0.392525624748,2.53462593573,-0.47888527232,final
+1.39679406802,0.0275911479321,0.110660847302,1.39679406802,0.00900964708887,4.0,15.0,1.0,0.233068830687,1.39679406802,0.00900964708887,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/1-opt_path.png
new file mode 100644
index 0000000000..ed38b1023e
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/1-population.png
new file mode 100644
index 0000000000..1d7af12092
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/opt_export_0.csv
new file mode 100644
index 0000000000..dd83b0d591
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/opt_export_0.csv
@@ -0,0 +1,154 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+2.70882296276,2.84283672968,2.52112277912,2.70882296276,10.2875510042,0.0,1.0,3.0,inf,2.70882296276,10.2875510042,first
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,1.0,2.0,inf,0.681709359792,9.0451225346,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,1.0,1.0,inf,2.29929301685,2.51248918399,first
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,1.0,2.0,2.0,1.89960633519,8.21268741777,first
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,1.0,1.0,1.32021710558,0.919133180734,4.14503351583,first
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,1.0,1.0,inf,0.330134294538,11.0120200748,first
+0.995076558784,1.71556422993,2.89604636698,0.995076558784,10.9927238578,0.0,1.0,3.0,inf,0.995076558784,10.9927238578,first
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,1.0,1.0,0.753429911187,0.80362101989,7.27790740376,first
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,1.0,2.0,inf,2.14022167123,5.20847490655,first
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,1.0,1.0,0.679782894419,0.397923062881,8.29912156345,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,2.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,2.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,0.0,2.0,1.0,1.64639261039,0.681709359792,3.97319160496,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,2.0,1.0,1.00668391667,0.397923062881,8.29912156345,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,0.0,2.0,2.0,inf,0.681709359792,3.97319160496,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,2.0,3.0,inf,0.681709359792,9.0451225346,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,2.0,3.0,inf,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,2.0,3.0,2.0,0.80362101989,7.27790740376,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,2.0,4.0,inf,2.14022167123,5.20847490655,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,2.0,4.0,inf,0.681709359792,9.0451225346,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,2.0,3.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,3.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,2.0,3.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,3.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,2.0,3.0,3.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,2.0,3.0,3.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,2.0,3.0,3.0,1.10703730079,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,3.0,4.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,4.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,3.0,4.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,4.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,3.0,4.0,3.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,3.0,4.0,3.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,3.0,4.0,3.0,1.10703730079,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,4.0,5.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,4.0,5.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,4.0,5.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,4.0,5.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,4.0,5.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,4.0,5.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,4.0,5.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,5.0,6.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,5.0,6.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,5.0,6.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,5.0,6.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,5.0,6.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,5.0,6.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,5.0,6.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,6.0,7.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,6.0,7.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,6.0,7.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,6.0,7.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,6.0,7.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,6.0,7.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,6.0,7.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,7.0,8.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,7.0,8.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,7.0,8.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,7.0,8.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,7.0,8.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,7.0,8.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,7.0,8.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,8.0,9.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,8.0,9.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,8.0,9.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,8.0,9.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,8.0,9.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,8.0,9.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,8.0,9.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,9.0,10.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,9.0,10.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,9.0,10.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,9.0,10.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,9.0,10.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,9.0,10.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,9.0,10.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,10.0,11.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,10.0,11.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,10.0,11.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,10.0,11.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,10.0,11.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,10.0,11.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,10.0,11.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,11.0,12.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,11.0,12.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,11.0,12.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,11.0,12.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,11.0,12.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,11.0,12.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,11.0,12.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,12.0,13.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,12.0,13.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,12.0,13.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,12.0,13.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,12.0,13.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,12.0,13.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,12.0,13.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,13.0,14.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,13.0,14.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,13.0,14.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,13.0,14.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,13.0,14.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,13.0,14.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,13.0,14.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,14.0,15.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,14.0,15.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,14.0,15.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,14.0,15.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,1.0,inf,2.29929301685,2.51248918399,final
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,1.0,inf,0.330134294538,7.62026049781,final
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,14.0,15.0,1.0,2.0,0.681709359792,3.97319160496,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/1-opt_path.png
new file mode 100644
index 0000000000..0d46248acb
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/1-population.png
new file mode 100644
index 0000000000..a57208035e
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/opt_export_0.csv
new file mode 100644
index 0000000000..c9d9279c2a
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/opt_export_0.csv
@@ -0,0 +1,161 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+2.70882296276,2.84283672968,2.52112277912,2.70882296276,10.2875510042,0.0,1.0,3.0,inf,2.70882296276,10.2875510042,first
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,1.0,2.0,inf,0.681709359792,9.0451225346,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,1.0,1.0,inf,2.29929301685,2.51248918399,first
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,1.0,2.0,2.0,1.89960633519,8.21268741777,first
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,1.0,1.0,1.32021710558,0.919133180734,4.14503351583,first
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,1.0,1.0,inf,0.330134294538,11.0120200748,first
+0.995076558784,1.71556422993,2.89604636698,0.995076558784,10.9927238578,0.0,1.0,3.0,inf,0.995076558784,10.9927238578,first
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,1.0,1.0,0.753429911187,0.80362101989,7.27790740376,first
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,1.0,2.0,inf,2.14022167123,5.20847490655,first
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,1.0,1.0,0.679782894419,0.397923062881,8.29912156345,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,1.0,2.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,1.0,2.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,1.0,2.0,1.0,1.64639261039,0.681709359792,2.61066784112,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,1.0,2.0,1.0,1.16698967723,0.397923062881,8.29912156345,accepted
+0.681709359792,0.576633872599,0.873687420244,0.681709359792,3.44104184873,1.0,2.0,2.0,inf,0.681709359792,3.44104184873,accepted
+2.29929301685,1.19958293326,1.19885353935,2.29929301685,3.85440885282,1.0,2.0,3.0,inf,2.29929301685,3.85440885282,accepted
+0.681709359792,0.576633872599,1.3682099712,0.681709359792,4.67602183377,1.0,2.0,3.0,inf,0.681709359792,4.67602183377,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,1.0,2.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+0.681709359792,0.912726723103,1.08828069574,0.681709359792,4.81806783617,1.0,2.0,4.0,inf,0.681709359792,4.81806783617,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,1.0,2.0,5.0,inf,2.14022167123,5.20847490655,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,2.0,3.0,1.0,inf,0.330134294538,3.10008399988,accepted
+2.29929301685,0.576633872599,0.935133219681,2.29929301685,1.96776997747,2.0,3.0,1.0,inf,2.29929301685,1.96776997747,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,2.0,3.0,1.0,2.0,0.681709359792,2.61066784112,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.554563380674,2.21669701166,0.330134294538,7.56027081822,2.0,3.0,2.0,inf,0.330134294538,7.56027081822,accepted
+0.681709359792,0.576633872599,0.873687420244,0.681709359792,3.44104184873,2.0,3.0,2.0,1.27715878806,0.681709359792,3.44104184873,accepted
+0.546708260557,0.576633872599,1.19885353935,0.546708260557,4.46669634616,2.0,3.0,2.0,0.994588123401,0.546708260557,4.46669634616,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,2.0,3.0,3.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,2.0,3.0,3.0,2.0,0.919133180734,4.14503351583,accepted
+2.29929301685,0.576633872599,0.935133219681,2.29929301685,1.96776997747,3.0,4.0,1.0,inf,2.29929301685,1.96776997747,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,3.0,4.0,1.0,inf,0.0165663671253,4.02358870566,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,3.0,4.0,1.0,1.41341943597,0.681709359792,2.61066784112,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,3.0,4.0,1.0,0.586580564034,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,3.0,4.0,1.0,0.451178031062,0.330134294538,3.10008399988,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,3.0,4.0,2.0,inf,0.330134294538,3.10008399988,accepted
+2.29929301685,0.576633872599,1.07539717552,2.29929301685,2.25544409662,3.0,4.0,2.0,inf,2.29929301685,2.25544409662,accepted
+2.29929301685,0.576633872599,1.18464455036,2.29929301685,2.48273298759,3.0,4.0,3.0,inf,2.29929301685,2.48273298759,accepted
+0.330134294538,0.576633872599,0.596527209179,0.330134294538,3.29799382136,3.0,4.0,3.0,inf,0.330134294538,3.29799382136,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,4.0,inf,2.29929301685,2.51248918399,accepted
+2.29929301685,0.576633872599,0.935133219681,2.29929301685,1.96776997747,1.0,5.0,1.0,inf,2.29929301685,1.96776997747,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,1.0,5.0,1.0,inf,0.0165663671253,4.02358870566,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,1.0,5.0,1.0,1.0213401646,0.94306794413,2.27873260351,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,1.0,5.0,1.0,0.668034641708,0.681709359792,2.61066784112,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,1.0,5.0,1.0,0.578058789325,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,1.0,5.0,1.0,0.400601046073,0.330134294538,3.10008399988,accepted
+0.323674284928,0.576633872599,0.520093941716,0.323674284928,3.11178535312,1.0,5.0,1.0,0.0590987596982,0.323674284928,3.11178535312,accepted
+2.29929301685,0.576633872599,1.07539717552,2.29929301685,2.25544409662,1.0,5.0,2.0,inf,2.29929301685,2.25544409662,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,1.0,5.0,2.0,inf,0.0165663671253,4.02358870566,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,1.0,5.0,2.0,2.0,0.330134294538,3.10008399988,accepted
+2.29929301685,0.576633872599,0.49396755162,2.29929301685,1.09986401737,2.0,6.0,1.0,inf,2.29929301685,1.09986401737,accepted
+0.0165663671253,0.576633872599,0.504873137573,0.0165663671253,3.97934883427,2.0,6.0,1.0,inf,0.0165663671253,3.97934883427,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,2.0,6.0,1.0,1.23329759651,0.94306794413,2.27873260351,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,2.0,6.0,1.0,0.55375192001,0.681709359792,2.61066784112,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,2.0,6.0,1.0,0.435826779956,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,2.0,6.0,1.0,0.330875623538,0.330134294538,3.10008399988,accepted
+0.323674284928,0.576633872599,0.520093941716,0.323674284928,3.11178535312,2.0,6.0,1.0,0.0476953382817,0.323674284928,3.11178535312,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,2.0,6.0,2.0,inf,0.0165663671253,4.02358870566,accepted
+2.58219174915,0.576633872599,0.935133219681,2.58219174915,1.75466518141,2.0,6.0,2.0,inf,2.58219174915,1.75466518141,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,2.0,6.0,2.0,2.0,0.330134294538,3.10008399988,accepted
+2.29929301685,0.576633872599,0.49396755162,2.29929301685,1.09986401737,0.0,7.0,1.0,inf,2.29929301685,1.09986401737,accepted
+0.0165663671253,0.576633872599,0.504873137573,0.0165663671253,3.97934883427,0.0,7.0,1.0,inf,0.0165663671253,3.97934883427,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,0.0,7.0,1.0,1.00352765002,1.60732404133,1.60993297207,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,0.0,7.0,1.0,0.753025984749,0.94306794413,2.27873260351,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,0.0,7.0,1.0,0.55375192001,0.681709359792,2.61066784112,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,0.0,7.0,1.0,0.435826779956,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,0.0,7.0,1.0,0.330875623538,0.330134294538,3.10008399988,accepted
+0.323674284928,0.576633872599,0.520093941716,0.323674284928,3.11178535312,0.0,7.0,1.0,0.0476953382817,0.323674284928,3.11178535312,accepted
+0.0165663671253,0.576633872599,0.520093941716,0.0165663671253,4.02358870566,0.0,7.0,2.0,inf,0.0165663671253,4.02358870566,accepted
+2.29929301685,0.660723144575,0.49396755162,2.29929301685,1.26029154367,0.0,7.0,2.0,inf,2.29929301685,1.26029154367,accepted
+2.29929301685,0.576633872599,0.279308292381,2.29929301685,0.703654966355,2.0,8.0,1.0,inf,2.29929301685,0.703654966355,accepted
+0.0165663671253,0.566121332945,0.504873137573,0.0165663671253,3.94879819265,2.0,8.0,1.0,inf,0.0165663671253,3.94879819265,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,2.0,8.0,1.0,0.989640981681,1.60732404133,1.60993297207,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,2.0,8.0,1.0,0.521611177667,0.681709359792,2.61066784112,accepted
+1.04762870982,0.576633872599,0.504873137573,1.04762870982,2.13580528603,2.0,8.0,1.0,0.497084880919,1.04762870982,2.13580528603,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,2.0,8.0,1.0,0.392463421696,0.286230348117,3.18204053684,accepted
+0.330134294538,0.576633872599,0.520093941716,0.330134294538,3.10008399988,2.0,8.0,1.0,0.311266125207,0.330134294538,3.10008399988,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,2.0,8.0,1.0,0.306629471416,0.94306794413,2.27873260351,accepted
+0.323674284928,0.576633872599,0.520093941716,0.323674284928,3.11178535312,2.0,8.0,1.0,0.044488253045,0.323674284928,3.11178535312,accepted
+2.29929301685,0.576633872599,0.49396755162,2.29929301685,1.09986401737,2.0,8.0,2.0,inf,2.29929301685,1.09986401737,accepted
+2.29929301685,0.576633872599,0.279308292381,2.29929301685,0.703654966355,0.0,9.0,1.0,inf,2.29929301685,0.703654966355,accepted
+0.0165663671253,0.566121332945,0.504873137573,0.0165663671253,3.94879819265,0.0,9.0,1.0,inf,0.0165663671253,3.94879819265,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,0.0,9.0,1.0,0.613026890829,1.60732404133,1.60993297207,accepted
+1.04762870982,0.576633872599,0.504873137573,1.04762870982,2.13580528603,0.0,9.0,1.0,0.497084880919,1.04762870982,2.13580528603,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,0.0,9.0,1.0,0.601626336597,0.286230348117,3.18204053684,accepted
+1.94889870262,0.576633872599,0.279308292381,1.94889870262,0.930909274558,0.0,9.0,1.0,0.376614090852,1.94889870262,0.930909274558,accepted
+1.70492579828,0.566121332945,0.279308292381,1.70492579828,1.08086424166,0.0,9.0,1.0,0.35887755978,1.70492579828,1.08086424166,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,0.0,9.0,1.0,0.318884020842,0.681709359792,2.61066784112,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,0.0,9.0,1.0,0.306629471416,0.94306794413,2.27873260351,accepted
+0.536468121581,0.576633872599,0.504873137573,0.536468121581,2.73553122795,0.0,9.0,1.0,0.349318620176,0.536468121581,2.73553122795,accepted
+0.0165663671253,0.566121332945,0.504873137573,0.0165663671253,3.94879819265,1.0,10.0,1.0,inf,0.0165663671253,3.94879819265,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,1.0,10.0,1.0,inf,2.29929301685,-0.15504942379,accepted
+1.94889870262,0.576633872599,0.279308292381,1.94889870262,0.930909274558,1.0,10.0,1.0,0.561535729348,1.94889870262,0.930909274558,accepted
+0.286230348117,0.576633872599,0.520093941716,0.286230348117,3.18204053684,1.0,10.0,1.0,0.523396042985,0.286230348117,3.18204053684,accepted
+1.04762870982,0.576633872599,0.504873137573,1.04762870982,2.13580528603,1.0,10.0,1.0,0.45396132027,1.04762870982,2.13580528603,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,1.0,10.0,1.0,0.545005301149,1.60732404133,1.60993297207,accepted
+1.70492579828,0.566121332945,0.279308292381,1.70492579828,1.08086424166,1.0,10.0,1.0,0.315094761129,1.70492579828,1.08086424166,accepted
+0.94306794413,0.576633872599,0.520093941716,0.94306794413,2.27873260351,1.0,10.0,1.0,0.276010787985,0.94306794413,2.27873260351,accepted
+0.681709359792,0.0211989255671,1.08828069574,0.681709359792,2.61066784112,1.0,10.0,1.0,0.289430082384,0.681709359792,2.61066784112,accepted
+0.536468121581,0.576633872599,0.504873137573,0.536468121581,2.73553122795,1.0,10.0,1.0,0.312477055172,0.536468121581,2.73553122795,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,2.0,11.0,1.0,inf,2.29929301685,-0.15504942379,accepted
+0.0165663671253,0.0155545813068,0.504873137573,0.0165663671253,2.35529491162,2.0,11.0,1.0,inf,0.0165663671253,2.35529491162,accepted
+0.889530419346,0.566121332945,0.279308292381,0.889530419346,1.76269463637,2.0,11.0,1.0,0.993783566786,0.889530419346,1.76269463637,accepted
+1.94889870262,0.576633872599,0.279308292381,1.94889870262,0.930909274558,2.0,11.0,1.0,0.752704335555,1.94889870262,0.930909274558,accepted
+1.60732404133,0.576633872599,0.49396755162,1.60732404133,1.60993297207,2.0,11.0,1.0,0.628810689078,1.60732404133,1.60993297207,accepted
+1.70492579828,0.566121332945,0.279308292381,1.70492579828,1.08086424166,2.0,11.0,1.0,0.420124762384,1.70492579828,1.08086424166,accepted
+0.0165663671253,0.212822740249,0.504873137573,0.0165663671253,2.92453740416,2.0,11.0,2.0,inf,0.0165663671253,2.92453740416,accepted
+2.38737801821,0.566121332945,0.279308292381,2.38737801821,0.630698001726,2.0,11.0,2.0,inf,2.38737801821,0.630698001726,accepted
+1.04762870982,0.576633872599,0.504873137573,1.04762870982,2.13580528603,2.0,11.0,2.0,1.69830997081,1.04762870982,2.13580528603,accepted
+0.536468121581,0.576633872599,0.504873137573,0.536468121581,2.73553122795,2.0,11.0,2.0,0.778746474716,0.536468121581,2.73553122795,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,3.0,12.0,1.0,inf,2.29929301685,-0.15504942379,accepted
+0.0165663671253,0.0155545813068,0.504873137573,0.0165663671253,2.35529491162,3.0,12.0,1.0,inf,0.0165663671253,2.35529491162,accepted
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,3.0,12.0,1.0,1.12224718366,1.62190535935,0.136268174271,accepted
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,3.0,12.0,1.0,1.04820003519,0.64746306875,0.845638450782,accepted
+0.256042378316,0.0463698338825,0.279308292381,0.256042378316,1.26555382083,3.0,12.0,1.0,0.877752816342,0.256042378316,1.26555382083,accepted
+0.0165663671253,0.212822740249,0.504873137573,0.0165663671253,2.92453740416,3.0,12.0,2.0,inf,0.0165663671253,2.92453740416,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,3.0,12.0,2.0,inf,2.29929301685,-0.15504942379,accepted
+0.889530419346,0.566121332945,0.279308292381,0.889530419346,1.76269463637,3.0,12.0,2.0,1.20474196581,0.889530419346,1.76269463637,accepted
+0.536468121581,0.576633872599,0.504873137573,0.536468121581,2.73553122795,3.0,12.0,2.0,0.759693920337,0.536468121581,2.73553122795,accepted
+1.94889870262,0.576633872599,0.279308292381,1.94889870262,0.930909274558,3.0,12.0,2.0,1.24030607966,1.94889870262,0.930909274558,accepted
+0.0165663671253,0.0463698338825,0.28247097374,0.0165663671253,1.8051127766,1.0,13.0,1.0,inf,0.0165663671253,1.8051127766,accepted
+2.56638173982,0.0463698338825,0.279308292381,2.56638173982,-0.275480866156,1.0,13.0,1.0,inf,2.56638173982,-0.275480866156,accepted
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,1.0,13.0,1.0,0.950464546741,0.64746306875,0.845638450782,accepted
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,1.0,13.0,1.0,0.86028218204,1.62190535935,0.136268174271,accepted
+0.256042378316,0.0463698338825,0.279308292381,0.256042378316,1.26555382083,1.0,13.0,1.0,0.481225952421,0.256042378316,1.26555382083,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,1.0,13.0,1.0,0.431135314415,2.29929301685,-0.15504942379,accepted
+1.83516223748,0.0155545813068,0.279308292381,1.83516223748,0.0248773879521,1.0,13.0,1.0,0.405678029353,1.83516223748,0.0248773879521,accepted
+0.34821792863,0.0155545813068,0.279308292381,0.34821792863,1.07449754844,1.0,13.0,1.0,0.355334212104,0.34821792863,1.07449754844,accepted
+0.0165663671253,0.0155545813068,0.504873137573,0.0165663671253,2.35529491162,1.0,13.0,2.0,inf,0.0165663671253,2.35529491162,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,1.0,13.0,2.0,inf,2.29929301685,-0.15504942379,accepted
+2.56638173982,0.0463698338825,0.279308292381,2.56638173982,-0.275480866156,1.0,14.0,1.0,inf,2.56638173982,-0.275480866156,accepted
+0.0165663671253,0.0463698338825,0.0795339234358,0.0165663671253,1.22663622198,1.0,14.0,1.0,inf,0.0165663671253,1.22663622198,accepted
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,1.0,14.0,1.0,1.12412612106,0.64746306875,0.845638450782,accepted
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,1.0,14.0,1.0,1.01220095823,1.62190535935,0.136268174271,accepted
+0.34821792863,0.0155545813068,0.279308292381,0.34821792863,1.07449754844,1.0,14.0,1.0,0.501068913648,0.34821792863,1.07449754844,accepted
+1.83516223748,0.0155545813068,0.279308292381,1.83516223748,0.0248773879521,1.0,14.0,1.0,0.459599462745,1.83516223748,0.0248773879521,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,1.0,14.0,1.0,0.392539119948,2.29929301685,-0.15504942379,accepted
+2.43361253814,0.0463698338825,0.28247097374,2.43361253814,-0.212210365713,1.0,14.0,1.0,0.109879966702,2.43361253814,-0.212210365713,accepted
+2.4612805104,0.0463698338825,0.28247097374,2.4612805104,-0.224673842253,1.0,14.0,1.0,0.0941910081714,2.4612805104,-0.224673842253,accepted
+0.0165663671253,0.0463698338825,0.28247097374,0.0165663671253,1.8051127766,1.0,14.0,2.0,inf,0.0165663671253,1.8051127766,accepted
+0.0165663671253,0.0463698338825,0.0795339234358,0.0165663671253,1.22663622198,0.0,15.0,1.0,inf,0.0165663671253,1.22663622198,accepted
+2.6013498168,0.0463698338825,0.279308292381,2.6013498168,-0.29077470027,0.0,15.0,1.0,inf,2.6013498168,-0.29077470027,accepted
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,0.0,15.0,1.0,1.11107304875,0.64746306875,0.845638450782,accepted
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,0.0,15.0,1.0,1.00039229833,1.62190535935,0.136268174271,accepted
+0.34821792863,0.0155545813068,0.279308292381,0.34821792863,1.07449754844,0.0,15.0,1.0,0.495165176902,0.34821792863,1.07449754844,accepted
+1.83516223748,0.0155545813068,0.279308292381,1.83516223748,0.0248773879521,0.0,15.0,1.0,0.454050796875,1.83516223748,0.0248773879521,accepted
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,0.0,15.0,1.0,0.318843290473,2.29929301685,-0.15504942379,accepted
+2.56638173982,0.0463698338825,0.279308292381,2.56638173982,-0.275480866156,0.0,15.0,1.0,0.0977515647743,2.56638173982,-0.275480866156,accepted
+2.4612805104,0.0463698338825,0.28247097374,2.4612805104,-0.224673842253,0.0,15.0,1.0,0.161991897714,2.4612805104,-0.224673842253,accepted
+2.32923887398,0.0463698338825,0.279308292381,2.32923887398,-0.168888576555,0.0,15.0,1.0,0.108553351541,2.32923887398,-0.168888576555,accepted
+0.0165663671253,0.0463698338825,0.0795339234358,0.0165663671253,1.22663622198,0.0,15.0,1.0,inf,0.0165663671253,1.22663622198,final
+2.6013498168,0.0463698338825,0.279308292381,2.6013498168,-0.29077470027,0.0,15.0,1.0,inf,2.6013498168,-0.29077470027,final
+0.64746306875,0.0463698338825,0.279308292381,0.64746306875,0.845638450782,0.0,15.0,1.0,1.11107304875,0.64746306875,0.845638450782,final
+1.62190535935,0.0155545813068,0.279308292381,1.62190535935,0.136268174271,0.0,15.0,1.0,1.00039229833,1.62190535935,0.136268174271,final
+0.34821792863,0.0155545813068,0.279308292381,0.34821792863,1.07449754844,0.0,15.0,1.0,0.495165176902,0.34821792863,1.07449754844,final
+1.83516223748,0.0155545813068,0.279308292381,1.83516223748,0.0248773879521,0.0,15.0,1.0,0.454050796875,1.83516223748,0.0248773879521,final
+2.29929301685,0.0463698338825,0.279308292381,2.29929301685,-0.15504942379,0.0,15.0,1.0,0.318843290473,2.29929301685,-0.15504942379,final
+2.56638173982,0.0463698338825,0.279308292381,2.56638173982,-0.275480866156,0.0,15.0,1.0,0.0977515647743,2.56638173982,-0.275480866156,final
+2.4612805104,0.0463698338825,0.28247097374,2.4612805104,-0.224673842253,0.0,15.0,1.0,0.161991897714,2.4612805104,-0.224673842253,final
+2.32923887398,0.0463698338825,0.279308292381,2.32923887398,-0.168888576555,0.0,15.0,1.0,0.108553351541,2.32923887398,-0.168888576555,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/1-opt_path.png
new file mode 100644
index 0000000000..8509206c7b
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/1-population.png
new file mode 100644
index 0000000000..1ff3e2bf29
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/opt_export_0.csv
new file mode 100644
index 0000000000..161889752a
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/opt_export_0.csv
@@ -0,0 +1,154 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+2.70882296276,2.84283672968,2.52112277912,2.70882296276,10.2875510042,0.0,1.0,3.0,inf,2.70882296276,10.2875510042,first
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,1.0,2.0,inf,0.681709359792,9.0451225346,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,1.0,1.0,inf,2.29929301685,2.51248918399,first
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,1.0,2.0,2.0,1.89960633519,8.21268741777,first
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,1.0,1.0,1.32021710558,0.919133180734,4.14503351583,first
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,1.0,1.0,inf,0.330134294538,11.0120200748,first
+0.995076558784,1.71556422993,2.89604636698,0.995076558784,10.9927238578,0.0,1.0,3.0,inf,0.995076558784,10.9927238578,first
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,1.0,1.0,0.753429911187,0.80362101989,7.27790740376,first
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,1.0,2.0,inf,2.14022167123,5.20847490655,first
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,1.0,1.0,0.679782894419,0.397923062881,8.29912156345,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,2.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.0691872853947,2.54253070325,1.08828069574,0.0691872853947,10.9853480716,0.0,2.0,1.0,inf,0.0691872853947,10.9853480716,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,2.0,1.0,1.00254712834,0.397923062881,8.29912156345,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,2.0,1.0,0.997452871661,0.919133180734,4.14503351583,accepted
+0.681709359792,0.912726723103,1.08828069574,0.681709359792,4.81806783617,0.0,2.0,1.0,0.723997174881,0.681709359792,4.81806783617,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,2.0,2.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,2.54253070325,0.139997004797,2.29929301685,4.486547639,0.0,2.0,2.0,inf,2.29929301685,4.486547639,accepted
+0.681709359792,1.83555869382,1.08828069574,0.681709359792,7.19056187402,0.0,2.0,2.0,1.80858644276,0.681709359792,7.19056187402,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,2.0,2.0,1.23583756428,2.14022167123,5.20847490655,accepted
+0.681709359792,2.54253070325,0.545474901224,0.681709359792,7.61881808162,0.0,2.0,3.0,inf,0.681709359792,7.61881808162,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,3.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.0691872853947,1.48553073161,1.08828069574,0.0691872853947,7.94463806509,0.0,3.0,1.0,inf,0.0691872853947,7.94463806509,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,3.0,1.0,1.14977160089,0.919133180734,4.14503351583,accepted
+0.681709359792,0.912726723103,1.08828069574,0.681709359792,4.81806783617,0.0,3.0,1.0,1.08058978931,0.681709359792,4.81806783617,accepted
+0.0691872853947,0.576633872599,2.0526990879,0.0691872853947,8.1038200019,0.0,3.0,2.0,inf,0.0691872853947,8.1038200019,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,3.0,2.0,inf,2.29929301685,2.51248918399,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,3.0,2.0,1.56200478483,2.14022167123,5.20847490655,accepted
+0.681709359792,1.83555869382,1.08828069574,0.681709359792,7.19056187402,0.0,3.0,2.0,1.44649848221,0.681709359792,7.19056187402,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,3.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.0691872853947,1.70310098182,1.08828069574,0.0691872853947,8.56880557153,0.0,3.0,3.0,inf,0.0691872853947,8.56880557153,accepted
+0.0165663671253,0.576633872599,1.19885353935,0.0165663671253,6.00272392176,3.0,4.0,1.0,inf,0.0165663671253,6.00272392176,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,3.0,4.0,1.0,inf,2.29929301685,1.29588025089,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,3.0,4.0,1.0,1.69064659605,0.919133180734,4.14503351583,accepted
+0.0691872853947,0.576633872599,0.842803534549,0.0691872853947,4.65514694695,3.0,4.0,1.0,0.790068377585,0.0691872853947,4.65514694695,accepted
+0.0691872853947,0.576633872599,1.08828069574,0.0691872853947,5.35072503792,3.0,4.0,2.0,inf,0.0691872853947,5.35072503792,accepted
+2.29929301685,1.48553073161,0.0469092149397,2.29929301685,2.00985856176,3.0,4.0,2.0,inf,2.29929301685,2.00985856176,accepted
+0.681709359792,0.912726723103,1.08828069574,0.681709359792,4.81806783617,3.0,4.0,2.0,2.0,0.681709359792,4.81806783617,accepted
+0.0691872853947,0.576633872599,1.08828069574,0.0691872853947,5.35072503792,3.0,4.0,3.0,inf,0.0691872853947,5.35072503792,accepted
+2.29929301685,0.576633872599,1.18464455036,2.29929301685,2.48273298759,3.0,4.0,3.0,inf,2.29929301685,2.48273298759,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,3.0,4.0,3.0,2.0,2.14022167123,5.20847490655,accepted
+0.0165663671253,0.576633872599,1.19885353935,0.0165663671253,6.00272392176,0.0,5.0,1.0,inf,0.0165663671253,6.00272392176,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,0.0,5.0,1.0,inf,2.29929301685,1.29588025089,accepted
+0.358782718973,0.576633872599,0.596527209179,0.358782718973,3.24609701676,0.0,5.0,1.0,1.69064659605,0.358782718973,3.24609701676,accepted
+0.0691872853947,0.576633872599,0.842803534549,0.0691872853947,4.65514694695,0.0,5.0,1.0,0.735579185158,0.0691872853947,4.65514694695,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,0.0,5.0,2.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,1.19885353935,0.0165663671253,6.00272392176,0.0,5.0,2.0,inf,0.0165663671253,6.00272392176,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,5.0,2.0,1.45693107606,0.919133180734,4.14503351583,accepted
+0.681709359792,0.912726723103,1.08828069574,0.681709359792,4.81806783617,0.0,5.0,2.0,0.628495129426,0.681709359792,4.81806783617,accepted
+0.0691872853947,0.576633872599,1.08828069574,0.0691872853947,5.35072503792,0.0,5.0,2.0,0.543068923945,0.0691872853947,5.35072503792,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,0.0,5.0,3.0,inf,2.29929301685,1.29588025089,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,4.0,6.0,1.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,4.0,6.0,1.0,inf,0.0165663671253,4.41695082247,accepted
+0.358782718973,0.576633872599,0.596527209179,0.358782718973,3.24609701676,4.0,6.0,1.0,2.0,0.358782718973,3.24609701676,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,4.0,6.0,2.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.316482774056,1.19885353935,0.0165663671253,5.24289638656,4.0,6.0,2.0,inf,0.0165663671253,5.24289638656,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,4.0,6.0,2.0,1.82803840323,0.919133180734,4.14503351583,accepted
+0.0691872853947,0.576633872599,0.842803534549,0.0691872853947,4.65514694695,4.0,6.0,2.0,0.673539875554,0.0691872853947,4.65514694695,accepted
+0.0165663671253,0.576633872599,1.19885353935,0.0165663671253,6.00272392176,4.0,6.0,3.0,inf,0.0165663671253,6.00272392176,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,4.0,6.0,3.0,inf,2.29929301685,1.29588025089,accepted
+0.681709359792,0.912726723103,1.08828069574,0.681709359792,4.81806783617,4.0,6.0,3.0,2.0,0.681709359792,4.81806783617,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,0.0,7.0,1.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,0.0,7.0,1.0,inf,0.0165663671253,4.41695082247,accepted
+0.656292668929,0.576633872599,0.655321315316,0.656292668929,2.94034223899,0.0,7.0,1.0,1.47493946129,0.656292668929,2.94034223899,accepted
+0.194676739908,0.576633872599,0.596527209179,0.194676739908,3.58148630276,0.0,7.0,1.0,0.525060538713,0.194676739908,3.58148630276,accepted
+0.358782718973,0.576633872599,0.596527209179,0.358782718973,3.24609701676,0.0,7.0,1.0,0.40764569509,0.358782718973,3.24609701676,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,0.0,7.0,2.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,0.0,7.0,2.0,inf,0.0165663671253,4.41695082247,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,7.0,2.0,2.0,0.919133180734,4.14503351583,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,0.0,7.0,3.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,0.0,7.0,3.0,inf,0.0165663671253,4.41695082247,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,7.0,8.0,1.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,7.0,8.0,1.0,inf,0.0165663671253,4.41695082247,accepted
+1.52459634457,0.576633872599,0.596527209179,1.52459634457,1.89452845807,7.0,8.0,1.0,0.97565672628,1.52459634457,1.89452845807,accepted
+0.656292668929,0.576633872599,0.655321315316,0.656292668929,2.94034223899,7.0,8.0,1.0,0.94375746563,0.656292668929,2.94034223899,accepted
+1.89691748351,0.576633872599,0.596527209179,1.89691748351,1.59149984638,7.0,8.0,1.0,0.531181995657,1.89691748351,1.59149984638,accepted
+0.194676739908,0.576633872599,0.596527209179,0.194676739908,3.58148630276,7.0,8.0,1.0,0.525060538713,0.194676739908,3.58148630276,accepted
+0.358782718973,0.576633872599,0.596527209179,0.358782718973,3.24609701676,7.0,8.0,1.0,0.40764569509,0.358782718973,3.24609701676,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,7.0,8.0,2.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,7.0,8.0,2.0,inf,0.0165663671253,4.41695082247,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,7.0,8.0,2.0,2.0,0.919133180734,4.14503351583,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,8.0,9.0,1.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,8.0,9.0,1.0,inf,0.0165663671253,4.41695082247,accepted
+1.52459634457,0.576633872599,0.596527209179,1.52459634457,1.89452845807,8.0,9.0,1.0,0.97565672628,1.52459634457,1.89452845807,accepted
+0.656292668929,0.576633872599,0.655321315316,0.656292668929,2.94034223899,8.0,9.0,1.0,0.94375746563,0.656292668929,2.94034223899,accepted
+1.89691748351,0.576633872599,0.596527209179,1.89691748351,1.59149984638,8.0,9.0,1.0,0.531181995657,1.89691748351,1.59149984638,accepted
+0.194676739908,0.576633872599,0.596527209179,0.194676739908,3.58148630276,8.0,9.0,1.0,0.525060538713,0.194676739908,3.58148630276,accepted
+0.358782718973,0.576633872599,0.596527209179,0.358782718973,3.24609701676,8.0,9.0,1.0,0.40764569509,0.358782718973,3.24609701676,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,8.0,9.0,2.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,8.0,9.0,2.0,inf,0.0165663671253,4.41695082247,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,8.0,9.0,2.0,2.0,0.919133180734,4.14503351583,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,5.0,10.0,1.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,5.0,10.0,1.0,inf,0.0165663671253,4.41695082247,accepted
+1.52459634457,0.576633872599,0.596527209179,1.52459634457,1.89452845807,5.0,10.0,1.0,0.97565672628,1.52459634457,1.89452845807,accepted
+0.656292668929,0.576633872599,0.655321315316,0.656292668929,2.94034223899,5.0,10.0,1.0,0.824487553818,0.656292668929,2.94034223899,accepted
+1.89691748351,0.576633872599,0.596527209179,1.89691748351,1.59149984638,5.0,10.0,1.0,0.531181995657,1.89691748351,1.59149984638,accepted
+0.194676739908,0.576633872599,0.596527209179,0.194676739908,3.58148630276,5.0,10.0,1.0,0.419811161256,0.194676739908,3.58148630276,accepted
+0.482424169193,0.576633872599,0.596527209179,0.482424169193,3.04289665803,5.0,10.0,1.0,0.228295668884,0.482424169193,3.04289665803,accepted
+0.358782718973,0.576633872599,0.596527209179,0.358782718973,3.24609701676,5.0,10.0,1.0,0.224519289269,0.358782718973,3.24609701676,accepted
+0.304414627912,0.576633872599,0.655321315316,0.304414627912,3.50025267978,5.0,10.0,1.0,0.179350026206,0.304414627912,3.50025267978,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,5.0,10.0,2.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,7.0,11.0,1.0,inf,0.0165663671253,4.41695082247,accepted
+2.29929301685,0.576633872599,0.585728961179,2.29929301685,1.27505935185,7.0,11.0,1.0,inf,2.29929301685,1.27505935185,accepted
+1.52459634457,0.576633872599,0.596527209179,1.52459634457,1.89452845807,7.0,11.0,1.0,0.972792773079,1.52459634457,1.89452845807,accepted
+0.656292668929,0.576633872599,0.655321315316,0.656292668929,2.94034223899,7.0,11.0,1.0,0.822049260952,0.656292668929,2.94034223899,accepted
+1.89691748351,0.576633872599,0.596527209179,1.89691748351,1.59149984638,7.0,11.0,1.0,0.53653777306,1.89691748351,1.59149984638,accepted
+0.194676739908,0.576633872599,0.596527209179,0.194676739908,3.58148630276,7.0,11.0,1.0,0.417864765892,0.194676739908,3.58148630276,accepted
+0.482424169193,0.576633872599,0.596527209179,0.482424169193,3.04289665803,7.0,11.0,1.0,0.227646469705,0.482424169193,3.04289665803,accepted
+0.358782718973,0.576633872599,0.596527209179,0.358782718973,3.24609701676,7.0,11.0,1.0,0.223548200096,0.358782718973,3.24609701676,accepted
+0.304414627912,0.576633872599,0.655321315316,0.304414627912,3.50025267978,7.0,11.0,1.0,0.178637905038,0.304414627912,3.50025267978,accepted
+2.29929301685,0.576633872599,0.596527209179,2.29929301685,1.29588025089,7.0,11.0,2.0,inf,2.29929301685,1.29588025089,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,2.0,12.0,1.0,inf,0.0165663671253,4.41695082247,accepted
+2.29929301685,0.576633872599,0.585728961179,2.29929301685,1.27505935185,2.0,12.0,1.0,inf,2.29929301685,1.27505935185,accepted
+1.15529319578,0.576633872599,0.655321315316,1.15529319578,2.36668082782,2.0,12.0,1.0,0.713241254344,1.15529319578,2.36668082782,accepted
+1.52459634457,0.576633872599,0.596527209179,1.52459634457,1.89452845807,2.0,12.0,1.0,0.571609582868,1.52459634457,1.89452845807,accepted
+1.89691748351,0.576633872599,0.596527209179,1.89691748351,1.59149984638,2.0,12.0,1.0,0.53653777306,1.89691748351,1.59149984638,accepted
+0.656292668929,0.576633872599,0.655321315316,0.656292668929,2.94034223899,2.0,12.0,1.0,0.509991196819,0.656292668929,2.94034223899,accepted
+0.194676739908,0.576633872599,0.596527209179,0.194676739908,3.58148630276,2.0,12.0,1.0,0.417864765892,0.194676739908,3.58148630276,accepted
+0.482424169193,0.576633872599,0.596527209179,0.482424169193,3.04289665803,2.0,12.0,1.0,0.227646469705,0.482424169193,3.04289665803,accepted
+0.358782718973,0.576633872599,0.596527209179,0.358782718973,3.24609701676,2.0,12.0,1.0,0.223548200096,0.358782718973,3.24609701676,accepted
+0.304414627912,0.576633872599,0.655321315316,0.304414627912,3.50025267978,2.0,12.0,1.0,0.178637905038,0.304414627912,3.50025267978,accepted
+0.0165663671253,0.0155545813068,0.655321315316,0.0165663671253,2.78922604188,3.0,13.0,1.0,inf,0.0165663671253,2.78922604188,accepted
+2.29929301685,0.576633872599,0.152305582341,2.29929301685,0.479895903387,3.0,13.0,1.0,inf,2.29929301685,0.479895903387,accepted
+1.15529319578,0.576633872599,0.655321315316,1.15529319578,2.36668082782,3.0,13.0,1.0,1.04805393288,1.15529319578,2.36668082782,accepted
+1.89691748351,0.576633872599,0.596527209179,1.89691748351,1.59149984638,3.0,13.0,1.0,0.951946067121,1.89691748351,1.59149984638,accepted
+1.52459634457,0.576633872599,0.596527209179,1.52459634457,1.89452845807,3.0,13.0,1.0,0.660558802593,1.52459634457,1.89452845807,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,3.0,13.0,2.0,inf,0.0165663671253,4.41695082247,accepted
+2.29929301685,0.212822740249,0.585728961179,2.29929301685,0.60144572256,3.0,13.0,2.0,inf,2.29929301685,0.60144572256,accepted
+0.656292668929,0.576633872599,0.655321315316,0.656292668929,2.94034223899,3.0,13.0,2.0,1.43579666926,0.656292668929,2.94034223899,accepted
+0.194676739908,0.576633872599,0.596527209179,0.194676739908,3.58148630276,3.0,13.0,2.0,0.564203330742,0.194676739908,3.58148630276,accepted
+0.482424169193,0.576633872599,0.596527209179,0.482424169193,3.04289665803,3.0,13.0,2.0,0.370257775075,0.482424169193,3.04289665803,accepted
+0.0165663671253,0.0155545813068,0.655321315316,0.0165663671253,2.78922604188,7.0,14.0,1.0,inf,0.0165663671253,2.78922604188,accepted
+2.29929301685,0.0155545813068,0.152305582341,2.29929301685,-0.355766739431,7.0,14.0,1.0,inf,2.29929301685,-0.355766739431,accepted
+1.89691748351,0.576633872599,0.596527209179,1.89691748351,1.59149984638,7.0,14.0,1.0,1.05489019439,1.89691748351,1.59149984638,accepted
+1.15529319578,0.576633872599,0.655321315316,1.15529319578,2.36668082782,7.0,14.0,1.0,0.94510980561,1.15529319578,2.36668082782,accepted
+1.52459634457,0.576633872599,0.596527209179,1.52459634457,1.89452845807,7.0,14.0,1.0,0.57136628542,1.52459634457,1.89452845807,accepted
+0.0165663671253,0.0155545813068,0.655321315316,0.0165663671253,2.78922604188,7.0,14.0,2.0,inf,0.0165663671253,2.78922604188,accepted
+2.29929301685,0.398236255487,0.152305582341,2.29929301685,0.18244264734,7.0,14.0,2.0,inf,2.29929301685,0.18244264734,accepted
+2.29929301685,0.576633872599,0.152305582341,2.29929301685,0.479895903387,7.0,14.0,3.0,inf,2.29929301685,0.479895903387,accepted
+0.0165663671253,0.576633872599,0.655321315316,0.0165663671253,4.41695082247,7.0,14.0,3.0,inf,0.0165663671253,4.41695082247,accepted
+0.656292668929,0.576633872599,0.655321315316,0.656292668929,2.94034223899,7.0,14.0,3.0,2.0,0.656292668929,2.94034223899,accepted
+0.0165663671253,0.0155545813068,0.655321315316,0.0165663671253,2.78922604188,0.0,15.0,1.0,inf,0.0165663671253,2.78922604188,accepted
+2.29929301685,0.0155545813068,0.152305582341,2.29929301685,-0.355766739431,0.0,15.0,1.0,inf,2.29929301685,-0.355766739431,accepted
+0.750728690007,0.0155545813068,0.655321315316,0.750728690007,1.50874403776,0.0,15.0,1.0,2.0,0.750728690007,1.50874403776,accepted
+0.0165663671253,0.0155545813068,0.655321315316,0.0165663671253,2.78922604188,0.0,15.0,2.0,inf,0.0165663671253,2.78922604188,accepted
+2.29929301685,0.0155545813068,0.152305582341,2.29929301685,-0.355766739431,0.0,15.0,2.0,inf,2.29929301685,-0.355766739431,accepted
+1.89691748351,0.576633872599,0.596527209179,1.89691748351,1.59149984638,0.0,15.0,2.0,1.05489019439,1.89691748351,1.59149984638,accepted
+1.15529319578,0.576633872599,0.655321315316,1.15529319578,2.36668082782,0.0,15.0,2.0,0.94510980561,1.15529319578,2.36668082782,accepted
+1.52459634457,0.576633872599,0.596527209179,1.52459634457,1.89452845807,0.0,15.0,2.0,0.57136628542,1.52459634457,1.89452845807,accepted
+2.29929301685,0.398236255487,0.152305582341,2.29929301685,0.18244264734,0.0,15.0,3.0,inf,2.29929301685,0.18244264734,accepted
+0.0165663671253,0.0155545813068,0.655321315316,0.0165663671253,2.78922604188,0.0,15.0,3.0,inf,0.0165663671253,2.78922604188,accepted
+0.0165663671253,0.0155545813068,0.655321315316,0.0165663671253,2.78922604188,0.0,15.0,1.0,inf,0.0165663671253,2.78922604188,final
+2.29929301685,0.0155545813068,0.152305582341,2.29929301685,-0.355766739431,0.0,15.0,1.0,inf,2.29929301685,-0.355766739431,final
+0.750728690007,0.0155545813068,0.655321315316,0.750728690007,1.50874403776,0.0,15.0,1.0,2.0,0.750728690007,1.50874403776,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/1-opt_path.png
new file mode 100644
index 0000000000..ed38b1023e
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/1-population.png
new file mode 100644
index 0000000000..1d7af12092
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/opt_export_0.csv
new file mode 100644
index 0000000000..dd83b0d591
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/opt_export_0.csv
@@ -0,0 +1,154 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+2.70882296276,2.84283672968,2.52112277912,2.70882296276,10.2875510042,0.0,1.0,3.0,inf,2.70882296276,10.2875510042,first
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,1.0,2.0,inf,0.681709359792,9.0451225346,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,1.0,1.0,inf,2.29929301685,2.51248918399,first
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,1.0,2.0,2.0,1.89960633519,8.21268741777,first
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,1.0,1.0,1.32021710558,0.919133180734,4.14503351583,first
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,1.0,1.0,inf,0.330134294538,11.0120200748,first
+0.995076558784,1.71556422993,2.89604636698,0.995076558784,10.9927238578,0.0,1.0,3.0,inf,0.995076558784,10.9927238578,first
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,1.0,1.0,0.753429911187,0.80362101989,7.27790740376,first
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,1.0,2.0,inf,2.14022167123,5.20847490655,first
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,1.0,1.0,0.679782894419,0.397923062881,8.29912156345,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,2.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,2.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,0.0,2.0,1.0,1.64639261039,0.681709359792,3.97319160496,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,2.0,1.0,1.00668391667,0.397923062881,8.29912156345,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,0.0,2.0,2.0,inf,0.681709359792,3.97319160496,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,2.0,3.0,inf,0.681709359792,9.0451225346,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,2.0,3.0,inf,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,2.0,3.0,2.0,0.80362101989,7.27790740376,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,2.0,4.0,inf,2.14022167123,5.20847490655,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,2.0,4.0,inf,0.681709359792,9.0451225346,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,2.0,3.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,3.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,2.0,3.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,3.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,2.0,3.0,3.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,2.0,3.0,3.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,2.0,3.0,3.0,1.10703730079,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,3.0,4.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,4.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,3.0,4.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,4.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,3.0,4.0,3.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,3.0,4.0,3.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,3.0,4.0,3.0,1.10703730079,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,4.0,5.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,4.0,5.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,4.0,5.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,4.0,5.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,4.0,5.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,4.0,5.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,4.0,5.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,5.0,6.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,5.0,6.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,5.0,6.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,5.0,6.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,5.0,6.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,5.0,6.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,5.0,6.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,6.0,7.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,6.0,7.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,6.0,7.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,6.0,7.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,6.0,7.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,6.0,7.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,6.0,7.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,7.0,8.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,7.0,8.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,7.0,8.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,7.0,8.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,7.0,8.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,7.0,8.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,7.0,8.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,8.0,9.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,8.0,9.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,8.0,9.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,8.0,9.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,8.0,9.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,8.0,9.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,8.0,9.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,9.0,10.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,9.0,10.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,9.0,10.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,9.0,10.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,9.0,10.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,9.0,10.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,9.0,10.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,10.0,11.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,10.0,11.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,10.0,11.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,10.0,11.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,10.0,11.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,10.0,11.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,10.0,11.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,11.0,12.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,11.0,12.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,11.0,12.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,11.0,12.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,11.0,12.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,11.0,12.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,11.0,12.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,12.0,13.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,12.0,13.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,12.0,13.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,12.0,13.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,12.0,13.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,12.0,13.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,12.0,13.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,13.0,14.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,13.0,14.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,13.0,14.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,13.0,14.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,13.0,14.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,13.0,14.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,13.0,14.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,14.0,15.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,14.0,15.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,14.0,15.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,14.0,15.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,1.0,inf,2.29929301685,2.51248918399,final
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,1.0,inf,0.330134294538,7.62026049781,final
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,14.0,15.0,1.0,2.0,0.681709359792,3.97319160496,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/1-opt_path.png
new file mode 100644
index 0000000000..ed38b1023e
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/1-population.png
new file mode 100644
index 0000000000..1d7af12092
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/opt_export_0.csv
new file mode 100644
index 0000000000..dd83b0d591
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/opt_export_0.csv
@@ -0,0 +1,154 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+2.70882296276,2.84283672968,2.52112277912,2.70882296276,10.2875510042,0.0,1.0,3.0,inf,2.70882296276,10.2875510042,first
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,1.0,2.0,inf,0.681709359792,9.0451225346,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,1.0,1.0,inf,2.29929301685,2.51248918399,first
+1.89960633519,2.38063696478,1.69432268028,1.89960633519,8.21268741777,0.0,1.0,2.0,2.0,1.89960633519,8.21268741777,first
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,1.0,1.0,1.32021710558,0.919133180734,4.14503351583,first
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,1.0,1.0,inf,0.330134294538,11.0120200748,first
+0.995076558784,1.71556422993,2.89604636698,0.995076558784,10.9927238578,0.0,1.0,3.0,inf,0.995076558784,10.9927238578,first
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,1.0,1.0,0.753429911187,0.80362101989,7.27790740376,first
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,1.0,2.0,inf,2.14022167123,5.20847490655,first
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,1.0,1.0,0.679782894419,0.397923062881,8.29912156345,first
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,0.0,2.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,0.0,2.0,1.0,inf,0.330134294538,11.0120200748,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,0.0,2.0,1.0,1.64639261039,0.681709359792,3.97319160496,accepted
+0.397923062881,1.89213335302,1.21659871708,0.397923062881,8.29912156345,0.0,2.0,1.0,1.00668391667,0.397923062881,8.29912156345,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,0.0,2.0,2.0,inf,0.681709359792,3.97319160496,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,2.0,3.0,inf,0.681709359792,9.0451225346,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,0.0,2.0,3.0,inf,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,0.0,2.0,3.0,2.0,0.80362101989,7.27790740376,accepted
+2.14022167123,1.92486494405,1.00334894122,2.14022167123,5.20847490655,0.0,2.0,4.0,inf,2.14022167123,5.20847490655,accepted
+0.681709359792,2.54253070325,1.08828069574,0.681709359792,9.0451225346,0.0,2.0,4.0,inf,0.681709359792,9.0451225346,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,2.0,3.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,3.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,2.0,3.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,2.0,3.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,2.0,3.0,3.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,2.0,3.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,2.0,3.0,3.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,2.0,3.0,3.0,1.10703730079,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,3.0,4.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,4.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,3.0,4.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,3.0,4.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+0.330134294538,1.81360414597,2.21669701166,0.330134294538,11.0120200748,3.0,4.0,3.0,inf,0.330134294538,11.0120200748,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,3.0,4.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,3.0,4.0,3.0,1.32021710558,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,3.0,4.0,3.0,1.10703730079,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,4.0,5.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,4.0,5.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,4.0,5.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,4.0,5.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,4.0,5.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,4.0,5.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,4.0,5.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,4.0,5.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,5.0,6.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,5.0,6.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,5.0,6.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,5.0,6.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,5.0,6.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,5.0,6.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,5.0,6.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,5.0,6.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,6.0,7.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,6.0,7.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,6.0,7.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,6.0,7.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,6.0,7.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,6.0,7.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,6.0,7.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,6.0,7.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,7.0,8.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,7.0,8.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,7.0,8.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,7.0,8.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,7.0,8.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,7.0,8.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,7.0,8.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,7.0,8.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,8.0,9.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,8.0,9.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,8.0,9.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,8.0,9.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,8.0,9.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,8.0,9.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,8.0,9.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,8.0,9.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,9.0,10.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,9.0,10.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,9.0,10.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,9.0,10.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,9.0,10.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,9.0,10.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,9.0,10.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,9.0,10.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,10.0,11.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,10.0,11.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,10.0,11.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,10.0,11.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,10.0,11.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,10.0,11.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,10.0,11.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,10.0,11.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,11.0,12.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,11.0,12.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,11.0,12.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,11.0,12.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,11.0,12.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,11.0,12.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,11.0,12.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,11.0,12.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,12.0,13.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,12.0,13.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,12.0,13.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,12.0,13.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,12.0,13.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,12.0,13.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,12.0,13.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,12.0,13.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,13.0,14.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,13.0,14.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,13.0,14.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,13.0,14.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,13.0,14.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,13.0,14.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,13.0,14.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,13.0,14.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,1.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,1.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,14.0,15.0,1.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,2.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,2.0,inf,0.330134294538,7.62026049781,accepted
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,14.0,15.0,2.0,2.0,0.681709359792,3.97319160496,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,3.0,inf,2.29929301685,2.51248918399,accepted
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,3.0,inf,0.330134294538,7.62026049781,accepted
+0.919133180734,0.029259763432,1.84069124675,0.919133180734,4.14503351583,14.0,15.0,3.0,1.69252280063,0.919133180734,4.14503351583,accepted
+0.80362101989,0.500333901844,2.54342435732,0.80362101989,7.27790740376,14.0,15.0,3.0,0.979492240919,0.80362101989,7.27790740376,accepted
+2.29929301685,0.576633872599,1.19885353935,2.29929301685,2.51248918399,14.0,15.0,1.0,inf,2.29929301685,2.51248918399,final
+0.330134294538,0.576633872599,2.21669701166,0.330134294538,7.62026049781,14.0,15.0,1.0,inf,0.330134294538,7.62026049781,final
+0.681709359792,0.576633872599,1.08828069574,0.681709359792,3.97319160496,14.0,15.0,1.0,2.0,0.681709359792,3.97319160496,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1/1-opt_path.png
new file mode 100644
index 0000000000..fcc639b004
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1/1-population.png
new file mode 100644
index 0000000000..fb5365785b
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1/opt_export_0.csv
new file mode 100644
index 0000000000..422ae2a2a6
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/continuous/unconstrained/ZDT1/opt_export_0.csv
@@ -0,0 +1,161 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+0.902940987587,0.947612243227,0.840374259707,0.902940987587,3.96681957049,0.0,1.0,3.0,inf,0.902940987587,3.96681957049,first
+0.227236453264,0.847510234417,0.362760231915,0.227236453264,3.60499993579,0.0,1.0,2.0,inf,0.227236453264,3.60499993579,first
+0.766431005617,0.192211290866,0.39961784645,0.766431005617,1.3169883176,0.0,1.0,1.0,inf,0.766431005617,1.3169883176,first
+0.633202111729,0.793545654927,0.564774226762,0.633202111729,3.28234279694,0.0,1.0,2.0,2.0,0.633202111729,3.28234279694,first
+0.306377726911,0.00975325447734,0.613563748918,0.306377726911,1.93224686343,0.0,1.0,1.0,1.32735741676,0.306377726911,1.93224686343,first
+0.110044764846,0.604534715322,0.738899003886,0.110044764846,4.28628616584,0.0,1.0,1.0,inf,0.110044764846,4.28628616584,first
+0.331692186261,0.571854743308,0.965348788995,0.331692186261,4.24730587019,0.0,1.0,3.0,inf,0.331692186261,4.24730587019,first
+0.267873673297,0.166777967281,0.847808119107,0.267873673297,3.00298144409,0.0,1.0,1.0,0.749061564967,0.267873673297,3.00298144409,first
+0.713407223745,0.641621648018,0.334449647072,0.713407223745,2.25417202135,0.0,1.0,2.0,inf,0.713407223745,2.25417202135,first
+0.13264102096,0.630711117673,0.405532905694,0.13264102096,3.37050011696,0.0,1.0,1.0,0.672642583243,0.13264102096,3.37050011696,first
+0.766431005617,0.192211290866,0.39961784645,0.766431005617,1.3169883176,0.0,2.0,1.0,inf,0.766431005617,1.3169883176,accepted
+0.110044764846,0.604534715322,0.738899003886,0.110044764846,4.28628616584,0.0,2.0,1.0,inf,0.110044764846,4.28628616584,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,0.0,2.0,1.0,1.65715637093,0.227236453264,1.41712807233,accepted
+0.13264102096,0.630711117673,0.405532905694,0.13264102096,3.37050011696,0.0,2.0,1.0,1.14481568274,0.13264102096,3.37050011696,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,0.0,2.0,2.0,inf,0.227236453264,1.70412941407,accepted
+0.227236453264,0.304242241034,0.362760231915,0.227236453264,2.17521187389,0.0,2.0,3.0,inf,0.227236453264,2.17521187389,accepted
+0.766431005617,0.399860977754,0.39961784645,0.766431005617,1.78453837074,0.0,2.0,3.0,inf,0.766431005617,1.78453837074,accepted
+0.306377726911,0.00975325447734,0.613563748918,0.306377726911,1.93224686343,0.0,2.0,3.0,2.0,0.306377726911,1.93224686343,accepted
+0.713407223745,0.641621648018,0.334449647072,0.713407223745,2.25417202135,0.0,2.0,4.0,inf,0.713407223745,2.25417202135,accepted
+0.227236453264,0.192211290866,0.785175960228,0.227236453264,2.98689433584,0.0,2.0,4.0,inf,0.227236453264,2.98689433584,accepted
+0.110044764846,0.207941663733,0.738899003886,0.110044764846,3.19042251763,0.0,3.0,1.0,inf,0.110044764846,3.19042251763,accepted
+0.766431005617,0.184854460225,0.39961784645,0.766431005617,1.300728344,0.0,3.0,1.0,inf,0.766431005617,1.300728344,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,0.0,3.0,1.0,1.2940861679,0.227236453264,1.41712807233,accepted
+0.182236086852,0.192211290866,0.39961784645,0.182236086852,2.0642954793,0.0,3.0,1.0,1.11694361992,0.182236086852,2.0642954793,accepted
+0.766431005617,0.192211290866,0.39961784645,0.766431005617,1.3169883176,0.0,3.0,2.0,inf,0.766431005617,1.3169883176,accepted
+0.110044764846,0.192211290866,0.926658862253,0.110044764846,3.66420727224,0.0,3.0,2.0,inf,0.110044764846,3.66420727224,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,0.0,3.0,2.0,1.84044490677,0.227236453264,1.70412941407,accepted
+0.13264102096,0.630711117673,0.405532905694,0.13264102096,3.37050011696,0.0,3.0,2.0,1.01360466361,0.13264102096,3.37050011696,accepted
+0.110044764846,0.604534715322,0.738899003886,0.110044764846,4.28628616584,0.0,3.0,3.0,inf,0.110044764846,4.28628616584,accepted
+0.766431005617,0.192211290866,0.570443976105,0.766431005617,1.70051534965,0.0,3.0,3.0,inf,0.766431005617,1.70051534965,accepted
+0.766431005617,0.184854460225,0.39961784645,0.766431005617,1.300728344,0.0,4.0,1.0,inf,0.766431005617,1.300728344,accepted
+0.110044764846,0.207941663733,0.37081825509,0.110044764846,2.18754187519,0.0,4.0,1.0,inf,0.110044764846,2.18754187519,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,0.0,4.0,1.0,1.75104033403,0.227236453264,1.41712807233,accepted
+0.182236086852,0.192211290866,0.39961784645,0.182236086852,2.0642954793,0.0,4.0,1.0,1.04728459672,0.182236086852,2.0642954793,accepted
+0.766431005617,0.192211290866,0.39961784645,0.766431005617,1.3169883176,0.0,4.0,2.0,inf,0.766431005617,1.3169883176,accepted
+0.110044764846,0.115869054598,0.738899003886,0.110044764846,2.93801908476,0.0,4.0,2.0,inf,0.110044764846,2.93801908476,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,0.0,4.0,2.0,2.0,0.227236453264,1.70412941407,accepted
+0.110044764846,0.207941663733,0.738899003886,0.110044764846,3.19042251763,0.0,4.0,3.0,inf,0.110044764846,3.19042251763,accepted
+0.766431005617,0.192211290866,0.570443976105,0.766431005617,1.70051534965,0.0,4.0,3.0,inf,0.766431005617,1.70051534965,accepted
+0.330898024452,0.207941663733,0.738899003886,0.330898024452,2.71321497121,0.0,4.0,3.0,2.0,0.330898024452,2.71321497121,accepted
+0.110044764846,0.184854460225,0.139331453512,0.110044764846,1.50665039766,0.0,5.0,1.0,inf,0.110044764846,1.50665039766,accepted
+0.766431005617,0.184854460225,0.0769799126026,0.766431005617,0.61568905179,0.0,5.0,1.0,inf,0.766431005617,0.61568905179,accepted
+0.694784936191,0.184854460225,0.39961784645,0.694784936191,1.37029270323,0.0,5.0,1.0,1.72098090572,0.694784936191,1.37029270323,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,0.0,5.0,1.0,1.04389327594,0.227236453264,1.41712807233,accepted
+0.110044764846,0.207941663733,0.37081825509,0.110044764846,2.18754187519,0.0,5.0,2.0,inf,0.110044764846,2.18754187519,accepted
+0.766431005617,0.184854460225,0.203061229597,0.766431005617,0.875972693903,0.0,5.0,2.0,inf,0.766431005617,0.875972693903,accepted
+0.227236453264,0.192211290866,0.291229140081,0.227236453264,1.70412941407,0.0,5.0,2.0,1.79604835097,0.227236453264,1.70412941407,accepted
+0.182236086852,0.192211290866,0.39961784645,0.182236086852,2.0642954793,0.0,5.0,2.0,0.547116393146,0.182236086852,2.0642954793,accepted
+0.110044764846,0.115869054598,0.738899003886,0.110044764846,2.93801908476,0.0,5.0,3.0,inf,0.110044764846,2.93801908476,accepted
+0.766431005617,0.207941663733,0.218440438439,0.766431005617,0.957477514551,0.0,5.0,3.0,inf,0.766431005617,0.957477514551,accepted
+0.766431005617,0.184854460225,0.0769799126026,0.766431005617,0.61568905179,0.0,6.0,1.0,inf,0.766431005617,0.61568905179,accepted
+0.110044764846,0.184854460225,0.0368869491007,0.110044764846,1.2371480565,0.0,6.0,1.0,inf,0.110044764846,1.2371480565,accepted
+0.337615172224,0.184854460225,0.0769799126026,0.337615172224,1.00909282563,0.0,6.0,1.0,2.0,0.337615172224,1.00909282563,accepted
+0.110044764846,0.184854460225,0.139331453512,0.110044764846,1.50665039766,0.0,6.0,2.0,inf,0.110044764846,1.50665039766,accepted
+0.766431005617,0.184854460225,0.203061229597,0.766431005617,0.875972693903,0.0,6.0,2.0,inf,0.766431005617,0.875972693903,accepted
+0.694784936191,0.184854460225,0.39961784645,0.694784936191,1.37029270323,0.0,6.0,2.0,1.67951302037,0.694784936191,1.37029270323,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,0.0,6.0,2.0,0.930869456237,0.227236453264,1.41712807233,accepted
+0.148086928797,0.184854460225,0.139331453512,0.148086928797,1.43208570884,0.0,6.0,2.0,0.32048697963,0.148086928797,1.43208570884,accepted
+0.766431005617,0.207941663733,0.218440438439,0.766431005617,0.957477514551,0.0,6.0,3.0,inf,0.766431005617,0.957477514551,accepted
+0.110044764846,0.184854460225,0.168291045858,0.110044764846,1.58337958114,0.0,6.0,3.0,inf,0.110044764846,1.58337958114,accepted
+0.766431005617,0.184854460225,0.0769799126026,0.766431005617,0.61568905179,2.0,7.0,1.0,inf,0.766431005617,0.61568905179,accepted
+0.110044764846,0.184854460225,0.0368869491007,0.110044764846,1.2371480565,2.0,7.0,1.0,inf,0.110044764846,1.2371480565,accepted
+0.337615172224,0.184854460225,0.0769799126026,0.337615172224,1.00909282563,2.0,7.0,1.0,1.47967201149,0.337615172224,1.00909282563,accepted
+0.535774680445,0.184854460225,0.0368869491007,0.535774680445,0.720668788305,2.0,7.0,1.0,1.28633056549,0.535774680445,0.720668788305,accepted
+0.110044764846,0.184854460225,0.139331453512,0.110044764846,1.50665039766,2.0,7.0,2.0,inf,0.110044764846,1.50665039766,accepted
+0.766431005617,0.220241048192,0.0769799126026,0.766431005617,0.687574395089,2.0,7.0,2.0,inf,0.766431005617,0.687574395089,accepted
+0.694784936191,0.184854460225,0.39961784645,0.694784936191,1.37029270323,2.0,7.0,2.0,1.71216252914,0.694784936191,1.37029270323,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,2.0,7.0,2.0,0.908333052367,0.227236453264,1.41712807233,accepted
+0.148086928797,0.184854460225,0.139331453512,0.148086928797,1.43208570884,2.0,7.0,2.0,0.287837470856,0.148086928797,1.43208570884,accepted
+0.766431005617,0.184854460225,0.203061229597,0.766431005617,0.875972693903,2.0,7.0,3.0,inf,0.766431005617,0.875972693903,accepted
+0.110044764846,0.184854460225,0.0368869491007,0.110044764846,1.2371480565,6.0,8.0,1.0,inf,0.110044764846,1.2371480565,accepted
+0.766431005617,0.00919704931071,0.0769799126026,0.766431005617,0.276402028431,6.0,8.0,1.0,inf,0.766431005617,0.276402028431,accepted
+0.535774680445,0.184854460225,0.0368869491007,0.535774680445,0.720668788305,6.0,8.0,1.0,1.41592495639,0.535774680445,0.720668788305,accepted
+0.337615172224,0.184854460225,0.0769799126026,0.337615172224,1.00909282563,6.0,8.0,1.0,0.765262284562,0.337615172224,1.00909282563,accepted
+0.278871351918,0.184854460225,0.0769799126026,0.278871351918,1.07986463561,6.0,8.0,1.0,0.584075043611,0.278871351918,1.07986463561,accepted
+0.110044764846,0.184854460225,0.139331453512,0.110044764846,1.50665039766,6.0,8.0,2.0,inf,0.110044764846,1.50665039766,accepted
+0.77987554478,0.184854460225,0.0769799126026,0.77987554478,0.605473365792,6.0,8.0,2.0,inf,0.77987554478,0.605473365792,accepted
+0.694784936191,0.184854460225,0.39961784645,0.694784936191,1.37029270323,6.0,8.0,2.0,1.69429602798,0.694784936191,1.37029270323,accepted
+0.766431005617,0.184854460225,0.0769799126026,0.766431005617,0.61568905179,6.0,8.0,2.0,0.97572232943,0.766431005617,0.61568905179,accepted
+0.227236453264,0.00706630852238,0.362760231915,0.227236453264,1.41712807233,6.0,8.0,2.0,1.02427767057,0.227236453264,1.41712807233,accepted
+0.110044764846,0.184854460225,0.0368869491007,0.110044764846,1.2371480565,1.0,9.0,1.0,inf,0.110044764846,1.2371480565,accepted
+0.766431005617,0.00919704931071,0.0769799126026,0.766431005617,0.276402028431,1.0,9.0,1.0,inf,0.766431005617,0.276402028431,accepted
+0.57200419986,0.184854460225,0.0368869491007,0.57200419986,0.689255349318,1.0,9.0,1.0,0.813821875556,0.57200419986,0.689255349318,accepted
+0.337615172224,0.184854460225,0.0769799126026,0.337615172224,1.00909282563,1.0,9.0,1.0,0.624852683938,0.337615172224,1.00909282563,accepted
+0.486742150617,0.184854460225,0.0368869491007,0.486742150617,0.764927153681,1.0,9.0,1.0,0.602103080833,0.486742150617,0.764927153681,accepted
+0.250461821735,0.184854460225,0.0368869491007,0.250461821735,1.01941071485,1.0,9.0,1.0,0.584075043611,0.250461821735,1.01941071485,accepted
+0.535774680445,0.184854460225,0.0368869491007,0.535774680445,0.720668788305,1.0,9.0,1.0,0.208659743602,0.535774680445,0.720668788305,accepted
+0.110044764846,0.184854460225,0.139331453512,0.110044764846,1.50665039766,1.0,9.0,2.0,inf,0.110044764846,1.50665039766,accepted
+0.864167563818,0.184854460225,0.0368869491007,0.864167563818,0.465627310549,1.0,9.0,2.0,inf,0.864167563818,0.465627310549,accepted
+0.278871351918,0.184854460225,0.0769799126026,0.278871351918,1.07986463561,1.0,9.0,2.0,2.0,0.278871351918,1.07986463561,accepted
+0.110044764846,0.184854460225,0.0368869491007,0.110044764846,1.2371480565,5.0,10.0,1.0,inf,0.110044764846,1.2371480565,accepted
+0.740768615329,0.00919704931071,0.0368869491007,0.740768615329,0.220002925316,5.0,10.0,1.0,inf,0.740768615329,0.220002925316,accepted
+0.57200419986,0.184854460225,0.0368869491007,0.57200419986,0.689255349318,5.0,10.0,1.0,0.817240341286,0.57200419986,0.689255349318,accepted
+0.337615172224,0.184854460225,0.0769799126026,0.337615172224,1.00909282563,5.0,10.0,1.0,0.624811669954,0.337615172224,1.00909282563,accepted
+0.486742150617,0.184854460225,0.0368869491007,0.486742150617,0.764927153681,5.0,10.0,1.0,0.597740245314,0.486742150617,0.764927153681,accepted
+0.250461821735,0.184854460225,0.0368869491007,0.250461821735,1.01941071485,5.0,10.0,1.0,0.483412783551,0.250461821735,1.01941071485,accepted
+0.140084013608,0.184854460225,0.0368869491007,0.140084013608,1.18224255812,5.0,10.0,1.0,0.436695556704,0.140084013608,1.18224255812,accepted
+0.535774680445,0.184854460225,0.0368869491007,0.535774680445,0.720668788305,5.0,10.0,1.0,0.209577537556,0.535774680445,0.720668788305,accepted
+0.766431005617,0.00919704931071,0.0769799126026,0.766431005617,0.276402028431,5.0,10.0,2.0,inf,0.766431005617,0.276402028431,accepted
+0.110044764846,0.184854460225,0.139331453512,0.110044764846,1.50665039766,5.0,10.0,2.0,inf,0.110044764846,1.50665039766,accepted
+0.110044764846,0.184854460225,0.0368869491007,0.110044764846,1.2371480565,0.0,11.0,1.0,inf,0.110044764846,1.2371480565,accepted
+0.740768615329,0.00919704931071,0.0368869491007,0.740768615329,0.220002925316,0.0,11.0,1.0,inf,0.740768615329,0.220002925316,accepted
+0.465598022674,0.00919704931071,0.0368869491007,0.465598022674,0.410263067925,0.0,11.0,1.0,1.4149805866,0.465598022674,0.410263067925,accepted
+0.337615172224,0.184854460225,0.0769799126026,0.337615172224,1.00909282563,0.0,11.0,1.0,0.939973901275,0.337615172224,1.00909282563,accepted
+0.250461821735,0.184854460225,0.0368869491007,0.250461821735,1.01941071485,0.0,11.0,1.0,0.483412783551,0.250461821735,1.01941071485,accepted
+0.140084013608,0.184854460225,0.0368869491007,0.140084013608,1.18224255812,0.0,11.0,1.0,0.436695556704,0.140084013608,1.18224255812,accepted
+0.766431005617,0.00919704931071,0.0769799126026,0.766431005617,0.276402028431,0.0,11.0,2.0,inf,0.766431005617,0.276402028431,accepted
+0.110044764846,0.00919704931071,0.250251364021,0.110044764846,1.33596804376,0.0,11.0,2.0,inf,0.110044764846,1.33596804376,accepted
+0.486742150617,0.184854460225,0.0368869491007,0.486742150617,0.764927153681,0.0,11.0,2.0,1.86602707654,0.486742150617,0.764927153681,accepted
+0.740768615329,0.0939819368287,0.0368869491007,0.740768615329,0.376929885588,0.0,11.0,2.0,0.887165606871,0.740768615329,0.376929885588,accepted
+0.740768615329,0.00919704931071,0.0368869491007,0.740768615329,0.220002925316,2.0,12.0,1.0,inf,0.740768615329,0.220002925316,accepted
+0.110044764846,0.0938732896684,0.0368869491007,0.110044764846,1.0008561335,2.0,12.0,1.0,inf,0.110044764846,1.0008561335,accepted
+0.465598022674,0.00919704931071,0.0368869491007,0.465598022674,0.410263067925,2.0,12.0,1.0,2.0,0.465598022674,0.410263067925,accepted
+0.110044764846,0.184854460225,0.0368869491007,0.110044764846,1.2371480565,2.0,12.0,2.0,inf,0.110044764846,1.2371480565,accepted
+0.766431005617,0.00919704931071,0.0769799126026,0.766431005617,0.276402028431,2.0,12.0,2.0,inf,0.766431005617,0.276402028431,accepted
+0.486742150617,0.184854460225,0.0368869491007,0.486742150617,0.764927153681,2.0,12.0,2.0,0.848182252541,0.486742150617,0.764927153681,accepted
+0.638270586878,0.184854460225,0.0368869491007,0.638270586878,0.634271442795,2.0,12.0,2.0,0.790857585549,0.638270586878,0.634271442795,accepted
+0.337615172224,0.184854460225,0.0769799126026,0.337615172224,1.00909282563,2.0,12.0,2.0,0.962497323004,0.337615172224,1.00909282563,accepted
+0.740768615329,0.0939819368287,0.0368869491007,0.740768615329,0.376929885588,2.0,12.0,2.0,0.567742703848,0.740768615329,0.376929885588,accepted
+0.140084013608,0.184854460225,0.0368869491007,0.140084013608,1.18224255812,2.0,12.0,2.0,0.584075043611,0.140084013608,1.18224255812,accepted
+0.740768615329,0.00919704931071,0.0368869491007,0.740768615329,0.220002925316,7.0,13.0,1.0,inf,0.740768615329,0.220002925316,accepted
+0.0480589254405,0.00919704931071,0.0368869491007,0.0480589254405,0.904364911855,7.0,13.0,1.0,inf,0.0480589254405,0.904364911855,accepted
+0.43385165125,0.00919704931071,0.0368869491007,0.43385165125,0.435519821735,7.0,13.0,1.0,1.32475105339,0.43385165125,0.435519821735,accepted
+0.465598022674,0.00919704931071,0.0368869491007,0.465598022674,0.410263067925,7.0,13.0,1.0,0.757983752596,0.465598022674,0.410263067925,accepted
+0.110044764846,0.0938732896684,0.0368869491007,0.110044764846,1.0008561335,7.0,13.0,2.0,inf,0.110044764846,1.0008561335,accepted
+0.766431005617,0.00919704931071,0.0769799126026,0.766431005617,0.276402028431,7.0,13.0,2.0,inf,0.766431005617,0.276402028431,accepted
+0.486742150617,0.184854460225,0.0368869491007,0.486742150617,0.764927153681,7.0,13.0,2.0,1.31076353304,0.486742150617,0.764927153681,accepted
+0.638270586878,0.184854460225,0.0368869491007,0.638270586878,0.634271442795,7.0,13.0,2.0,0.9225795106,0.638270586878,0.634271442795,accepted
+0.740768615329,0.0939819368287,0.0368869491007,0.740768615329,0.376929885588,7.0,13.0,2.0,0.689236466957,0.740768615329,0.376929885588,accepted
+0.110044764846,0.184854460225,0.0368869491007,0.110044764846,1.2371480565,7.0,13.0,3.0,inf,0.110044764846,1.2371480565,accepted
+0.0480589254405,0.00919704931071,0.0368869491007,0.0480589254405,0.904364911855,2.0,14.0,1.0,inf,0.0480589254405,0.904364911855,accepted
+0.844875311909,0.00919704931071,0.0368869491007,0.844875311909,0.157598636751,2.0,14.0,1.0,inf,0.844875311909,0.157598636751,accepted
+0.281854773006,0.00919704931071,0.0368869491007,0.281854773006,0.571840697907,2.0,14.0,1.0,1.11200143643,0.281854773006,0.571840697907,accepted
+0.43385165125,0.00919704931071,0.0368869491007,0.43385165125,0.435519821735,2.0,14.0,1.0,0.446966472614,0.43385165125,0.435519821735,accepted
+0.628942842742,0.00919704931071,0.0368869491007,0.628942842742,0.292145946539,2.0,14.0,1.0,0.414011590831,0.628942842742,0.292145946539,accepted
+0.740768615329,0.00919704931071,0.0368869491007,0.740768615329,0.220002925316,2.0,14.0,1.0,0.366643659721,0.740768615329,0.220002925316,accepted
+0.547971882752,0.00919704931071,0.0368869491007,0.547971882752,0.348486150901,2.0,14.0,1.0,0.363168285924,0.547971882752,0.348486150901,accepted
+0.465598022674,0.00919704931071,0.0368869491007,0.465598022674,0.410263067925,2.0,14.0,1.0,0.259767640834,0.465598022674,0.410263067925,accepted
+0.803480928019,0.00919704931071,0.0368869491007,0.803480928019,0.181923720294,2.0,14.0,1.0,0.214219331903,0.803480928019,0.181923720294,accepted
+0.110044764846,0.0938732896684,0.0368869491007,0.110044764846,1.0008561335,2.0,14.0,2.0,inf,0.110044764846,1.0008561335,accepted
+0.0480589254405,0.00919704931071,0.0368869491007,0.0480589254405,0.904364911855,4.0,15.0,1.0,inf,0.0480589254405,0.904364911855,accepted
+0.956800884557,0.00919704931071,0.0368869491007,0.956800884557,0.094661790274,4.0,15.0,1.0,inf,0.956800884557,0.094661790274,accepted
+0.281854773006,0.00919704931071,0.0368869491007,0.281854773006,0.571840697907,4.0,15.0,1.0,0.704629371176,0.281854773006,0.571840697907,accepted
+0.43385165125,0.00919704931071,0.0368869491007,0.43385165125,0.435519821735,4.0,15.0,1.0,0.36506593516,0.43385165125,0.435519821735,accepted
+0.2976351707,0.00919704931071,0.0368869491007,0.2976351707,0.556200599822,4.0,15.0,1.0,0.335619852656,0.2976351707,0.556200599822,accepted
+0.740768615329,0.00919704931071,0.0368869491007,0.740768615329,0.220002925316,4.0,15.0,1.0,0.403785617585,0.740768615329,0.220002925316,accepted
+0.547971882752,0.00919704931071,0.0368869491007,0.547971882752,0.348486150901,4.0,15.0,1.0,0.325625370568,0.547971882752,0.348486150901,accepted
+0.628942842742,0.00919704931071,0.0368869491007,0.628942842742,0.292145946539,4.0,15.0,1.0,0.370837266347,0.628942842742,0.292145946539,accepted
+0.844875311909,0.00919704931071,0.0368869491007,0.844875311909,0.157598636751,4.0,15.0,1.0,0.392525624748,0.844875311909,0.157598636751,accepted
+0.465598022674,0.00919704931071,0.0368869491007,0.465598022674,0.410263067925,4.0,15.0,1.0,0.233068830687,0.465598022674,0.410263067925,accepted
+0.0480589254405,0.00919704931071,0.0368869491007,0.0480589254405,0.904364911855,4.0,15.0,1.0,inf,0.0480589254405,0.904364911855,final
+0.956800884557,0.00919704931071,0.0368869491007,0.956800884557,0.094661790274,4.0,15.0,1.0,inf,0.956800884557,0.094661790274,final
+0.281854773006,0.00919704931071,0.0368869491007,0.281854773006,0.571840697907,4.0,15.0,1.0,0.704629371176,0.281854773006,0.571840697907,final
+0.43385165125,0.00919704931071,0.0368869491007,0.43385165125,0.435519821735,4.0,15.0,1.0,0.36506593516,0.43385165125,0.435519821735,final
+0.2976351707,0.00919704931071,0.0368869491007,0.2976351707,0.556200599822,4.0,15.0,1.0,0.335619852656,0.2976351707,0.556200599822,final
+0.740768615329,0.00919704931071,0.0368869491007,0.740768615329,0.220002925316,4.0,15.0,1.0,0.403785617585,0.740768615329,0.220002925316,final
+0.547971882752,0.00919704931071,0.0368869491007,0.547971882752,0.348486150901,4.0,15.0,1.0,0.325625370568,0.547971882752,0.348486150901,final
+0.628942842742,0.00919704931071,0.0368869491007,0.628942842742,0.292145946539,4.0,15.0,1.0,0.370837266347,0.628942842742,0.292145946539,final
+0.844875311909,0.00919704931071,0.0368869491007,0.844875311909,0.157598636751,4.0,15.0,1.0,0.392525624748,0.844875311909,0.157598636751,final
+0.465598022674,0.00919704931071,0.0368869491007,0.465598022674,0.410263067925,4.0,15.0,1.0,0.233068830687,0.465598022674,0.410263067925,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/Multi_MinwoReplacement/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/Multi_MinwoReplacement/opt_export_0.csv
new file mode 100644
index 0000000000..488dc1ed8f
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/Multi_MinwoReplacement/opt_export_0.csv
@@ -0,0 +1,255 @@
+x1,x2,x3,x4,x5,x6,obj1,obj2,obj3,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,FitnessEvaluation_obj3,ConstraintEvaluation_expConstr3,ConstraintEvaluation_impConstr3,accepted
+4.0,3.0,5.0,7.0,2.0,6.0,99.0,10.0,43.0,0.0,1.0,14.0,inf,112.0,-5.0,48.0,-2.0,1.0,first
+7.0,4.0,5.0,2.0,3.0,6.0,89.0,15.0,23.0,0.0,1.0,3.0,1.6,89.0,-15.0,23.0,3.0,11.0,first
+4.0,3.0,6.0,7.0,2.0,5.0,96.0,10.0,46.0,0.0,1.0,18.0,inf,113.0,-4.0,49.0,-3.0,4.0,first
+7.0,4.0,3.0,5.0,6.0,2.0,86.0,15.0,29.0,0.0,1.0,3.0,inf,86.0,-15.0,29.0,2.0,14.0,first
+4.0,6.0,7.0,2.0,3.0,5.0,90.0,16.0,29.0,0.0,1.0,4.0,inf,90.0,-16.0,29.0,1.0,10.0,first
+4.0,6.0,2.0,5.0,7.0,3.0,95.0,16.0,26.0,0.0,1.0,4.0,0.899122807018,95.0,-16.0,26.0,3.0,5.0,first
+4.0,7.0,2.0,5.0,3.0,6.0,95.0,18.0,26.0,0.0,1.0,3.0,inf,95.0,-18.0,26.0,3.0,5.0,first
+6.0,3.0,5.0,2.0,4.0,7.0,97.0,12.0,23.0,0.0,1.0,4.0,inf,97.0,-12.0,23.0,3.0,3.0,first
+4.0,5.0,3.0,6.0,7.0,2.0,94.0,14.0,33.0,0.0,1.0,5.0,1.59523809524,94.0,-14.0,33.0,1.0,6.0,first
+2.0,4.0,6.0,5.0,3.0,7.0,105.0,10.0,38.0,0.0,1.0,25.0,inf,116.0,-1.0,52.0,-1.0,-5.0,first
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,1.0,1.0,inf,85.0,-19.0,17.0,5.0,15.0,first
+6.0,2.0,7.0,5.0,3.0,4.0,90.0,10.0,41.0,0.0,1.0,15.0,inf,112.0,-5.0,48.0,-2.0,10.0,first
+3.0,6.0,4.0,7.0,5.0,2.0,92.0,15.0,40.0,0.0,1.0,8.0,inf,111.0,-6.0,47.0,-1.0,8.0,first
+2.0,3.0,6.0,7.0,4.0,5.0,104.0,8.0,46.0,0.0,1.0,26.0,inf,117.0,0.0,53.0,-3.0,-4.0,first
+7.0,3.0,5.0,4.0,2.0,6.0,90.0,13.0,31.0,0.0,1.0,5.0,inf,90.0,-13.0,31.0,1.0,10.0,first
+5.0,3.0,2.0,6.0,4.0,7.0,103.0,11.0,30.0,0.0,1.0,19.0,inf,113.0,-4.0,49.0,2.0,-3.0,first
+6.0,3.0,4.0,7.0,2.0,5.0,92.0,12.0,40.0,0.0,1.0,9.0,inf,111.0,-6.0,47.0,-1.0,8.0,first
+2.0,5.0,4.0,6.0,7.0,3.0,101.0,12.0,36.0,0.0,1.0,10.0,inf,111.0,-6.0,47.0,0.0,-1.0,first
+4.0,6.0,2.0,7.0,5.0,3.0,93.0,16.0,34.0,0.0,1.0,5.0,inf,93.0,-16.0,34.0,1.0,7.0,first
+5.0,6.0,3.0,2.0,7.0,4.0,93.0,17.0,17.0,0.0,1.0,2.0,inf,93.0,-17.0,17.0,5.0,7.0,first
+3.0,6.0,7.0,4.0,5.0,2.0,89.0,15.0,37.0,0.0,1.0,11.0,inf,111.0,-6.0,47.0,-1.0,11.0,first
+3.0,6.0,4.0,2.0,5.0,7.0,102.0,15.0,20.0,0.0,1.0,16.0,inf,112.0,-5.0,48.0,4.0,-2.0,first
+6.0,2.0,5.0,3.0,4.0,7.0,99.0,10.0,27.0,0.0,1.0,5.0,inf,99.0,-10.0,27.0,2.0,1.0,first
+4.0,3.0,2.0,6.0,5.0,7.0,107.0,10.0,30.0,0.0,1.0,27.0,inf,117.0,0.0,53.0,2.0,-7.0,first
+7.0,2.0,6.0,5.0,3.0,4.0,88.0,11.0,38.0,0.0,1.0,12.0,inf,111.0,-6.0,47.0,-1.0,12.0,first
+5.0,3.0,6.0,7.0,2.0,4.0,91.0,11.0,46.0,0.0,1.0,21.0,inf,113.0,-4.0,49.0,-3.0,9.0,first
+4.0,2.0,3.0,5.0,6.0,7.0,109.0,8.0,29.0,0.0,1.0,29.0,inf,119.0,2.0,55.0,2.0,-9.0,first
+5.0,3.0,6.0,7.0,4.0,2.0,89.0,11.0,46.0,0.0,1.0,22.0,inf,113.0,-4.0,49.0,-3.0,11.0,first
+2.0,3.0,5.0,6.0,4.0,7.0,109.0,8.0,39.0,0.0,1.0,31.0,inf,120.0,3.0,56.0,-1.0,-9.0,first
+3.0,2.0,7.0,4.0,6.0,5.0,104.0,7.0,37.0,0.0,1.0,23.0,inf,115.0,-2.0,51.0,-1.0,-4.0,first
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,0.0,1.0,1.0,0.907894736842,83.0,-19.0,36.0,0.0,17.0,first
+3.0,5.0,6.0,4.0,7.0,2.0,94.0,13.0,34.0,0.0,1.0,6.0,inf,94.0,-13.0,34.0,0.0,6.0,first
+7.0,6.0,2.0,4.0,3.0,5.0,86.0,19.0,22.0,0.0,1.0,2.0,inf,86.0,-19.0,22.0,4.0,14.0,first
+7.0,2.0,5.0,4.0,6.0,3.0,90.0,11.0,31.0,0.0,1.0,6.0,inf,90.0,-11.0,31.0,1.0,10.0,first
+3.0,4.0,2.0,6.0,7.0,5.0,106.0,11.0,30.0,0.0,1.0,24.0,inf,116.0,-1.0,52.0,2.0,-6.0,first
+4.0,6.0,3.0,2.0,7.0,5.0,98.0,16.0,17.0,0.0,1.0,4.0,inf,98.0,-16.0,17.0,5.0,2.0,first
+4.0,6.0,7.0,3.0,2.0,5.0,89.0,16.0,33.0,0.0,1.0,4.0,1.45175438596,89.0,-16.0,33.0,0.0,11.0,first
+5.0,6.0,2.0,3.0,7.0,4.0,94.0,17.0,18.0,0.0,1.0,3.0,1.43333333333,94.0,-17.0,18.0,5.0,6.0,first
+7.0,2.0,5.0,4.0,3.0,6.0,93.0,11.0,31.0,0.0,1.0,7.0,inf,93.0,-11.0,31.0,1.0,7.0,first
+7.0,3.0,4.0,6.0,5.0,2.0,86.0,13.0,36.0,0.0,1.0,4.0,inf,86.0,-13.0,36.0,0.0,14.0,first
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,0.0,1.0,2.0,inf,83.0,-19.0,36.0,0.0,17.0,first
+5.0,2.0,7.0,4.0,6.0,3.0,94.0,9.0,37.0,0.0,1.0,13.0,inf,111.0,-6.0,47.0,-1.0,6.0,first
+3.0,2.0,5.0,6.0,4.0,7.0,108.0,7.0,39.0,0.0,1.0,28.0,inf,119.0,2.0,55.0,-1.0,-8.0,first
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,0.0,1.0,1.0,inf,81.0,-17.0,36.0,0.0,19.0,first
+2.0,4.0,7.0,5.0,6.0,3.0,99.0,10.0,41.0,0.0,1.0,17.0,inf,112.0,-5.0,48.0,-2.0,1.0,first
+4.0,6.0,7.0,2.0,5.0,3.0,88.0,16.0,29.0,0.0,1.0,3.0,inf,88.0,-16.0,29.0,1.0,12.0,first
+5.0,6.0,3.0,2.0,4.0,7.0,96.0,17.0,17.0,0.0,1.0,3.0,inf,96.0,-17.0,17.0,5.0,4.0,first
+5.0,7.0,3.0,6.0,4.0,2.0,84.0,19.0,33.0,0.0,1.0,1.0,2.5,84.0,-19.0,33.0,1.0,16.0,first
+4.0,3.0,7.0,6.0,2.0,5.0,95.0,10.0,45.0,0.0,1.0,20.0,inf,113.0,-4.0,49.0,-3.0,5.0,first
+2.0,4.0,3.0,5.0,7.0,6.0,110.0,10.0,29.0,0.0,1.0,30.0,inf,120.0,3.0,56.0,2.0,-10.0,first
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,2.0,1.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,0.0,2.0,1.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+5.0,7.0,3.0,6.0,4.0,2.0,84.0,19.0,33.0,0.0,2.0,1.0,1.5,84.0,-19.0,33.0,1.0,16.0,accepted
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,0.0,2.0,1.0,inf,83.0,-19.0,36.0,0.0,17.0,accepted
+5.0,6.0,3.0,2.0,7.0,4.0,93.0,17.0,17.0,0.0,2.0,2.0,inf,93.0,-17.0,17.0,5.0,7.0,accepted
+7.0,6.0,2.0,4.0,3.0,5.0,86.0,19.0,22.0,0.0,2.0,2.0,inf,86.0,-19.0,22.0,4.0,14.0,accepted
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,0.0,2.0,2.0,inf,83.0,-19.0,36.0,0.0,17.0,accepted
+7.0,4.0,3.0,5.0,6.0,2.0,86.0,15.0,29.0,0.0,2.0,3.0,0.638111888112,86.0,-15.0,29.0,2.0,14.0,accepted
+4.0,7.0,2.0,5.0,3.0,6.0,95.0,18.0,26.0,0.0,2.0,3.0,inf,95.0,-18.0,26.0,3.0,5.0,accepted
+4.0,6.0,7.0,2.0,5.0,3.0,88.0,16.0,29.0,0.0,2.0,3.0,1.31118881119,88.0,-16.0,29.0,1.0,12.0,accepted
+5.0,6.0,3.0,2.0,4.0,7.0,96.0,17.0,17.0,0.0,2.0,3.0,inf,96.0,-17.0,17.0,5.0,4.0,accepted
+7.0,4.0,5.0,2.0,3.0,6.0,89.0,15.0,23.0,0.0,2.0,3.0,1.10314685315,89.0,-15.0,23.0,3.0,11.0,accepted
+5.0,6.0,2.0,3.0,7.0,4.0,94.0,17.0,18.0,0.0,2.0,3.0,1.02622377622,94.0,-17.0,18.0,5.0,6.0,accepted
+4.0,6.0,7.0,2.0,3.0,5.0,90.0,16.0,29.0,0.0,2.0,4.0,inf,90.0,-16.0,29.0,1.0,10.0,accepted
+4.0,6.0,3.0,2.0,7.0,5.0,98.0,16.0,17.0,0.0,2.0,4.0,inf,98.0,-16.0,17.0,5.0,2.0,accepted
+7.0,3.0,4.0,6.0,5.0,2.0,86.0,13.0,36.0,0.0,2.0,4.0,inf,86.0,-13.0,36.0,0.0,14.0,accepted
+7.0,3.0,5.0,2.0,6.0,4.0,90.0,13.0,23.0,0.0,2.0,4.0,inf,90.0,-13.0,23.0,3.0,10.0,accepted
+4.0,6.0,7.0,3.0,2.0,5.0,89.0,16.0,33.0,0.0,2.0,4.0,0.460526315789,89.0,-16.0,33.0,0.0,11.0,accepted
+6.0,4.0,7.0,3.0,2.0,5.0,87.0,14.0,33.0,0.0,2.0,4.0,1.07456140351,87.0,-14.0,33.0,0.0,13.0,accepted
+6.0,4.0,5.0,2.0,3.0,7.0,94.0,14.0,23.0,0.0,2.0,4.0,0.907894736842,94.0,-14.0,23.0,3.0,6.0,accepted
+4.0,6.0,2.0,5.0,7.0,3.0,95.0,16.0,26.0,0.0,2.0,4.0,1.31578947368,95.0,-16.0,26.0,3.0,5.0,accepted
+7.0,3.0,5.0,4.0,2.0,6.0,90.0,13.0,31.0,0.0,2.0,5.0,2.0,90.0,-13.0,31.0,1.0,10.0,accepted
+4.0,6.0,2.0,7.0,5.0,3.0,93.0,16.0,34.0,0.0,2.0,5.0,inf,93.0,-16.0,34.0,1.0,7.0,accepted
+6.0,4.0,5.0,2.0,3.0,7.0,94.0,14.0,23.0,0.0,2.0,5.0,inf,94.0,-14.0,23.0,3.0,6.0,accepted
+4.0,5.0,3.0,6.0,7.0,2.0,94.0,14.0,33.0,0.0,2.0,6.0,1.6,94.0,-14.0,33.0,1.0,6.0,accepted
+7.0,2.0,5.0,4.0,6.0,3.0,90.0,11.0,31.0,0.0,2.0,6.0,inf,90.0,-11.0,31.0,1.0,10.0,accepted
+6.0,3.0,5.0,2.0,7.0,4.0,94.0,12.0,23.0,0.0,2.0,6.0,inf,94.0,-12.0,23.0,3.0,6.0,accepted
+3.0,5.0,6.0,4.0,7.0,2.0,94.0,13.0,34.0,0.0,2.0,7.0,inf,94.0,-13.0,34.0,0.0,6.0,accepted
+7.0,2.0,5.0,4.0,3.0,6.0,93.0,11.0,31.0,0.0,2.0,7.0,inf,93.0,-11.0,31.0,1.0,7.0,accepted
+6.0,3.0,5.0,2.0,7.0,4.0,94.0,12.0,23.0,0.0,2.0,7.0,inf,94.0,-12.0,23.0,3.0,6.0,accepted
+6.0,3.0,5.0,2.0,4.0,7.0,97.0,12.0,23.0,0.0,2.0,9.0,inf,97.0,-12.0,23.0,3.0,3.0,accepted
+5.0,3.0,7.0,2.0,4.0,6.0,96.0,11.0,29.0,0.0,2.0,8.0,2.075,96.0,-11.0,29.0,1.0,4.0,accepted
+6.0,3.0,5.0,2.0,4.0,7.0,97.0,12.0,23.0,0.0,2.0,8.0,inf,97.0,-12.0,23.0,3.0,3.0,accepted
+6.0,2.0,5.0,3.0,4.0,7.0,99.0,10.0,27.0,0.0,2.0,10.0,inf,99.0,-10.0,27.0,2.0,1.0,accepted
+5.0,3.0,2.0,7.0,6.0,4.0,99.0,11.0,34.0,0.0,2.0,10.0,1.72916666667,99.0,-11.0,34.0,1.0,1.0,accepted
+3.0,6.0,4.0,7.0,5.0,2.0,92.0,15.0,40.0,0.0,2.0,6.0,inf,111.0,-6.0,47.0,-1.0,8.0,accepted
+6.0,3.0,5.0,7.0,2.0,4.0,89.0,12.0,43.0,0.0,2.0,6.0,inf,101.0,-8.0,48.0,-2.0,11.0,accepted
+6.0,3.0,4.0,7.0,2.0,5.0,92.0,12.0,40.0,0.0,2.0,7.0,1.25,111.0,-6.0,47.0,-1.0,8.0,accepted
+4.0,3.0,5.0,7.0,2.0,6.0,99.0,10.0,43.0,0.0,2.0,13.0,inf,101.0,-8.0,48.0,-2.0,1.0,accepted
+2.0,5.0,4.0,6.0,7.0,3.0,101.0,12.0,36.0,0.0,2.0,10.0,inf,111.0,-6.0,47.0,0.0,-1.0,accepted
+6.0,4.0,5.0,7.0,2.0,3.0,85.0,14.0,43.0,0.0,2.0,3.0,inf,101.0,-8.0,48.0,-2.0,15.0,accepted
+3.0,6.0,7.0,4.0,5.0,2.0,89.0,15.0,37.0,0.0,2.0,5.0,1.0,111.0,-6.0,47.0,-1.0,11.0,accepted
+6.0,3.0,5.0,7.0,2.0,4.0,89.0,12.0,43.0,0.0,2.0,7.0,inf,101.0,-8.0,48.0,-2.0,11.0,accepted
+7.0,2.0,6.0,5.0,3.0,4.0,88.0,11.0,38.0,0.0,2.0,5.0,inf,111.0,-6.0,47.0,-1.0,12.0,accepted
+4.0,3.0,5.0,7.0,2.0,6.0,99.0,10.0,43.0,0.0,2.0,12.0,inf,101.0,-8.0,48.0,-2.0,1.0,accepted
+5.0,2.0,7.0,4.0,6.0,3.0,94.0,9.0,37.0,0.0,2.0,8.0,inf,111.0,-6.0,47.0,-1.0,6.0,accepted
+6.0,3.0,5.0,7.0,2.0,4.0,89.0,12.0,43.0,0.0,2.0,8.0,inf,101.0,-8.0,48.0,-2.0,11.0,accepted
+6.0,3.0,5.0,7.0,2.0,4.0,89.0,12.0,43.0,0.0,2.0,9.0,inf,101.0,-8.0,48.0,-2.0,11.0,accepted
+4.0,3.0,5.0,7.0,2.0,6.0,99.0,10.0,43.0,0.0,2.0,11.0,inf,101.0,-8.0,48.0,-2.0,1.0,accepted
+6.0,3.0,5.0,7.0,2.0,4.0,89.0,12.0,43.0,0.0,2.0,10.0,inf,101.0,-8.0,48.0,-2.0,11.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,3.0,1.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,5.0,4.0,2.0,80.0,19.0,29.0,1.0,3.0,1.0,inf,80.0,-19.0,29.0,2.0,20.0,accepted
+6.0,7.0,4.0,2.0,5.0,3.0,83.0,20.0,20.0,1.0,3.0,1.0,inf,83.0,-20.0,20.0,4.0,17.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,1.0,3.0,2.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+6.0,7.0,4.0,3.0,2.0,5.0,84.0,20.0,24.0,1.0,3.0,2.0,inf,84.0,-20.0,24.0,3.0,16.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,3.0,2.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,5.0,2.0,4.0,83.0,20.0,29.0,1.0,3.0,2.0,1.7149122807,83.0,-20.0,29.0,2.0,17.0,accepted
+7.0,6.0,4.0,2.0,3.0,5.0,84.0,19.0,20.0,1.0,3.0,2.0,1.2850877193,84.0,-19.0,20.0,4.0,16.0,accepted
+5.0,7.0,3.0,6.0,4.0,2.0,84.0,19.0,33.0,1.0,3.0,3.0,inf,84.0,-19.0,33.0,1.0,16.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,1.0,3.0,3.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,3.0,3.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,1.0,3.0,3.0,inf,83.0,-19.0,36.0,0.0,17.0,accepted
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,1.0,3.0,4.0,inf,83.0,-19.0,36.0,0.0,17.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,1.0,3.0,4.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,3.0,4.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,2.0,4.0,5.0,86.0,19.0,17.0,1.0,3.0,5.0,inf,86.0,-19.0,17.0,5.0,14.0,accepted
+5.0,6.0,3.0,2.0,7.0,4.0,93.0,17.0,17.0,1.0,3.0,6.0,inf,93.0,-17.0,17.0,5.0,7.0,accepted
+7.0,6.0,2.0,4.0,3.0,5.0,86.0,19.0,22.0,1.0,3.0,6.0,inf,86.0,-19.0,22.0,4.0,14.0,accepted
+7.0,4.0,3.0,5.0,6.0,2.0,86.0,15.0,29.0,1.0,3.0,7.0,inf,86.0,-15.0,29.0,2.0,14.0,accepted
+4.0,7.0,2.0,5.0,3.0,6.0,95.0,18.0,26.0,1.0,3.0,7.0,inf,95.0,-18.0,26.0,3.0,5.0,accepted
+5.0,6.0,3.0,2.0,4.0,7.0,96.0,17.0,17.0,1.0,3.0,7.0,inf,96.0,-17.0,17.0,5.0,4.0,accepted
+7.0,4.0,5.0,2.0,3.0,6.0,89.0,15.0,23.0,1.0,3.0,7.0,inf,89.0,-15.0,23.0,3.0,11.0,accepted
+6.0,5.0,3.0,7.0,2.0,4.0,87.0,16.0,37.0,1.0,3.0,7.0,inf,87.0,-16.0,37.0,0.0,13.0,accepted
+5.0,6.0,2.0,3.0,7.0,4.0,94.0,17.0,18.0,1.0,3.0,7.0,1.23333333333,94.0,-17.0,18.0,5.0,6.0,accepted
+4.0,6.0,7.0,2.0,5.0,3.0,88.0,16.0,29.0,1.0,3.0,7.0,0.933333333333,88.0,-16.0,29.0,1.0,12.0,accepted
+4.0,6.0,7.0,2.0,3.0,5.0,90.0,16.0,29.0,1.0,3.0,8.0,inf,90.0,-16.0,29.0,1.0,10.0,accepted
+4.0,6.0,3.0,2.0,7.0,5.0,98.0,16.0,17.0,1.0,3.0,8.0,inf,98.0,-16.0,17.0,5.0,2.0,accepted
+7.0,3.0,4.0,6.0,5.0,2.0,86.0,13.0,36.0,1.0,3.0,8.0,inf,86.0,-13.0,36.0,0.0,14.0,accepted
+7.0,3.0,5.0,2.0,6.0,4.0,90.0,13.0,23.0,1.0,3.0,8.0,inf,90.0,-13.0,23.0,3.0,10.0,accepted
+4.0,6.0,2.0,5.0,7.0,3.0,95.0,16.0,26.0,1.0,3.0,8.0,0.649122807018,95.0,-16.0,26.0,3.0,5.0,accepted
+6.0,4.0,7.0,3.0,2.0,5.0,87.0,14.0,33.0,1.0,3.0,8.0,1.12719298246,87.0,-14.0,33.0,0.0,13.0,accepted
+6.0,4.0,5.0,2.0,3.0,7.0,94.0,14.0,23.0,1.0,3.0,8.0,0.907894736842,94.0,-14.0,23.0,3.0,6.0,accepted
+4.0,6.0,7.0,3.0,2.0,5.0,89.0,16.0,33.0,1.0,3.0,8.0,1.07456140351,89.0,-16.0,33.0,0.0,11.0,accepted
+7.0,3.0,5.0,4.0,2.0,6.0,90.0,13.0,31.0,1.0,3.0,9.0,inf,90.0,-13.0,31.0,1.0,10.0,accepted
+4.0,6.0,2.0,7.0,5.0,3.0,93.0,16.0,34.0,1.0,3.0,9.0,inf,93.0,-16.0,34.0,1.0,7.0,accepted
+6.0,4.0,5.0,2.0,3.0,7.0,94.0,14.0,23.0,1.0,3.0,9.0,inf,94.0,-14.0,23.0,3.0,6.0,accepted
+4.0,5.0,3.0,6.0,7.0,2.0,94.0,14.0,33.0,1.0,3.0,10.0,inf,94.0,-14.0,33.0,1.0,6.0,accepted
+7.0,2.0,5.0,4.0,6.0,3.0,90.0,11.0,31.0,1.0,3.0,10.0,inf,90.0,-11.0,31.0,1.0,10.0,accepted
+6.0,3.0,5.0,2.0,7.0,4.0,94.0,12.0,23.0,1.0,3.0,10.0,inf,94.0,-12.0,23.0,3.0,6.0,accepted
+7.0,2.0,5.0,4.0,3.0,6.0,93.0,11.0,31.0,1.0,3.0,11.0,inf,93.0,-11.0,31.0,1.0,7.0,accepted
+6.0,3.0,5.0,2.0,7.0,4.0,94.0,12.0,23.0,1.0,3.0,11.0,inf,94.0,-12.0,23.0,3.0,6.0,accepted
+2.0,6.0,3.0,7.0,5.0,4.0,100.0,14.0,37.0,1.0,3.0,11.0,inf,100.0,-14.0,37.0,0.0,0.0,accepted
+3.0,5.0,6.0,4.0,7.0,2.0,94.0,13.0,34.0,1.0,3.0,11.0,1.95238095238,94.0,-13.0,34.0,0.0,6.0,accepted
+6.0,3.0,5.0,2.0,4.0,7.0,97.0,12.0,23.0,1.0,3.0,12.0,inf,97.0,-12.0,23.0,3.0,3.0,accepted
+5.0,3.0,7.0,2.0,4.0,6.0,96.0,11.0,29.0,1.0,3.0,12.0,inf,96.0,-11.0,29.0,1.0,4.0,accepted
+2.0,6.0,3.0,7.0,5.0,4.0,100.0,14.0,37.0,1.0,3.0,12.0,inf,100.0,-14.0,37.0,0.0,0.0,accepted
+6.0,3.0,5.0,2.0,4.0,7.0,97.0,12.0,23.0,1.0,3.0,13.0,inf,97.0,-12.0,23.0,3.0,3.0,accepted
+2.0,6.0,3.0,7.0,5.0,4.0,100.0,14.0,37.0,1.0,3.0,13.0,inf,100.0,-14.0,37.0,0.0,0.0,accepted
+6.0,2.0,5.0,3.0,4.0,7.0,99.0,10.0,27.0,1.0,3.0,14.0,inf,99.0,-10.0,27.0,2.0,1.0,accepted
+5.0,3.0,2.0,7.0,6.0,4.0,99.0,11.0,34.0,1.0,3.0,14.0,inf,99.0,-11.0,34.0,1.0,1.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,1.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,5.0,4.0,2.0,80.0,19.0,29.0,1.0,4.0,1.0,inf,80.0,-19.0,29.0,2.0,20.0,accepted
+6.0,7.0,4.0,2.0,5.0,3.0,83.0,20.0,20.0,1.0,4.0,1.0,inf,83.0,-20.0,20.0,4.0,17.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,1.0,4.0,2.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+6.0,7.0,4.0,3.0,2.0,5.0,84.0,20.0,24.0,1.0,4.0,2.0,inf,84.0,-20.0,24.0,3.0,16.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,2.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,5.0,2.0,4.0,83.0,20.0,29.0,1.0,4.0,2.0,1.7149122807,83.0,-20.0,29.0,2.0,17.0,accepted
+7.0,6.0,4.0,2.0,3.0,5.0,84.0,19.0,20.0,1.0,4.0,2.0,1.2850877193,84.0,-19.0,20.0,4.0,16.0,accepted
+5.0,7.0,3.0,6.0,4.0,2.0,84.0,19.0,33.0,1.0,4.0,3.0,inf,84.0,-19.0,33.0,1.0,16.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,1.0,4.0,3.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,3.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,1.0,4.0,3.0,inf,83.0,-19.0,36.0,0.0,17.0,accepted
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,1.0,4.0,4.0,inf,83.0,-19.0,36.0,0.0,17.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,1.0,4.0,4.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,4.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,5.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,6.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,7.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,8.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,9.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,10.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,1.0,4.0,11.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,2.0,4.0,5.0,86.0,19.0,17.0,1.0,4.0,12.0,inf,86.0,-19.0,17.0,5.0,14.0,accepted
+5.0,6.0,3.0,2.0,7.0,4.0,93.0,17.0,17.0,1.0,4.0,13.0,inf,93.0,-17.0,17.0,5.0,7.0,accepted
+7.0,6.0,2.0,4.0,3.0,5.0,86.0,19.0,22.0,1.0,4.0,13.0,inf,86.0,-19.0,22.0,4.0,14.0,accepted
+7.0,4.0,3.0,5.0,6.0,2.0,86.0,15.0,29.0,1.0,4.0,14.0,inf,86.0,-15.0,29.0,2.0,14.0,accepted
+4.0,7.0,2.0,5.0,3.0,6.0,95.0,18.0,26.0,1.0,4.0,14.0,inf,95.0,-18.0,26.0,3.0,5.0,accepted
+5.0,6.0,3.0,2.0,4.0,7.0,96.0,17.0,17.0,1.0,4.0,14.0,inf,96.0,-17.0,17.0,5.0,4.0,accepted
+6.0,5.0,3.0,7.0,2.0,4.0,87.0,16.0,37.0,1.0,4.0,14.0,inf,87.0,-16.0,37.0,0.0,13.0,accepted
+7.0,3.0,6.0,2.0,5.0,4.0,88.0,13.0,26.0,1.0,4.0,14.0,inf,88.0,-13.0,26.0,2.0,12.0,accepted
+7.0,4.0,5.0,2.0,3.0,6.0,89.0,15.0,23.0,1.0,4.0,14.0,1.4,89.0,-15.0,23.0,3.0,11.0,accepted
+5.0,6.0,2.0,3.0,7.0,4.0,94.0,17.0,18.0,1.0,4.0,14.0,1.1,94.0,-17.0,18.0,5.0,6.0,accepted
+4.0,6.0,7.0,2.0,5.0,3.0,88.0,16.0,29.0,1.0,4.0,14.0,0.7,88.0,-16.0,29.0,1.0,12.0,accepted
+4.0,6.0,7.0,2.0,3.0,5.0,90.0,16.0,29.0,1.0,4.0,15.0,inf,90.0,-16.0,29.0,1.0,10.0,accepted
+4.0,6.0,3.0,2.0,7.0,5.0,98.0,16.0,17.0,1.0,4.0,15.0,inf,98.0,-16.0,17.0,5.0,2.0,accepted
+7.0,3.0,4.0,6.0,5.0,2.0,86.0,13.0,36.0,1.0,4.0,15.0,inf,86.0,-13.0,36.0,0.0,14.0,accepted
+7.0,3.0,6.0,2.0,5.0,4.0,88.0,13.0,26.0,1.0,4.0,15.0,0.324561403509,88.0,-13.0,26.0,2.0,12.0,accepted
+6.0,4.0,7.0,3.0,2.0,5.0,87.0,14.0,33.0,1.0,4.0,15.0,1.04385964912,87.0,-14.0,33.0,0.0,13.0,accepted
+4.0,6.0,7.0,3.0,2.0,5.0,89.0,16.0,33.0,1.0,4.0,15.0,0.324561403509,89.0,-16.0,33.0,0.0,11.0,accepted
+6.0,4.0,5.0,2.0,3.0,7.0,94.0,14.0,23.0,1.0,4.0,15.0,1.06578947368,94.0,-14.0,23.0,3.0,6.0,accepted
+7.0,3.0,5.0,2.0,6.0,4.0,90.0,13.0,23.0,1.0,4.0,15.0,inf,90.0,-13.0,23.0,3.0,10.0,accepted
+4.0,6.0,2.0,5.0,7.0,3.0,95.0,16.0,26.0,1.0,4.0,15.0,1.15789473684,95.0,-16.0,26.0,3.0,5.0,accepted
+4.0,6.0,2.0,7.0,5.0,3.0,93.0,16.0,34.0,1.0,4.0,16.0,inf,93.0,-16.0,34.0,1.0,7.0,accepted
+6.0,4.0,5.0,2.0,3.0,7.0,94.0,14.0,23.0,1.0,4.0,16.0,inf,94.0,-14.0,23.0,3.0,6.0,accepted
+7.0,3.0,6.0,2.0,5.0,4.0,88.0,13.0,26.0,1.0,4.0,16.0,inf,88.0,-13.0,26.0,2.0,12.0,accepted
+4.0,5.0,3.0,6.0,7.0,2.0,94.0,14.0,33.0,1.0,4.0,17.0,inf,94.0,-14.0,33.0,1.0,6.0,accepted
+6.0,3.0,5.0,2.0,7.0,4.0,94.0,12.0,23.0,1.0,4.0,17.0,inf,94.0,-12.0,23.0,3.0,6.0,accepted
+7.0,3.0,6.0,2.0,5.0,4.0,88.0,13.0,26.0,1.0,4.0,17.0,inf,88.0,-13.0,26.0,2.0,12.0,accepted
+6.0,3.0,5.0,2.0,7.0,4.0,94.0,12.0,23.0,1.0,4.0,18.0,inf,94.0,-12.0,23.0,3.0,6.0,accepted
+2.0,6.0,3.0,7.0,5.0,4.0,100.0,14.0,37.0,1.0,4.0,18.0,inf,100.0,-14.0,37.0,0.0,0.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,1.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+7.0,6.0,3.0,5.0,4.0,2.0,80.0,19.0,29.0,0.0,5.0,1.0,inf,80.0,-19.0,29.0,2.0,20.0,accepted
+6.0,7.0,4.0,2.0,5.0,3.0,83.0,20.0,20.0,0.0,5.0,1.0,inf,83.0,-20.0,20.0,4.0,17.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,1.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,0.0,5.0,2.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+6.0,7.0,4.0,3.0,2.0,5.0,84.0,20.0,24.0,0.0,5.0,2.0,inf,84.0,-20.0,24.0,3.0,16.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,2.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,2.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,4.0,2.0,3.0,5.0,84.0,19.0,20.0,0.0,5.0,2.0,1.2350877193,84.0,-19.0,20.0,4.0,16.0,accepted
+6.0,7.0,3.0,5.0,2.0,4.0,83.0,20.0,29.0,0.0,5.0,2.0,1.5649122807,83.0,-20.0,29.0,2.0,17.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,0.0,5.0,3.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,3.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,0.0,5.0,3.0,inf,83.0,-19.0,36.0,0.0,17.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,3.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+5.0,7.0,3.0,6.0,4.0,2.0,84.0,19.0,33.0,0.0,5.0,3.0,2.06666666667,84.0,-19.0,33.0,1.0,16.0,accepted
+7.0,5.0,4.0,6.0,2.0,3.0,81.0,17.0,36.0,0.0,5.0,4.0,inf,81.0,-17.0,36.0,0.0,19.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,4.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,4.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+5.0,7.0,4.0,6.0,2.0,3.0,83.0,19.0,36.0,0.0,5.0,4.0,inf,83.0,-19.0,36.0,0.0,17.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,5.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,5.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,6.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,6.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,7.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,7.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,8.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,8.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,9.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,9.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,10.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,10.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,11.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,11.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,12.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,12.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,13.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,13.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,14.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,14.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,15.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,15.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,16.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,16.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,17.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,17.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,18.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,18.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,20.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,19.0,inf,85.0,-19.0,17.0,5.0,15.0,accepted
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,19.0,inf,86.0,-20.0,17.0,5.0,14.0,accepted
+7.0,6.0,3.0,2.0,5.0,4.0,85.0,19.0,17.0,0.0,5.0,1.0,inf,85.0,-19.0,17.0,5.0,15.0,final
+7.0,6.0,3.0,5.0,4.0,2.0,80.0,19.0,29.0,0.0,5.0,1.0,inf,80.0,-19.0,29.0,2.0,20.0,final
+6.0,7.0,4.0,2.0,5.0,3.0,83.0,20.0,20.0,0.0,5.0,1.0,inf,83.0,-20.0,20.0,4.0,17.0,final
+6.0,7.0,3.0,2.0,5.0,4.0,86.0,20.0,17.0,0.0,5.0,1.0,inf,86.0,-20.0,17.0,5.0,14.0,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/MultiwoReplacementFeasibleFirst/1-opt_path.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/MultiwoReplacementFeasibleFirst/1-opt_path.png
new file mode 100644
index 0000000000..7fec9d0dfb
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/MultiwoReplacementFeasibleFirst/1-opt_path.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/MultiwoReplacementFeasibleFirst/1-population.png b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/MultiwoReplacementFeasibleFirst/1-population.png
new file mode 100644
index 0000000000..5d81adc04a
Binary files /dev/null and b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/MultiwoReplacementFeasibleFirst/1-population.png differ
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/MultiwoReplacementFeasibleFirst/opt_export_0.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/MultiwoReplacementFeasibleFirst/opt_export_0.csv
new file mode 100644
index 0000000000..70083e8c11
--- /dev/null
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/constrained/MultiwoReplacementFeasibleFirst/opt_export_0.csv
@@ -0,0 +1,23 @@
+x1,x2,x3,obj1,obj2,age,batchId,rank,CD,FitnessEvaluation_obj1,FitnessEvaluation_obj2,accepted
+3.0,2.0,4.0,19.0,7.0,0.0,1.0,3.0,inf,19.0,-7.0,first
+3.0,2.0,4.0,19.0,7.0,0.0,1.0,4.0,inf,19.0,-7.0,first
+3.0,4.0,2.0,17.0,11.0,0.0,1.0,1.0,inf,17.0,-11.0,first
+2.0,3.0,4.0,20.0,8.0,0.0,1.0,3.0,inf,20.0,-8.0,first
+4.0,2.0,3.0,17.0,8.0,0.0,1.0,2.0,inf,17.0,-8.0,first
+3.0,4.0,2.0,17.0,11.0,1.0,2.0,1.0,inf,17.0,-11.0,accepted
+3.0,4.0,2.0,17.0,11.0,1.0,2.0,2.0,inf,17.0,-11.0,accepted
+4.0,2.0,3.0,17.0,8.0,1.0,2.0,3.0,inf,17.0,-8.0,accepted
+3.0,2.0,4.0,19.0,7.0,1.0,2.0,4.0,inf,19.0,-7.0,accepted
+2.0,3.0,4.0,20.0,8.0,1.0,2.0,4.0,inf,20.0,-8.0,accepted
+3.0,4.0,2.0,17.0,11.0,2.0,3.0,1.0,inf,17.0,-11.0,accepted
+4.0,3.0,2.0,16.0,10.0,2.0,3.0,1.0,inf,16.0,-10.0,accepted
+3.0,4.0,2.0,17.0,11.0,2.0,3.0,2.0,inf,17.0,-11.0,accepted
+4.0,3.0,2.0,16.0,10.0,2.0,3.0,2.0,inf,16.0,-10.0,accepted
+4.0,2.0,3.0,17.0,8.0,2.0,3.0,3.0,inf,17.0,-8.0,accepted
+3.0,4.0,2.0,17.0,11.0,0.0,4.0,1.0,inf,17.0,-11.0,accepted
+4.0,3.0,2.0,16.0,10.0,0.0,4.0,1.0,inf,16.0,-10.0,accepted
+3.0,4.0,2.0,17.0,11.0,0.0,4.0,2.0,inf,17.0,-11.0,accepted
+4.0,3.0,2.0,16.0,10.0,0.0,4.0,2.0,inf,16.0,-10.0,accepted
+3.0,4.0,2.0,17.0,11.0,0.0,4.0,3.0,inf,17.0,-11.0,accepted
+3.0,4.0,2.0,17.0,11.0,0.0,4.0,1.0,inf,17.0,-11.0,final
+4.0,3.0,2.0,16.0,10.0,0.0,4.0,1.0,inf,16.0,-10.0,final
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/unconstrained/simpleKnapsackTournament/PrintOptOut_1.csv b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/unconstrained/simpleKnapsackTournament/PrintOptOut_1.csv
index 86fac51f8a..d37b1dec07 100644
--- a/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/unconstrained/simpleKnapsackTournament/PrintOptOut_1.csv
+++ b/tests/framework/Optimizers/GeneticAlgorithms/gold/discrete/unconstrained/simpleKnapsackTournament/PrintOptOut_1.csv
@@ -1,71 +1,71 @@
-proj1,proj2,proj3,proj4,proj5,proj6,proj7,proj8,proj9,proj10,planValue,validPlan,PointProbability,ProbabilityWeight-proj5,ProbabilityWeight-proj4,prefix,ProbabilityWeight-proj7,ProbabilityWeight-proj9,ProbabilityWeight-proj6,ProbabilityWeight-proj8,ProbabilityWeight,ProbabilityWeight-proj2,ProbabilityWeight-proj10,ProbabilityWeight-proj3,ProbabilityWeight-proj1,batchId
-0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,5,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,4,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,3,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,5,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,4,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,3,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,4,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.0009765625,0.5,0.5,1,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,1
-0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,5,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,5,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,5,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,8,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,8,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,8,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.0009765625,0.5,0.5,2,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,2
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,5,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,3,1.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,-1,1.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,-1,1.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,8,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,7,0.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,4,1.0,0.0009765625,0.5,0.5,3,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,3
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,7,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,4,1.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,4,1.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,4,1.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,7,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,8,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,8,0.0,0.0009765625,0.5,0.5,4,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,4
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,3,1.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
-0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.0009765625,0.5,0.5,5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,5
+proj1,proj2,proj3,proj4,proj5,proj6,proj7,proj8,proj9,proj10,planValue,validPlan,ProbabilityWeight-proj7,ProbabilityWeight-proj4,PointProbability,ProbabilityWeight,ProbabilityWeight-proj6,ProbabilityWeight-proj9,ProbabilityWeight-proj2,ProbabilityWeight-proj1,ProbabilityWeight-proj8,batchId,ProbabilityWeight-proj5,ProbabilityWeight-proj10,ProbabilityWeight-proj3,prefix
+0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,5,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,4,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,3,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,5,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,4,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,3,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,4,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,1
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,6,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,3,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,3,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,-2,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,4,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,2,0.5,0.5,0.5,2
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,3,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,8,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,6,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,4,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,4,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,3,0.5,0.5,0.5,3
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,7,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,4,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,2,1.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,8,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,4,0.5,0.5,0.5,4
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
+0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,11,0.0,0.5,0.5,0.0009765625,1,0.5,0.5,0.5,0.5,0.5,5,0.5,0.5,0.5,5
diff --git a/tests/framework/Optimizers/GeneticAlgorithms/tests b/tests/framework/Optimizers/GeneticAlgorithms/tests
index 8701e76540..48a461a10d 100644
--- a/tests/framework/Optimizers/GeneticAlgorithms/tests
+++ b/tests/framework/Optimizers/GeneticAlgorithms/tests
@@ -375,23 +375,137 @@
[../]
[../]
- [./GAwithEnsembleModelHDSMconvergence]
+ [./NSGA-II_MinwoRepMultiObjective]
type = 'RavenFramework'
- input = 'continuous/unconstrained/test_ensemble_withGA_HDSM.xml'
+ input = 'discrete/constrained/MinwoRepMultiObjective.xml'
+ UnorderedCsv = 'discrete/constrained/Multi_MinwoReplacement/opt_export_0.csv'
+ rel_err = 0.001
+ [../]
+
+ [./ZDT1-adaptive-LinearXover-LinearMutation]
+ type = 'RavenFramework'
+ input = 'continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation.xml'
+ image = 'continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/1-opt_path.png continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/1-population.png'
+ required_libraries = 'imageio'
+ rel_err = 0.25
[./csv]
- type = OrderedCSV
- output = 'continuous/unconstrained/ensemble_withGA_HDSM/opt_export.csv'
+ type = UnorderedCSV
+ output = 'continuous/unconstrained/ZDT1-adaptive-LinearXover-LinearMutation/opt_export_0.csv'
+ rel_err = 0.001
+ [../]
+ [../]
+
+ [./ZDT1-static-0.0Xover-0.1Mutation]
+ type = 'RavenFramework'
+ input = 'continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation.xml'
+ image = 'continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/1-opt_path.png continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/1-population.png'
+ required_libraries = 'imageio'
+ rel_err = 0.25
+ [./csv]
+ type = UnorderedCSV
+ output = 'continuous/unconstrained/ZDT1-static-0.0Xover-0.1Mutation/opt_export_0.csv'
+ rel_err = 0.001
+ [../]
+ [../]
+
+ [./ZDT1-static-0.0Xover-0.9Mutation]
+ type = 'RavenFramework'
+ input = 'continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation.xml'
+ image = 'continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/1-opt_path.png continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/1-population.png'
+ required_libraries = 'imageio'
+ rel_err = 0.25
+ [./csv]
+ type = UnorderedCSV
+ output = 'continuous/unconstrained/ZDT1-static-0.0Xover-0.9Mutation/opt_export_0.csv'
+ rel_err = 0.001
+ [../]
+ [../]
+
+ [./ZDT1-static-0.0Xover-1.0Mutation]
+ type = 'RavenFramework'
+ input = 'continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation.xml'
+ image = 'continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/1-opt_path.png continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/1-population.png'
+ required_libraries = 'imageio'
+ rel_err = 0.25
+ [./csv]
+ type = UnorderedCSV
+ output = 'continuous/unconstrained/ZDT1-static-0.0Xover-1.0Mutation/opt_export_0.csv'
+ rel_err = 0.001
+ [../]
+ [../]
+
+ [./ZDT1-static-0.1Xover-0.0Mutation]
+ type = 'RavenFramework'
+ input = 'continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation.xml'
+ image = 'continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/1-opt_path.png continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/1-population.png'
+ required_libraries = 'imageio'
+ rel_err = 0.25
+ [./csv]
+ type = UnorderedCSV
+ output = 'continuous/unconstrained/ZDT1-static-0.1Xover-0.0Mutation/opt_export_0.csv'
+ rel_err = 0.001
+ [../]
+ [../]
+
+ [./ZDT1-static-0.1Xover-0.9Mutation]
+ type = 'RavenFramework'
+ input = 'continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation.xml'
+ image = 'continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/1-opt_path.png continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/1-population.png'
+ required_libraries = 'imageio'
+ rel_err = 0.25
+ [./csv]
+ type = UnorderedCSV
+ output = 'continuous/unconstrained/ZDT1-static-0.1Xover-0.9Mutation/opt_export_0.csv'
+ rel_err = 0.001
+ [../]
+ [../]
+
+ [./ZDT1-static-0.5Xover-0.5Mutation]
+ type = 'RavenFramework'
+ input = 'continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation.xml'
+ image = 'continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/1-opt_path.png continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/1-population.png'
+ required_libraries = 'imageio'
+ rel_err = 0.25
+ [./csv]
+ type = UnorderedCSV
+ output = 'continuous/unconstrained/ZDT1-static-0.5Xover-0.5Mutation/opt_export_0.csv'
+ rel_err = 0.001
+ [../]
+ [../]
+
+ [./ZDT1-static-0.9Xover-0.0Mutation]
+ type = 'RavenFramework'
+ input = 'continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation.xml'
+ image = 'continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/1-opt_path.png continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/1-population.png'
+ required_libraries = 'imageio'
+ rel_err = 0.25
+ [./csv]
+ type = UnorderedCSV
+ output = 'continuous/unconstrained/ZDT1-static-0.9Xover-0.0Mutation/opt_export_0.csv'
+ rel_err = 0.001
+ [../]
+ [../]
+
+ [./ZDT1-static-1.0Xover-0.0Mutation]
+ type = 'RavenFramework'
+ input = 'continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation.xml'
+ image = 'continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/1-opt_path.png continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/1-population.png'
+ required_libraries = 'imageio'
+ rel_err = 0.25
+ [./csv]
+ type = UnorderedCSV
+ output = 'continuous/unconstrained/ZDT1-static-1.0Xover-0.0Mutation/opt_export_0.csv'
rel_err = 0.001
[../]
[../]
- [./GAwithEnsembleModelIncludingCode]
+ [./NSGA-II_Beale]
type = 'RavenFramework'
- input = 'continuous/unconstrained/test_ensembleModel_withGA_Code_and_Functions.xml'
+ input = 'continuous/unconstrained/MultiObjectiveBeale-Bealeflipped.xml'
[./csv]
type = UnorderedCSV
- output = 'continuous/unconstrained/metaModelWithCodeAndFunctionsAndGenetic/opt_export.csv'
+ output = 'continuous/unconstrained/Multi_beale_bealeFlipped/opt_export_0.csv'
rel_err = 0.001
[../]
[../]
-[]
+[]
\ No newline at end of file
diff --git a/tests/framework/unit_tests/Optimizers/testFitnessBased.py b/tests/framework/unit_tests/Optimizers/testFitnessBased.py
index 0084aa028b..5fa79c77d0 100644
--- a/tests/framework/unit_tests/Optimizers/testFitnessBased.py
+++ b/tests/framework/unit_tests/Optimizers/testFitnessBased.py
@@ -92,9 +92,14 @@ def formatSample(vars):
popFitness = xr.DataArray(popFitness,
dims=['chromosome'],
coords={'chromosome': np.arange(np.shape(popFitness)[0])})
+popFitnessSet = popFitness.to_dataset(name = "test_popFitness")
popAge = [3,1,7,1]
offSprings = [[2,3,4,5,6,1],[1,3,5,2,4,6],[1,2,4,3,6,5]]
offSpringsFitness = [1.1,2.0,3.2]
+offSpringsFitness = xr.DataArray(offSpringsFitness,
+ dims=['chromosome'],
+ coords={'chromosome': np.arange(np.shape(offSpringsFitness)[0])})
+offSpringsFitnessSet = offSpringsFitness.to_dataset(name = "test_offFitness")
rlz =[]
for i in range(np.shape(offSprings)[0]):
d = {}
@@ -104,10 +109,11 @@ def formatSample(vars):
d[var] = {'dims':() ,'data': val}
rlz.append(xr.Dataset.from_dict(d))
rlz = xr.concat(rlz,dim='data')
-newPop2,newFit2,newAge2,popFitness2 = fitnessBased(rlz, age=popAge, variables=optVars, population=population, fitness=popFitness, offSpringsFitness=offSpringsFitness, popObjectiveVal=popFitness)
+newPop2,newFit2,newAge2,popFitness2 = fitnessBased(rlz, age=popAge, variables=optVars, population=population, fitness=popFitnessSet, offSpringsFitness=offSpringsFitnessSet, popObjectiveVal=popFitness)
+print('*'*39)
print('Fitness Based Selection')
-print('*'*19)
-print('new population: {}, \n new Fitness {}, \n new age'.format(newPop2,newFit2,newAge2))
+print('*'*39)
+print('1. New population:\n {}, \n2. New Fitness:\n {}, \n3. New age:\n'.format(newPop2.data,newFit2.to_dataarray(dim = 'variable', name = None)[0],newAge2))
print('Note that the second and forth chromosome had the same age, but for the age based mechanism it omitted the one with the lowest fitness')
expectedPop = xr.DataArray([[6,5,4,3,2,1],
[1,2,3,4,5,6],
@@ -119,13 +125,16 @@ def formatSample(vars):
expectedFit = xr.DataArray([9.5,7.2,3.2,2.0],
dims=['chromosome'],
coords={'chromosome':np.arange(np.shape(population)[0])})
+
+expectedFit = expectedFit.to_dataset(name = 'x1')
+
expectedAge = [8,4,0,0]
## TESTING
# Test survivor population
checkSameDataArrays('Check survived population data array',newPop2,expectedPop)
# Test survivor fitnesses
-checkSameDataArrays('Check fitness for survived population data array',newFit2,expectedFit)
+checkSameDataArrays('Check fitness for survived population data array',newFit2, expectedFit)
# Test survivor Ages
checkSameListOfInt('Check fitness for survived individuals',np.array(newAge2),np.array(expectedAge))
#
diff --git a/tests/framework/unit_tests/Optimizers/testRankSelection.py b/tests/framework/unit_tests/Optimizers/testRankSelection.py
index d3ecaf807e..c2ea374381 100644
--- a/tests/framework/unit_tests/Optimizers/testRankSelection.py
+++ b/tests/framework/unit_tests/Optimizers/testRankSelection.py
@@ -99,9 +99,12 @@ def formatSample(vars):
dims=['chromosome'],
coords={'chromosome': np.arange(np.shape(popFitness)[0])})
nParents = 2
+popFitness = popFitness.to_dataset(name = 'test_RankSelection')
+
parents = rankSelection(population, variables=optVars, fitness=popFitness, nParents=nParents)
+print('*'*39)
print('Rank based Parent Selection')
-print('*'*19)
+print('*'*39)
print('selected parents are: {}'.format(parents))
expectedParents = xr.DataArray([[3,5,6,2,1,4],
[1,2,3,4,5,6]],
diff --git a/tests/framework/unit_tests/Optimizers/testRouletteWheel.py b/tests/framework/unit_tests/Optimizers/testRouletteWheel.py
index eb5e659800..6292af6996 100644
--- a/tests/framework/unit_tests/Optimizers/testRouletteWheel.py
+++ b/tests/framework/unit_tests/Optimizers/testRouletteWheel.py
@@ -67,6 +67,8 @@ def checkSameDataArrays(comment, resultedDA, expectedDA, update=True):
popFitness = xr.DataArray(popFitness,
dims=['chromosome'],
coords={'chromosome': np.arange(np.shape(popFitness)[0])})
+popFitness = popFitness.to_dataset(name = 'test_RouletteWheel')
+
nParents = 2
parents = rouletteWheel(population, variables=optVars, fitness=popFitness, nParents=nParents)
print('Roulette Wheel Parent Selection')
diff --git a/tests/framework/unit_tests/Optimizers/testTournamentSelection.py b/tests/framework/unit_tests/Optimizers/testTournamentSelection.py
index edddaa8db4..b0131f60e2 100644
--- a/tests/framework/unit_tests/Optimizers/testTournamentSelection.py
+++ b/tests/framework/unit_tests/Optimizers/testTournamentSelection.py
@@ -94,9 +94,12 @@ def formatSample(vars):
popFitness = xr.DataArray(popFitness,
dims=['chromosome'],
coords={'chromosome': np.arange(np.shape(popFitness)[0])})
+popFitness = popFitness.to_dataset(name = 'test_TournamentSelection')
nParents = 2
-parents = tournamentSelection(population, variables=optVars, fitness=popFitness, nParents=nParents)
-print('Roulette Wheel Parent Selection')
+objVal = [10]
+kSelection = 2
+parents = tournamentSelection(population, variables=optVars, fitness=popFitness, nParents=nParents, objVal=objVal, kSelection=kSelection)
+print('Parent Selection with TournamentSelection algorithm')
print('*'*19)
print('selected parents are: {}'.format(parents))
expectedParents = xr.DataArray([[1,2,3,4,5,6],