From 618013259f5fc99814e052741e9901cd416d77fe Mon Sep 17 00:00:00 2001 From: SeH <1s1e1h1@gmail.com> Date: Mon, 20 Jul 2015 21:25:12 -0400 Subject: [PATCH] mavenized, automated IDE analysis cleanups, optimizations --- bin/com/a_SGA/Crossover.class | Bin 375 -> 0 bytes bin/com/a_SGA/FullReplacement.class | Bin 957 -> 0 bytes bin/com/a_SGA/IReplacement.class | Bin 361 -> 0 bytes bin/com/a_SGA/Mutation.class | Bin 1047 -> 0 bytes bin/com/a_SGA/NPointCrossover.class | Bin 1962 -> 0 bytes bin/com/a_SGA/Parameter.class | Bin 8448 -> 0 bytes bin/com/a_SGA/RestrictedReplacement.class | Bin 1818 -> 0 bytes bin/com/a_SGA/SGASolver.class | Bin 1949 -> 0 bytes bin/com/a_SGA/Selection.class | Bin 453 -> 0 bytes bin/com/a_SGA/TourWithReplacement.class | Bin 1453 -> 0 bytes bin/com/a_SGA/TourWithoutReplacement.class | Bin 2258 -> 0 bytes bin/com/a_SGA/Truncation$PosFit.class | Bin 1669 -> 0 bytes bin/com/a_SGA/Truncation.class | Bin 1424 -> 0 bytes bin/com/a_SGA/UniformCrossover.class | Bin 1397 -> 0 bytes bin/com/a_SGA/WorstReplacement$PosFit.class | Bin 1713 -> 0 bytes bin/com/a_SGA/WorstReplacement.class | Bin 1462 -> 0 bytes bin/com/b_UMDA/FullReplacement.class | Bin 967 -> 0 bytes bin/com/b_UMDA/IReplacement.class | Bin 363 -> 0 bytes bin/com/b_UMDA/Parameter.class | Bin 7495 -> 0 bytes bin/com/b_UMDA/RestrictedReplacement.class | Bin 1821 -> 0 bytes bin/com/b_UMDA/Selection.class | Bin 455 -> 0 bytes bin/com/b_UMDA/TourWithReplacement.class | Bin 1506 -> 0 bytes bin/com/b_UMDA/TourWithoutReplacement.class | Bin 2310 -> 0 bytes bin/com/b_UMDA/Truncation$PosFit.class | Bin 1676 -> 0 bytes bin/com/b_UMDA/Truncation.class | Bin 1479 -> 0 bytes bin/com/b_UMDA/UMDASolver.class | Bin 1771 -> 0 bytes bin/com/b_UMDA/UniModel.class | Bin 1246 -> 0 bytes bin/com/b_UMDA/WorstReplacement$PosFit.class | Bin 1720 -> 0 bytes bin/com/b_UMDA/WorstReplacement.class | Bin 1468 -> 0 bytes bin/com/c_ECGA/Cache.class | Bin 2484 -> 0 bytes bin/com/c_ECGA/ECGASolver.class | Bin 1839 -> 0 bytes bin/com/c_ECGA/FullReplacement.class | Bin 967 -> 0 bytes bin/com/c_ECGA/IReplacement.class | Bin 363 -> 0 bytes bin/com/c_ECGA/MPModel.class | Bin 4312 -> 0 bytes bin/com/c_ECGA/Parameter.class | Bin 7964 -> 0 bytes bin/com/c_ECGA/RestrictedReplacement.class | Bin 1821 -> 0 bytes bin/com/c_ECGA/Selection.class | Bin 455 -> 0 bytes bin/com/c_ECGA/Subset.class | Bin 4267 -> 0 bytes bin/com/c_ECGA/TourWithReplacement.class | Bin 1506 -> 0 bytes bin/com/c_ECGA/TourWithoutReplacement.class | Bin 2310 -> 0 bytes bin/com/c_ECGA/Truncation$PosFit.class | Bin 1676 -> 0 bytes bin/com/c_ECGA/Truncation.class | Bin 1479 -> 0 bytes bin/com/c_ECGA/WorstReplacement$PosFit.class | Bin 1720 -> 0 bytes bin/com/c_ECGA/WorstReplacement.class | Bin 1468 -> 0 bytes bin/com/d_HBOA/BDMetric.class | Bin 1286 -> 0 bytes bin/com/d_HBOA/BICMetric.class | Bin 539 -> 0 bytes bin/com/d_HBOA/BayesianNetwork.class | Bin 10118 -> 0 bytes bin/com/d_HBOA/DecisionGraph.class | Bin 3958 -> 0 bytes bin/com/d_HBOA/FullReplacement.class | Bin 816 -> 0 bytes bin/com/d_HBOA/HBOASolver.class | Bin 1849 -> 0 bytes bin/com/d_HBOA/IBayesianMetric.class | Bin 820 -> 0 bytes bin/com/d_HBOA/IGraph.class | Bin 159 -> 0 bytes bin/com/d_HBOA/IReplacement.class | Bin 363 -> 0 bytes bin/com/d_HBOA/Leaf.class | Bin 4172 -> 0 bytes bin/com/d_HBOA/Parameter.class | Bin 8411 -> 0 bytes bin/com/d_HBOA/RestrictedReplacement.class | Bin 1821 -> 0 bytes bin/com/d_HBOA/Selection.class | Bin 455 -> 0 bytes bin/com/d_HBOA/TourWithReplacement.class | Bin 1506 -> 0 bytes bin/com/d_HBOA/TourWithoutReplacement.class | Bin 2310 -> 0 bytes bin/com/d_HBOA/Truncation$PosFit.class | Bin 1676 -> 0 bytes bin/com/d_HBOA/Truncation.class | Bin 1479 -> 0 bytes bin/com/d_HBOA/Variable.class | Bin 1698 -> 0 bytes bin/com/d_HBOA/WorstReplacement$PosFit.class | Bin 1720 -> 0 bytes bin/com/d_HBOA/WorstReplacement.class | Bin 1468 -> 0 bytes bin/com/z_PORTFOLIO/ECGA.class | Bin 994 -> 0 bytes bin/com/z_PORTFOLIO/HBOA.class | Bin 994 -> 0 bytes bin/com/z_PORTFOLIO/HierarchicalTrapOne.class | Bin 1755 -> 0 bytes bin/com/z_PORTFOLIO/HierarchicalTrapTwo.class | Bin 1863 -> 0 bytes bin/com/z_PORTFOLIO/IEASolver.class | Bin 1770 -> 0 bytes bin/com/z_PORTFOLIO/IEAlgorithm.class | Bin 529 -> 0 bytes bin/com/z_PORTFOLIO/IProblem.class | Bin 213 -> 0 bytes bin/com/z_PORTFOLIO/Individual.class | Bin 2294 -> 0 bytes bin/com/z_PORTFOLIO/IsingSpin.class | Bin 618 -> 0 bytes bin/com/z_PORTFOLIO/OneMax.class | Bin 796 -> 0 bytes bin/com/z_PORTFOLIO/PORTFOLIO.class | Bin 1033 -> 0 bytes bin/com/z_PORTFOLIO/ParBestSoFar.class | Bin 3399 -> 0 bytes bin/com/z_PORTFOLIO/ParEngine.class | Bin 4978 -> 0 bytes bin/com/z_PORTFOLIO/ParParameter.class | Bin 4766 -> 0 bytes bin/com/z_PORTFOLIO/ParRegister.class | Bin 3432 -> 0 bytes bin/com/z_PORTFOLIO/ParStopper.class | Bin 2719 -> 0 bytes bin/com/z_PORTFOLIO/Population.class | Bin 3967 -> 0 bytes bin/com/z_PORTFOLIO/PortEngine.class | Bin 3832 -> 0 bytes bin/com/z_PORTFOLIO/PortParameter.class | Bin 8246 -> 0 bytes bin/com/z_PORTFOLIO/PortPress.class | Bin 12747 -> 0 bytes bin/com/z_PORTFOLIO/PortRegister.class | Bin 6081 -> 0 bytes bin/com/z_PORTFOLIO/PortStopper.class | Bin 1322 -> 0 bytes bin/com/z_PORTFOLIO/PortTime.class | Bin 1266 -> 0 bytes bin/com/z_PORTFOLIO/Problem.class | Bin 1767 -> 0 bytes bin/com/z_PORTFOLIO/Quadratic.class | Bin 915 -> 0 bytes bin/com/z_PORTFOLIO/RandomPopulation.class | Bin 919 -> 0 bytes bin/com/z_PORTFOLIO/SGA.class | Bin 986 -> 0 bytes bin/com/z_PORTFOLIO/SelectedSet.class | Bin 426 -> 0 bytes bin/com/z_PORTFOLIO/ThreeDeceptive.class | Bin 1152 -> 0 bytes .../z_PORTFOLIO/ThreeDeceptiveBiPolar.class | Bin 1290 -> 0 bytes .../ThreeDeceptiveOverlapping.class | Bin 1183 -> 0 bytes bin/com/z_PORTFOLIO/TrapK.class | Bin 1279 -> 0 bytes bin/com/z_PORTFOLIO/UMDA.class | Bin 994 -> 0 bytes bin/com/z_PORTFOLIO/UniformSixBlocks.class | Bin 876 -> 0 bytes bin/com/z_PORTFOLIO/ZeroMax.class | Bin 799 -> 0 bytes bin/com/z_PORTFOLIO/ZeroQuadratic.class | Bin 927 -> 0 bytes bin/com/z_PORTFOLIO/ZeroThreeDeceptive.class | Bin 1164 -> 0 bytes .../ZeroThreeDeceptiveBiPolar.class | Bin 1302 -> 0 bytes .../ZeroThreeDeceptiveOverlapping.class | Bin 1195 -> 0 bytes bin/com/z_PORTFOLIO/ZeroTrapK.class | Bin 1281 -> 0 bytes .../z_PORTFOLIO/ZeroUniformSixBlocks.class | Bin 888 -> 0 bytes pom.xml | 53 +++++++ src/com/a_SGA/Mutation.java | 26 ---- src/{ => main/java}/com/a_SGA/Crossover.java | 6 +- src/main/java/com/a_SGA/Mutation.java | 26 ++++ src/{ => main/java}/com/a_SGA/Parameter.java | 36 ++--- .../java}/com/a_SGA/Replacement.java | 27 ++-- src/{ => main/java}/com/a_SGA/SGASolver.java | 8 +- src/{ => main/java}/com/a_SGA/Selection.java | 14 +- src/{ => main/java}/com/b_UMDA/Parameter.java | 41 +++--- .../java}/com/b_UMDA/Replacement.java | 62 ++++---- src/{ => main/java}/com/b_UMDA/Selection.java | 26 ++-- .../java}/com/b_UMDA/UMDASolver.java | 18 ++- src/{ => main/java}/com/b_UMDA/UniModel.java | 17 +-- src/{ => main/java}/com/c_ECGA/Cache.java | 13 +- .../java}/com/c_ECGA/ECGASolver.java | 6 +- src/{ => main/java}/com/c_ECGA/MPModel.java | 11 +- src/{ => main/java}/com/c_ECGA/Parameter.java | 40 +++--- .../java}/com/c_ECGA/Replacement.java | 49 +++---- src/{ => main/java}/com/c_ECGA/Selection.java | 10 +- src/{ => main/java}/com/c_ECGA/Subset.java | 17 ++- .../java}/com/d_HBOA/BayesianMetric.java | 6 +- .../java}/com/d_HBOA/BayesianNetwork.java | 135 ++++++++++-------- .../java}/com/d_HBOA/DecisionGraph.java | 26 ++-- .../java}/com/d_HBOA/HBOASolver.java | 6 +- src/{ => main/java}/com/d_HBOA/Parameter.java | 37 ++--- .../java}/com/d_HBOA/Replacement.java | 27 ++-- src/{ => main/java}/com/d_HBOA/Selection.java | 10 +- src/{ => main/java}/com/z_PORTFOLIO/ECGA.java | 0 src/{ => main/java}/com/z_PORTFOLIO/HBOA.java | 0 .../java}/com/z_PORTFOLIO/IEASolver.java | 4 +- .../java}/com/z_PORTFOLIO/IEAlgorithm.java | 0 .../java}/com/z_PORTFOLIO/Individual.java | 9 +- .../java}/com/z_PORTFOLIO/PORTFOLIO.java | 10 +- .../java}/com/z_PORTFOLIO/ParBestSoFar.java | 6 +- .../java}/com/z_PORTFOLIO/ParEngine.java | 8 +- .../java}/com/z_PORTFOLIO/ParParameter.java | 12 +- .../java}/com/z_PORTFOLIO/ParRegister.java | 6 +- .../java}/com/z_PORTFOLIO/ParStopper.java | 2 +- .../java}/com/z_PORTFOLIO/Population.java | 11 +- .../java}/com/z_PORTFOLIO/PortEngine.java | 2 +- .../java}/com/z_PORTFOLIO/PortParameter.java | 23 +-- .../java}/com/z_PORTFOLIO/PortPress.java | 61 ++++---- .../java}/com/z_PORTFOLIO/PortRegister.java | 2 +- .../java}/com/z_PORTFOLIO/PortStopper.java | 6 +- .../java}/com/z_PORTFOLIO/PortTime.java | 0 .../java}/com/z_PORTFOLIO/Problem.java | 20 +-- .../com/z_PORTFOLIO/RandomPopulation.java | 0 src/{ => main/java}/com/z_PORTFOLIO/SGA.java | 0 .../java}/com/z_PORTFOLIO/SelectedSet.java | 0 src/{ => main/java}/com/z_PORTFOLIO/UMDA.java | 0 .../main/resources}/ECGAParameters.txt | 0 .../main/resources}/HBOAParameters.txt | 0 {bin => src/main/resources}/ParParameters.txt | 0 .../main/resources}/PortParameters.txt | 4 +- {bin => src/main/resources}/SGAParameters.txt | 0 .../main/resources}/UMDAParameters.txt | 0 161 files changed, 512 insertions(+), 427 deletions(-) delete mode 100644 bin/com/a_SGA/Crossover.class delete mode 100644 bin/com/a_SGA/FullReplacement.class delete mode 100644 bin/com/a_SGA/IReplacement.class delete mode 100644 bin/com/a_SGA/Mutation.class delete mode 100644 bin/com/a_SGA/NPointCrossover.class delete mode 100644 bin/com/a_SGA/Parameter.class delete mode 100644 bin/com/a_SGA/RestrictedReplacement.class delete mode 100644 bin/com/a_SGA/SGASolver.class delete mode 100644 bin/com/a_SGA/Selection.class delete mode 100644 bin/com/a_SGA/TourWithReplacement.class delete mode 100644 bin/com/a_SGA/TourWithoutReplacement.class delete mode 100644 bin/com/a_SGA/Truncation$PosFit.class delete mode 100644 bin/com/a_SGA/Truncation.class delete mode 100644 bin/com/a_SGA/UniformCrossover.class delete mode 100644 bin/com/a_SGA/WorstReplacement$PosFit.class delete mode 100644 bin/com/a_SGA/WorstReplacement.class delete mode 100644 bin/com/b_UMDA/FullReplacement.class delete mode 100644 bin/com/b_UMDA/IReplacement.class delete mode 100644 bin/com/b_UMDA/Parameter.class delete mode 100644 bin/com/b_UMDA/RestrictedReplacement.class delete mode 100644 bin/com/b_UMDA/Selection.class delete mode 100644 bin/com/b_UMDA/TourWithReplacement.class delete mode 100644 bin/com/b_UMDA/TourWithoutReplacement.class delete mode 100644 bin/com/b_UMDA/Truncation$PosFit.class delete mode 100644 bin/com/b_UMDA/Truncation.class delete mode 100644 bin/com/b_UMDA/UMDASolver.class delete mode 100644 bin/com/b_UMDA/UniModel.class delete mode 100644 bin/com/b_UMDA/WorstReplacement$PosFit.class delete mode 100644 bin/com/b_UMDA/WorstReplacement.class delete mode 100644 bin/com/c_ECGA/Cache.class delete mode 100644 bin/com/c_ECGA/ECGASolver.class delete mode 100644 bin/com/c_ECGA/FullReplacement.class delete mode 100644 bin/com/c_ECGA/IReplacement.class delete mode 100644 bin/com/c_ECGA/MPModel.class delete mode 100644 bin/com/c_ECGA/Parameter.class delete mode 100644 bin/com/c_ECGA/RestrictedReplacement.class delete mode 100644 bin/com/c_ECGA/Selection.class delete mode 100644 bin/com/c_ECGA/Subset.class delete mode 100644 bin/com/c_ECGA/TourWithReplacement.class delete mode 100644 bin/com/c_ECGA/TourWithoutReplacement.class delete mode 100644 bin/com/c_ECGA/Truncation$PosFit.class delete mode 100644 bin/com/c_ECGA/Truncation.class delete mode 100644 bin/com/c_ECGA/WorstReplacement$PosFit.class delete mode 100644 bin/com/c_ECGA/WorstReplacement.class delete mode 100644 bin/com/d_HBOA/BDMetric.class delete mode 100644 bin/com/d_HBOA/BICMetric.class delete mode 100644 bin/com/d_HBOA/BayesianNetwork.class delete mode 100644 bin/com/d_HBOA/DecisionGraph.class delete mode 100644 bin/com/d_HBOA/FullReplacement.class delete mode 100644 bin/com/d_HBOA/HBOASolver.class delete mode 100644 bin/com/d_HBOA/IBayesianMetric.class delete mode 100644 bin/com/d_HBOA/IGraph.class delete mode 100644 bin/com/d_HBOA/IReplacement.class delete mode 100644 bin/com/d_HBOA/Leaf.class delete mode 100644 bin/com/d_HBOA/Parameter.class delete mode 100644 bin/com/d_HBOA/RestrictedReplacement.class delete mode 100644 bin/com/d_HBOA/Selection.class delete mode 100644 bin/com/d_HBOA/TourWithReplacement.class delete mode 100644 bin/com/d_HBOA/TourWithoutReplacement.class delete mode 100644 bin/com/d_HBOA/Truncation$PosFit.class delete mode 100644 bin/com/d_HBOA/Truncation.class delete mode 100644 bin/com/d_HBOA/Variable.class delete mode 100644 bin/com/d_HBOA/WorstReplacement$PosFit.class delete mode 100644 bin/com/d_HBOA/WorstReplacement.class delete mode 100644 bin/com/z_PORTFOLIO/ECGA.class delete mode 100644 bin/com/z_PORTFOLIO/HBOA.class delete mode 100644 bin/com/z_PORTFOLIO/HierarchicalTrapOne.class delete mode 100644 bin/com/z_PORTFOLIO/HierarchicalTrapTwo.class delete mode 100644 bin/com/z_PORTFOLIO/IEASolver.class delete mode 100644 bin/com/z_PORTFOLIO/IEAlgorithm.class delete mode 100644 bin/com/z_PORTFOLIO/IProblem.class delete mode 100644 bin/com/z_PORTFOLIO/Individual.class delete mode 100644 bin/com/z_PORTFOLIO/IsingSpin.class delete mode 100644 bin/com/z_PORTFOLIO/OneMax.class delete mode 100644 bin/com/z_PORTFOLIO/PORTFOLIO.class delete mode 100644 bin/com/z_PORTFOLIO/ParBestSoFar.class delete mode 100644 bin/com/z_PORTFOLIO/ParEngine.class delete mode 100644 bin/com/z_PORTFOLIO/ParParameter.class delete mode 100644 bin/com/z_PORTFOLIO/ParRegister.class delete mode 100644 bin/com/z_PORTFOLIO/ParStopper.class delete mode 100644 bin/com/z_PORTFOLIO/Population.class delete mode 100644 bin/com/z_PORTFOLIO/PortEngine.class delete mode 100644 bin/com/z_PORTFOLIO/PortParameter.class delete mode 100644 bin/com/z_PORTFOLIO/PortPress.class delete mode 100644 bin/com/z_PORTFOLIO/PortRegister.class delete mode 100644 bin/com/z_PORTFOLIO/PortStopper.class delete mode 100644 bin/com/z_PORTFOLIO/PortTime.class delete mode 100644 bin/com/z_PORTFOLIO/Problem.class delete mode 100644 bin/com/z_PORTFOLIO/Quadratic.class delete mode 100644 bin/com/z_PORTFOLIO/RandomPopulation.class delete mode 100644 bin/com/z_PORTFOLIO/SGA.class delete mode 100644 bin/com/z_PORTFOLIO/SelectedSet.class delete mode 100644 bin/com/z_PORTFOLIO/ThreeDeceptive.class delete mode 100644 bin/com/z_PORTFOLIO/ThreeDeceptiveBiPolar.class delete mode 100644 bin/com/z_PORTFOLIO/ThreeDeceptiveOverlapping.class delete mode 100644 bin/com/z_PORTFOLIO/TrapK.class delete mode 100644 bin/com/z_PORTFOLIO/UMDA.class delete mode 100644 bin/com/z_PORTFOLIO/UniformSixBlocks.class delete mode 100644 bin/com/z_PORTFOLIO/ZeroMax.class delete mode 100644 bin/com/z_PORTFOLIO/ZeroQuadratic.class delete mode 100644 bin/com/z_PORTFOLIO/ZeroThreeDeceptive.class delete mode 100644 bin/com/z_PORTFOLIO/ZeroThreeDeceptiveBiPolar.class delete mode 100644 bin/com/z_PORTFOLIO/ZeroThreeDeceptiveOverlapping.class delete mode 100644 bin/com/z_PORTFOLIO/ZeroTrapK.class delete mode 100644 bin/com/z_PORTFOLIO/ZeroUniformSixBlocks.class create mode 100644 pom.xml delete mode 100644 src/com/a_SGA/Mutation.java rename src/{ => main/java}/com/a_SGA/Crossover.java (93%) create mode 100644 src/main/java/com/a_SGA/Mutation.java rename src/{ => main/java}/com/a_SGA/Parameter.java (90%) rename src/{ => main/java}/com/a_SGA/Replacement.java (82%) rename src/{ => main/java}/com/a_SGA/SGASolver.java (82%) rename src/{ => main/java}/com/a_SGA/Selection.java (95%) rename src/{ => main/java}/com/b_UMDA/Parameter.java (88%) rename src/{ => main/java}/com/b_UMDA/Replacement.java (63%) rename src/{ => main/java}/com/b_UMDA/Selection.java (90%) rename src/{ => main/java}/com/b_UMDA/UMDASolver.java (74%) rename src/{ => main/java}/com/b_UMDA/UniModel.java (57%) rename src/{ => main/java}/com/c_ECGA/Cache.java (87%) rename src/{ => main/java}/com/c_ECGA/ECGASolver.java (86%) rename src/{ => main/java}/com/c_ECGA/MPModel.java (95%) rename src/{ => main/java}/com/c_ECGA/Parameter.java (89%) rename src/{ => main/java}/com/c_ECGA/Replacement.java (72%) rename src/{ => main/java}/com/c_ECGA/Selection.java (95%) rename src/{ => main/java}/com/c_ECGA/Subset.java (85%) rename src/{ => main/java}/com/d_HBOA/BayesianMetric.java (88%) rename src/{ => main/java}/com/d_HBOA/BayesianNetwork.java (72%) rename src/{ => main/java}/com/d_HBOA/DecisionGraph.java (92%) rename src/{ => main/java}/com/d_HBOA/HBOASolver.java (85%) rename src/{ => main/java}/com/d_HBOA/Parameter.java (91%) rename src/{ => main/java}/com/d_HBOA/Replacement.java (80%) rename src/{ => main/java}/com/d_HBOA/Selection.java (95%) rename src/{ => main/java}/com/z_PORTFOLIO/ECGA.java (100%) rename src/{ => main/java}/com/z_PORTFOLIO/HBOA.java (100%) rename src/{ => main/java}/com/z_PORTFOLIO/IEASolver.java (96%) rename src/{ => main/java}/com/z_PORTFOLIO/IEAlgorithm.java (100%) rename src/{ => main/java}/com/z_PORTFOLIO/Individual.java (86%) rename src/{ => main/java}/com/z_PORTFOLIO/PORTFOLIO.java (78%) rename src/{ => main/java}/com/z_PORTFOLIO/ParBestSoFar.java (96%) rename src/{ => main/java}/com/z_PORTFOLIO/ParEngine.java (94%) rename src/{ => main/java}/com/z_PORTFOLIO/ParParameter.java (95%) rename src/{ => main/java}/com/z_PORTFOLIO/ParRegister.java (93%) rename src/{ => main/java}/com/z_PORTFOLIO/ParStopper.java (97%) rename src/{ => main/java}/com/z_PORTFOLIO/Population.java (88%) rename src/{ => main/java}/com/z_PORTFOLIO/PortEngine.java (99%) rename src/{ => main/java}/com/z_PORTFOLIO/PortParameter.java (95%) rename src/{ => main/java}/com/z_PORTFOLIO/PortPress.java (89%) rename src/{ => main/java}/com/z_PORTFOLIO/PortRegister.java (99%) rename src/{ => main/java}/com/z_PORTFOLIO/PortStopper.java (73%) rename src/{ => main/java}/com/z_PORTFOLIO/PortTime.java (100%) rename src/{ => main/java}/com/z_PORTFOLIO/Problem.java (97%) rename src/{ => main/java}/com/z_PORTFOLIO/RandomPopulation.java (100%) rename src/{ => main/java}/com/z_PORTFOLIO/SGA.java (100%) rename src/{ => main/java}/com/z_PORTFOLIO/SelectedSet.java (100%) rename src/{ => main/java}/com/z_PORTFOLIO/UMDA.java (100%) rename {bin => src/main/resources}/ECGAParameters.txt (100%) rename {bin => src/main/resources}/HBOAParameters.txt (100%) rename {bin => src/main/resources}/ParParameters.txt (100%) rename {bin => src/main/resources}/PortParameters.txt (99%) rename {bin => src/main/resources}/SGAParameters.txt (100%) rename {bin => src/main/resources}/UMDAParameters.txt (100%) diff --git a/bin/com/a_SGA/Crossover.class b/bin/com/a_SGA/Crossover.class deleted file mode 100644 index cd16dab11de34c52ce5d7ffb556dd7fc6213075d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmZvYPfNo<5XIlLNux2gYW421^{48Ff{3X@7?q6Ip^Ma-+zBQ1W-m<#tNOUgPnD zQpLCJ9kXj2Ewf`fo{E^jObAy;Fac%Fax8CMAezlJ1!9lfwy7bCaUF3e0+Th%F`xRK zeY3Y~?AxZmbj@uUcGKut@_d|(dC#rBz}`!+E4sBn9TA>?m7UpkoFX1SWW+>w9L! z@*J~ItL(R;VHWc$=Kezv+R>50fvR~418H)lMs~?(uukKPh zmaQJ4S9M&&Qi#%=L|MyR_uoJSGN+_Me;n+DV;+RwsIYM62uaQYX(tdAn*ze(zsl!8 zAV?+}p3!>w#ONM>V6EZ$y%xtOpTN|}6Iy;@3=B5Oi3VRK!pN7yv&vnGtB{%eSB!n( zCIXF7!hnl&jQY_9t_hyl3?><6@edM>aotE_YAbpt{u#w$DqbF9`u$y{kc!JgS{Wjp zR&pOcLT74-i)m%+U0e`7{PgE%AveSosT&P+^Fiz(hCX*5lJIGLfEzf#O}xSi^Y`!u z_whFHwoa$iKlUbf*LhcZ-#`{QM98#;JPPDjaT`Ul#L1e$GII*s2gVWo1uZI;A}m~C IB7$3g0hKS({Qv*} diff --git a/bin/com/a_SGA/IReplacement.class b/bin/com/a_SGA/IReplacement.class deleted file mode 100644 index fd82d27fbe7048189f481f6936484de7ebeaff24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmZut!AiqG6r4?Cqp{lBgLw2w0$Ym)_9l&Skt;9xfEzBcN zvz5$ihW1byRo^hQ1{Vtk|JD{VL<&X6)iE;?l*h5k&OYQ{hi#@BAy7Zzu;nRHf9+eK^3DprkBQu66WuZkXl9tnRo z@3cb0B}52XG3=sKmMm*xR9&m2FVxPGeq2VMiYq5Vor!7aM~8slHeb0jPL*@{aSbp)-?PC@!%YlOWR5poDw$FpZ!8^8$>O+%1O^%0Yy_KP>69GjHgpw30$t~!a}|fZ z%Nm9;!V9yx(!2}XeA#G9nWO&|j71jLI@K`htVBv6kavy3i#cPXer5i=Q>_%tSxeFm zoZQZklns4+0SaH7fJZ(9S_*9yE!=(drs&JKKk=1o;0pqu=y?$0-pm|E5axc7XVSia zHh!fg(MS&M=%{1q%#jsMiO&dpq;VETtHEf;33V8OP68hj`3)~2fn`}7eDfZ8WpWo! zl&M`z?4fHPQ5ksq4za<=XmlS}$Gx52@bCwOq#qvHM{E~b%^s$`t%&FzZtWcX-1dmb z;E$c7Z*nlDHrNnaX@@947(sGr=TQCJ6C7oPoF>tQS)S(@e~O+O^RZ)grvfbVC%!}O yt(eCct31qlguAp9;zTfxdz|P#`*cG+L{J>^$38?{9H7N>0N(-e1SS~w;K5&9j?HBN diff --git a/bin/com/a_SGA/NPointCrossover.class b/bin/com/a_SGA/NPointCrossover.class deleted file mode 100644 index b33b911fa5424eccc0050050427b1d431385708e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1962 zcmaJ?-%ndr9RHls_R{t;V60;uFgA3f1zFd*p`#4NGG-ksND+iN;nLo*3#GTVx9G?o z_p%2QUrZ$Ng(uz&F0NZ@f4`sey}xZe z`4PZ*6cjiF0x5Gjtj#8`4u%tBrjfN`d9zS3SMkSsDV#~0#%?U7@G7z;E;-XG|)t@+Qg7#9aiCjTcCc#$m)sW^1Pm( z(B?BbIU{CD%S>u{L!Qf*PV2T&5NH{xg!n=RQO1*!=?FxFw%F?I*y#Ag@aRZRJ7p)^Ip)cgq>|%!N~(ODt4vW z4i&H9Re?sTRX8y-cSoQ-7!SQHEDz2gsGzgl!{@@MBww_BHmEY zE6}{JSb38smQ}ndyDYNObDxSR`UMo}Bc8QbL8cw|VgPR|cx%^9M$0aQ$<`P2yoy1* zLyZ+JQ`ARq2^^J$vZJXMV`32usknk+_Crgj1^mG(vC;WOJ!M5hGg9td6>+GnHIIMwIk?wpg9`vFdu(B1VN>c09KUw)6s^dr39rvwx-9^gU=mmcGC39+ew zQo>crHLh>}EjL$g4L7COg|ff~5>n>9pD<8DqPMpC;PKb?dN*(;;PQJ*c)!;tiGbTa zl<Wxefz1@o?hGD?D0DTt|V9IT)>^Y=XCg;t?S!;J)2BV774h80M}zI zLjZF4HK2v3R&;Q5p2G=TV)3rw6ehS&@pg{0F@w`EIq2@96Za9s7aVA7=)wlNvB~oj z@_*)-`jr;`pv|ZJvB@^9?v!<}4bN~BAG7E#{DoPz!NCarqz8=+sl)G>=be+$JVpv> zN_F5H=%n0?>OLc1AU5vuso&;JEpH+)NO|x%day{!%cz>M#CUyJrhk>bb~LlpG@g5{8a>HlMl-`K zULZgzdx>dwz%&>Fty71x$U$$0<#X8ht1}Q z869cv89Zc#QUaB+cq$x=c9SYe&MW+Rl0YgEj*helR3)tliAmOFr4Gi11cXmOOU2TO zK=^t~U}n5$csLoC><$GqZ zVzaWtgL2gAScN&XC3P@N2VUTx#`kogcf?8sO1;Qc_@wqVI$Y2g3ljBboGQmJ(&3il zvpL>d;$iZ3N}5Y_cu>hzN}2-ya=u;8U#3IH412yiH!o*4>zFB}>yk4Y1UYfJj#-jL z+T2$h5jnk0$85B5B6Z6RI;CSl2>9=P`(FqaX`lvSS?Tyv7#fXgL3F9 z9UsEg910yY6K$+GN1d;Jy9*}csuZSE;Yf2JWJaS_!h>tDTZ62yE%JF-#|REGM(L#0 zZbibQVV1H$?R1{Bom(iaMT$72<61?E+N56&@&gTzekHzgcMK5(U7GapyMObSP#>`%StBA5t@4| z?$z=8_$b3{#^Y9$0c@JaLsMO!v4N4g6(85}3FU@V%r?-2PvJfnKAp9rcvU*?#|~O9 zVK)^ae9nkx!CqF8gs!~xwm<@rYdEPYi|L+oRY}p2sw_--d4iI1BY|U(^}}Mz$tbQT zQaGbBlB6VN^X5w08P2uXJVl90cjot@+@_=wgrz|COk9g2K`k=^DKm6!ml;>ctl{%i zEcL2D{)vpq69NlaaZ`Me^}L3s1Qr-gO|3>(IGN-YW?0vy&4`fM&|G zOmeBU%pltnvL>I?@jPDOkg}*0LhUWQrT%~{Zlzg->BwB7CSCXofhGAQus62OSYp&n z<)}RPD!%5zUuEG)x!4y?StC|L$BTH0b;-m^5|#-c(_*+!!^;ATi`JHF84R``>>1W* z_y%`6MI-k(X>c?}Ctq(Fqv>SI7_^KXeI0H69eqaXph?ePRJ+E5zs9#+_!c+j{3<#l zF*Bv(JNO$eR#~P-&S6`phSvl(D80EY)JR$-s!gM}C*bS%4RjdsL@XXl$c}{izl-m= z@J12pw8zry1ay2Kf6Gi&2G~RAu%KPT-wAA27W5`!gXUm35>6d6V#7u#+aTp!U>Z@? zeHhz1`uBBobQ`s6YYj6xq}<`g5Ah=x{+?JSyNv6v?(OO8@9gpWdWd#08bvI8OK!j- zs^K4)6|xdE{4}fGj(<+E5swi$l6l=xgYPo#=g=3K&5FwIVv2Kd z`h?K%p8`j0(Zj~ESlTcXmLaz-xoFt}QoPy|jATqEz8vOY=icsiR(W@So8KQa_Vx92 z?=X&pQwNROEOgkLt3tdw8?09w**l|B&tlN<-|X6gR61%NGeWT_p)W<0pi@-wo^_i>E{Eu;tU3&9pj@FT@p=VN=|5)Q^{ zDpM?7*m`K$Uk)BoA>2}|hdEF41~j1yyzKjpL`eE56C^@{EFL*h zo5MHzlc-kGq^&ic|4Vqz9~jZieYrbO6qj5>Pe@>6mv>HXqQxb=+;{Rbd!u27el$nm z5wpb{>AVYMOxoLJO!!4rljrE}l{itrFjv$_hWUy?1#uy*$}{9h*@NVBDEo=QCcMbh z>^Lno$dDJ4o$!byVwqI9T!xnh5@_>c3(|}GcyV(23MMI@o9mLi_&$rBP&ky5-vGJK zPLEh6Gp(V>W&2`@WN|vyqs}FoioDdBjzo$CtwxiK~kGKfC=FSIY0SPl;>z86?b-)+?JI z{QA5}gmf{ab_UtIGo>;cG@Hi&BO9{pkENNpBwiz1O)O=9U(Tk)gZc7kNImh8M%{TR zqwYL-QFk7&s5_5S)SWGoy7Lr8-FaN1?mQgfeGaeHywYaAS#arY{ke+)NH;?|(|_6gkCIF7r0glOge%i+UT9usZj+1hptp&e0l;0Wn%;mqyWMTxs9(~r-hTRADN3iDAs zfD@GO=0Vbf_ycP9B8ku7A=b+>gm4lM(~gxqBYT7;>7dpgN;pA>-o*1*`^kqjcodH@ z!LPtV{2^yu)b7R~@kyi38l1xCDEW`6rvZ)+D5S!Lxi0K>(}N4g@woR%+lOcIbmLik;RIF`PoL#9d5?R) zl%tbnZTomG*8_U55`9?CbIbIK3Q-^`Q}rY(=di*3)YR}*$3csJbs%H3pnuHBOm;%T&8fL75iyRkf+B72!Q*s zm_C*GG}o4eFH^U~vW56F`quWThVu8|6f?@GpJ#}i{d3YdIQta|N99RAbA4qOH+U~p z7Hp)4{_+f(2v3fasOQaj63ck2I9ck|ujjqh;H^>I4L0}MF|2idwv_&rLi+iNzLE6b zJcIRPSYP?+&y+H}TFAga(m@xK;q^1vIEIZg?|%@LyjR`#P$}aN3K2y!RCQAAk$Q9@6Q5D~{6xQ<|wAdsX90*CP=XP(DVyvF0~*Kq?+Yd(yh;zs9-L|GLcESrUg$`;{d*)lv_R*Of64^u5@K4%t(Inmv5**e}2s||@ z$}`VSK34=6ObG3%YEem$%e^Xo*`R`!O3v+;F^y6{50|KMIN}K`2(u%vGwfV^hO=I)Um*F+0eDWT8xm>Qk6CDdyVm zEfeCxr*g*FebyQBeu3Ea3{mxrGC;aP?gRV{cCO#WNV~-%u{fiuQO1D(DksGf3T>Sb zOQl4+bFZ1A?oPN`rw3U@{|7q|m|nMwZ@Wry7Yc8ZIXJLS46;8kE8=D3x(Rpr(9sfIt6%S+MIc(ffBC*(-A|@Y6?S<`DCT|=UU4;wjRiiB>%j;94 zt%|mv&xITVYOakO_R`zv%(^0-dFSm{wCx$%#(Z)Pt7`iiljcQk`7g2U|2iw>Wp4g2 zVF0h-Dtv3hwQ-A^#R0W(JH!n{G1)%IWT}!B$KPD%zKcCA@A9WAxBLYqlhYlU zoUWF=qPUWMtN75kxY}`64CcQ_W-9FX5r3q9i;dfl3zD*$NGV$dA%=M^6C=L@UAbqJ diff --git a/bin/com/a_SGA/RestrictedReplacement.class b/bin/com/a_SGA/RestrictedReplacement.class deleted file mode 100644 index 5fe7aef4650bccc6494d7387fc539edaf75b91a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1818 zcmaJ?U2hvj6g^|Fz5duVPKeulxrti}{zz*Qz_f8lX%i9_(j<-304WeQ_Nr{_tSx7q zM3E3es)Tr;sss|`1*xb~ohUXKU!3rPpoZ$_(Ge?iF|WB`iM`UP^(s%!lHm@H!skYcZ|Y=TSnyw zQmr=A6qri5u=^X!ODn5$OAGo^X1QFcl?=x!+qt_PPTekAJ65q~lyb?n5C$=w1YTo4%O*!wRP4bS5em8}|-dP~Z4-`FuSHODGt zR@}8*2rnY3A|Vj@zfVI7X#v$X_Z;1JNFkvob;mBf8^TE!|nFpH#awfdZats~s*#2lMSLN#Zz zDsFQ_zFeyoST=c$BgbBfE3z#y%4_fC+r#@P?>;RLZ5082gPeWMxxz7?`W2z!NMC6> zraVPtDE1WLRO}aY9U_n#;`k$jyy)h4(1q#Ywq8O!$G<)d;Vh3jhY0)sHAGFL!}^JPiUUDg=MvZb78}CPDEhX={u+NY^ni?aeBO_;M_&OicPb zS%2?HR#mcrLu7u!XsnJGvcYsTSjX68XdpD;tK+3?I2w+sKOh_pX8qA{R(%){(Lm~F zbUkVOAtSO^1Lp!?rKA2jCcph2DOv+QuGBHj6K`G%((Vt^6LDka(ys6Ahl+?QW6z#6 zcG|+MyXg#)@DRcnrT{S}e4eR{@H@%}BaRF%@V;Hdb-pk&xP*E7@r#eXbF3OMJ&0(9$*=_-3ot$6<62*9uwD3F?;YSR&j@{ z`mm2RuKCGm2k&y^6G}Gk(F%~=DBhm4t1LGgYID^js diff --git a/bin/com/a_SGA/SGASolver.class b/bin/com/a_SGA/SGASolver.class deleted file mode 100644 index f807ca1947ad3a31164e97cd8bf3966eb5ec5c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1949 zcmah~YgZdp6x|mBQ^J*6N@;6Df!aa{k7)5#L$OE;#)gN4qO~d=CRaLjGLudw(baGM z9lyC&ld}BKAK;I2x$opL6LHbS8t&YC&g`@AIs2Ua{m)--0Nh5^K%c-x%PVKi!{X*z zmQT@h>dH5e5V)!hFAsNj_Vzb+3i+LE{z2O;FjQ5JvI5(41uhk02%X~`eJtOrRz1S? z`mA@3>2t1J3(OYGSPW*XeM*mEUsW8_Qf1`^0#{;A`Mt-o zW4}~gQ$T@@~x8>hv=M#2ul(}NNR)+BtFD# zUOz&J)k5G}?`3)lrSJ2R#4x15`GW1L?OORr`TORPqsXb?S*CMf`nKM;4->&NTPHi7 zpN>+s&MLZC8+PmaQ>CZKteWprJ}kwEt9}bMm8<-=>iW~IdVL{rPuJ^0+c)yjguj$n z$Nk8<>s4w_8zB|aiuXxm%_XscuMBMVh^t#%i9Eiha$C(LkV~J1)hbLpPzy+viYj2F z0=5lo^+f7QKw<~G0t1%ry|)H>a*9UYE!lOuR5Kk0+QYtqB8wIEeMcw~kHAhFEb9hl zJ*U!VV(ISt4&NJiOyxyraluGD!4CpPdkhGyoSCGzh7XB>LwO)zjs~0upTDA&-ewH}KGcB5y<68Z= z9ZP_+yRU`yT;dlv0!cGw6ja)9OA}#j1tv}vBwqSZ*1tw2Vu2^l%md>Uy_#?F?z(A4 zx^sU?cMqmXte?LS3H0f?!?!*?JHnL{AY9qM;VL*uN9cc^yWi=jznjmbUgO>Q6I{$> zUg7EqCK{N|oZ$TiX1UBYu$W1mAltz5pCQP{{C}Mxz?nIK6vxbj9+=!s;s&OWA*D}f zood13Q+&o91K|!nXK?+N<9B_0U%}lroj>TU=@c@LUtu-zw1HL9ndYDG2VqX?{S`$;gaPf7U7{1@_s?IKKTCv@HFhX diff --git a/bin/com/a_SGA/Selection.class b/bin/com/a_SGA/Selection.class deleted file mode 100644 index a5801a3eef6b3f578dcd4c1c6fedfdde01825fd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmZut%SyvQ6g@Yu+FDbsR$aPmT^Q&#B8X5agr=C%ZJDM+osuTfCNBIYH-aFz@B{oP z@lF&`Dg$@!W6nM2%=^dd8-Om3D=-NAaklitB)Y!zBALiIS6NztMc7@4d*LM_oqOSQ z!2^OZhzQgtIOi%=`31pjcg6(kDx1j~Ol;Rt!4{zrs8kM$Kq+z13P@cwa#t0XzT1 zi_$IVNFb?UpTItq@9!}T^dQBCA4_-2Ytz)wE0Emku_>^QH2T$C_R}xJd4+Khhcz4$ zNNja$mu=t(GHk42Iptba&1b<{vhq#WuH6WD^^G;ui`@Q_oUqlRcD8)DPRG^M z(Z{v+^BWUC3{$&HUD>1AHR##oM|5O+KBDWLN9?BTMu0L#xrYvW(TO;A z5$S8WVK;5+iK;KjOB3}HsWf}Y_tJ<@#0;{QbE}A7{DSn|><4tLq3=T2KcuhV&U+l_ zS;fFeF13pM`Cw`&5EzQA;NYLQ7T4mzm#?75HIMTmB4QCn>UzEYJrR!SxequM3k=4C zt2p~Y7cpIBdA>H5zeI)_z$56C%k2Ryqkv(y8-$CC9EFcjZ()QdKjV%uUWh|Hf(cy46|ycd z`zTKu{~yyn&hf@z;VOALKagW&h7e&5Dob#kg+??84GBSnkA^f)>zwf~TnJvJf;~J1 YeS=Tj--dnvpeNh-=J0IjI&~k+pY)0!@&Et; diff --git a/bin/com/a_SGA/TourWithoutReplacement.class b/bin/com/a_SGA/TourWithoutReplacement.class deleted file mode 100644 index 0649ca7a773711c8359494d2b64c68bdd1e6a3ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2258 zcmaJ?U2hXd6g^|FcfIS)2hc4EiD^ioBzEFZ+HMH}QXs^*4RMG=C^eKAd%>IdtB#Ej z&rzTIMpdbmB2|j2R#jU;BK7mBFI8VERjB`0^# z9PTj@ki(8Cx8zLMi?^KWT;^7RVfRjzvzfwtrs~RZ%c<1z?y^At)HbMRLmwliWe={v z*nqeE{>_=>?A&B>Dv=zSDOc)+j7(*0aMxrrO(&OfYGVev(WBvjzyW#WvtyX(MVL9? zaca|ErU?x%3H0pT@l;>~2XRPJ)6abaq|6{0hfN&8D+1bbzJB|*B!P4erW0~*z{DUT z0)|I?E3@(EX7=2~(yUWLXLds-h7l78xuu+Y*Ui;41u`5?@7kT%n)g^aX5v*GCm?1$ z>DEflGPlW8CS-1}n|K4ZK-;oY+ukT}Xdv;tz!OqCMrEry0=>JIKUF)5kA#Psh4u>4l9=76(0E+MIbK)ZJeVoQ)FW^kGDs+m%*T$JKp%-qe4)N5{G zWY+VM^AxUVm=oySIcH)XS0!fW9?2#gSq6!^#HY$(%_&w0FvXtDI+LzcR(q2bc0f#q zLmxHf=j9;yup{|aXln@at#fn@K5xDwvH>H~^9XH`-bd*CmQz0L<$EtT0Hb`LyJEp@s$VdA{>~9|9>!+`cs~$(!(RKO<9K05Jh_(&%P5091 zEZB-1TS~zWG>wX_S^-PR+nV1F`fYs;mn~h6jY#hXUOpM}+vXZ#k?3%D$TBx@)D8|? z#)=`L4-vJ3$N8*dWF4SnazZI_^eS~Q|p!ZV>=L=lMFSP%}6_4?c$uJq*V*D}Q#0l~nz#puS%6jd=udLD- zv2^1n)=6d6`tcB_X$6SkOPryl63OQn=dVUQt3;|&4kz#~@v5xxIbuCW%OIxH#6E!# zrWp4EeJ0V3dp;eXw0s6}Lq=)vXhVb0(9P$d@IJs3?Bg&lBLAYj!AwFsmdH6ELj1f5 zn|eWm$W2C#4_ivi4n(a0t2wG#in3q_*Kl~)3dU?bYU$E#bQxXhgU=AMbUV;xjH)X^ zVFjDjURZ5BwgO*m6)3{Ar0P|?M=7T%(CY}}1~2IMd0*b--M2te(o8z*k$&4-AKxN9 z-XfjQJgR*Xq(_MCvbaZ*!sur`S_3>|)GM{h2**5vgFLT`WtUVRK_`o!;2Dxa{;xj4 ze&H8kAIacfMvIKUNrvp)c+ZcRk;10v*3C3lI=BeLB9KaHeqJS8ROt(Z8EHbf*N61C0 zMkc!1_i^e*_Ps(9q*iyqPzUzmsASkGYLhchc@|-Z_X-y#;ed>k_mlUR&!$|A&SaLl#T4q+2;Vz9eb4ww; z>hCxOC_H6g6h;v#oHj6q358U}+>)Cq13Bbncg8>gMTJvM*K9_69 zmL0fqPK;?uQsL}S{zMmMI=bsb6e+2dtgN<38&!)7rimqwhJ$YDN<-2w(s<;TuIQ2q zRD>!zo4&&Q@Zt~2g(^#(38667itP4h*X?eSem?SBQQ&&JY*EE*9(O6W)^m7KVfv)` zTF>q5I6)p4*{MnqRa_E1Us9N?Jc?m%iN_TKFXI)aVt2cax1%u2>K<`Ukn4H8M(DZ( zz9E5E6)p^eek_1QE=lB@!nF1zrnkssivNlM6V{0$;vue^jUtC*&A=jFU`twlFK9dK zt_<;b%js~=ImH)6D1}1H-SzCK7w~dpAj1S|z;gT+mYz63%N!x2;dxH5+OfmX33GU# z9UJy6sBrumG0%ik{4!i2n_UH>;Wb% z^8nL-(LREwxt5XU`UR1`WaL*kjj!SOg}la&S#mlWR7;Op4X|98>gKi26zG=cvBj=($v diff --git a/bin/com/a_SGA/Truncation.class b/bin/com/a_SGA/Truncation.class deleted file mode 100644 index f5e846869edb431fccb4c25c1afae38b649e430e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1424 zcmaJ=U2hvj6g}78c$>}UgR~AI@ir}#)^>;up$)Wd10g11!L_40vQ!ndZ0x0MaMzJ{ zU8y{xqW%OVz5__*v6b2cQNbH8{1JWygfr_9TcqM)X70?rbLXCO?)>rhFTVkpM@2_W zaID_Cm3MAbSC{hZ?T%k}La*iP&;&<&o~qk)>&hV*3tH{aZLGDnI?X6naQs@S7urj5 zYONKlcws@1xaj#_xG2!lcBaNLy!V~!o&a)>V@Y` zyns^zgBi%4?*;^>cqlkM(tXCDNSr9lF#<1kq?4Za^xJZ0#c#=pX*8 zniN@eHFWA9Uv{?kJJqPRI_EXyHv5Q?iTO!=2N&;ZlGN0d z?Y-aU9?Y_9^T{~VZKlC7HNo)j2SG`it~I0MZ8U`NL!t0%zK8XV~oGfKfX#U!8b7!pGXm$@2z*y1Py{{Rq(Jy!q# diff --git a/bin/com/a_SGA/UniformCrossover.class b/bin/com/a_SGA/UniformCrossover.class deleted file mode 100644 index fb82d8d006de6fb9b498f361c198ad8a058f3757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1397 zcmaJ>-)|CG6#gy@+!m)TTbFHdu~xe((5?8huEnYa+KQ#rh&I`{iB4fwM`4D*P~9~q z``{)<|ABqj7oU7pqnMcJAK-ta53S#wwh(P&0(Z_m=iYO^^L=OL!p03y7RR@T_H9?m0T+xm;pd zK+8H6GXy_&>5$L`{PDzcF9iB^3?L{Fs&`T;_YXP($~{o9Y_r&^t(c9g#!A%`7%Vtt zqq=M~EVbWsYVK{TDG)1kk$sCiO)zEEhCn**o%{R7<)tfE=avfjrPO7o-l`g|<=E-O z^=;9-U9ncJO3SFGLx|#Mi9MSv?VLkL413x1Ez>P}t>z{6?Qo-;SEb#r;{e9kJFj&k zS*QM&z`l4s@jY0*IEcd%hXkUEg0En0HK`+x1hr`xcEzbFChr)lMylmn)zlTw$L_{4 zA@Qp~_}iF{BS=vv+r01QoR+5rMa+dTf@3;o=Y&8nkEj+)5f{uymW^fW3zFQ73eFuM)~fdQTOIkB17UzPODKi z=PX4|e`nZ_D4sFOk@xcrBx*JHw0yKBdbsv-_dBBjJ_nL-5lS9@gT7?q4Z<(IgM(ZL zp>aLKb&40#=qGWz=^6FX4&X;bxMKqKwlS%)R3Sg@pD?shMy&9@D)(f(jp6CodyEwQ zliG7M$0J%Bqf-GswVTQczQQkUB$Kbv_uv1>_$TFaob33*^o>OW5!uGk$sT1ygWjf% zlgf(p(0C+8M83jr&(=RqM6_t2#8tZ)4VE5hzK9mnD$mxRPP`x*Kf41m2y;D8)E5xK z40jm}BgL;1ZUzNGP0axf>PpNpoqg z^3e7C;J(#qn=Na@a)QZwuD@spS)>#S&&`)+rENOvmAk9Ytro2rh2dT6g1gZ%J#)2f zDdak?ZwI#PD5$zZ_Ng5>mhbaaQ^*9*Y=82C!gyov)K&V;*p3~{l3{5-$9hd)QAjPg zYt{f14rv&KmPZnYH4I@`Az9K_q>fKw|kMbn#Ea#v3~RX zrrln%yd2K6gQYymxFFhIR2V6JkD;%K$FCZG!|$YGb~=``#%@!J@0?@gY7SQjU6sH; zByd{c+>fC51dzxXiTqPC)%MGDjhS@upVOej=qn-`?y6qTb5Lp;rf`~lX}X(U%UZN$ zxC=cmjKO*=yRT&Ce~i;C2TH3uj^!=1P2actEN&|t-TT>4 z@953q1nDRFOLK(`K3B-t1BHS-5uU_0gahMw=rVq+Zg+c z_5^<7T11NLH6mSSlrU!^+(}m9@-rslT+>98yNq#+DR$8_ zya#F_;%MZtgO~{s**qK%s}s)C#FhFo#+h$eMmRV2z!5%za}vLB6`V?V2GYg{jBL>m z6&t}UhAM?RFvrI-AA{>GO3E5A%AcXSSm+m( ZV;n+CT{ptrB9_AMP1N~~I&_N_;y=16N>Km+ diff --git a/bin/com/a_SGA/WorstReplacement.class b/bin/com/a_SGA/WorstReplacement.class deleted file mode 100644 index 3a3372776b2a6ac6d0ad61b2b70e8e44395a091c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1462 zcmah|U2hvz5Ixsk+v#TWK~fht)X>sU96QvILLhY-$OkD)-8dvw0HqMt_9fZi>{`3) zAP`Roktd#cL+TUHNZ=w+`vdqJ{0=DRUK`ees66bwb7y8}=A4=N?ayBx0+_>A1_^>m*4e+FxrysmeY_&(u*=M1kS~Fd%z|z9{NEfo11>S({du$_XMVQtFiaL zqfKx6;kp}D1k#JH=SE8c$->NzfU)W~rHLelEo3kxFjjRvxzRbQ%ixYvZ%KiPs^4&0 zJ5J!LcVB5l2W}{E;W0UxEEDtq2`m=0=jVHywXHkrwW?h!$HiBAr4JfyujwAU&5qNm z%F;;L`t+as~oVSx6zR^5iW%jb{W*#vx;# z3<=XH*fVP;a=4^edX`apa87Ss#a>f2Pvc4k&#_mB&aqSOL~g6R90bm1p@rvBU{KXV z_PDTH)gCR!+b`GZhq4iA%sCV-loY06*1`t5s?jE1Kske}r*IK-X5mG=Brrv&TIW|I3wGU)A;1J)9%l^x$Sp?2ANbFF+Q-1S5@x>EZg&Bu-bCMP_mqK zZ{Ki{vz6q+3nbKlQA$weqVYV#SDClqohsgk`GYoFJkwhF9!4lzJqL_pj4vj~6Fm8| z*kBlwx|32D6HCSX1LS_fRC3<<9{J*rn93TzBKLkVYm~A^7Z>j1;`UdD$Qt>3kA7G7 zpK)0`uk@Vfx|o?y&1MY>v)?SFOIiKMrMsA8hWUk|Tsk-O?ROZXrHkt&Wm(b@XCK~s z^gxxLWVyf!iv)Iw_%0!Qz^V8UMc&u2hwJ!=BjBKlI(E?D*~9@P+V~j9*vA*Ne~m*8 z{jTQdqz|1y8F^LHae_6xsX6@;>$u6hgi`yDwF_1~zpmX1ap6af`$r;4E|B iB6YV}<1kWxU{Z+l6O{zRZBUg!4V%18Cd%=92lxx;&P{m$ diff --git a/bin/com/b_UMDA/FullReplacement.class b/bin/com/b_UMDA/FullReplacement.class deleted file mode 100644 index 4fb1f577eaab3f61475b5016845a262b5e7cb890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 967 zcmaJYuW6g>~7(2fJGtqRtntx`48jaex_0Z@ zorx>gZZL7tof{YaBBP#}QioX6Oy+%^ch5QZzWe>x*CPN0+>at8u-LY{`PTlk?ee31 z#Wl?x*)#RF>`KdtLJ>$z;MECGAhKmxhEoy;{5XJmB?@5y2o`ws!C=jQip6kep;aGA&i_Ej4 zB7w_MB>zJYxX`eOD*~~BbOKg^m2~wicV*9B0x1nwaZNydA)Uu^;85O|E_>jLhU-`* zNNNvk*z~2OtH+@?HLT%Qfcl|In#4To{Vmc-u_v<+%(K{WOCAKqsgOFetOCN|Uu8=$ z&=(bDK3VI;eQej!+po9v-uTJYUEA%qSy-%am7@m(7S3_hjxTVIamP$B%h3z|MxtrX#c=5p3b|Bagt>Q{N;bu1QW@b= zc7&zPNK#2g-hV(mn;Ky`>j5|3hD9oO^zru(PcjToat$*a-;lCTi2;&u_-HQAhsfdp zcZog3p>L@~gOnXx@>XeNe49nA^LB{e1LSa<+;Oa8gLx`sTfiNzBIE*%hks&9WJ8QA Ia38|GKft!vMF0Q* diff --git a/bin/com/b_UMDA/IReplacement.class b/bin/com/b_UMDA/IReplacement.class deleted file mode 100644 index 73f2fb454a0dceac1b655477c51ec808c98d437f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 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 F^H(CSs zIRXE)Wn0dSfG?KI#Ww_$*;2s_!i$g&6}o^o7T*X!;DQbx`~scxmTfLpcec&Snz3DE zobLHj-Y9Mu6-(|<4i)EPYgb@wz75Nnh%?N60!YhOD-{;8DB#&&73f%XjQoQIqkIxm ztuzW1n2xz|54V<=R@Ua0=5tG_Tca}x6v9aoVeEyUC+NMM)-=T#iU1YS}x zc}BghFgjkwD*{@<+I0*&&$bSq=D1~^k&q_vs*Y>8&fy>#<*H-OS&nV)vhO5pPGZjJ zn8s@yJYsGtWkp%3y`kfE++;<&|E*{=mOHPYY@>&>IiRdrrIEI!ODk7qcKYd)^ zYZ0^QmNP)Wg9u@W1VmZzMV2zm?+71^QKT@&`*sO8_`=NMGHz41iWoK#$30S4K@tZT z$7i^L&-qw9Vyy4@&qEUX2p1#~O=6F*h$WZUBP`>N+u?7p;u5RjE5`Mc%r1O_HLMd= z4-T=xGd~gS;T^7gLW$;GN*d9P;5|wKV(cTHbp)yFq^gt-6! diff --git a/bin/com/b_UMDA/Selection.class b/bin/com/b_UMDA/Selection.class deleted file mode 100644 index 67a4cd3a993024403bca0bb3f79cc458a9f18ef4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmZut!AiqG5Pj1mt&O$STB}Eotp@{MBZ4S}LTrkuy_QY7)GcWuZQ{Xi@*)U=2S31% z5@(}`QdyXtnYVA=ynX+8eFJcUg9=K7R+KKBaB_2XdF})>ceE{Uypje*Y}-adY8vS zyKuW};Fm)=4P?gS?I6vUk?bkGVExDau{LfVvYx>o#fG&gX9j2Nj$@T8r$7Mf=mqu@ vH%h2+EOQ&!;sdUAZlR6_-~6N4;rN&QjOHVQzsdD=vI(@XR}5(vulGLzoeWiG diff --git a/bin/com/b_UMDA/TourWithReplacement.class b/bin/com/b_UMDA/TourWithReplacement.class deleted file mode 100644 index 66cdddb0743511b94c57b66c32a4e7919fd85c63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1506 zcmaJ>TXR!Y6#jNDJ>=xHDV1PCnvilc7a>@+0)ZkDgGbWKG^L6@FsI2@c1ccRdeQ-$ z=@b9KH)nWocvS|%jLtaYtN*}1WBv9?$;1{tnX|I?x9)4Nb^iSO*WUrmW63~3Ak*ly zOPlxZELCol);s;)7s|W8Cc7=CA=}dR41@%Zjp@{7OEx^!aRrWe)UT_@Qb5=O6IYe1 zyhVX<&bIR#0->9orZf>m)Pey^AehToMapJfdSw$yqzs%8IH3c+*@uN$q*?K|(p&cHv<;jTNFB5ob8I4mIo+63 zw9Bz!5uCv}17`)22hB!lTX+XK7S?mzW~Z$iwB_tLrM{8E>tB_naO_yX_8L-UF703SUuMcmX;p6>mW zj0{jtMt)`nK~@A*ag;R0tTH^GWKCKA<~aVRINzsnk;`%kXK@|paEs_|J+*WvzJW=)JL<$P7HP-t6dvJY_9Q^hOSnNUNZ&W{3Aqq`R>@bWb)6Y}O3vVa zi|8%(ISvP(QP1Q`org^>iq9G45yE>+Hflf^ND3l+3}nddvDvS2A$X@6_VF~#eSPA= U5ghmr_0$L-ch7=u^Bh3!AHq^ESO5S3 diff --git a/bin/com/b_UMDA/TourWithoutReplacement.class b/bin/com/b_UMDA/TourWithoutReplacement.class deleted file mode 100644 index 3158361521ff3bfb991fb68d28790396249f4bd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2310 zcmaJ?TTdHD6#m9u?|RqEC6{d=V47nO@I z>T};xRca+3Dq5-PO$k(O)vAxJ`q)-c{y=|1`_j1ItPMdB1Kb-meq$s2JB*>uKPaB`joMPT=)W1~*i$#`x) zClK~{Wz>D>2#Az`ddkhY-Wh>VYbwn@4GXlbe0rHC%4^BZS4E395wMKx(J9_ z_qkrqS>!dDO0UfAZ4<{}3)Cz+-iwQrU2E!9j(a5$EjVGKTdJm+3>HeBGoEwrOC@+t zU(vZ&a&j5hVKk$#QAVEK=66$(DN|M^Qc;9oS*Ez{!lwFAKVqITooARpQ4W$7bs_y= zIM0c2S?7YBX*plD^28)NLCi7dQ7@gDA4nH`)oMsqE|Mhf_Y!udR4lT=d{65O?&=uE zh=wZyja!wopm^aMrA3iT&siuC;3&I0wg0&S^*eVI>4*Mv^ARiLJFMF4x!nuYpN1dzd z2>APTu{9X6rYES0H9tZ9H{1$fC&!(<0M=K*NnYqdElyza(^Y*OrpCLzPLvR;`ew%-UMe z4hL<01y?Lxu8mmp8V;U}1Z{H#iCDa&F=Cl(IAVu8EMv(K@yCc;;Vynx(YcDZEK>%U zwoS{lWRUvVFy?oCvveWv=W0KZONbxg-%b3KwxX1bX-1`87ctq>R z6xipuf}c7617moKai94Q$uybVVE!2^(?gy^_>;9!S+^bd6{m5AcpC8wk*KWR0enY1 zDo@4n6;Y}Dbm23iP$`FF_>>4$%HjmB5vR&ppXcvI&J5x@O&2<27J_7M)S+S@eFNYH$ob#~u+B(E!Qd|ClNn zf0GQ^!O5l{je+2q6&UT&=+F|+H7%F_QD|t3ev6@|=*%j{r){M@s?3ly`O{ANhB#QE z_47~LUnn-g$^v)kewJWdcIqs_4k>9&sKKE~4v}~PZJZ@+adxfUHLqO6 zMdJ3r3p^lxK_oyTt^^X|nIDDt=IkahiPMKYd(NDh@0*THzQKzI_(z4(pZ4@r9nI={}8IHQ8t1ZdDNaK-Tx~gj` zP!tO3Z2Ah9&M5zoUAVH;nivXGoyhKfuwnO;0`igHi2~Q#Wt*yI`?yoFwUNVO% zt%2Lyae_RqvRl<6YPcqfKBX{QJ&j>*iO16hp24$B#qReVZ%5kJI!%}$H}ZI%&uV)_QgrI$;j4 zGtsecgBr(g5*L|rieH8+WW>2b1{^4rl}CQ&@;pTj8!{8$-0NKwQzu0 z%RIpRZ?sR~A+BYlxqd{Xj~V$1&f`-&Ov^>hGlL6Q;E5=jb3*TgRdRU*m4vI#zv5lS z`W>_T+{EBnZTw6F8nHtHsPL#RNfNEo`!IO^mlMICj}5+r#~32PHyA8gWvvS=?zpa) z`U@RB7keDllGU|H#*bt12q&d0&RUoMr%#OYfMD6YJm3yd5GlsZcer|{tB!M9s(^b diff --git a/bin/com/b_UMDA/Truncation.class b/bin/com/b_UMDA/Truncation.class deleted file mode 100644 index defd054c9ea0b2e2cd6980e68d9cf999286bcb60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1479 zcmaJ>U2hvj6g^|Fz0GFRhES&=wn+=6wH;zZXamKqA&oH@96Q9RrK+f9Z4YIGyEfi+ zr1D&lP=5dt-vOlb5v0~ZRPe?Ne}rEF;mkTD7Or@hojY^yoVn-RJNw7qzx)PZ5$iev z0+B}hR;GUA%4&W&v(fE24a>9Jjt))W_>ikATe6`%0+VjL>&fO?yVGm=!2)yFN<*=S zFsIkrZo&4l0^y6cV|zIPEm2I?IIXms(m)X7CUlqr!9=n)27#j{j$u+DP_7DyqQJ3| z?Z|TPR$X>Cta?idOqJRVt5vhQwp#CRYTo;{D{$h`iKq-*pMpR(;m3S*W395jQK*!P zmCPZRY;wdope~zL>17SfU{=Qy0<((nqcKcG5hKN$(kuJKiaMSYi2a{Liuy?tA%xWx zPnmccrv(f`P(Meyq^6Y18;IkKlI$!22Si4Smo4U#H3Lb^>qxO)o7R?<>3Mc5v)t`k zw_Ov@Vu5(7jsnw(Yb8ITWjQx9mHH;@oK4nrWCWuBB{`&pfi#|1nH*6$yqirQaNOkVU=$d8fP1rslW)fl&(roCl1dsd6o;)DJfma}-^r|4;1GLge80u!$E z4qXDL62*~%9s0Ar5NRx%xU8B?m7vq}Qtji(LRWs+lTO2yOvC65^>l0mcc@F) znk=obNo3GgetVF}$e|&{NL#B*mzp2x>`Nq|zxQu_MV|Dkp4IqZ)#~hbwNY*Nx(!*d zRo@>SU{Tq$Dwu#-bR5}TX<4qT(hm<_8&0y9f_&nFgAK)RfHn)o?-*A(t^=Hn)GkN# z0VaO(V;73f4Fqyg1JBHt-JskWNtm diff --git a/bin/com/b_UMDA/UMDASolver.class b/bin/com/b_UMDA/UMDASolver.class deleted file mode 100644 index f08062500bf347b7c6a5698f207ed58767f1546e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1771 zcmaJ??N$?46x}yaN8+tiM64J@Q8Xmf)V5mNP+KHo(}oWT(E8EhklaP5YcfeEGietO z(|71vhO+$O1N5P~+;?VRF5==xX71c`X77FXIcM_U|F7Qw_zcQIM&LrD-70NwZ7fyh zOZrl8yFKMw7!$4A4Kef7oZ~sc1JdPdzuP^#RsD_{B?WVRg_h0 zH*9y)_8tA4Yz_v$IW+5{dA_ulSi7N)wtLZu5sp=loze(>pDjQ$&wA>w;IZkubB9(`Y%12l&pyw@3Tqusjm;c*ySS zMtv<%&YuJpm)K;AfmE}u0#a45XyFli#AwBXB1$~Q_f*lfTOC&|t3Rt=)9E?Q&~|C= z+;LtLdgl2tS?TK}{sA=$Ke9#!u~~MBCD42;8OQhX8K#}cre{uIRpN;r!jZ7kv;(#1 z1fJ@47i`zLq6g>`{(EyuJg<&fCKUG^$7I$@ybQcrgsk$m+>sJw=wBA}lop5mD< ze4IGn+ex?t*g6&694{n(!LI^Y+X#vZKRk1GBXL`g0IpHl06)b8$mr?kDx)Vjx^w)ZJ0(Ig??XQAGOqLUh1|b5TinOFLg5uI z?&ESFlgaX0AJc{0K5q3<{3k;AgxB#1eViS5m8n1V@jTTy6`g#F=e~|H+@P{)6shnI)!gUzY=KXy)=HvvjC)&nNo6|U N#&)E&L3J54-vX#(yfy#; diff --git a/bin/com/b_UMDA/UniModel.class b/bin/com/b_UMDA/UniModel.class deleted file mode 100644 index 116d2e2cc70f0637f828d21de6a4d559d4953e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1246 zcmaJ=OHUI~7(KU-xlpE19<3na8*LG(qSi+dMJieYt)WVyEOcluI5?fbcB;m;iGRU` z8&@pcs8LKbx;FkKW5hFqN(08lz4P6BzsLE``R3ctk6!?c;;KYIpu6l;(+hWQ&g3T2 zH*IsqsVGY#BoJFR9vW%Ou$R)sg=JNC1)|R4Vtu7%+Dj$#i4qWb0d35*O?O-%l+35* z_?cve2!d$SA)yNdlc~8@2(;@6LlfwjHf>dCR2Nk3hOuBVP1m$jHmo_LW_st}mm&9_ zSr>>;{{vrEKoZIZh@QGpU9nU_J<8h^^PyR37#0J^l78fqJJ*Y|H>Qfy`C_`HEViL4 zCFN#Q^V^;`!?O}Q1a^9ro8vbfBIrZE#7=?!txiovbnL=_KRG?j$>4ywXWO=%OYByG;Oc*m=o{asgS$o_pbatZi48AwqKhZ`quYNM=s|oVm$-nCpR+#n z4$;p@%p6%mZ-LwHOemNMuVQvM9{z;Htq<5=3TCubWRAwQk!SJHGv};)ivw#&^~&cj z&`H11xE4FUhV&}hf1i%=^i&gZ?JZ8cT>ttsEaG9W(#!Q%!>E-7Tm`&I8i2wH4TI3~NaCc1Aq*=dOZtY~jB3atC%aP`29Q@c-mo2OZFgtW@*YLhiw(DF zwl+-9mUC=O31x+;el%jS$a~PY0xA~^kSf)MUY z4NxXZYdvxmX8KC;fr9{L*aHG746O%d^N&@t9T$@e-1We-oo%+Sq&E&b7+I@Xe5Wwh zYhK*7TU(Zw!$o$nlt&qtMBVQdMoOPz=o{j3MZ*ucN-Ac%Z8=*C6V&1p=NP$~!!<%z zCGffg&MI6u3i`7E5;-T4HzZT7U#6SPq>KN81|3FE5z&BG^?IJ8QqwSv^K8tzyX!Tr zWm^Wk(Dh0#id5{A)^lz3i3>N659}t(d#&OztJ{en2dAH5>4(h#yC?P zqGxyy)I!A3$m0Mp6C$#G_$I7QIL{JS>dP22AF+&ZZhr1hX8%Xmp`NOh@4yrVfG=(H(=wUi1X792v~Hii2C!Q}VOLqxQNqFkpUYwluCpj9YrrVKgX&+`-rld)Pa_We3%&v~Bbob&4+KR*UAjr9~_0?*g| z{bFtV!D&Y^k8jNnkFgUBB91tFGTzu2$@7u?N4@1>bM9y@q?>Hrh_J zG`VSF9O)E}3rr}I{eHb57Ea(K8SThuRnxOmI3;lI|7AG_R>ML9NtGyT;RU=XU@{Oj z^JGY(M$Voro5#BG$-dQ& z!v9-VG3~fYC{mT`nb=30ahTjhAR8kGaXx}_uR<#qbY|oRyQqu`T zNjS;w$l(l|E6%YOh^Y?aDaJErjq5SqirfYFME)VnAGO)yn$(XUV~A&~>wsa5@W$kL zjw^o_s|;iE?Xb|n*nB?w2$=_%h|d^5Ae+CBiL~(xGN0trMj>rvV&=6n3)~OBr^lweUA}ZI=EU;mU$g< z>hZlNj}-hk;R1^U32c$^O;Y%jUGW+6+^=98SMfPpz(EByY@*J!fn7+n@C6RAgRg1- z278+NO|8-45p@z}=rVDl}(OqcLJu2a}u m9B1z9lx~F>2a)(4<3gMoE5#UYl}|BLvBuqGq71(efIk6DZBI=A diff --git a/bin/com/c_ECGA/Cache.class b/bin/com/c_ECGA/Cache.class deleted file mode 100644 index 78a0cacd296c6ca179404f48de8f8da19010f238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2484 zcmaJ>TT@e46#n+f$w`O@AwckwL_tJCKv1!GK|nyLQ81Vw6{+GOIfbL-G9h^DOFQGQ z@I`GO=ws~^o$2id^auDm`qYPxBmMS1N62WW3^{Aotc|T zPp8uTvz5~Fnq4q)5C)Sd)TV9Y(Fb1<(`^CkQiEmWv>DP z_1UVGyFX)@rR0`j_w zU0$v=LjgtPFIqBt|Yr$N%lCUCOce7 z_BUmK5jcDNHgoj?IyE4Ze1n$cPiW=8o?rE^Z6TWUZ6Tga{*37FIJ|{+rT!M$LdTBQ z>1u&3bS3>fx+=H3<-wj;>dxc*COLuNbm_denK$p}w*xIWjtI`66=NLoX+&`yG4#>X zbP=H+C%6(g$@kAiyUiE@+Lj0^E`hy-{))2a8BA#!G&XUNO1HG>`MyCTxu7)Sp{YG$ z^kgYJB1SAt*%>k7Qg%g*{dz{a#`U|*Swi;_o_u&seh-ttHfl!{@EAJLjbj)<0z=d$ znBZ0PU=F>w!&5Sa%PveW1p=n`X_eLzK4Td)`Yd6Pnk?!PX*kQ&4sdmjHiJn5H;(MOUl^ zQyK26(vW>s7n0rM(w-;nPc;#vNA%_P54#oUQ_XvZDV!xg=U9jH=pqY!QdEP*dl?~eBk>JdHq9j^2XQItM5E%m7U)ED>4gBb8l21 tx4*_h)9u&lVd;?iva5Gee~tW)^w-pbARz#^6-4))>h&NBe5Jfr{so+~$DIHG diff --git a/bin/com/c_ECGA/ECGASolver.class b/bin/com/c_ECGA/ECGASolver.class deleted file mode 100644 index a5f907b996484b665cbe18c066ae1ae11df17f08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1839 zcmah~Yf}?R6g?eSM`A022rCA`2M`i8x~}ZH!3Xj(IzS|dZ?T#5#@U)ovXe=6i=VXL zw#r1x5B>mul;!Q2k!i%jO3n1+-Z}U5z2|m5eg5zfz%Q^3Bp6OxwQA1VTAW{=%c)nX z=Cq_|pqt^0GVN>?*VZ?d*380MuCN%H8G0Jhk(O`QT!ukY!zg{-&oda+;!3S79fkqj zWhLAthhv_sJHnDx>G~8;cPgyMCh|NoYrD38n}VgyzeG#q9N|`SCEv5%O1?0)$VJ~C((}q1E+|BMzSb8QI)>*I8I}bYzo{Kj=dxIObyD-cVbO#_JHAM zjx!i$V5{^LRFD+M2+lE_ilO#WK}RDl`swyed4)E{@e__HlnWdeafzWXMv1b;F!T+^ z*EA}G2@V5C6+)V03K`-aBWRgqNPUB{FV6~Unxh9vhF;TlP;s?NCm`n701?m61Q>Jz@7c-*eedl9PW|!8iA%6 z^6A6C!UF4&LLgZ#NuNS3V9CHDrBM@NR6~ws+-Epm36CzLt{FQRPlr_MUcdv6hcM{` z4NU#)|_-ia#gPt0)>+qxx#3b;)o%!a8+&)X3kBrzQN* zXzDx+8yt^S`}Q~MW#P*u+jnK7F)tjak;D@`Gw_sQSkci_9mn8!jvJ(N@~Ag``Pj8v zO0k6G$-kS@wQLyxz2ta>*Ge>@<6Nr}#bO}YEhu5V;SktnND9r!7U<#%B@vXCVdOv# z^)dyr-d~iFL-RoKO0}kE(b-kg^v3OUMYRvk6SFS5!n=@A_Xf=ps{4bHS~nPpA~^XS zr_~PGm47;udXE#?UG!x#?=ZBBvu%t<)AMbNXHvVEY$N-BfN+`K!vXqPijtyBVFUv> zhf(@XVhmTvJ{IC4hpV)r2)IUnEG(E^r>_$<{}neP9{-WI;$dcJ>M$0$8F zJGf=iIG*ibJ{k)vG|4LCbO$S$>5mYuW6g`ibLOTw$wklYQwpJ??EQ&6yG$h)JAweN+!^TB3z>AI!GYB&@>DsMp zcP6e}yTQaocWzwxi;Q|^phDC%lX+j~-E+>p?|%FF21_d)ZrVtjGt(dla>a`oP zyKgisDKKAgnub+3x~9J$9jfjNvnQ}rnGpKRNI@Xd9r_a3N(DEM4rjf55WcGW%xBGps_ouHh^eBA6fLJxMaYr{f&X3&d!sl~nmOcRRklIFdRpsZ5$F&c!bDH8Ln^QTBB#h%Q5Y@WrA+468~oC?WP%PJsD{$;iV z0|Qa9!zXK;xR36+M)TDZqceJPZO`$#O%~Q~in)oV+IVU74J?BRvqgarfA$jh5w3Ea zg@3aC8PlHvSmWr!fQ>U8_2C81QSO)tW;y!7Ur990xu6t3BA-p>2bg=isb-Q~Ce#5g zWCmE;3@6k?_}zQNGRXm!Gd^(bjUtlS;}5^S`;rQL$u-Pyd`-$OC3;A}<)e8#?<0dl z+$MG(M}egx4N`Vw$zP?A4r~^%&f6h=_mIU+a>uZW4d$tmZ2`Bq3X=;ouKd81$b=Y| J=RSlxzX98w*8>0m diff --git a/bin/com/c_ECGA/IReplacement.class b/bin/com/c_ECGA/IReplacement.class deleted file mode 100644 index fc7edf05a916ce152261a4d5816e4789a9bb0870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmZ`#!AiqG6r4?Cqp{lBi+J-`Js9wsB1o|k2&UB1i-)q=EV^a0TVm3Kf8|N=;0O3o z;@j4PARcz!dovH-%zl2oe*m~dKY+(@ENmHx#m(sUI!dN;rMZx$G<5)a6RXha`O-A z*H7x1;UxX%e9RD3TQ>~D!Dj7cG0CR0ah4`oG_k8j^IBOGKl~9BQ>e8n8m?pKF}$}; zCFEE+H@#mOFI+tT6cmPj1n}rl2$}=xBC54$&o+ Jju3h{`UWm{QmOy| diff --git a/bin/com/c_ECGA/MPModel.class b/bin/com/c_ECGA/MPModel.class deleted file mode 100644 index 9ac810ff08c81bb9ee18f04e1250b509af7e4fe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4312 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 diff --git a/bin/com/c_ECGA/RestrictedReplacement.class b/bin/com/c_ECGA/RestrictedReplacement.class deleted file mode 100644 index 62835f5a63cb3bd4606a125ace0eddde881e15d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1821 zcmaJ??N3`(82_F2wzn^rQIN`O$IG1dg{^{GH;T*+23}>r3PWWoUT$yZ-Adb(TOcIH zm@F}Va9N^>^2KCk37<7u6F=+^@Pl9cd$j(}Ew)t%CAsH0=Xv`*zvnrJ-~ayY8GuP_ zsqhGln5FHsxp{MT;d(k}?KlNDi;jX+O~?03Pqr|%}Q@m3WWCTV!pJuY9Ckv zLKpB)+eO=%5%9%zJ+UsJ%$D+22wsFWsL%ww@x*!%0_QaN;1}pzw2RhKb$iRItQlJc z#_3)xnMPsVsMvCUe5g2|*gFDai)~m=MVw{sV?Y73TB)#zB>~UgszAr8W0((a8Rg@c zYNb)Az;xV=d$75(oLie;UeuSS8XjsIpmezGu;tb5Qa&wXdhECvUn={s3wDwx0FhlIj+2ft#FbP{A zXmSwjyy1}OlQ~);c{{YN27Fu2_VISE*(GtGlUBCP2UecY?dF`*u$jWGPRw(tWT?h& zPQ`6Htd^=3lWmjtIMVi1T$W>r5#D<*pC8^wdHE@MD60tY8|3b5?iH@1$zKr~iu4p_ zV#-rQ24hbVPR4#g#}NX_L9Rd2$cs*X2i!1Sbn9k_=lIuyK|Ie?y@*hsYy?CX_3}4L z3qR9IsfUt>UVVsC^3n_R@zfbWQ6cyPz4`vp!UZV)By5dVhp8I+XS^BZ2w#pzmB}fe zC*$uP&ZtTzaD?U*JVkVf125T6f3iXHjeKowC2}i?G^#_Eb!Hho|&ZrLqA{t2k zjE*PuKcq$GN}xCJRVwPQVd~rOk)+h`<4FxO%y{E!kaAy;nuu#NpK^6?KU73i8GrVq zzS|;Z!!2ikfCmxA5DAE};PWhHnBNgT7^6sIjQ8yVuJMJL#YHSow~9D6kib1sS3wH< z7{}+hgfIA5JYuZx_|HQU`v~VG5lvzbv4mxp*h8$~w%g%vkaLL*;4$O+NoE&5#TxDq zRSyoZ&NDv|?c!aod_sxlJxT$h8^QaOg2dQIJa-VHu9J_7pVe$|y^9ZMx6dj+#7DG~ n&7<}&goUWfVPFSU45-)?TqoRS#@X9h_}Vm$3H+G89vJ@sfEI*z diff --git a/bin/com/c_ECGA/Selection.class b/bin/com/c_ECGA/Selection.class deleted file mode 100644 index b53f35893cc1cf691b2c6dc08196ca7bf6625c8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 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 diff --git a/bin/com/c_ECGA/Truncation.class b/bin/com/c_ECGA/Truncation.class deleted file mode 100644 index fd1e3372c28fa2d28448017cff7ebf8efe2306e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1479 zcmaJ>U2hvj6g^|Fz0GFRhES&=wn+=6wH;zZXamKqA&u)|>e?X=ma3wbjXjhN?%H_Q zk;-#HLj3_qd=vte!XrqngQ(z*7yd|pMH|knLt^2IhuOI^_s*Gn&b_mLKl%Mn0P|SU z5fF&fTQ@WH>lcWa?35)UREG{)^=WUXkyoloh1|g`QBVAHc%H<8jaY9LUl7M|8L&eJ$^U0clBxZG_Sg&j1poM`nUR9YKP&vJ3;*=si z%8XfbTeXVXUr=`?p@QxEv%U~%ESfm4noO0T-Sy=Aj=iDU$CHJQ{In~bx-FT8(H`jO*bweO zm#{TiT49q&zpecCAd#U%1B#KhwkBO_exSW8k%0cuzx5S)(yMw_{gca9d$+5NYOC9+ z%Yv=?{$L-A%BEGp1k9r2$j(yJa$S{vxc}O4l)V(>6Bit8D1HO9Stx!-xXN)I;B2I} zIie3R_NyQB48LLj)K{3GJ=u@KvpCEZy&IT`zbG!%q190h0%>V!Z diff --git a/bin/com/c_ECGA/WorstReplacement$PosFit.class b/bin/com/c_ECGA/WorstReplacement$PosFit.class deleted file mode 100644 index c78470f48fefb3e08ea9060d74869876f74aeca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1720 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 PirI04w*YI-_(50>RuP%afUhfKq*|P8Q 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 diff --git a/bin/com/d_HBOA/DecisionGraph.class b/bin/com/d_HBOA/DecisionGraph.class deleted file mode 100644 index d611ece5d68f98ba0ee79ca6513ccf4d50b82fde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3958 zcmZ`+ZC6y+6@Ko_ofn3yAPN>iqiKl4AOhCfM39CTQBn{qMkBV>3v+|l3^RBcd?8KR znirdxq^(V&Au%y8N)nT(Nf=sLt1JD~wfeQ6`nA8HpS!Y3pMCCS<^oe)-h0luXFvPd z&))l-@$dh={}%u|Fdsoc!}mrqV@=5u`#T3Zn!2qKd&177_c`YHsR(op<)_WFW>d;c zk2VbqpSDJ_8bYJ;Rm0jopJlHyY30|HWj-~bp|Vd|PG;>?Q-|Z27y9gpEWeiw+M{VR zJLy;&;>Gr~`C(1m8Lfe4}+A|AGeb@ARMp(&kW*o+4w*uuDqxHa&7JftB= z3{i&m%TwDL!Nb(TmsNqKs;8+x%{sjl5Pzw#%DWJ4Fi;9Z!)o7dm9SvEo+(@BTlQs* zAG^i6#lR}8ru9U@m$KH$_6W^=>ppWm-Ys8ONj>)b?kkPO)`(#UKbOtF(2$7t`gwZ&R%FSgdD4K1Vah6uOvg&IFr{aTcxe?*NduOI zC2cThCoOS3YTy)XuCX?TEGMI(YKh<;2XQ!rrwycJbC{b4(zM@`<6Wu>G(2zM1-$6CZdWFqJm_R7c8D9K-7ewf z2!6|Q5Y(v?2L}!v?iuLo9capr47`HNM0Ct_GBYMeV&POdq}G^~*YLXtUSGT?)M@X2 zGw^%qtytPRpY6^}szWtor<3+s4T0lbd_2ia=;I_6!4=8QRRh-~y>is}t83c8J1BS4 zE-9A1*A2WUYhmtHnXJPN10O6FeZRY}4j&o#c(G*qxsjUMSrIJb@LW4j7Gu;qFeYMW zGlN;jPLE2@`g88C@^Ji|ce!)YP9-fThTGUHk2?nL;vR{a)*lZ; z9RaxqISR-{!_^Wsj&aWOT#b1$^IgVoWhm!!4QEY!YkY?i-=N~I+P03*uv$EeN{$V8 z1FEo|Gyd8@H9=kY4J$xumV=xt3bGNK2qg?2BUnJ(kU>pN4i9{by5$(>6-Jf2&m$tl zwkmS`6@q#X?NRQLc*+Eg{}ROkFZf86OX73l1yGP>%4ZzP8*f)yx|+Hi zMAPOw%Z#5XYP zUD)U04Rg1oWYaRdM8hm9B*=yw_8%>vSFsa;S3UIC829Vgh(Guw-;__?CiJ17el#4w zfa_1Y$@Y_uz2%enKw}OE^^?2w#$as@gS$eFx_XBjL+TxA46Ao^9(Bhm^IW|=p*j>7&rM>4xK4ifxJ$)y!=xYWce+?f76(xc2ZYYaF%nO9$&#ZjzaW% z5$8Dy)B6;?$j|Sc^eDJdG8x7*v@Ic@L--{}F|KsuS?(`Ym9+)I1#UMY&@?TAIzH8# z!w8-OD&&a$H4E82#NMHyB)vA#Fo%neH`IQGmvVTu{@Qg!%Ufm;DsO(GAe38vpU~!0 zHo#{p;DqY3+I+yZESM`qCno+#(gE(S!W%68pdwh0zygnAodhFzQ)7k7Yk?MprJyYF zZj>Jp9?^f%jS%f;3M=|&@bI>8F_gnw?F}1umN(zPYIpuNKb5+}cl)>f6+_bt|KzkT zhxgmv_lLXmO8wHtO8w-ejGS?9dnYI)@C99bNty5Pnz>7o_xS&ouhGD@9hk*#22q7Y_pT}(;17AqkIec01RSw_eFt_}oxvyBcH{N=Wm4-hPAb|V-1KqX~9smFU diff --git a/bin/com/d_HBOA/FullReplacement.class b/bin/com/d_HBOA/FullReplacement.class deleted file mode 100644 index 7f10a21335077dbe1c0b3470604cba1ad7d1b919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 816 zcmaJ=O>fgc5PciFHJJ2+Lff>|(1x!RDk4=}P^wBm6=5lms;zS2P;H%+Sa591v4g~! zD+hi8C(c}o#GyZcKf<3tz_S~$1*nIeo!Oar^Jd2W`s2$9fKA-CP!U-6!a=it_~cRd zVY8k3{+^0_>8XJV5(}olV#)88oC1?uI?&0sfYDg*37C(=zOrH9d=(Rz6qxDgKs`$b zM=Cy$N4^r6>x7>4dotFUJ$^Kk7kVhL(kT`Ci%3hricfh7Y&G)8H;233y@PhQ<93_7 zVU+qZ(P7Yf{*TiQ`g)}Msq|axJsTHs$->;Y?=nacSH)$_3rv$xlqRaJlRyngk$tvp zEMmz*?LPnoiz=3JMPO>Ek^)s=t>K=AiX?qwzlM{V8kU=9#d4vCbYMtu#Vywd&LS07g*E>_^=)$6#5YouPGTxGn$T$}#u VFmZ!;{3pI+Ld-MxCd~?N{Q}?6xv+pbS(@soY$fK-ObY0_FAcsFJ<$$!Z5=~OWLyHsfNQaQ7|yd|F7p5M)$;DvZaJm zl-|pR`#VFzOkF-2r58@PvT2KotV_qE`et%|D+*EOu|?%5?*35f^iJhoPKCo96fg$27_p9G7sJ z@*|W!)fkd}SbYgT;w*=S;~Fu=F^@FuB|9noErTi_T$oSIuujx4t8d(zz& zd$wd4D>N#?-Vv_S^Kfz4d!b0WbLMU%pHU}Anp*rd6(9`slHquz?Yd+LlJ=A%|MYH4 zN4g@g-cTyg|2vNFwf?8W+$cv={*fbx#VESjXtwPTA#kMW@+g{%;|6}VaPz2J4x7cX zgk|z#%lAA(F6Hm?17JbJ&0qi|t7Yj?sa335xWzDO7_+aJ9Jg_Y;bbk4KyHx5ZSu=t zT@zZneie5))={9Hv_!pW%c6XlcdDwRs%>FYgOaKFCj;!G4B}VBriBu<(%@&hgX12y z7_9INGb|3$GPM0@HBFgeo8!Jdxnu2SRd{kud5&zgR)lT0;&^~Z79NIjnW{!LI3D8~ zS(*qp+n&7dsE#%#A-VF8wsa~=`an-Pe!(;Ck05cWQwwV`ki%BBhn{l?>@mcJ5oD|M z%?i5jcadRgKtr<=zJrhIKJ`%@s9w3zb}O`ZeLhB`lXFF%6kH@`L-aKtLQH=$=qaWT zx^+%!zPI)J3woh@LpGqfQ<5cDVr_+V~-!$fk!xf582e`=MD$S?@zM}sa=0ANyZ^!8QTU-ly{7u=K$9nqF zD_kFb-o4i5vl=ZBK9Zi|WCtd7DRA-4G zaGAD0g9*$M**UtWh)$Zm5*ggY0`3y&i1vC&dx8j7P$iPH^sdCOKJ6Nz#qi=k{O{E2 diff --git a/bin/com/d_HBOA/IBayesianMetric.class b/bin/com/d_HBOA/IBayesianMetric.class deleted file mode 100644 index b81b8a747155696afdadb4821ce273ea4f33e7f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmZ`$+int36kTT+W(rJ8<)R2wYmEws<&yAVY`h@RlF;&i>4Pt3n4Z#U2gYzQ@eBMM z<0Wc*@XZ&$!Y?tdb09IAcpmm%`<%V^T6>=#zrKD0&_vUQA&~dNaqalUe!Ksu)@{45 z<;-^{2Xa33JsYOL=9&A-tp)C6RO=7Vq&F8Z4hI6FE3g)XqqaMfO@ zNU3}zU_K6yrS*_(>co-61sj_J8-IEpxbss7DWqA$ZmcPF%AFVlvJPyl2_$>|L>?~2 zLpgos4g)EW>V=*g9Jy0p#j8tePgBPcLEb?QakiSD`ZIxI@Bbs-+zdvJF?abUJMTBeyOvR(O$}Q2Gv@z~j zAi=20SRE&sf%63$;Rj^iF*b0K)?yZzeM#TYsC}&}YxL?hTKSC2|CZRg#91bwfFctG zws3`3(SE0hb^2CiD;xcUt9R{6*34Q8#VUoO@`?AzZI?~u6QBo71P$iqMh!wiEnx%yjk)dD9L~2JZREX3bTDVOV)u>8jv2zu7 cDAs2G9qj7e6_7`bC}EoF!FkM}1HCqQrs>b_Nzk27#=^vPAuy#JqHU z|D>$c~D!Dj7cF-fPhahk*_pV(ESMXjuf9{z~2Db!jOjnI+v7~b2a z%H>!&H@#mOFI+tT6cmPj1n}rl2$}=xI92AD^Ed3iZsd^A$v}vG!p?Sq>H**bhv*VZ JM+iL}eFH`|QosNJ diff --git a/bin/com/d_HBOA/Leaf.class b/bin/com/d_HBOA/Leaf.class deleted file mode 100644 index 6d0644b97ebdb6cc377d2dbd5e75e6b661ea858d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4172 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 be#HNe{xQq1mtA31Bl?s?AwrZ?Ci?#uyyR}Z diff --git a/bin/com/d_HBOA/RestrictedReplacement.class b/bin/com/d_HBOA/RestrictedReplacement.class deleted file mode 100644 index 8bc75a72eea6e01280e0203fb6e47d11d812b683..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1821 zcmaJ??N3`(82_F2wzn^rQIN`O$IG1dg{^{GH;T*wvR!4s3PWWoUfP>^w{qK*TOcIH zm@F}Va9N^>^2KCk37<7u6F=+^@Pl9cd$j(}Ew)t%CAsH0=Xv`*zvnrJ-~ayY8GuP_ zsqhGl!sgA{Hs&!xr z2wlKGZP}JHBjAhcdSYEbnJX2{5WEO$P@xHUX5cJ}TGrEV9jU8_(virK_^2m=^WF(@z~ z!JQsNLk#Ch$30WRAql$ovwFQA#3(MP7!&9};rlNX4KLs#sjV2~dRy{y-`F+MRmUo( zbM9F-gqM&|5f_O3U#B67lz?iR`;Klqgb>#gy2N}*!)2sN3o*3{5*VhzSrvycfmc*a zo>FfsjD}b7nn0jn?Kp;=XIqC)a@;b{N=OrUUBeYz<#3RUa@8>xEXOu?*mn}PATeh( zOydm>9x*qSvZ8sZy{6$!TxUf)|E*{=uAf!Ve4~eR8s_mr5#D<*pC8^wdHE@MD60tY8|3b5?iH@1$zKr~iu4p` zV#-rQ24hbVPR4#g#}NX_L9Rd2$cs*X2i!1Sbn9k_=lIuyK|Ie?y@*hsYy?CX_3}4L z3qR9IsfUt>UVVsC^3n_R@zfbWQ6cyPz4`vp!UZV)By5dVhp8I+XS^BZ2w#pzmB}fe zC*$uP&ZtTzaD?U*JVkVf125T6f3iXHjeKowC2}i?G^#_Eb!Hho|&ZrLqA{t2k zjE*PuKcq$GN}xCJRVwPQVd~rOk)+h`<4FxO%s6{BNVzXaO~kcXNV&SVA1WfMj6Zu) z-)#}I;g&N%z=H^5hy=t~@OhRp% zDqVj!t^7`{2u=ULB{~FqDswH#D!noY`&HO*SbkM(O6ar->ce;t+zz{e-wV7!wpb@Z zyXdqxz%Pd~4rR{cD`B=?MzX8)g6@y|Q*GQjW<8TXiVbT~&P>kO9mg_PUV#Ai$qOn^ u+%Qn(=x`g@;RCL9Zo@^5Z~js2ar{euM*We&-(+`_Yyk}%6hoTD>%&ide^pQb diff --git a/bin/com/d_HBOA/TourWithReplacement.class b/bin/com/d_HBOA/TourWithReplacement.class deleted file mode 100644 index 88ddbe9d334bbbe610cde14355dc08d214d398a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1506 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 diff --git a/bin/com/d_HBOA/Truncation.class b/bin/com/d_HBOA/Truncation.class deleted file mode 100644 index 99ac8762ddcb6c86aaa663ebfb23ce99e30acda9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1479 zcmaJ>U2hvj6g^|Fz0GFRrlC$lY?BsBYdge-&<2WILmFf1;@Tk&ma3wbjXjhN?%H_Q zk;-#HLj3_qd=vte(npY52T{QrFZ_}IiW1JOLt^2IhuOI^_s*Gn&b_mL{r%e?0Oqlx zBOnl|w{B({*DqeEEM`_aU8in&cFWPB2^<-4Rb^Awl}BLQZFM}^SZ=kuO+Q#*=4xpm zb|2=%a?35)UREG{&US1sC!i&Y$r`7nRzn&HV$_5VQy`c~)Wb%0ynqt|1|g`QBVAHc%H<8jaZ*WkihzA0L&eJ$^U0clBxZG_Sg&j1poM`nUQwAGP&vJ7;=}@p@QxEv%U~%ESk8WnoO0T-Sy=Aj=iDU$CHJQ{In~bx-FT8(H`jO*bweO zm#{TiT49q&zpecCAd#U%1B#KhwkBO_exSW8k%0cuzx5S)(yMw_{gca9d$+5NYOC9+ z%Yv=?{$L-A%BEGp1k9r2$j(yJa$S{vxc}O4jJ*`(6Bit8D1HO9Stx!-xXN)I;B2I} zIie3S_KP2LnBTB}>MKmpp6o~A864q?@#e~6i2 zZVS_?2bhUJLi|c9J{#}h_%>dw-VTa*Y;)(a^8Jd$Bc!j;9NWgr<=}$0h1Vlm>_fHF zSO}?@NNB!?`GxSFedeq_7tv-PFfu$prT1{|wk9H)I2~~Oc?l@ zB7B1}d`nW_;UwoY?&1u-$0B~fJJ`eue#ABWgmv7*E$)4eEqsalz6c-m>FtSd2TRD4 zd^;XM-2VIo<>Q0l0Zi4*&oF diff --git a/bin/com/d_HBOA/Variable.class b/bin/com/d_HBOA/Variable.class deleted file mode 100644 index 9631a36eb01527cb348781fe8217948891f0d68b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1698 zcmaJ>YfsZ)7(H({+A*rYxF{E8plDk*rc?1UL;-KpDJGaj{i0>7SRLCk3Nii@|AQYi z5r~?Y_|+e!p0_P?j%l{_ZQu7i=bY!#{rLIi8-Oed8We$nQf(tses*VRWieB<8?L=p zaWq5)`d-=FcBW!i*E1_?ubh&nK^5q4f#+{G?D|WA*mf8vAo2pyw@#x*;=%!FP9RdN zIs)pvTXnq!VvW362K5cT-@fReB#naq&jLGV-mbK@PbNTV_$i7?oSHC^+_u9(3WDj^mgR=-za^ zhjzoMdIBRxD@Rk5>B&4Mb#x;x?@s9GL0sU_s%Mv8-?!_b^`3Rd+mG_|XC*c6J@tz@ zWSFh=p=%bBh!t5;jaCBa@Lxtkq%5*Zh>un4q37tPTV`y`tF3wsx4JGcNS!}@4|a1J zvI0lix0kluO4(_|a9%($9>;MObFzCES%2doiCL70%Q~)rolxz1-KmxZ#yJ27z#(-m zhO6XG8Zz>ljJz(8?!^611{t{|BbVDEgOSetPx~eZ#*E=MEtsYx%InDBj6i&~w$&&( zw_JY?Z#X4))2&tgmtj^`2}$-j!e1A!iX33RZ;BiMe`Wi*%308Hh}Xk>THv|DHE!*p z*BaYF;-ilpcQ`i{|e=t)_T&lry& z9XzJ3sQ+lCc968vJD8H15lGEb^atKWsoG7oKI$FiXM!rHF^Uw%SdekwlNG2nJ!L~r z@;^rAEc43Bp(poApH=xqNK}Im8oKxeYalR9)u0*~t}^E?>k|_1d87EIf ziVB)CIs_*_v;|Le3^qFkPqhapI|f^r36-zVr%YD0W?0eo22T3XK?Buhu~ffAGTl^X z9=|EA`A_|WM;2J}@SiF4bB$gi{E2oeCwz)zaM-lMH-uf5br+cBR4H6J?;+W9qUG7# zSDby4IJbujvN^lBl$hVe0`HT%SWMjD{r<+3+_=S!UEFCe<#bCa=bBBtOMV6Segh0( B7>)n{ diff --git a/bin/com/d_HBOA/WorstReplacement$PosFit.class b/bin/com/d_HBOA/WorstReplacement$PosFit.class deleted file mode 100644 index 3170f9430af45aa55d4ed94c0df8367ff0a391b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1720 zcma)5Yi|=*5IxuLI2$k~588zAN{Dw|Ft3(2PD36hU~m#dP!L~08)q99oLy^o)4$Sw zsQ3ku+DeU)TB+hQKMHYXcS(!^iw}GE-nlbp&YYS1_T9h#1Gt9OED{Rmo9=F9``O*4 z^~K6#*YksiR=Z_3tzF9rrXINdiXCK;QYgGIe>E#D)7h!4Z@sXZv}P2BkF3k?Zrk+C zt(K*bYrDQ3*si0X>I&Ik?7*>npQoBaCU|c9Q&$vDH~QqR(s9mq>|mZ8OMN}-HGNYd zwd`(N15h}jVGvp#Nu1O$gkgnbN#B&4Q4Lw-WOqu#0P+gQ8@6Mu?d@(^-lK?mvEeq& z)~4y%a*mBDp{y{~k47vOc@O$lK;>cqQl+}k%hO0LBN(jZW6jG zfj>#$tiq+wL4OfIBIhLXXUSCSm+2NW>EgerL5I;(L^R-4y`JZ&)HF=vA{(>e?s-jX z#g+jtbiID+0Nb*Z_g$zGe$mj!wf;XC%G$sx(V(14L z`na2 z3hC5-QYa-u{YS$d-DCgmQ~w6hSE=|~SEZAOicMmMcM2s&Gt03d?m6>u=Jl{A!1RA8 zKPg^%jfxcC!L{NK9sDQ+I;a-sx$j`%ub#3Vc9k_9B`hrRxh%!tI*XFB28{9>s1BBU bMO7hyxFm5q1Yg0O@P8L|{-X}vV}*DRE^kaG diff --git a/bin/com/d_HBOA/WorstReplacement.class b/bin/com/d_HBOA/WorstReplacement.class deleted file mode 100644 index c079856867ca8630db37240654e2327d68f15d13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1468 zcmah|%W@l45It8KNzQouh#e)0iO4&VB@=-I21kyGA2^vrv5cKEP!5=pbg{?CGpd=9 zDJWJHg;%WEQI!?zR0V~CNP$#=|w3R0>^qB>>i`QaOek-tgraZR>O&0-xD~$QSNd7 zf4p-mez@dDC4uCO>$%aaKs-0TE?_M9b!j4wehVq|2@I88PcFB1t1`IbR2x!Yr0mz6 z#<~-@>VEKOMB8pCkbPNFW=jPfP69JI?fT8;N@exVQl)HHie31n4)|W9?bY2qx88CZ zrSWwWqe!Q4L|{yj?Dgvgv2YZ}$Y@JO%bK2@!f}B!ua@NySPcsaBvqoUh1YRXz+@n5 z=E;ymjhsEcXd;8tN~bdn+u`$q`jzZOh58&Wq;Q_~+Hv-rVk>eR#knAGz78#1M2=Ba z9R-f&Hp<$g;doocN_9upBF#F3yoG{d)lV?2p{t5*;tdp2xbz$~x~f@t6K@F&l6|uk z$^VG3>`RK}WeacP9f5&RM%}*zPUq}r3e~ljG_6s*YvDaicQl%pq0&i9PKicQvM__I zG%~a@5_d;HUB~w=T*F+~s(&?d49vG?Pe-4421mEnY^_00e$@r0dhw-AB#=;IvonOv z&*daAfQF_H8iiP7$5x-x8CZ*)+LyPT=0VGwYkn)JQAsrv!#(qON!3okvOP}*3k@d> zCE+AHBZpILt~keDAf`Hurx?$iHLizvD{>dy6ZwZQ?`yNgHK`vz#sJS&#{q*F;*H61 zm@9u4%M4@kZNJdQ$ZS6Q2$^3o7N0VHK{o#YV`<|LWIoBKjY8UJcExANbH9vDT*2pT0S9GNv5p$oI<_Iv#247Z7QUtZ z2kdC-ceO_Q2h>TFkr%Wa`&h&WTGQ{agzL;ZjI+4GlYy(S4^Cx{fz7uBGhM(<+@i4C mIKtewDBW#h>__5nj0$mlq!eSgWj@7F!3uYii8A~?1pWmFXHN?N diff --git a/bin/com/z_PORTFOLIO/ECGA.class b/bin/com/z_PORTFOLIO/ECGA.class deleted file mode 100644 index 9955d88b576a4b77c6faf33a02a807f8a461e6e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 994 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 Qy|QLVO)EnhEm-yc2kTOijsO4v diff --git a/bin/com/z_PORTFOLIO/IEASolver.class b/bin/com/z_PORTFOLIO/IEASolver.class deleted file mode 100644 index 7b7361eba4a57abfebb61ea18661a08eecde1691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1770 zcmZuyYfsZq7=F%H#u#N>#BrH0CL&wC4Da^~f*K3~f`mlBXc-l2w$_x6sNenQKhdZO z3yCKF0DqM6Ic;f6*@x{t=kz@9`@HY-bo=}7*B=0vvDl52z*yaG);_&jTV3CHvbwyq zT3dQN|J-iu8BRA8fq{4Wo?dI{)=q78>zz?|1;h$JO9F%Smg5+fyJo*{HFVdsErCGyStz_8oRvd+OFO>dM2I;oo)lG&4d)vq%jgu+{Q4mO1s+&C!7*)}QOgF{_rjmr$b!*#hMznJn z!zqa$lE_IF-N?$-l!_i?JFB7(dAX{n=*NIS|FUTrE3M|1;cVzz z4MSjP*{(W=183TJN`Y*El+<>>JY!2C3{AF0Zk3 zN;b^R!g19mE7fD=q5-g83>TNK5T!d>U*6w1E+9!z!ahEnkEzI0>X_x}qAw*6DCVeR z?1pTQrXM%0x??oyy`Y&msVq@JBBk^hq zsa%?`310$f6|NL1yca3E7b&_IDY+LZxEComV;>PT4fCAf?hAJ*##`C}hP7fFBie6_ zz0meCasX~8v~(LKP43$$d+~D{(^|fb8Tn}TC&4LH`F)nY14}9NRS!#zvdjbv&9Kl# z4C4w;;wB2vc&p$S#W|ekj^%NIr1@s><{`CpHYlkTv={p*7hlWzTum20>tqns&3gkG zqu0k-p%}|w2=fM>2C?z<&NN+6z8z#2t4yW0Y2Rk zd>eN{a5U}NB<<;r;JdVmUwMw&NL4b@a^*;RU#poIIumMjFGOFXK_t3Y+NY$@NTp%b064@}5jn!P8wJ+g<+*dwKXdGkV|Cgs--}|EjDjLGLUk;r z!tzDvSC{HK+sO3D_KS! zril^^Ld900>`sEAjQe7k@kOri2O?H!{!!GDk-8!5*#8X6vW6#8L(E$`Zk{HcryyNyosFZv8;@=_9I`w_~$XcD_JJ3#f@!4A?}XnU-Z=M(3kp#YsD zEtQ;kq5ez3aXqDmQiE-v-uG#_rID;^UeH| St61Yv2JrRY^lhe`6(g*^1&8r*4iF|P T7|>ME3<{{L!%&2<7&**0;d?c| diff --git a/bin/com/z_PORTFOLIO/Individual.class b/bin/com/z_PORTFOLIO/Individual.class deleted file mode 100644 index 891fcb1bc28a9e8dbc9481f5eb06f84743abdd3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2294 zcmb7F+fEx-6kW$NW{eqgu>&;Rn-by+fdriNVnRY7v~EpIxk*hPs=-WQsIe`3KuVu^ z>O+4a>Ju+f)kZC;+NvMWzvxq6s(wM6cAYaL+c+qwvOJzSXYaMwUVEMKZ!drP6~GL( z3A^^(?zSaJDuO&w+pU7*r|sI z1RgI6w9Pps$DJ3@;)yK*eX+b_hoPavgn>{yBIq*EDbU|qY_(e6F4_ksy3r#bO8jQq zArLbWM4LcY&MDas4-dBO>W0NgfoQH=u!>t&)sfHsqVDcFHG!dAD}JMyjKFC8b^D2} zFbfZu7{ri3WY=~Z$!sZ}kc}Gq<-O8UnLL8=$BVMpb_OmKi?-yZ$Fm6riG42D8q2|W zR)vZJ_qg9lmX$--UUuA)T_bO*w%m>cQU;ReOk}lObsv;=sf3A1Tqlc)C!4_KS32?) z&4elXw22AaxUlhMMXB=SOuvP4u%L4?Fw9qCvpw@d8?Ta?g`LV_i3lr&HIN= zamTKPv4mv<56-yPOE>X8KA?g}R`JlzeQL<{)X#2v_kQ**1*+^rqaw&C^iVYNWFNQ-qfhBPH( z@g_~H@jUY+$|J)&llMGzyteb{9@nWCI+HIDPCkeEOYjFozvD^(m*l$2ZiCKGg!#Q( zlL&IB5B>a=Xm9vvYs?C8t?vw4GIff}=b-WhqEHQm+UI5ZsKmf9@#!(*kNEg`A3xTD ze-3!a2M;xY$LioQC58ka#h4GC@xhJc_lORrpRo^5gEj^L;U*xX4rEZ_9_|bIUhsjY z)iV&3K;O2&bTmmA^kD?9;4MFSnS#rKg%pdS&BiD^8WEL0=Ec-$gnSyz!#J*zIIW9o zKIV*i=H7F}lc$*ariD{i6Q@v})6IHAU$L6boGZ#7Iql8~dL+G}^n7Y)c=I?QhPdDQSQiy6Qzkn(<)- z{y~RP6oU}7zY!FstUmYp>NhW{o?`V$R=>{bDOR8QU)A{*^Lzi2I!S|1 zM(-*ojr@#-Pf|Z(@ddJ;sZNnQ#cHl@tKXY!r@X!hx@LCZ>tQ3MRM!ZVe#`>g9Buzc|qeM@F2Y-M+ zN}QNlg@S~)v%8tu-M8=K^X(nL0m>#c!DcrYT94Q5*2QI`Wj9+^bEN#fbFX|8hG6l| zeQ>RT>-Viz=g#X!CQ^cp8Bse7Is) zb_exZLy%F^SWy0t%^TdPNFY?Dqrizm?nSUtt=YdjNwW1cHo2;%(>yQ*lx=us}bT5RgZK z5nE%4HWoLCaXBM76_6f`aUt*<1UiJoi}u}r1LZw0Hgf;Fs9YVHx^f%M|W T^R#3#PWI0@`gEMFZ&v9Gol_;>&g8M z`|f7duGehK_T7f_SVvMYv+e9Tmgo3g%WiGE?NCQburQuc+vo=^&+Q3Px0J8K6@g}! zw*<+xpyOtt;e-JlX~A?|`R@9l*K+%t4pRiVdeC;fEvK)da~w>D57jP(>f=hI+A4x6 z-s}uQx2i(l-6eL>JO-}$9kr)A1IMeBt69wAl#aZhFiv`iGcbpFL8j}5tDfgZ^(D<( zc`bv}IHRK=m>*A$TQ^WdNgzH~O^{Uw+JfT$D&wdgsE}DoFxd>9_M?Wg6OSPs2FvtNf_o&$n2K_cC5|wSlbzP5=ums9*P4L|{F1`g%8G072 z&`vDBNA?Y!1Ptz}Vem61=^G;erZCMDKLt*5kCLAeouoad-PTrKV)kn39da`_o+GuN zkbO-`Z?W*=@2}$1R|IK8;sU9GFHHQ(D!!5GJM#3;;>S>Ic|;hCk(xJ)luK}5LTM;i tV6;TO^JL0E`wd;hNDy=Z7vsvV(MD})xl6BUjyCo4NK@KDQ&)y4^B+>zpQZo+ diff --git a/bin/com/z_PORTFOLIO/PORTFOLIO.class b/bin/com/z_PORTFOLIO/PORTFOLIO.class deleted file mode 100644 index 1e3b68db5803d5a0dc246b8bd71b829703cce186..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmZ`&%}x_h7(KUBS~?7WrGQWr5ygVSAmA^Rjgh2DrKCj?;=){pu?|jW$aLz$wXfg< zxNfF-OY5fd1*{F?dU^=7HOwO%R~ zN@n|(L|kBCU%r>7E4`{&+TFLUP@wm~55i3u$lAK&+5+j~c}^t^9Iv`6(5;fn4X-XB z3Id5hdV7AYo!kf=*DOaqmF!g-mSxwOtgE``Ue)pV@BE413029oI3aSzK$EM2sJwcUWrFtDQ7>O0^{ z!*$1#ZozxwtI7uk9;(oQ<@$Ad%dRu*+NB1?5tl)g<}lX}x_sOh=c&=^LqF>VXqkxd3-p{| zaOVg^O^ke{8N(HR^(d&GF)$W+!7_@ZT}=7X-!*rH@$<4oM8O|v^}{1PrZvWlC*(q4l@@>Y-r0 z>E_1PPIhB8w~^V@%kxIX+Ad}FatzH1&OX;q^h`l79%eT7pBs5gLFYa-a>WDl#5}0# zg&p(AP@pU;==C4uETgPjW~s>29DVsuw@ZZ+qr6$Fn01wu|M-znbkKpL&C+qTU>ojV zZOFhmomJ4|H|l!p_8(+Tt7udz4D_Lb^Py)8dZ9ptc5yhz$n`^`o_UvN$CGlOXFHgy z^llsRChFbyW+^Lf>pP*!YWp|s7^8R0qG{bz&@`IfRnWXpIxv!GLcfX>`lA2*!3p3m z0R=-U&Y)eaMpX2moe8d*MPt2sv~QGm^!)-`+qqiG>xEstY>NN(X0!FoWH|;J>+hK$ zcA)#vu;xSNg`q7Ax0;F;L|OC(J*SpJ?QIn?#1#xSs0C|F!#RPtt};O)E;JzAiVMA) zDw5%P-VO|mrW-SLCruc-t)dmGg1!car(-9yW>vHacc}&~r?Jd{Q+V;e6l9ZysRt^~ ziqdu3nx3f?#|tVt#Bs0x*jLu9icS$tzhB2+Q(-Kp;+!|^hT#=Tt17xel-xQBr41F` zqD-fQ;h$i45d8a2(%UL}MOMk`@qum`VzfBBqYcf;EzZ@mm|e~-=hC}Lyo>i^c#r)F zGKQn7;sZ=6=wdMzs^zj#wA|2>*u%#$e8d2QcvnfqQ`}{2b~V{i;Z|3%kBrZ*JA%UQ zfeJ$?oZ>hyV*60VGhr@4b8{z$w5FgfUk|LF8>jn!5?2rx98_nigz2(zhgGulf<13G zXPl`7__)LNCp{U&K_kdd*@R$Rhu)$G+uYDCnU-Y1( z4tg9J$2DJfw(E)S0xJ=o}UD0nlpSHrv+6tC?EEK$hC-o^&3|`4f!|6mS!D}}7&1>A!hH6M_-OV*z)4F3dOlVa6q=reYFJ9xZ0OV_! z(NYP)5*(j#{0JtQ`c3YLTQ-IJxP?XB#tLSzg;~B#?m%Z{4{;AiJgwpZUSbYk zU>;vnQ;^gizn7S^%@kr~;<;pqS9n2>5qVl5X9|*gMLSV4vse|m7vsM#Q6kmF8QDu5 zlS>oyJ%!J>YDJlvZHWAZl^FJ#{=}@H(~3i{-`ez=)mXB$)+9>H$AoxHYKo{TS2L%? zOQm_Su_zu(;;|x>)*BdkhM%{<5(CZgGjExptneFUm44SSfORIj2@Q`~&MlU28`Icf UiJq_|yPhG*I`nDLS_IX90qA#;G5`Po diff --git a/bin/com/z_PORTFOLIO/ParEngine.class b/bin/com/z_PORTFOLIO/ParEngine.class deleted file mode 100644 index 2ebbea4da2647566cb54df1e8d87022d92b6f382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4978 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 ID)5{C0^p=EJ^%m! diff --git a/bin/com/z_PORTFOLIO/ParParameter.class b/bin/com/z_PORTFOLIO/ParParameter.class deleted file mode 100644 index 478cd6d6bb7a3708ed90e966dcb06fa2eefb21a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4766 zcma)93ws<@8GcW)$!xaMHr@2L6zD)(H; zn@*~^d+$Cg=?TnphdtYMx+s+ssM*swEfV*#wv%cR2(~8Ewqtu+1j=jc`UL{p+yP6& zycrgK@gU|4ly$8OVxd6Du|~bPn;x;UK`atjXr|L0w&z&6T>H&=GaW>YfMyNn?6m6y zv4k2KbF`ZgW#r3c0{WnvcLv(5oJYMNA_7%vrJFXYAh1G51uAK|({`+`d}gne?KAhL zErD>Sn>5q?X4aO^lZ%zDY9Aq#!_aXqg4~NYWOL`|cK$c?2*P5iX`5;LfHegw^_JAm zMXau0!@C5QDJX5Xxx-FdF=sgM5hBaXgs=v+()(%+^(A84P0ySmR)@7xtWjY3q!$`1 zk!X>Qngx~?9kt~L2d%6%&}*3kGUe+9BE@$ldj9JW)?sZ3O}J1x*~sKiJMkrGKZFq8 zt>a=`B2byOoRl}DNDz}RT6DBxGhZZ!%~gBi}}tnF6X&e&wBK=e#_`Vf~|Ymp`{*Ac@NbSr7b4As`n&4rA! zQ^!svM?w>Qfo>f=xQZMZVLk^;&ytk$i$I|E3=zz=8o=R9*X3*p|1`WIzxDtgrTL*3E7*LNHMqLJGD9Cb33kNa?hXCM^Ykj(sxN zP|EUlvPR7m!!?oCk%7ZBo5RDFLyL`PKxi)XlQA$;CWdv~tYGk5Kfn-j$ZKHM{5WRr zO2-IRGxA}%(KKCG50|tuSx&OPr#Il+WRYrvIaOlh{S;cWs*h4-Hcd_o%&I#I1opC! zSanl2W)>DDDjbrSIiKjbg`eb@%CWM~m$2~K7 z(@t|(wXh&QOy|;4I}Q*44kYGq&C6?&*tl zcNtw1#ge=Vmbv%T_Tv8Fu?x+4C)lzqjta0U8*aUKluQ?5m39OtZ zf`0;ZxY>;9O-Y6DIKHIeNU5j+xV*Tv~`7Og} zlJ>`RER_0R6S!RI`@1pRK_g|cgDOioBk!=Q8nWdX{?S@uci7GGkQ%Xyc8wqkY!4}R zA9h#68!{ckC3k9j+S}rFRXBlXHGKU{n=-R;&t<(6p+z#NlL8x5P|;aucy!9WWqU(( z5^Y=`HC$fTN1H-;9^cUL0uSivBz2@+)6?-ye2ckMz^j#afWAXU`I3$ryiE3V1YS4@ z1o0gKM}^a8Wiz(pgX|4ut=y2C9xw*!pTQ6-dqhqEo@ESXNioYw+E(tJA~p?2O%O&~ zd*AN%_AVp3E^3(0fZB=-<5e9?@Ny8}6Sz@%pBz<`kmEXylGq$w2>(D611N@5O#Cc_ z{-?k1>sThi|DiyW@>f+XEWd)(K6A{|?jg(Rkdu-MD4!vpPT)s6A~M>a2sHek+MKGI zg7_KBO}3aIej#v+QjHB7``x@@W-UXWWU`0Ixyj(vD31vv=W@y%lFMA|*wwY272nmj zwX-u}?C$OE+F{&6av0HK8y6t66aIx;7SUkS7(=rm*QHIfN4BVLhG*gcrmU72)c5 zqB0zgC$#Y5cp?~H8c$SLhL^{WP;5?j9!78l6YOXLw@eCuEu|7J1H3=Gsc21x!(J+pNofBwE zOkiDN?Kn1!Wg0+@wV+BHEI`33N>@1tVG{D3^L03)q#|RPoB`C)O5l^%0!YIfgwGFcabA zIIM;O1`D{U0JnhbF|~<1a2JQ5a)nSY7BloE+`uxTwVa!aa5!IqTE1=I#xEdBTdiPdL zRwxATCW2=d@R9JxeGE_FlMN^EnftMN=IhV#HFa+aADWVrH1aWC%KZTAiO2?`cLAfk z5LaTO!pZRcs=ZPOop^xzl3eUmn3Sn~1yHss%7{6NOh%lgUKyo~^423*Tt9}hR%|HX z^M_Coc=C23R&e3@hflv<{v>5eqqvx{T*7+T#N*^*=C(yevDCMPFVMGNI}bA-KBhsG z{|gmjei{99(x>DjlnLSL+rlfQ78aLUI5mb-lNL@*S~ztk3*RlZu(UMv*T(RgANp%^ zL;pdk+H$3~S?>7G<9K}xuPaXtyqU+CSMjRPjs3^dCKRMUEi(D%d=dVo{Q32?$P`PS zVjTlpnb|g$%Qh^5BtO+WW?kA20IE@JdI&C-He#vCzb3qs)oc#)f@Q8JJ}mpL%frH#jl~o zsBU8MZNy4L{%yoRxlQhqLqBC@18-NX25MCQd{g%F-xlyY_Sip8p9u>j*?BB3U~3E0 VjSRp)8*1LO>AYqQO=Xf(E$>l-AyK2`jD*iIXgj)9?KU{n($- z&a^Y4Gwn>j^jm*ar_XzKvspGP4#Qr~InVQ6p7(t>|Ni&q-vFj?(1@5qU#@sK@#C}2 zjjf&Kjn(YN#HLx=vJULBW0e|FuW;^_`No{cn}vgkjlEY^&QXZlg?;O-g32m1WER%V zLrbB3wR&*dDcOaCd4;w^^X)^cV3kbAE*5rdIjB|?45#Rrd75&U5?0_**>(z6xx8rR^IUDy=T5E}ug%f}tL$tSm(7yGz-mN@{yv>-xN8?| z=W~Vb;cRUXBfARqi^YAb8FlD3(2gF3y5W)CCMcXY5J!VN^%-cynMPbx=s(R~Gy2gj zfI$Q2(58@BwF}nz(czv|+A;U?I+Mkmncp=_w!C|b_0CJ1@m`DyrlJ>PIdfn+SyvtU zNPU{PP?4x}c%(Kyg-#w>tJR746>)UTKogqjD39#~WRtxK11+-GE>=!zDBDv8jLNo# zRt1&q83Sk0z`PT^SgWoaxox0T7{o`-5R_UD%o|8lykkB2x-!9x_B17!twi}`NK|@w zMGNleQf=pcC@jWW0ab$$Tvl++cA#Rrc`za@iuA&Ey!!2|kOkvnS(mKJ#@3P7H@$i- zlCaAzSZSf%+D2H1=ZJZZ!x z3qPD$|Db_c49UT516lM)y?; zwX7ZAES7B~=ec^BtAj2JuHY))$fvzk`bqqa(cU!-c~&QQm%VuE9eRJ|LyUofZp&h? zCN$gw9-+c@40Aok(yx3{FOZ@8UB*+f|*DVW|cq!Jp%v2TpsX*^o*e zW4v01Zk1fo=x$by)J>)A8gQS*E=Cukc_za=S3kk?0E@mqG1r>3$#j_K+DCYnbX6;4 zqWzf*^9+52XW5JEVKh%V%yaz{Jde=h#dVW;mX>HpHAUokMDw`aSjn@Jc^-wXi6#|^ zUh!kN$1x$}rzQ3D9mbPpgac!NKw5mETYRA(`>xD*foQVn`sWcU-3a(oAyZhznitJK z991$rGvbd+G5Q|svvGN!>x%zG59heDCGTnXJdQGR0p% zz)eax$=`ZY9RIg4h-r*rhAXp}F}*|=#Zp$O`p74A3`bh z5g>I3!J`0KMN$@&PsXn-DdoeF_v&Lv3Vl>pyIdwyb*vP5nv;u`^F4A^^)Bo0?PJEd k$^h2*GjpAM8~pZdVgOJ0UE9(=xJ@$T1*BlnW(+U>2Y!k+r~m)} diff --git a/bin/com/z_PORTFOLIO/ParStopper.class b/bin/com/z_PORTFOLIO/ParStopper.class deleted file mode 100644 index 0de43a4c83609e44fc86540438a9d5aeaa7883c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2719 zcmZ`)OIK4@6#h2;u`Ai_-d?xsw zuX2TCl8*RlQJ`ihnKCnG{;YsE99a-hMy(Yi0D&eA8ul^vgqbm>3h8CTp3|3825%;; zq@G&PZBu@`hyEeQO%PtRYG^?{UFFwJhUu92f53yxAZeRc;wrync(^j^S((|Syu`?Xm6`^uJ z7$hgJY4D*(plgpr%buKM1P*I>UD`GkGG@#+?u=R)X1Zo%l7@5@(GZo_4OXdUbL+N| zTengx^0H4u5Iu5tOhc_StIg{64iN&O-HBGN$?3ji30{dEf%aYYWlm__=vr66?pd@7 zKn9r2>&e@bde*7Fic@>Zy8J-O>5Qb#AH+!vY8b*W1OdqMZ>{#_Q!+V&=0}!A=@6 zQ_h+C%3wSuXCk_Z!plkOC+8FscL7;*XJr+fm0US1p>hq%8Ro1ts6##9H}I>MtNihK ze?a5++<35`zx~ef0W>=&;1|c3`=p<%eB_J%hyyP_sdJuaB?G*IgES1F4ejpZ&$-IH z`;Kg*W3ullUfo1Dm)=dZaS3l?KbIq$(6}7kWL{5{C$#rEX>}4K=*x!=q6zV=lfJvi z#vz1xCeuAs@{fMJ!7oO_asIs_*_=Ud;RFG`&C?o)XNam4YmhfRZg#U!xC25(oc4SN z)w_k}=r#uU|Lm8WP?aqx-by+pmU^oohcLnra6Nj~9lD zh&5e&;1nl{`G~h>jvAAHVpcijl))7l;r; zlvO>#n)b0&N6E=C;_fHnJ`8gwnTeJ{yD9oGfElOIO?)@YorkZQF-LB^4gd|xGc=GV zMT9(r!6EI!_?@17^f>OqnBRfH?<?*IbOu|&&Ztrfmb|GM2ph?_{Co# z39*RzM_mD`|M2(7cWWb?y`g+J5*XwCB)NEDKTR`I}k_F#Ha}G!3N^x{F9s38bIU23$1z z6gG?U6vltDFNt%661_lIqs)Aa@*ijBF%o;RN+sP@DpBAGw9uY^+DhaK4nRl3H(hdX z*HR*3DUfz4kn}e0e1)nMq%KJ7pIbOu#BGhnz17Aa>}g!ZdJK&OIzcWcIUuIcgamV* zW>a0}c$lGjrzoU3Hqkt}U%)wB!6jVf={4Ri@@4@y_^%?do8^i~3)v<0Y)i?$hZWq} z$u?|3%|B=oqL~FypFwjr3hB6y4OeTD7WtzT(I{K5dO$5XK|MST$Z_w!C=aN%J!YC- RRRr<{{@2T1Qh@P diff --git a/bin/com/z_PORTFOLIO/Population.class b/bin/com/z_PORTFOLIO/Population.class deleted file mode 100644 index 0d90e1d40e1bace31897ffb1013d2e8ecb559bd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3967 zcmai1OLSA$72QvgB_Tim`59SYAOTqhE8u)>>;zkJQ4rX{jwvw-$nvv!jx0I)*bV)p zAKJ7{)25?#kd@U;%A{*G$-<^>(yWd2xkW|7i;?tS|3cy3t>-S^JD=bU}^ z`P}C}|K|^1062}Ghu|}CAXi*V-n=$5eQ9oLI+LDG&J@?H`E1257D5OZ=v>WiWRv-9 zVI?`exN7Ap28@gRpEl5H7nbY|d#Reumkq=gGHz4p`u?ba@Mf`8uFMp9G_+_rPr>ZQ z%9JfOQ?(Q7Rh`gJ%XXz;m8s=h;F4|j*MNfE>_nT zte{@&J=Um{Cu`#%ex~CRBqS=*Y^k|4R%RMuvocam4r>(K-+93n|tFzcD-g| z#j0?N$QfWeUmEym`A~e||M1=Rkcw!e2Ofdbut_+r)VS;aBKOZ!M~&jW!x| zu_EH>|3#-V7hW%xZD}Re{A%$=Ays6-JX#bDv&@2jS@1~M4e?}g{VgfQD<)pWfA(%|y@5eIBk9XDcPUutH?cxPqT`HYG7VYe9y!!e4j*Q z*VnDW5=$UH`KU1m<)~=9W1@^o7(Zf8A|iNKO#H;aNiQc&P_^HhDQ2KtDanj-Q^G=v z%oeMq9P=wx)X^ABLvj{}*e2&qhlN+ ze1X)5<9zZVPH6{x52)Y|!7x})9Xv3Ago8QBl|r--Oz&^_;8O_13b0>!G4%n*i-AF$ zphN<0R*rq_QttIsK8Ybmd6cev)Cma<(bI1A14@0bK2nb`q~a3DNzV|TaEB1}L~+_v zdDyMo=c)V@`LD(A0>fdB2yMst`#!AHcTU>`COuH3+$fHCqL{#x2Z~g5$ep;OJD~WAY7YbF>ODK+ zRAEs1^$BUg<_37Y$xg6dgh8YoJ1=?L8Ft$_wu7DXj-3oHIDw6@rDcW$6UVnO;2nn%Z3Iz^n>XWOH~$^>hd3>C8_zm+K?ped>v3+?kRW{NuN==R{0Th}bs1x{a&1 z{6_3kT<6?8AyuO%=3WkT`2!$~VSbf8$@w?TS@={Fns^;e+?gR^^utnUB0Mjp;aBrA z0^gTt3n6NB5#2JUpzij+Ip{7Yc4LLf;bL!L%zx%K#x=riyzyRIF%-WP=Q{Gs574Fx zD-oxHh{k^Lp%x8`XzZ3@L@Dk4=)s?aQXS0G3;}qKl#Y`1>!ame zQYlFoY(FRTcN~|1VyANFgm{hhUkMTRzEj-dU3Uj+^l9h^=nQy?Zq5^ahL`1eeoS3p zE-p5~8+73LcoDs+N-n^wRDkLXge3zZztKuyr8@tg5SFyYM1tx6JhFw9P@j~$^$=0S z`c6k#A)TjwMS|}j6}>tXxIXRNvn2Q*!nG=#zc#4WH|?vuWfw^GRZ{&L@4wf1!(HWV zxT5#8H+LrrhC#?ZvzwaLZq%h=@hre=J{)OO$*SYR$Mlio9 z>>l|Hn^y*ZhqvzHZ5@NI^6zfr2bp@M|Gnu{_Yb%6W3{WlAQ;*22OEu`1Ip3Y5}Uzd zB`uR=i#4-C$V=?&RTYqK(K#m|KVHUr_$iULFj+dF2=ydLosupDzC<{Ln<~14_YmXZ KpD`RC-v2K>t(Ic| diff --git a/bin/com/z_PORTFOLIO/PortEngine.class b/bin/com/z_PORTFOLIO/PortEngine.class deleted file mode 100644 index 680cf05d61807dc4846e4f35ca2cc1da7a3571b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3832 zcmaJ@`Bxj)75)YZ29#$oGA71Ah}$LxxdA6>>&9SW%wmhMg)PO7n~cR6k1dVVVMJ_q zPwjL|+q89>+D#XCNxCJiaV*r(rb*p3-S>Sv{U`cEPSWqrj6epRatnPK(HIYtroW5^tbbNAPbSOUBF_w1RetXWcO&wtk8;=_cMn}@H=Q>7@ z95)lLhO)_>8ni(TFlNf zB~Hf8IhvEmZdfl~v`_i!MAmUk+Z{GePFg8?)l-F4MVDn;Za0H%^&{~xns6PiC_SC ziQ15c`qp?Uc16&I5fK^H&`puGmgD_B$+@&+xyMqS>o$wrlBfd5-3sHFAVZDW*)@dr zo4&K{pa3zYaGd~gPYEFUd-oHF83G}zwLnaxzY_O)Day8vHLh{V3Y$?OtE57?zp@qTQ4v7~j*hpKnuvxo z;ifYg>B@O<07m9bcOsieuoc+mtp^3f1<`(>RFN4`pia#>b9I(*9&m`(WizveYxb@g zG~w1k86vfuH~UT7bPU%@+x`sNFyR`B6T?O(Xrv9kg`M!l&^W_O$1oEb?bbQHmN`T1$0BFmwpKIQ*Q#MSNaE zB~whe)&l9qiXD`#FDiUVVyPrP{XGL|M?OBO@MV03X9g1~YB6zEVji!yey8yCYYJb- zQv~)JHuM=TkJoJ_gDtSU(+jr^-%$7_F0D&D;FVvZ8%tU$r0p46z-5JJByV*zowa92 zGp?1&rmB!bUdK|YQCYY;D0~YMf?@}~A$ct;d|Qr*t+QsrF;hHBM|wOkSL(vkWERgU zeAg56(;u*$d3TMRh`pfjJrRo*IFL=cRwikgj%Vfj3O~RP3E~OU%m{De_JW)_Hi=bE z#z|cV@MDFa;1nCr@5O7oOW6NYh0}Pe`1`rSFYrr_9Ey(gbNrJ4aS{2o!aMv{`mMt6 zq$BFDA^S>O$YA(`!XNP`0+ZlCHW^Rpk`_%aj$4Woc&~GKud;a123L_4;5cjk4~fac z;Ht9HA=d>K{3#NdNN1gd>7S}Kf|k#Nb~!S!jY)<$MIt=;I48NPf{se>&9l&Z^C-^uMztY^K9nuqa0p56VjT!?VnwI#f;_ftEN1DbEZt=w>*A-{*~UL<$v$iV}=KE!b+1~G)YFvVvA!#IHvBr(R3c{jN^j)yQoZcgz~pXT}5i>EPz zMI7Y$afs)`y&T|&J&+G@0ua6xj$92uF2f7>GvO{{NiO0qT!k3JS^O1$W3jf=&)>j84|KLi8uTdOW2^jj6*uQ!r_+xqE3kaPi~jtU;hJXoS#Yn diff --git a/bin/com/z_PORTFOLIO/PortParameter.class b/bin/com/z_PORTFOLIO/PortParameter.class deleted file mode 100644 index 4f7292522cdcbb2773ebb27debd0e6aab70a5357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8246 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 WG2@eq&x;z&^CAh9@n;}#*#83BEnKAl diff --git a/bin/com/z_PORTFOLIO/PortRegister.class b/bin/com/z_PORTFOLIO/PortRegister.class deleted file mode 100644 index 8f17703a3f0dd571c1647b4d3cced7dc62f606f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6081 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 CO8l7s diff --git a/bin/com/z_PORTFOLIO/Problem.class b/bin/com/z_PORTFOLIO/Problem.class deleted file mode 100644 index 43d54a21e01f251c3e6d5134877322304497d3e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1767 zcmah}YjYY^7=8|rERYRpv1v%93F#$ei78%MFG;O!L$_i{hyk%_)w+R|Yy%6zl5zS6 z{N#+^obi+2`laJ&QmL1j{s70{q&{btKn=~v4ClOi&ig*^?Rn3ifB*gr!0WIS_ynfP zje7dw{q_7tQP1bH`Sg0Lu~jqc3IYPh9vHhux@OqbbbjlBS#|`JrgtxJDtFj4+p}F3 z5H|l=0kzR|ta_(jGHM-@N4mgR4`I!y^CX%Z_$W9n%dXOTq-|B}2GuhHqgO23a;^#_ zl1Dqt>KUyh5Ljtc%rN|TNyP+C2>6p)DFlI&Dn>9WrI-o@K`EV55kfeOIA#=_7KjW2 zSv8z(6|+bXvi)U?X$O)SEhDYYs2E3N4CgSf;5_k;DuRj&ND2gbxBm7RTqMnzq(e-&AL!1A>WyV9ul>Dh6tT6)7hV~uiHQ?Pmv z-g9><@>nP7ZSyPVmeFaqErWAF5|YPZs~?p>e5g>_{w?`GzH8L1is6`dymI|dj(5W- z;f{ijN$SIy4RBR#;x4hPrZYH{%+~I$1n~(6Gm$7XYP%f4r9=>)F^_Pf_p_H0k{X{& zc5yD_$?Pzd4>%M=*)z?1qwkrT()0^ysvm92Dis=?R+-(ER8xEGxhTg2bEKu8FV_fs za+oQFUzu~OFBgFoIwi#V`ibe0Fi&wk2w2#X_6UmRaxXv&N;55-^7||?! zC+KgE@5&k6#96$}+e?g?p79QrxJyZ9AY5sgIrv=Z3L}>p>Ufv&2XK}0N%;Q3B1RMl z1?Pm1_eBNo(Uy$vWmY7XM2MxHV3KjJ`0x!A*~85)Zts-8{gHP*H`a)YKhN2|fJw}| zvC)IH?Z+0whu9!;2n7^-9(3x+Xpg75_~_Xlrhb4Dc!YreF%P{mcMp# zO`EvJ2VFjjTxCBBG?bW{TjF~x@g6R-zR^#)&_x&bqg$>x-9?2}|B1?88lJE8bH21* K_ySc|Yx`ev=Xy&3 diff --git a/bin/com/z_PORTFOLIO/Quadratic.class b/bin/com/z_PORTFOLIO/Quadratic.class deleted file mode 100644 index 25ed9a24c64058e87480a102b1563097eb16c77f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmaJ=O>YuW6g`g_m=>mA2v*x7eozG}MP0bT&=7w~cC0{BQO39UuQEwZztZ7gMCO3?2BiS&l^<=5KVb*L79)V-SMTO;dtJ*M|0-h_< zl6G1^iN@9h)NHG6dZEClL&J!`L{VDijZU*_wkrlp1pLKT&1kF{ZRxE0LDjw^w*+R3 z!#fS=r3A+LakFEad1+hb7SqGgfAR}fU2e;I$7rNtc`uG2s39OQGu-zePsdSA3yiLt zcBauV9g1qS5X*X&cHcSA`%%myq+w2Adbmqp1|26577!M#AmEh)5(0Doqe$6qOPf`B znxq-DEUhXqR<@1W-Rs6?U!oDaRkqvGS{DdJW5t7m>P1r{IL|3oZf35oW-0|X@s?Yi zc8zK|Bk6sri%uO*f;-dPycr6ON5$1By(Cc(-SL<3KBMD;&bOx<{D?97dM^RvnBacDdc)ya!H7!SG~&?0&@$H;{p_!%MiA`b$* zZx3^!=a_l)=S}1Z`zc)xad_!}BBReF{Dr%I<;i?Q4BwH!52Ub*EWcgD&o0k&k4v8? zS#j)BWa?tZX`CUd$RmO<`%m!)na5d1W)a0XdTt^(p|TInCH65d#2$hyk0IV4H$il? WQv3@~35S*Xbx0{?pj4upwfGmh)4SsU diff --git a/bin/com/z_PORTFOLIO/RandomPopulation.class b/bin/com/z_PORTFOLIO/RandomPopulation.class deleted file mode 100644 index 05f0eb131d532f2df3f7ce53e8e8d5f97a0f5b1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcmZuwO>YuW6g`gtrVN81QmqBFtsi_;p{?K2)-F1SkQRRO)%s3rSTkf%OsT@6*rM#UA1d?|G^US+`W& zMu8zg%e#)vH-&BRUazU?4kzuj#imPJP_gLJQX|@qA^MsnG+JQsR}ME?!lg$m!r)b> zv&*f9=G7=(F5KA+l|2t(VWV?kJeD zZ8}zqgu7Ll9FI_N4-&Jq1<5-mis3d4%`(|P;HMYZ$tOQzLRuMMMOq!8a0F$DSOOQ{ zzC%3!0aK}^bZl{m)Bw>FbAikQiKUM)cX<5mz{gUAWDk$O>IF=1viBm{^oB>QXW;D*(dmR!r0_^C8; z!??r`;D<7vyEZr(f7m9cx##Bj^*PVIzkdJt31AZy1rdg&t~V%uK4>*R?Cmz|wPv~f zzN#R`ke%MB?NptFwc+}TEZIa+74$ht};|CkcP}ijiF;nYT`T9hBY8Tx^BC?F&Z3l zv1c6y2(N279ZT499X4bBk^PB0)~9D7ZiPW13xNUM>+jEY&U|2J2g)5rLJ_UC( z49+?rl8h`+YRF3-bw)5XnT*;U3Bg^z!N6*?^t~W9hGnxbD~JaSb2<4ac*u~M zj(dA#J3TH`6eyq^dD+r5 zcR`ghL7b{Ws}>^k0t>}4)MDur$)b@y#o|}$MX*fOK#ZzNH9@b2G?G}M&T62eZ-!Px zz%|ShmEk&Wg!C$@Bt3PG?0)eZlG!nCeW6BxmL_QP5-v5trO5J~3mnZC;+kY$;xfkl q`Z@CZhB-#D^c|1Ruz7|Tf5BSlEsDiU@JtAg(p;}Xudgr6Z2bYuvdNVI diff --git a/bin/com/z_PORTFOLIO/SelectedSet.class b/bin/com/z_PORTFOLIO/SelectedSet.class deleted file mode 100644 index 3be72627c747ddc13a6ca77bf47556fa60405b39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmZ9H&rZTX5XQf$K%rLoqjHdV@CF=g;!%tj6B3dJh$URjQZ~4zbWL46_*8l#@!$ja zP{!FpB4H0R`_26Jo7tb=uWta?Xu5C+tynLE_s8+*VbULkgHaI4M8-zWBWYX|2yL^xBT$m3@Xw5X1I3eB-4#x~y(kJDf}1)*9u{yzg1feH#xsHa7%(9I>+1V^q1% hb5P&<1i1!^-8C8?3_19>spK|3BMfY9_)9r;_6GO-~bH5PpW;cH8X&f>bIZ;0LA!p(BHmR1_hLeeI%S%}-+h*A|(Rd+v zGBNS0H%}xUjCxSw!5?7shnRRb@q;?sRz3=GllR@3d1s!PdFI{yy#4VLfJ=xeXd(3F zimTCwcjr^LGl^7EPen7!wh*%-CrXZ45ej6&krkt2L<@$MkEXIKBIhXZ5<<<9`n+At z7Q`ySJ8fE~bDbcCBMSsMUR)F^Bm^`l@DbXRrX_BbSF^&-7#u?AOcrxSVZpFXS8o_) zXW3jM3?!Q~?XNLLXk(93*%1lTvBVn3^oI`w>DHoIF&E25Ar?ufIEtWxE<#T;_^zLZ zW9TOM^TN4NC6R1dS|{pcb^x2L@=yih|t~K zRAV$6&SQi?7B8Kknme2jdjH25!Q;3WgGah#a!HinWfEG`j*+{6(Y$coixiaKA^fuXWbie+ zOSRHR5n%ZzH}Z?S{EZO)FxWOHsNxQ{nkRxyEqK7^>*TGqI9_j~(IT*c(Hb)$7`T8D z#%jSjF7n4NvF9U4%RjbVBUJs^k0+V$T8L2)2 XsdMTL1McCU{CoJ9cKE+i^Sb&MS&Z`S diff --git a/bin/com/z_PORTFOLIO/ThreeDeceptiveBiPolar.class b/bin/com/z_PORTFOLIO/ThreeDeceptiveBiPolar.class deleted file mode 100644 index 73ea8bc32f97980c99334f13ecbdbcbb3a14d418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1290 zcmb_c-A@xi5dRIm_TW533zY%|KPxQ?RYCkHA7Z7+C6zWnc$I5e%3*1n>y@al`fBu1 zO?)sukoaKKL~TsaccXuZiGPDQ+g89rd~%c7otc}Rnf?8C@9VEmp8;IJl!_)oFjH8I z+`E-Z&d$e^2_qSqU$KR_Au^)qSnJ}tl`7;+TZKY6v}&%Kk(`;&Mw01Ok#SUb2>!+d zM#?Uvb7GC)8ME@1GeK~L!V3f?R#*}mTsWXZMKhr-Vdce4c`YsMd6Tygyoo}_%q^I< zCGEOXaaODnp+C`BY2Q|(go7MdEIT4@IeAgytw%$9_8R#mYu#EZo4IH>uAv=16&-}` z#u__uI*y=|(2^C-R4ylEyGqCi$24@IM@9Ev0L?kJmCx!3pqHSoo4K+`E)#sASU9l* zV=XGG;V6!)I7T?U^UcURA}eeiCvcL`Tr};HV4uvfH$&La5JbO<(|r1!95+p8MMnr> zroc=y5VB#zGx_tI9N#^YKc33*tOXIAS8w0ebX$~DQ%SeU+Uq>_oL zS?*-6P_{Enwd6yucRM5@z%g)H7B^pa7YpAxwpv(=@JhV82R=f3%Ssb;o;}h@ZD?g( zuLa;B+Sp=lahPY`O!uKwQ+_!Rca16=cyq?5JW%KZycPH>=o=3-I2Qk($Fo$ysqw%o zZV6F2@sLOBV+pfJ-$?Lb2L>{a;~Vfv^=wtuf_j=gE}!xaLoc>wg0DH$RXz5EJR*7d zZ_v)KvIBndVStWcj5;wxek@WKZ0g2c>cJBV;3f6qHTB^=$8XY!DqJHqNa}C_Uoe7; z445C!F^XXZxCxuMgv(shjS8-?Pr+5$F5Fv8j9Ue%{0#Y*ge^S!W0SNsZHu|t9l@ES e7^@M2L0%=BF7NmoUUqXC+{LA9o6E^+)V1Fi_YQCX diff --git a/bin/com/z_PORTFOLIO/ThreeDeceptiveOverlapping.class b/bin/com/z_PORTFOLIO/ThreeDeceptiveOverlapping.class deleted file mode 100644 index aa625bd26830b86ec17f0a46ee28f9b47e7796e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1183 zcmaJ>&rcIk5dMbUcFVGWAO%DO{DEmfD8Cgd5(3n0QrQLw@nUq_K45X#Hp{jLE`-FR zCSLXCiNu3Z4@x}v2N?ZBO#BPzPB%)EK?zWL_8{qpnEX8>b}E2twxGr67E z-ouo!vX(HCx)EF3a)nqF8Ikv_qA-fWwat9qayAvngmc?w(Tv%qvl%ne+alvB2ogGL zljtcom$tkzGvpE-3xiS zN{NKF$X^N%;TEBNd}wiLVJWqyuP+(vODoCwR7zjI%Xn6E1vkT8^r_aWn1_9a&<8%6 zCBQdYV&N;rRy}Jm{t|x!10SKjW2Fun&q3cwgJ@)3s|274&1`Yo(84osrb)=oKM+(dD5s|a6N>BUWaIjPcK8ywiHq1{p#?NL1oixfV9m6z@<33Fw!=N3S zLV?%!X{KD@M5TyofxrQV%e-{r0Y)&yl+(BIC2l;?2|F!14N+2R0b4~!f%5A u6DYy>ZIf@SYKhrA9l_*HVyZ$RXR7cowcdQo2~V>>dy0MOnEmN;)XXmfH~GE* diff --git a/bin/com/z_PORTFOLIO/TrapK.class b/bin/com/z_PORTFOLIO/TrapK.class deleted file mode 100644 index afb0e9a51e47cf1a12b755fba8c39bdbb675b7a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1279 zcmaJ>U2{uO6kR*H$!*e0sfHlbS4oP-XO(_XAtr>BbTVVi;5Iqxw&_jg_NFsD8~=ls zdNLTwFyjaKAO3^~u}+dvQsd#=bM`*#?z7k0`~z(3=hKC`1y%M-t{K_0_!cEF3{n&{Ma)WksKku`xm_7r`)&nK(*ax+!!@W8t_KSzJNX z`ORLC_@6e!FS1aN93CuL4u@kwu&LDj0xD$nP#tLSZ+T*i!dNWEyj8hXuxf~_=1 zG!e=1(qCsY+(2CN*ef@2g7bvj!WAi?D7SHs`(-J%=uEW}{Y^(<1ZmQUBZCu^NsCg( zNxmjQigzEU=`(m)_Tvm!A)Mvu=MZXY!-Sapk#7!~R3qHBB_MPR{J>z7QvC_yF|1o# qGwQGFLEsmR-R-~d5fhsC8ZNFO^M?LED^Y5tZng29)CE^tsO&FV)dQvg diff --git a/bin/com/z_PORTFOLIO/UMDA.class b/bin/com/z_PORTFOLIO/UMDA.class deleted file mode 100644 index dfdb73111e8df16a6080bd20c0720490d4c9d1a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 994 zcma))eQ(lG6vm$mj6x}6tJ_e~iEqe@8#>>IF=4tTO%RAolKr(5xM4M=CD*bgekx7e zFfQ=}_@RvF(gqjCAJXKIdv4CJ&-0xA{`2z}fGt!Mgcw%3?x6hTu-W*qzt^Z4jq=C$ z@2UzS44K&*W4CJeU151g1BU2p%dxyS46FItC-c}W+osbmw>)7v{Ys(D5P9qNxQa01 z8Wx~3g!6@V91NO!a;q}p= z!^OVY@fmK{wA-ezVh34qL8$%mu@G-Y8ren%+}( zH^{n#b`B+K5}QA(B7=45`4+u*PB?~4C)OPa!5y#8zzjNit{)vOBwv^p#(jo`to$i> zz>uDed}n0YJuYG>kf*Fvw5_Vhp(KSwRcxTFU^7^EAh{{?=N=at9^o-XdP2M9(=Nr9 znz*Ve?M_)YE$|~ zmOh9ueZ!ziu^>uSp;HqfdVrqug>V>dERY!zsjB1=76)7aJN}V-- zj{ehhA_A^rk*EyUa6O<`X-d+Q=g1rszax>479$Qh}r%Np*zd} diff --git a/bin/com/z_PORTFOLIO/UniformSixBlocks.class b/bin/com/z_PORTFOLIO/UniformSixBlocks.class deleted file mode 100644 index 50c792d412a8ac7deb522397bfe5b77a8d0e4023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmaJId!zt zD9bV-!8v<<*Qg5DGJ1@f%l`wbSuL?IT7Atd7pgH_z+@O{!pvy-vpfYCF-3^B4fnBW z8Xi+QUn^9ixP;j-W(ZTGV1Ee;GRP9hVyO{g;#`D;ild?fawY?W9O>tOLCV(-`pK;bv!1?ef`Y%9YABrwh%{}xQ}>w!OUwpa3j z^ymo1h0H;KJ|ML$FUdzp|8=u(5F9%`kZDp*h7M1@XWnD_@Z_6v%s^?-EXQm>&k&>? zBd%e<|=j)A) z%}S$IZIrfc->X}%b;JczJJ!BcaxAx7YP5FjcAz66m>o^2uKQlgv3r8Vl5$nBBG3xO zEkS(E>)2^%IA=gdQZQLluKl#%YuWy$#S}rN=Cv(n%koutj)L*vrP>qB)kc+~;>v;v zUhVb+yP^Wu-XnOv@DIA`cGSM=^ev}ctfVoG3p%ob+$ie_&cH>?2vS`;SalpbEHGZE z7S~dk!zCTLGv*cbZXgd+ATC!`kXFaqg8cs~!9jCpbEo&7ZkT4P>HE-rA7vsJFb0C;w s)Fj_kGNqvXf-Yjj2)c&rQDt{%!?v`{jn6cvn|gezDebtaTLV<#FMM8{8UO$Q diff --git a/bin/com/z_PORTFOLIO/ZeroQuadratic.class b/bin/com/z_PORTFOLIO/ZeroQuadratic.class deleted file mode 100644 index 0b95a17ba2f150edceceac1d0616da2e7af19553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmaJ=O-~b16g{sq?LZm6Du@AU{ixajq2j_#4NX(qI51E?DhoDd+K%;MnIXfJg=@Da z{sdgPGwMPU7sj>GAK~6V-~#nbX#i{DBzNw8cka3G-1FXi`StM=fZNDwhzKO>-fs5k z!?nsrwOp~xN_N}vz4f-;@a;g>HK+n3JNAK{ZP{)!TdD0h^*}>R;6g9ZT=TtJ%h?r( z-IcBk76p`yu_d4uy@nHqf&m>G`UHk8={l?J-J0W9Z9)VRmRGl1TedI5bvLO7kLA8V z%Ie+eFN!&VAr|bl1E(wl*VzvtnSU^*+mHvc(Y9MTqa4RMjB6MZnC$I+TBqYYCItGM zPEcsIoRFrPF^ys@|Kn@;eCx*)k{YH3CVIPcrOG zeA8?Dbt)E)rFZGhhge(!cc(>pOB5Q9jH`Y|S$aVqo%w+HTLuy6e8)P;G6osz#|0R| zFju@g809+ze}~FSz#1qii?5KMO+Hh^dnE3tCsA}<9a%U;VmunUf%Nk+-m(`ZW^Wy0 zh*>%-%ry}6#g#l)=>%wG8u@12xJ3cA_(eGLdKRfnU1i92ckmPT}H8VOX-$qd@=ZB zV&bd5`9$J_Q6H4};2&W04>9p?aGrMKhlAMV-h0mJcYb~6cHjSe{RZF~ViKAd2KC~0 z^vT*%dO4d+r_^+GmD|Parp@^x*Lle?DqModaAr%ZXi-zM3ej|Ki|dXAKSQX|TV1k? zIg@WQ_~#7EaPBY&;m8Vu7%%3z3;`_)Bm@}RQ-;OwmA7-;&T8bs(3vXgnz^FchO5_& zqO)o2Fbt&{Go7q6#?VHnQrY22!?E}d`SpiSII33Os2KUOX2v2(8D|lc(8bW(nBWMf z;2gRcnhV@nFiq~(Du&faTt*MhOX&TFos44}RzX1@E-*+H%`Efu2176$kED(`tf68u z`f*9Z07J*oJJoV{f!hiOahV}d((D~hHaEt}2ocpk|Le8;yz$Tf{^349n-Rg7gi(g> z#-{4yQE&z049udXGRVduCk%c6V~oM)xR-;*x?xaBEJ@2?Xw5j9{^+h&s*f$;6l*Oq zbcIi8Jb)W?1y&Qw>8bI>L_D#SRaX*JNTyh}bsC?`u~IK~!lecSpq#XPba@3@bcsl7 zCMilMqtiF~1@cD{nxN3`_l&D(C0VHf(1v!>XkO@`ot)V$L@(rSOH!B-_uz~L#pfdX zjLv<8_HprcUxQ)&G|M}R3e0(Xt-SuaK0@c@u#!vep=bDI7l!m#B(}NYh$jj`@e{&t zt1pJ%6IAd@pFj)A52%rc)a4pNSjQ+dN|3{S==96O0>@)|{|tuL;&iQzdW*m=COl?B z_e0ikpD0|h+Jzj=&*;gJ8E9_rR#sI~NS diff --git a/bin/com/z_PORTFOLIO/ZeroThreeDeceptiveBiPolar.class b/bin/com/z_PORTFOLIO/ZeroThreeDeceptiveBiPolar.class deleted file mode 100644 index 154410affc3bb34a86e2b5f49689540fc9020a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1302 zcmb_cOHUI~6#g!qcFHh_AO*w<_&{3_s)G0^523WlB!xE6uwWz8_EH8*+YHl+_>P*m zF}hR}7sdsN3xXzUW1{Sh{ty#?gY`^X0gJlwCg%pAKjxD^SVI4-SKG+9r{;QA4G&I;8NvfZH4xEje2JR5{;pD+E8PcC)7-tX1kFtVZqSo`U66C&`WBX^-qQRddB@e ze>kGd_{WrRC^$Mr-At#mdW`5cIg!g9_nI)E15}#CN>ATHLT`_(YSKJ(GCHkY?;*V= zr3y0bwxUx>>V2NXvw2($XVf- z`+pu=JddM8&R5hDyyiyB9IcJSO=9}`J0CWpEA}|B28XGhD5_GY93_v%A-qBFi^62* zI)z$_V-FWc%n}GWLg)%wu!1gJ#UNHOiEEg{b?CT3o||}rTX>1vSjQc_rTCAyUxcf_ z1W6e#U=#f~Lx8p5IR?;2xvMDlEY49)EAlu`J^>fZc3~}0S*r*p(od28o>0J}Up6ys nNh%OGJ0mEwm-;KQ*+ZwvrlnzMgN~hCKG?yfWsA#^V${W-%2gSD diff --git a/bin/com/z_PORTFOLIO/ZeroThreeDeceptiveOverlapping.class b/bin/com/z_PORTFOLIO/ZeroThreeDeceptiveOverlapping.class deleted file mode 100644 index a6e57a7b272432685588b3ff8c091b1eea560bd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1195 zcmaJ>TTc@~6#j5=m6+0+O)A?!(-;zi+jc06rEQjNA9yh& zK58`H;lYF_5+98Epu`7%fYBdf;%~5?-Ij~RFv*!c=ggUJ&iT&leE;+H8-Pm)NoZgQ zqzfy-wS~Akn~170MGek#qmWoKIG^TeUNrSGSIgYUX~m+R&q@#(jxB3tEtu2t*`S(Q z=4n%clfhFDq{NLvD#uqCoY(ZcZr)%JeEuYZ7%pVE3j&&DNN8kei|KhjQ(8%JBcah2 zhK^Vvt>u!Mp<8y%DVj_ADnl?TYgZlx{y6o1%-Zk&|R^AAyTra|<{=*1}psjTHn zTwP>v`@;U%KAqL5kPH1dEn$G6eSb~Kn>@=68E0^op|PkLtDJlm#$g1%;+*=mVU11a z)bAhG_}K(Mh9nF!bk!GC>y(TO2r#fbiNfI0_c&qbJ&G{~hiP3I>hPjYDX}Pt&d@Sv zYU%s8wPLM#v(~)o_o=}nzH5r+W-HgYTnOl_8T%ly7 zsgoAnaxL#+izN(zjwf-@?G{MrYLV4MT9CeszK+2!aD61D0W!@_+xY}7q|4O+w4#kH zY8~2Xrp;^|q7Av;92F+SZ4`&x;zN;rM#m03JLtRKTj#iEd-m4Jd`FN7SrZK_wLTKd z_L7Wv+fEZv6kVsCcG_V8K`OT@qE=f}>J^Zi0#egZErHrZVxmJk;y{@;!<0myi67w` zPs9gNP{3f~2lyZUgb&s=Z39?{59hM?S!bWU*4{He|Lp$&a0`!QxCGiW`Q_-_7t_g^ zR4kc@C!=$^l}}k(VM>N1aB5Lo)uK7gT!<#;7xj!S!z<8MdnrC`<>zzyvVeO@dm|v? z0^VW6H0)6UDIAZaxlH7~7^eQDxIC|0DUHztniKhq zmP>1v;n-EDWWP361UeJ7NgQN8B+$UaLebV^hHdIAgm;CH;p1l3ST(XmEjJX2DQH87 zjCO&J+PH@}6`cqQ_!o40ESJ-r6diIC3eMrYjIMw5nzb#%Tu{-C3j*@0mMiMXR|0|X zL?m&jY6Uf<;1Vv&2njSDp2baDU(hWTR}dEP6*Ox_r_YITJVGSyM-Q&axGK!}B^K+I!G}eR!{AsHsGqg9%+h16P_2v4&R56?w1iKfDB~V8 zJ7iY@j~9(xR=0d$(R_20Gs)D<*tCKHj5uAw?m3Zb+Ce-}F@|wAnpP<2W|lNqi(|r6 zAE3emc&MTe{Ukq|FIpKkhf_hdDo(GH8qTvJ-5eecm(!R0Rvg<8g>xOPQTkn6m7YDQ zJ)Jvf+@j?|6K5|mzy~yQK2t&AG+Jm8UyerY5a3xkmN?7UUY~&3ys>E?Jt=OA@t~;WjZUSFT%W4l!J$& zP8iqQH~ow03?a#Vn~lIOiomt&j2y}S1=ZY&*bCEJc3G|{*L7FhwzT&t~#cA{t z;#E7i<2ZK6R?cdq+pQH-wtjGp(2A}0=aA&At8=-6Ego}#{GiLVk@w%6S~TQ zX>H7#n=NTN0InOwW zDGuQR*JO=dFu5v5;95_Ls>G_Q9NcT$0`Clrv56v#EZCVm5p C?zqeV diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d9c3c61 --- /dev/null +++ b/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + + g + g + 1.0-SNAPSHOT + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + + + **/*.java + + true + false + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + + + + + com.goldmansachs + gs-collections + 6.2.0 + + + + \ No newline at end of file diff --git a/src/com/a_SGA/Mutation.java b/src/com/a_SGA/Mutation.java deleted file mode 100644 index 1eedd97..0000000 --- a/src/com/a_SGA/Mutation.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.a_SGA; - -import com.z_PORTFOLIO.Individual; -import com.z_PORTFOLIO.PORTFOLIO; -import com.z_PORTFOLIO.Problem; - -class Mutation{ - private double pMutation; // Probability of mutation; - - public Mutation(double pMutation){this.pMutation = pMutation;} - - public double getPMutation(){return pMutation;} - - public void mutate(Individual[] newIndividuals){ - if(pMutation > 0) // Perform mutation only if pMutation > 0. - for(int i = 0; i < newIndividuals.length; i++) - for(int j = 0; j < Problem.n; j++) - if(PORTFOLIO.random.nextDouble() < pMutation){ // Perform mutation in every position with probability pMutation. - char allele = newIndividuals[i].getAllele(j); - if(allele == '0') - newIndividuals[i].setAllele(j, '1'); - else - newIndividuals[i].setAllele(j, '0'); - } - } -} \ No newline at end of file diff --git a/src/com/a_SGA/Crossover.java b/src/main/java/com/a_SGA/Crossover.java similarity index 93% rename from src/com/a_SGA/Crossover.java rename to src/main/java/com/a_SGA/Crossover.java index de69fb1..972e6fd 100644 --- a/src/com/a_SGA/Crossover.java +++ b/src/main/java/com/a_SGA/Crossover.java @@ -13,7 +13,7 @@ abstract class Crossover{ } class NPointCrossover extends Crossover{ - private int nCrossover; // Number of cross points. NOTE: nCrossover = 1, 2, ..., n-1 + private final int nCrossover; // Number of cross points. NOTE: nCrossover = 1, 2, ..., n-1 public NPointCrossover(double pCrossover, int nCrossover){ this.pCrossover = pCrossover; @@ -27,7 +27,7 @@ public Individual[] cross(Population selectedSet){ Individual indiv1 = selectedSet.getIndividualCopy(i); Individual indiv2 = selectedSet.getIndividualCopy(i+1); if(PORTFOLIO.random.nextDouble() < pCrossover){ // Perform NPointCrossover with probability pCrossover. - TreeSet crossPoints = new TreeSet(); + TreeSet crossPoints = new TreeSet<>(); do crossPoints.add(PORTFOLIO.random.nextInt(Problem.n)); // Choose exactly nCrossover cross points. while(crossPoints.size() < nCrossover); @@ -52,7 +52,7 @@ public Individual[] cross(Population selectedSet){ } class UniformCrossover extends Crossover{ - private double pSwap; + private final double pSwap; public UniformCrossover(double pCrossover, double pSwap){ this.pCrossover = pCrossover; diff --git a/src/main/java/com/a_SGA/Mutation.java b/src/main/java/com/a_SGA/Mutation.java new file mode 100644 index 0000000..6e2106c --- /dev/null +++ b/src/main/java/com/a_SGA/Mutation.java @@ -0,0 +1,26 @@ +package com.a_SGA; + +import com.z_PORTFOLIO.Individual; +import com.z_PORTFOLIO.PORTFOLIO; +import com.z_PORTFOLIO.Problem; + +class Mutation{ + private final double pMutation; // Probability of mutation; + + public Mutation(double pMutation){this.pMutation = pMutation;} + + public double getPMutation(){return pMutation;} + + public void mutate(Individual[] newIndividuals){ + if(pMutation > 0) // Perform mutation only if pMutation > 0. + for (Individual newIndividual : newIndividuals) + for (int j = 0; j < Problem.n; j++) + if (PORTFOLIO.random.nextDouble() < pMutation) { // Perform mutation in every position with probability pMutation. + char allele = newIndividual.getAllele(j); + if (allele == '0') + newIndividual.setAllele(j, '1'); + else + newIndividual.setAllele(j, '0'); + } + } +} \ No newline at end of file diff --git a/src/com/a_SGA/Parameter.java b/src/main/java/com/a_SGA/Parameter.java similarity index 90% rename from src/com/a_SGA/Parameter.java rename to src/main/java/com/a_SGA/Parameter.java index 012a243..dc55a12 100644 --- a/src/com/a_SGA/Parameter.java +++ b/src/main/java/com/a_SGA/Parameter.java @@ -1,13 +1,13 @@ package com.a_SGA; +import com.z_PORTFOLIO.Problem; + import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Scanner; -import com.z_PORTFOLIO.Problem; - public class Parameter{ @@ -81,12 +81,12 @@ private static void validateOptionName(String line, String option, int nLine){ if(option.length() >= line.length()) exitError("Line " + nLine + " --> Missing equal sign '='"); if(!validateName(option)) - exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + "'"); + exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + '\''); } private static boolean validateName(String name){ - for(int i = 0; i < optionNames.length; i++) - if(name.equals((String)optionNames[i])) + for (String optionName : optionNames) + if (name.equals((String) optionName)) return true; return false; } @@ -200,25 +200,25 @@ public static IReplacement initializeReplacement(int currentN){ public static String writeParameters(String indent){ String str = " Selection Method:"; if(selectionMethod == 1) - str += "\n" + indent + " Selection = Tournament Selection with replacement" + - "\n" + indent + " tourSize = " + tourSize + - "\n" + indent + " offspringSize = " + pOffspringSize; + str += '\n' + indent + " Selection = Tournament Selection with replacement" + + '\n' + indent + " tourSize = " + tourSize + + '\n' + indent + " offspringSize = " + pOffspringSize; if(selectionMethod == 2) - str += "\n" + indent + " Selection = Tournament Selection without replacement" + - "\n" + indent + " tourSize = " + tourSize + - "\n" + indent + " offspringSize = " + pOffspringSize; + str += '\n' + indent + " Selection = Tournament Selection without replacement" + + '\n' + indent + " tourSize = " + tourSize + + '\n' + indent + " offspringSize = " + pOffspringSize; if(selectionMethod == 3) - str += "\n" + indent + " Selection = Truncation" + - "\n" + indent + " offspringSize = " + pOffspringSize; + str += '\n' + indent + " Selection = Truncation" + + '\n' + indent + " offspringSize = " + pOffspringSize; str += "\n\n Operators:" + - "\n" + indent + "pCrossover = " + pCrossover + - "\n" + indent + "nCrossover = " + nCrossover + - "\n" + indent + "pMutation = " + pMutation + + '\n' + indent + "pCrossover = " + pCrossover + + '\n' + indent + "nCrossover = " + nCrossover + + '\n' + indent + "pMutation = " + pMutation + "\n\n Replacement Method:" + - "\n" + indent + "Replacement Type = " + replacementType ; + '\n' + indent + "Replacement Type = " + replacementType ; if(replacementType == 1) - str += "\n" + indent + " windowSize = " + windowSize; + str += '\n' + indent + " windowSize = " + windowSize; return str; } diff --git a/src/com/a_SGA/Replacement.java b/src/main/java/com/a_SGA/Replacement.java similarity index 82% rename from src/com/a_SGA/Replacement.java rename to src/main/java/com/a_SGA/Replacement.java index ff3ec2c..6128a67 100644 --- a/src/com/a_SGA/Replacement.java +++ b/src/main/java/com/a_SGA/Replacement.java @@ -12,7 +12,7 @@ abstract class IReplacement{ } class RestrictedReplacement extends IReplacement{ - private int windowSize; + private final int windowSize; public RestrictedReplacement(int wSize, int currentN){ int wS = currentN/20; @@ -24,25 +24,24 @@ public RestrictedReplacement(int wSize, int currentN){ public void replace(Population population, Individual[] newIndividuals){ int N = population.getN(); - for(int i = 0; i < newIndividuals.length; i++){ - Individual candidate = newIndividuals[i]; + for (Individual candidate : newIndividuals) { int bestPosition = -1; int bestDistance = Integer.MAX_VALUE; - for(int j = 1; j < windowSize; j++){ // Find within the window, the individual CLOSEST to the candidate. + for (int j = 1; j < windowSize; j++) { // Find within the window, the individual CLOSEST to the candidate. int picked = PORTFOLIO.random.nextInt(N); - Individual individual = population.getIndividual(picked); + Individual individual = population.getIndividual(picked); int distance = individual.distance(candidate); - if(distance < bestDistance){ + if (distance < bestDistance) { bestPosition = picked; bestDistance = distance; } } float candidateFit = candidate.computeFitness(); - if(candidateFit > population.getFitness(bestPosition)){ + if (candidateFit > population.getFitness(bestPosition)) { population.setIndividual(bestPosition, candidate, candidateFit); double bestFit = population.getBestFit(); - if(candidateFit > bestFit){ // The new individual is also the best. - population.setBestPos(bestPosition); // Update information about the best individual. + if (candidateFit > bestFit) { // The new individual is also the best. + population.setBestPos(bestPosition); // Update information about the best individual. population.setBestFit(candidateFit); } } @@ -56,7 +55,7 @@ class WorstReplacement extends IReplacement{ // Use this inner class to sort the current population, in ascending order of fitness. // BEGIN: Inner class 'PosFit' - class PosFit implements Comparable{ + static class PosFit implements Comparable{ int position; double fitness; @@ -79,17 +78,15 @@ public int compareTo(PosFit posFit){ } public String toString(){ - return "(" + position + ";" + fitness + ")"; + return "(" + position + ';' + fitness + ')'; } } // END: Inner class 'PosFit' - - private PosFit[] sortedPopulation; - + public WorstReplacement(){} // Default constructor public void replace(Population population, Individual[] newIndividuals){ int sortN = population.getN(); - sortedPopulation = new PosFit[sortN]; + PosFit[] sortedPopulation = new PosFit[sortN]; for(int i = 0; i < sortN; i++) sortedPopulation[i] = new PosFit(i, population.getFitness(i)); Arrays.sort(sortedPopulation); // Sort population in ascending order of fitness. diff --git a/src/com/a_SGA/SGASolver.java b/src/main/java/com/a_SGA/SGASolver.java similarity index 82% rename from src/com/a_SGA/SGASolver.java rename to src/main/java/com/a_SGA/SGASolver.java index d3e1563..7e100ba 100644 --- a/src/com/a_SGA/SGASolver.java +++ b/src/main/java/com/a_SGA/SGASolver.java @@ -17,10 +17,10 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public class SGASolver extends IEASolver{ - private Selection selection; // NOTE: Use Parameter.initializeSelector() to generate the chosen selector type. - private Crossover crossover; // NOTE: Use Parameter.initializeCrossover() to generate the chosen crossover type. - private Mutation mutation; // NOTE: Use Parameter.initializeMutation() to generate the chosen mutation type. - private IReplacement replacement; // NOTE: Use Parameter.initializeReplacement() to generate the chosen replacement type. + private final Selection selection; // NOTE: Use Parameter.initializeSelector() to generate the chosen selector type. + private final Crossover crossover; // NOTE: Use Parameter.initializeCrossover() to generate the chosen crossover type. + private final Mutation mutation; // NOTE: Use Parameter.initializeMutation() to generate the chosen mutation type. + private final IReplacement replacement; // NOTE: Use Parameter.initializeReplacement() to generate the chosen replacement type. public SGASolver(String paramFile, int currentN){ diff --git a/src/com/a_SGA/Selection.java b/src/main/java/com/a_SGA/Selection.java similarity index 95% rename from src/com/a_SGA/Selection.java rename to src/main/java/com/a_SGA/Selection.java index c830f73..9353509 100644 --- a/src/com/a_SGA/Selection.java +++ b/src/main/java/com/a_SGA/Selection.java @@ -1,11 +1,11 @@ package com.a_SGA; -import java.util.Arrays; - import com.z_PORTFOLIO.PORTFOLIO; import com.z_PORTFOLIO.Population; import com.z_PORTFOLIO.SelectedSet; +import java.util.Arrays; + abstract class Selection{ public int NS; // Selection Set size. NOTE: This is initialized and refreshed by Parameter. @@ -16,7 +16,7 @@ public Selection(){} // Default empty constructor. } class TourWithReplacement extends Selection{ - int tourSize; // Default: 2 (binary tournament). + final int tourSize; // Default: 2 (binary tournament). public TourWithReplacement(int NS, int tourSize){ this.NS = NS; @@ -52,7 +52,7 @@ public SelectedSet select(Population population){ class TourWithoutReplacement extends Selection{ - int tourSize; // Default binary tournament + final int tourSize; // Default binary tournament public TourWithoutReplacement(int NS, int tourSize){ this.NS = NS; @@ -99,7 +99,7 @@ private int tourSelect(Population population, SelectedSet selectedSet, int[] num return maxPos; } - private int[] shuffle(int n){ + private static int[] shuffle(int n){ int[] numbers = new int[n]; for(int i = 0; i < n; i++) numbers[i] = i; @@ -120,7 +120,7 @@ class Truncation extends Selection{ PosFit[] sortedPopulation; // Use this inner class to sort the current population, in ascending order of fitness. - class PosFit implements Comparable{ + static class PosFit implements Comparable{ int position; double fitness; @@ -143,7 +143,7 @@ public int compareTo(PosFit posFit){ } public String toString(){ - return "(" + position + ";" + fitness + ")"; + return "(" + position + ';' + fitness + ')'; } }// END: inner class PosFit. diff --git a/src/com/b_UMDA/Parameter.java b/src/main/java/com/b_UMDA/Parameter.java similarity index 88% rename from src/com/b_UMDA/Parameter.java rename to src/main/java/com/b_UMDA/Parameter.java index 8eb9922..15c25b6 100644 --- a/src/com/b_UMDA/Parameter.java +++ b/src/main/java/com/b_UMDA/Parameter.java @@ -1,13 +1,14 @@ package com.b_UMDA; +import com.z_PORTFOLIO.PortParameter; +import com.z_PORTFOLIO.Problem; + import java.io.BufferedReader; import java.io.DataInputStream; -import java.io.FileInputStream; +import java.io.InputStream; import java.io.InputStreamReader; import java.util.Scanner; -import com.z_PORTFOLIO.Problem; - public class Parameter{ @@ -17,7 +18,6 @@ public class Parameter{ // Selector parameters private static float pNS; // Size of selection set as a proportion of N. Default = 1 (The same value as N) - private static int NS; // Size of the selection set. Depends on the chosen selection method. private static int selectionMethod; // Selection method. Default = 1 (Tournament selection) private static int tourSize; // Size of tournament. Use only with Tournament Selection (selection = 1 or 2) private static float tau; // Proportion of truncated population. Use only with Truncation (selectionMethod = 3) @@ -43,7 +43,7 @@ public class Parameter{ public static void initializeParameters(String parameterFile){ try{ // Open the file to be read - FileInputStream fstream = new FileInputStream(parameterFile); + InputStream fstream = PortParameter.stream(parameterFile); // Create an object of DataInputStream DataInputStream in = new DataInputStream(fstream); BufferedReader buff = new BufferedReader(new InputStreamReader(in)); @@ -74,12 +74,12 @@ private static void validateOptionName(String line, String option, int nLine){ if(option.length() >= line.length()) exitError("Line " + nLine + " --> Missing equal sign '='"); if(!validateName(option)) - exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + "'"); + exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + '\''); } private static boolean validateName(String name){ - for(int i = 0; i < optionNames.length; i++) - if(name.equals((String)optionNames[i])) + for (String optionName : optionNames) + if (name.equals((String) optionName)) return true; return false; } @@ -142,7 +142,8 @@ private static void validateOptionValue(String optionName,String optionValue, in public static Selection initializeSelection(int N){ switch(selectionMethod){ - case 1: NS = (int)(pNS*N); + case 1: + int NS = (int) (pNS * N); return new TourWithReplacement(NS, tourSize); case 2: NS = (int)(pNS*N); return new TourWithoutReplacement(NS, tourSize); @@ -175,21 +176,21 @@ public static IReplacement initializeReplacement(int currentN){ public static String writeParameters(String indent){ String str = " Selection Method:"; if(selectionMethod == 1) - str += "\n" + indent + " Selection = Tournament Selection with replacement" + - "\n" + indent + " pNS = " + pNS + - "\n" + indent + " tourSize = " + tourSize; + str += '\n' + indent + " Selection = Tournament Selection with replacement" + + '\n' + indent + " pNS = " + pNS + + '\n' + indent + " tourSize = " + tourSize; if(selectionMethod == 2) - str += "\n" + indent + " Selection = Tournament Selection without replacement" + - "\n" + indent + " pNS = " + pNS + - "\n" + indent + " tourSize = " + tourSize; + str += '\n' + indent + " Selection = Tournament Selection without replacement" + + '\n' + indent + " pNS = " + pNS + + '\n' + indent + " tourSize = " + tourSize; if(selectionMethod == 3) - str += "\n" + indent + " Selection = Truncation" + - "\n" + indent + " tau = " + tau; + str += '\n' + indent + " Selection = Truncation" + + '\n' + indent + " tau = " + tau; str += "\n\n" + " Replacement Method:" + - "\n" + indent + "Replacement Type = " + replacementType + - "\n" + indent + " pOffspringSize = " + pOffspringSize; + '\n' + indent + "Replacement Type = " + replacementType + + '\n' + indent + " pOffspringSize = " + pOffspringSize; if(replacementType == 1) - str += "\n" + indent + " windowSize = " + windowSize; + str += '\n' + indent + " windowSize = " + windowSize; return str; } diff --git a/src/com/b_UMDA/Replacement.java b/src/main/java/com/b_UMDA/Replacement.java similarity index 63% rename from src/com/b_UMDA/Replacement.java rename to src/main/java/com/b_UMDA/Replacement.java index b69a8f5..ec9e26a 100644 --- a/src/com/b_UMDA/Replacement.java +++ b/src/main/java/com/b_UMDA/Replacement.java @@ -1,18 +1,19 @@ package com.b_UMDA; -import java.util.Arrays; - -import com.z_PORTFOLIO.PORTFOLIO; import com.z_PORTFOLIO.Individual; +import com.z_PORTFOLIO.PORTFOLIO; import com.z_PORTFOLIO.Population; +import java.util.Arrays; +import java.util.List; + abstract class IReplacement{ - abstract void replace(Population population, Individual[] newIndividuals); + abstract void replace(Population population, List newIndividuals); } class RestrictedReplacement extends IReplacement{ - private int windowSize; + private final int windowSize; public RestrictedReplacement(int wSize, int currentN){ int wS = currentN/20; @@ -22,27 +23,26 @@ public RestrictedReplacement(int wSize, int currentN){ this.windowSize = wSize; } - public void replace(Population population, Individual[] newIndividuals){ + public void replace(Population population, List newIndividuals){ int N = population.getN(); - for(int i = 0; i < newIndividuals.length; i++){ - Individual candidate = newIndividuals[i]; + for (Individual candidate : newIndividuals) { int bestPosition = -1; int bestDistance = Integer.MAX_VALUE; - for(int j = 1; j < windowSize; j++){ // Find within the window, the individual CLOSEST to the candidate. + for (int j = 1; j < windowSize; j++) { // Find within the window, the individual CLOSEST to the candidate. int picked = PORTFOLIO.random.nextInt(N); - Individual individual = population.getIndividual(picked); + Individual individual = population.getIndividual(picked); int distance = individual.distance(candidate); - if(distance < bestDistance){ + if (distance < bestDistance) { bestPosition = picked; bestDistance = distance; } } float candidateFit = candidate.computeFitness(); - if(candidateFit > population.getFitness(bestPosition)){ + if (candidateFit > population.getFitness(bestPosition)) { population.setIndividual(bestPosition, candidate, candidateFit); double bestFit = population.getBestFit(); - if(candidateFit > bestFit){ // The new individual is also the best. - population.setBestPos(bestPosition); // Update information about the best individual. + if (candidateFit > bestFit) { // The new individual is also the best. + population.setBestPos(bestPosition); // Update information about the best individual. population.setBestFit(candidateFit); } } @@ -56,7 +56,7 @@ class WorstReplacement extends IReplacement{ // Use this inner class to sort the current population, in ascending order of fitness. // BEGIN: Inner class 'PosFit' - class PosFit implements Comparable{ + static class PosFit implements Comparable{ int position; double fitness; @@ -71,32 +71,33 @@ class PosFit implements Comparable{ public double getFitness(){return this.fitness;} public int compareTo(PosFit posFit){ - if (this.fitness < posFit.fitness) + final double pf = posFit.fitness; + final double f = this.fitness; + if (f < pf) return -1; - if (this.fitness > posFit.fitness) + if (f > pf) return 1; return 0; } public String toString(){ - return "(" + position + ";" + fitness + ")"; + return "(" + position + ';' + fitness + ')'; } } // END: Inner class 'PosFit' - - private PosFit[] sortedPopulation; - + public WorstReplacement(){} // Default constructor - public void replace(Population population, Individual[] newIndividuals){ + public void replace(Population population, List newIndividuals){ int sortN = population.getN(); - sortedPopulation = new PosFit[sortN]; + PosFit[] sortedPopulation = new PosFit[sortN]; for(int i = 0; i < sortN; i++) sortedPopulation[i] = new PosFit(i, population.getFitness(i)); Arrays.sort(sortedPopulation); // Sort population in ascending order of fitness. - for(int i = 0; i < newIndividuals.length; i++){ + for(int i = 0; i < newIndividuals.size(); i++){ int newPos = sortedPopulation[i].getPosition(); - double newFit = newIndividuals[i].computeFitness(); - population.setIndividual(newPos, newIndividuals[i], newFit); + final Individual nii = newIndividuals.get(i); + double newFit = nii.computeFitness(); + population.setIndividual(newPos, nii, newFit); double bestFit = population.getBestFit(); if(newFit > bestFit){ // The new individual is also the best. population.setBestPos(newPos); // Update information about the best individual. @@ -109,10 +110,11 @@ public void replace(Population population, Individual[] newIndividuals){ class FullReplacement extends IReplacement{ - public void replace(Population population, Individual[] newIndividuals){ - for(int i = 0; i < newIndividuals.length; i++){ - double newFit = newIndividuals[i].computeFitness(); - population.setIndividual(i, newIndividuals[i], newFit); + public void replace(Population population, List newIndividuals){ + for(int i = 0; i < newIndividuals.size(); i++){ + final Individual nii = newIndividuals.get(i); + double newFit = nii.computeFitness(); + population.setIndividual(i, nii, newFit); double bestFit = population.getBestFit(); if(newFit > bestFit){ // The new individual is also the best. population.setBestPos(i); // Update information about the best individual. diff --git a/src/com/b_UMDA/Selection.java b/src/main/java/com/b_UMDA/Selection.java similarity index 90% rename from src/com/b_UMDA/Selection.java rename to src/main/java/com/b_UMDA/Selection.java index 7f2b987..e3b8d60 100644 --- a/src/com/b_UMDA/Selection.java +++ b/src/main/java/com/b_UMDA/Selection.java @@ -1,11 +1,11 @@ package com.b_UMDA; -import java.util.Arrays; - import com.z_PORTFOLIO.PORTFOLIO; import com.z_PORTFOLIO.Population; import com.z_PORTFOLIO.SelectedSet; +import java.util.Arrays; + abstract class Selection{ public int NS; // Selection Set size. NOTE: This is initialized and refreshed by Parameter. @@ -16,7 +16,7 @@ public Selection(){} // Default empty constructor. } class TourWithReplacement extends Selection{ - int tourSize; // Default: 2 (binary tournament). + final int tourSize; // Default: 2 (binary tournament). public TourWithReplacement(int NS, int tourSize){ this.NS = NS; @@ -52,7 +52,7 @@ public SelectedSet select(Population population){ class TourWithoutReplacement extends Selection{ - int tourSize; // Default binary tournament + final int tourSize; // Default binary tournament public TourWithoutReplacement(int NS, int tourSize){ this.NS = NS; @@ -99,7 +99,7 @@ private int tourSelect(Population population, SelectedSet selectedSet, int[] num return maxPos; } - private int[] shuffle(int n){ + private static int[] shuffle(int n){ int[] numbers = new int[n]; for(int i = 0; i < n; i++) numbers[i] = i; @@ -120,8 +120,8 @@ class Truncation extends Selection{ PosFit[] sortedPopulation; // Use this inner class to sort the current population, in ascending order of fitness. - class PosFit implements Comparable{ - int position; + static class PosFit implements Comparable{ + final int position; double fitness; PosFit(int position, double fitness){ @@ -131,19 +131,21 @@ class PosFit implements Comparable{ public int getPosition(){return this.position;} public double getFitness(){return this.fitness;} - public void setPosition(int position){this.position = position;} + //public void setPosition(int position){this.position = position;} public void setFitness(double fitness){this.fitness = fitness;} - public int compareTo(PosFit posFit){ - if (this.fitness < posFit.fitness) + public int compareTo(final PosFit posFit){ + final double f = this.fitness; + final double pf = posFit.fitness; + if (f < pf) return -1; - if (this.fitness > posFit.fitness) + if (f > pf) return 1; return 0; } public String toString(){ - return "(" + position + ";" + fitness + ")"; + return "(" + position + ';' + fitness + ')'; } }// END: inner class PosFit. diff --git a/src/com/b_UMDA/UMDASolver.java b/src/main/java/com/b_UMDA/UMDASolver.java similarity index 74% rename from src/com/b_UMDA/UMDASolver.java rename to src/main/java/com/b_UMDA/UMDASolver.java index 507c0da..54cf0e2 100644 --- a/src/com/b_UMDA/UMDASolver.java +++ b/src/main/java/com/b_UMDA/UMDASolver.java @@ -1,9 +1,12 @@ package com.b_UMDA; -import com.z_PORTFOLIO.Individual; import com.z_PORTFOLIO.IEASolver; +import com.z_PORTFOLIO.Individual; import com.z_PORTFOLIO.SelectedSet; +import java.util.ArrayList; +import java.util.List; + ///////////////////////////////////////////////////////////////////////////////////////////////// // Each concrete Solver inherits the following fields from the abstract class IEASolver: // @@ -17,9 +20,9 @@ /////////////////////////////////////////////////////////////////////////////////////////////// public class UMDASolver extends IEASolver{ - private Selection selection; // NOTE: Use Parameter.initializeSelector() to generate the chosen selector type. - private UniModel uniModel; // NOTE: Use initializeMPModel() to initialize the chosen bayesian network generator. - private IReplacement replacement; // NOTE: Use Parameter.initializeReplacement() to generate the chosen replacement type. + private final Selection selection; // NOTE: Use Parameter.initializeSelector() to generate the chosen selector type. + private final UniModel uniModel; // NOTE: Use initializeMPModel() to initialize the chosen bayesian network generator. + private final IReplacement replacement; // NOTE: Use Parameter.initializeReplacement() to generate the chosen replacement type. public UMDASolver(String paramFile, int currentN){ @@ -29,14 +32,15 @@ public UMDASolver(String paramFile, int currentN){ uniModel = Parameter.initializeUniModel(N); replacement = Parameter.initializeReplacement(currentN); } - + + final List ind = new ArrayList(); public void nextGeneration(){ currentGeneration++; SelectedSet selectedSet = selection.select(currentPopulation); // 1. SELECTION. NOTE: selectedSet computes its own unifrequencies. - Individual[] newIndividuals = uniModel.sampleNewIndividuals(selectedSet); // 2. SAMPLING with UniFrequencies. + List newIndividuals = uniModel.sampleNewIndividuals(selectedSet, ind); // 2. SAMPLING with UniFrequencies. replacement.replace(currentPopulation, newIndividuals); // 3. REPLACEMENT. NOTE: This function is responsible for updating the information about the best individual. - updateFitnessCalls(newIndividuals.length); // NOTE: replace() computes the fitness only of the newIndividuals. + updateFitnessCalls(newIndividuals.size()); // NOTE: replace() computes the fitness only of the newIndividuals. currentPopulation.computeUnivariateFrequencies(); avgFitness = currentPopulation.computeAvgFitness(); // NOTE: Every nextGeneration() must compute the average fitness of its current Population! // No need to update information about the best individual. Replacement is responsible for that. diff --git a/src/com/b_UMDA/UniModel.java b/src/main/java/com/b_UMDA/UniModel.java similarity index 57% rename from src/com/b_UMDA/UniModel.java rename to src/main/java/com/b_UMDA/UniModel.java index 819d5f8..a5d1423 100644 --- a/src/com/b_UMDA/UniModel.java +++ b/src/main/java/com/b_UMDA/UniModel.java @@ -5,23 +5,24 @@ import com.z_PORTFOLIO.Problem; import com.z_PORTFOLIO.SelectedSet; +import java.util.List; + class UniModel{ - public int offspringSize; + public final int offspringSize; public UniModel(int offSize){offspringSize = offSize;} - public Individual[] sampleNewIndividuals(SelectedSet selectedSet){ - Individual[] newIndividuals = new Individual[offspringSize]; + public List sampleNewIndividuals(SelectedSet selectedSet, List newIndividuals){ + newIndividuals.clear(); int[] frequencies = selectedSet.getUniFrequencies(); int NS = selectedSet.getN(); for(int i = 0; i < offspringSize; i++){ - newIndividuals[i] = new Individual(); + Individual x = new Individual(); + newIndividuals.add( x ); + final char[] data = x.getIndividual(); for(int j = 0; j < Problem.n; j++){ double probJ = ((double)(frequencies[j]))/NS; - if (PORTFOLIO.random.nextDouble() < probJ) - newIndividuals[i].setAllele(j, '1'); - else - newIndividuals[i].setAllele(j, '0'); + data[j] = (PORTFOLIO.random.nextDouble() < probJ) ? '1' : '0';; } } return newIndividuals; diff --git a/src/com/c_ECGA/Cache.java b/src/main/java/com/c_ECGA/Cache.java similarity index 87% rename from src/com/c_ECGA/Cache.java rename to src/main/java/com/c_ECGA/Cache.java index b1eae48..1a01665 100644 --- a/src/com/c_ECGA/Cache.java +++ b/src/main/java/com/c_ECGA/Cache.java @@ -2,15 +2,18 @@ import com.z_PORTFOLIO.Problem; +import java.util.Arrays; + class Cache{ public int maxSize; public int nMergedSets; - public Subset[] mergedSets; // NOTE: Try implementing subclass 'MergedSet' instead. - public int[] idA, idB; - public double[] compressions; + public final Subset[] mergedSets; // NOTE: Try implementing subclass 'MergedSet' instead. + public final int[] idA; + public final int[] idB; + public final double[] compressions; - private int[] emptyPositions; + private final int[] emptyPositions; private int nEmptyPositions; public Cache(){ @@ -90,7 +93,7 @@ public void compact(){ maxSize = newMaxSize; } - public String toString(){return "Sets: " + mergedSets + "\nidA: " + idA + "\nidB: " + idB;} + public String toString(){return "Sets: " + Arrays.toString(mergedSets) + "\nidA: " + Arrays.toString(idA) + "\nidB: " + Arrays.toString(idB);} } diff --git a/src/com/c_ECGA/ECGASolver.java b/src/main/java/com/c_ECGA/ECGASolver.java similarity index 86% rename from src/com/c_ECGA/ECGASolver.java rename to src/main/java/com/c_ECGA/ECGASolver.java index 8551747..8050325 100644 --- a/src/com/c_ECGA/ECGASolver.java +++ b/src/main/java/com/c_ECGA/ECGASolver.java @@ -18,9 +18,9 @@ public class ECGASolver extends IEASolver{ - private Selection selection; // NOTE: Use Parameter.initializeSelector() to generate the chosen selector type. - private MPModel mPModel; // NOTE: Use initializeMPModel() to initialize the chosen bayesian network generator. - private IReplacement replacement; // NOTE: Use Parameter.initializeReplacement() to generate the chosen replacement type. + private final Selection selection; // NOTE: Use Parameter.initializeSelector() to generate the chosen selector type. + private final MPModel mPModel; // NOTE: Use initializeMPModel() to initialize the chosen bayesian network generator. + private final IReplacement replacement; // NOTE: Use Parameter.initializeReplacement() to generate the chosen replacement type. public ECGASolver(String paramFile, int currentN){ diff --git a/src/com/c_ECGA/MPModel.java b/src/main/java/com/c_ECGA/MPModel.java similarity index 95% rename from src/com/c_ECGA/MPModel.java rename to src/main/java/com/c_ECGA/MPModel.java index 7f70163..f151a3a 100644 --- a/src/com/c_ECGA/MPModel.java +++ b/src/main/java/com/c_ECGA/MPModel.java @@ -5,12 +5,14 @@ import com.z_PORTFOLIO.Problem; import com.z_PORTFOLIO.SelectedSet; +import java.util.Arrays; + class MPModel{ - public int offspringSize; // NOTE: The MPM is responsible for sampling new individuals. + public final int offspringSize; // NOTE: The MPM is responsible for sampling new individuals. private Subset[] subsets; - private int maxSubsets; + private final int maxSubsets; private int nSubsets; private Cache cache; @@ -106,8 +108,7 @@ public Individual[] sampleNewIndividuals(SelectedSet selectedSet){ for(int j = 0; j < offspringSize; j++){ int pick = PORTFOLIO.random.nextInt(offspringSize); // NOTE: Implement makeShuffle(offspringSize) to ensure non-replacement Individual pickIndiv = selectedSet.getIndividual(pick); - for(int l = 0; l < xList.length; l++){ - int locus = xList[l]; + for (int locus : xList) { char allele = pickIndiv.getAllele(locus); newIndividuals[j].setAllele(locus, allele); } @@ -117,7 +118,7 @@ public Individual[] sampleNewIndividuals(SelectedSet selectedSet){ } public String toString(){ - return "Subsets: " + subsets + "\nCache: " + cache; + return "Subsets: " + Arrays.toString(subsets) + "\nCache: " + cache; } } diff --git a/src/com/c_ECGA/Parameter.java b/src/main/java/com/c_ECGA/Parameter.java similarity index 89% rename from src/com/c_ECGA/Parameter.java rename to src/main/java/com/c_ECGA/Parameter.java index 70609fa..892d2c5 100644 --- a/src/com/c_ECGA/Parameter.java +++ b/src/main/java/com/c_ECGA/Parameter.java @@ -1,12 +1,14 @@ package com.c_ECGA; +import com.z_PORTFOLIO.Problem; + import java.io.BufferedReader; import java.io.DataInputStream; -import java.io.FileInputStream; +import java.io.InputStream; import java.io.InputStreamReader; import java.util.Scanner; -import com.z_PORTFOLIO.Problem; +import static com.z_PORTFOLIO.PortParameter.stream; public class Parameter{ @@ -19,7 +21,6 @@ public class Parameter{ // Selector parameters private static float pNS; // Size of selection set as a proportion of N. Default = 1 (The same value as N) - private static int NS; // Size of the selection set. Depends on the chosen selection method. private static int selectionMethod; // Selection method. Default = 1 (Tournament selection) private static int tourSize; // Size of tournament. Use only with Tournament Selection (selection = 1 or 2) private static float tau; // Proportion of truncated population. Use only with Truncation (selectionMethod = 3) @@ -49,7 +50,7 @@ public class Parameter{ public static void initializeParameters(String parameterFile){ try{ // Open the file to be read - FileInputStream fstream = new FileInputStream(parameterFile); + InputStream fstream = stream(parameterFile); // Create an object of DataInputStream DataInputStream in = new DataInputStream(fstream); BufferedReader buff = new BufferedReader(new InputStreamReader(in)); @@ -80,12 +81,12 @@ private static void validateOptionName(String line, String option, int nLine){ if(option.length() >= line.length()) exitError("Line " + nLine + " --> Missing equal sign '='"); if(!validateName(option)) - exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + "'"); + exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + '\''); } private static boolean validateName(String name){ - for(int i = 0; i < optionNames.length; i++) - if(name.equals((String)optionNames[i])) + for (String optionName : optionNames) + if (name.equals((String) optionName)) return true; return false; } @@ -155,7 +156,8 @@ private static void validateOptionValue(String optionName,String optionValue, in public static Selection initializeSelection(int N){ switch(selectionMethod){ - case 1: NS = (int)(pNS*N); + case 1: + int NS = (int) (pNS * N); return new TourWithReplacement(NS, tourSize); case 2: NS = (int)(pNS*N); return new TourWithoutReplacement(NS, tourSize); @@ -195,21 +197,21 @@ public static IReplacement initializeReplacement(int currentN){ public static String writeParameters(String indent){ String str = " Selection Method:"; if(selectionMethod == 1) - str += "\n" + indent + " Selection = Tournament Selection with replacement" + - "\n" + indent + " pNS = " + pNS + - "\n" + indent + " tourSize = " + tourSize; + str += '\n' + indent + " Selection = Tournament Selection with replacement" + + '\n' + indent + " pNS = " + pNS + + '\n' + indent + " tourSize = " + tourSize; if(selectionMethod == 2) - str += "\n" + indent + " Selection = Tournament Selection without replacement" + - "\n" + indent + " pNS = " + pNS + - "\n" + indent + " tourSize = " + tourSize; + str += '\n' + indent + " Selection = Tournament Selection without replacement" + + '\n' + indent + " pNS = " + pNS + + '\n' + indent + " tourSize = " + tourSize; if(selectionMethod == 3) - str += "\n" + indent + " Selection = Truncation" + - "\n" + indent + " tau = " + tau; + str += '\n' + indent + " Selection = Truncation" + + '\n' + indent + " tau = " + tau; str += "\n\n" + " Replacement Method:" + - "\n" + indent + "Replacement Type = " + replacementType + - "\n" + indent + " pOffspringSize = " + pOffspringSize; + '\n' + indent + "Replacement Type = " + replacementType + + '\n' + indent + " pOffspringSize = " + pOffspringSize; if(replacementType == 1) - str += "\n" + indent + " windowSize = " + windowSize; + str += '\n' + indent + " windowSize = " + windowSize; return str; } diff --git a/src/com/c_ECGA/Replacement.java b/src/main/java/com/c_ECGA/Replacement.java similarity index 72% rename from src/com/c_ECGA/Replacement.java rename to src/main/java/com/c_ECGA/Replacement.java index ab81dbd..e517505 100644 --- a/src/com/c_ECGA/Replacement.java +++ b/src/main/java/com/c_ECGA/Replacement.java @@ -1,18 +1,18 @@ package com.c_ECGA; -import java.util.Arrays; - -import com.z_PORTFOLIO.PORTFOLIO; import com.z_PORTFOLIO.Individual; +import com.z_PORTFOLIO.PORTFOLIO; import com.z_PORTFOLIO.Population; +import java.util.Arrays; + -abstract class IReplacement{ - abstract void replace(Population population, Individual[] newIndividuals); +interface IReplacement{ + void replace(Population population, Individual[] newIndividuals); } -class RestrictedReplacement extends IReplacement{ - private int windowSize; +class RestrictedReplacement implements IReplacement{ + private final int windowSize; public RestrictedReplacement(int wSize, int currentN){ int wS = currentN/20; @@ -24,25 +24,24 @@ public RestrictedReplacement(int wSize, int currentN){ public void replace(Population population, Individual[] newIndividuals){ int N = population.getN(); - for(int i = 0; i < newIndividuals.length; i++){ - Individual candidate = newIndividuals[i]; + for (Individual candidate : newIndividuals) { int bestPosition = -1; int bestDistance = Integer.MAX_VALUE; - for(int j = 1; j < windowSize; j++){ // Find within the window, the individual CLOSEST to the candidate. + for (int j = 1; j < windowSize; j++) { // Find within the window, the individual CLOSEST to the candidate. int picked = PORTFOLIO.random.nextInt(N); - Individual individual = population.getIndividual(picked); + Individual individual = population.getIndividual(picked); int distance = individual.distance(candidate); - if(distance < bestDistance){ + if (distance < bestDistance) { bestPosition = picked; bestDistance = distance; } } float candidateFit = candidate.computeFitness(); - if(candidateFit > population.getFitness(bestPosition)){ + if (candidateFit > population.getFitness(bestPosition)) { population.setIndividual(bestPosition, candidate, candidateFit); double bestFit = population.getBestFit(); - if(candidateFit > bestFit){ // The new individual is also the best. - population.setBestPos(bestPosition); // Update information about the best individual. + if (candidateFit > bestFit) { // The new individual is also the best. + population.setBestPos(bestPosition); // Update information about the best individual. population.setBestFit(candidateFit); } } @@ -52,21 +51,19 @@ public void replace(Population population, Individual[] newIndividuals){ -class WorstReplacement extends IReplacement{ +class WorstReplacement implements IReplacement{ // Use this inner class to sort the current population, in ascending order of fitness. // BEGIN: Inner class 'PosFit' - class PosFit implements Comparable{ - int position; - double fitness; + static class PosFit implements Comparable{ + public final int position; + public final double fitness; PosFit(int position, double fitness){ this.position = position; this.fitness = fitness; } - public void setPosition(int position){this.position = position;} - public void setFitness(double fitness){this.fitness = fitness;} public int getPosition(){return this.position;} public double getFitness(){return this.fitness;} @@ -79,17 +76,15 @@ public int compareTo(PosFit posFit){ } public String toString(){ - return "(" + position + ";" + fitness + ")"; + return "(" + position + ';' + fitness + ')'; } } // END: Inner class 'PosFit' - - private PosFit[] sortedPopulation; - + public WorstReplacement(){} // Default constructor public void replace(Population population, Individual[] newIndividuals){ int sortN = population.getN(); - sortedPopulation = new PosFit[sortN]; + PosFit[] sortedPopulation = new PosFit[sortN]; for(int i = 0; i < sortN; i++) sortedPopulation[i] = new PosFit(i, population.getFitness(i)); Arrays.sort(sortedPopulation); // Sort population in ascending order of fitness. @@ -107,7 +102,7 @@ public void replace(Population population, Individual[] newIndividuals){ }// END: Class WorstReplacement -class FullReplacement extends IReplacement{ +class FullReplacement implements IReplacement{ public void replace(Population population, Individual[] newIndividuals){ for(int i = 0; i < newIndividuals.length; i++){ diff --git a/src/com/c_ECGA/Selection.java b/src/main/java/com/c_ECGA/Selection.java similarity index 95% rename from src/com/c_ECGA/Selection.java rename to src/main/java/com/c_ECGA/Selection.java index 3c4be00..6fe4f6b 100644 --- a/src/com/c_ECGA/Selection.java +++ b/src/main/java/com/c_ECGA/Selection.java @@ -16,7 +16,7 @@ public Selection(){} // Default empty constructor. } class TourWithReplacement extends Selection{ - int tourSize; // Default: 2 (binary tournament). + final int tourSize; // Default: 2 (binary tournament). public TourWithReplacement(int NS, int tourSize){ this.NS = NS; @@ -52,7 +52,7 @@ public SelectedSet select(Population population){ class TourWithoutReplacement extends Selection{ - int tourSize; // Default binary tournament + final int tourSize; // Default binary tournament public TourWithoutReplacement(int NS, int tourSize){ this.NS = NS; @@ -99,7 +99,7 @@ private int tourSelect(Population population, SelectedSet selectedSet, int[] num return maxPos; } - private int[] shuffle(int n){ + private static int[] shuffle(int n){ int[] numbers = new int[n]; for(int i = 0; i < n; i++) numbers[i] = i; @@ -120,7 +120,7 @@ class Truncation extends Selection{ PosFit[] sortedPopulation; // Use this inner class to sort the current population, in ascending order of fitness. - class PosFit implements Comparable{ + static class PosFit implements Comparable{ int position; double fitness; @@ -143,7 +143,7 @@ public int compareTo(PosFit posFit){ } public String toString(){ - return "(" + position + ";" + fitness + ")"; + return "(" + position + ';' + fitness + ')'; } }// END: inner class PosFit. diff --git a/src/com/c_ECGA/Subset.java b/src/main/java/com/c_ECGA/Subset.java similarity index 85% rename from src/com/c_ECGA/Subset.java rename to src/main/java/com/c_ECGA/Subset.java index e9834ee..6311841 100644 --- a/src/com/c_ECGA/Subset.java +++ b/src/main/java/com/c_ECGA/Subset.java @@ -5,10 +5,10 @@ class Subset{ - private int[] xList; // List of variables in this Subset. - private int nFrequencies; // Number of possible frequencies for this Subset. nFrequencies = 2^xList.size(). - private double mComplexity, // Model Complexity - cpComplexity; // Compressed Population Complexity + private final int[] xList; // List of variables in this Subset. + private final int nFrequencies; // Number of possible frequencies for this Subset. nFrequencies = 2^xList.size(). + private final double mComplexity; // Model Complexity + private final double cpComplexity; // Compressed Population Complexity public Subset(SelectedSet selectedSet, int Xi){ int NS = selectedSet.getN(); @@ -47,7 +47,7 @@ public Subset merge(Subset setB, SelectedSet selectedSet){ // NOTE: setC <- return new Subset(selectedSet, xListC); } - public int[] mergeXList(int[] xListA, int[] xListB){ + public static int[] mergeXList(int[] xListA, int[] xListB){ int sizeA = xListA.length, sizeB = xListB.length, sizeC = sizeA + sizeB; @@ -98,7 +98,7 @@ private int[] computeFrequencies(SelectedSet selectedSet){ return frequencies; } - private int encode(char[] schema, int xSize){ + private static int encode(char[] schema, int xSize){ int result = 0; int powerof2 = 1; for(int j = xSize-1; j >= 0; j--){ @@ -130,11 +130,10 @@ private int[] decode(int code){ public String toString(){ String str = "xList: ["; - for(int i = 0; i < xList.length; i++) - str += xList[i] + ","; // Print the xList array. + for (int aXList : xList) str += aXList + ","; // Print the xList array. str = str.substring(0, str.length()-1); // Remove the last comma. str += "] ; MC = " + mComplexity + " ; CPC = " + cpComplexity; - return str + "\n"; + return str + '\n'; } } diff --git a/src/com/d_HBOA/BayesianMetric.java b/src/main/java/com/d_HBOA/BayesianMetric.java similarity index 88% rename from src/com/d_HBOA/BayesianMetric.java rename to src/main/java/com/d_HBOA/BayesianMetric.java index b6e3ff7..1c59870 100644 --- a/src/com/d_HBOA/BayesianMetric.java +++ b/src/main/java/com/d_HBOA/BayesianMetric.java @@ -6,7 +6,7 @@ abstract class IBayesianMetric { protected int NS; - private static double logBase2 = ((double)1)/Math.log(2); + private static final double logBase2 = ((double)1)/Math.log(2); public double computeScoreGain(int mZero, int mOne, int m00, int m01, int m10, int m11){ double l0 = computeLeafGain(m00, m10); @@ -21,7 +21,7 @@ public double computeScoreGain(int mZero, int mOne, int m00, int m01, int m10, i class BDMetric extends IBayesianMetric{ // Precomputed logarithm list -> 0, ln(1), ln(2),..., ln(NS+1). // Use this list to compute the score gain for each leaf. - private static ArrayList preSumLogs = new ArrayList(); + private static final ArrayList preSumLogs = new ArrayList<>(); BDMetric(int NS){ this.NS = NS; @@ -51,7 +51,7 @@ class BICMetric extends IBayesianMetric{ // DEPRECATED: public BICMetric(int NS){this.NS = NS;} protected double computeLeafGain(int m, int mX){ - if(m == mX || mX == 0) return 0; // NOTE: The case m = 0 is always included because 0 ² mX ² m, and so m = 0 => mX = 0. The reverse is not necessarily true. + if(m == mX || mX == 0) return 0; // NOTE: The case m = 0 is always included because 0 � mX � m, and so m = 0 => mX = 0. The reverse is not necessarily true. double freq = ((double)mX)/((double)m); // NOTE: The return value 0 is limit-based! Is this correct, even for m = mX = 0 ? return (double)((m-mX)*Math.log(1-freq) + mX*Math.log(freq)); } diff --git a/src/com/d_HBOA/BayesianNetwork.java b/src/main/java/com/d_HBOA/BayesianNetwork.java similarity index 72% rename from src/com/d_HBOA/BayesianNetwork.java rename to src/main/java/com/d_HBOA/BayesianNetwork.java index 2cb79d9..b84547e 100644 --- a/src/com/d_HBOA/BayesianNetwork.java +++ b/src/main/java/com/d_HBOA/BayesianNetwork.java @@ -1,27 +1,27 @@ package com.d_HBOA; -import java.util.ArrayList; -import java.util.HashSet; - +import com.gs.collections.impl.set.mutable.primitive.IntHashSet; import com.z_PORTFOLIO.Individual; import com.z_PORTFOLIO.Problem; import com.z_PORTFOLIO.SelectedSet; +import java.util.ArrayList; + @SuppressWarnings("unchecked") // Supress warnings for creating an Array of ArrayList. class BayesianNetwork{ // Check: B. Eckel, "Thinking in Java", 4th ed., MindView Inc., 2006, [pp. 759-761] - public int offspringSize; // NOTE: The BN is responsible for sampling new individuals. - private IBayesianMetric bayesianMetric; - private int maxVertexDegree; // Maximum number of parents per vertex. + public final int offspringSize; // NOTE: The BN is responsible for sampling new individuals. + private final IBayesianMetric bayesianMetric; + private final int maxVertexDegree; // Maximum number of parents per vertex. private int bestDecisionGraphPos; // Position of the decision graph (DG) that contains the best score gain. private double bestScoreGain; // Best global score. - private DecisionGraph[] decisionGraphs = new DecisionGraph[Problem.n]; - private HashSet[] parentList = (HashSet[])new HashSet[Problem.n]; // Use this to generate the topological ordering and the CP Tables. - private HashSet[] adjacencyList = (HashSet[])new HashSet[Problem.n]; // Use this to insure an acyclic BN. - private HashSet[] splitList = (HashSet[])new HashSet[Problem.n]; // Use this to choose only the correct splits. + private final DecisionGraph[] decisionGraphs = new DecisionGraph[Problem.n]; + private final IntHashSet[] parentList = new IntHashSet[Problem.n]; // Use this to generate the topological ordering and the CP Tables. + private final IntHashSet[] adjacencyList = new IntHashSet[Problem.n]; // Use this to insure an acyclic BN. + private final IntHashSet[] splitList = new IntHashSet[Problem.n]; // Use this to choose only the correct splits. @@ -57,7 +57,13 @@ public void generateModel(SelectedSet selectedSet){ } private void generateDecisionGraphs(SelectedSet selectedSet){ - this.initializeBN(selectedSet); // Refresh the BN. Compute and store in decreasing order the first score gains, corresponding to adding a first edge to the empty BN. + this.initializeBN(selectedSet); + + + IntHashSet descendants = new IntHashSet(Problem.n); // Initial Capacity = stringSize; Default Load Factor = 0.75 + IntHashSet ascendants = new IntHashSet(Problem.n); // Initial Capacity = stringSize; De + + // Refresh the BN. Compute and store in decreasing order the first score gains, corresponding to adding a first edge to the empty BN. while(bestScoreGain > 0){ // Search for the best split and store all the necessary information to effectively perform it. DecisionGraph bestDecisionGraph = decisionGraphs[bestDecisionGraphPos]; int bestLeafPos = bestDecisionGraph.getBestLeafPos(); @@ -71,7 +77,7 @@ private void generateDecisionGraphs(SelectedSet selectedSet){ bestLeaf.resetBestSplit(splitList[bestDecisionGraphPos]); } else{ // Perform the best split. - performBestSplit(bestDecisionGraphPos, bestLeafPos, bestSplitPos); // Update the BN and remove non-valid splits. + performBestSplit(bestDecisionGraphPos, bestLeafPos, bestSplitPos, ascendants, descendants); // Update the BN and remove non-valid splits. computeNewLeafScores(selectedSet, bestDecisionGraphPos, bestLeafPos); } decisionGraphs[bestDecisionGraphPos].updateBestLeaf(); @@ -86,9 +92,9 @@ private void initializeBN(SelectedSet selectedSet){ this.bestScoreGain = Double.NEGATIVE_INFINITY; Individual[] individuals = selectedSet.getIndividuals(); for(int i = 0; i < Problem.n; i++){ // Refresh the Bayesian Network structure. - parentList[i] = new HashSet(Problem.n); // Initial Capacity = stringSize; Default Load Factor = 0.75 - adjacencyList[i] = new HashSet(Problem.n); // Initial Capacity = stringSize; Default Load Factor = 0.75 - splitList[i] = new HashSet(2*Problem.n); // Initial Capacity = 2*stringSize; Default Load Factor = 0.75 + parentList[i] = new IntHashSet(Problem.n); // Initial Capacity = stringSize; Default Load Factor = 0.75 + adjacencyList[i] = new IntHashSet(Problem.n); // Initial Capacity = stringSize; Default Load Factor = 0.75 + splitList[i] = new IntHashSet(2 * Problem.n); // Initial Capacity = 2*stringSize; Default Load Factor = 0.75 for(int n = 0; n < Problem.n; n++) if(n != i) splitList[i].add(n); @@ -99,8 +105,10 @@ private void initializeBN(SelectedSet selectedSet){ if(mZero > 0 && mOne > 0){ // If mZero = 0 or mOne = 0 there is no need to try any split with this leaf. for(int j = 0; j < NS; j++){ char alleleJI = individuals[j].getAllele(i); // Value of Xi in individual j. - for(int s: splitList[i]){ - char alleleS = individuals[j].getAllele(s); // Value of Xs in individual j. + + final int finalJ = j; + splitList[i].forEach( s -> { + char alleleS = individuals[finalJ].getAllele(s); // Value of Xs in individual j. if(alleleJI == '0'){ if(alleleS == '0') newLeaf.addPossibleSplitFrequency(0, s); // m00[s]++; @@ -113,9 +121,9 @@ private void initializeBN(SelectedSet selectedSet){ else newLeaf.addPossibleSplitFrequency(3, s); // m11[s]++; } - } + }); } - for(int s: splitList[i]){ + splitList[i].forEach( s -> { int m00 = newLeaf.getPossibleSplitFrequency(0,s); int m01 = newLeaf.getPossibleSplitFrequency(1,s); int m10 = newLeaf.getPossibleSplitFrequency(2,s); @@ -123,7 +131,7 @@ private void initializeBN(SelectedSet selectedSet){ double scoreGain = bayesianMetric.computeScoreGain(mZero, mOne, m00, m01, m10, m11); newLeaf.setScoreGain(s, scoreGain); newLeaf.updateBestSplit(s, scoreGain); // Responsible for updating the value of the best split score gain in this leaf. - } + }); } // END: if(mZero > 0 ...) decisionGraphs[i] = new DecisionGraph(newLeaf); // Initially each graph as a single leaf and there are n-1 possible splits. decisionGraphs[i].updateBestLeaf(); @@ -137,17 +145,22 @@ private void initializeBN(SelectedSet selectedSet){ - private void performBestSplit(int i, int j, int k){ - parentList[i].add(k); // Xk is a parent of Xi. - adjacencyList[k].add(i); // Xi is a child of Xk. - HashSet descendants = new HashSet(Problem.n); // Initial Capacity = stringSize; Default Load Factor = 0.75 - HashSet ascendants = new HashSet(Problem.n); // Initial Capacity = stringSize; Default Load Factor = 0.75 + private void performBestSplit(int i, int j, int k, IntHashSet ascendants, IntHashSet descendants ){ + ascendants.clear(); + descendants.clear(); + + parentList[i].add(k); // Xk is a parent of Xi. + adjacencyList[k].add(i); // Xi is a child of Xk. fault Load Factor = 0.75 getDescendants(descendants, i); // NOTE: The list of descendants includes variable Xi itself. getAscendants(ascendants, k); // NOTE: The list of ascendants includes variable Xk itself. - for(int asc: ascendants) // No child of the child of the child of ... of Xi can be a parent of Xk. - for(int desc: descendants) // No child of the child of the child of ... of Xi can be a parent of the parent of the parent of ... of Xk. - splitList[asc].remove(desc); // Xdesc can no longer be a parent of Xasc. Remove splits to avoid cycles. - decisionGraphs[i].splitBestLeaf(j, k); // Effectively perform the best split. + ascendants.forEach( asc -> { + // No child of the child of the child of ... of Xi can be a parent of Xk. + splitList[asc].removeAll(descendants); + /*for (int desc : descendants) // No child of the child of the child of ... of Xi can be a parent of the parent of the parent of ... of Xk. + splitList[asc].remove(desc);*/ // Xdesc can no longer be a parent of Xasc. Remove splits to avoid cycles. + }); + + decisionGraphs[i].splitBestLeaf(j, k); // Effectively perform the best split. } // END: performBestSplit(...) @@ -166,36 +179,38 @@ private void computeNewLeafScores(SelectedSet selectedSet, int i, int j){ else iterator = ((Variable)iterator).getOne(); } - int itrPosition = decisionGraphs[i].getLeafs().indexOf((Leaf)iterator); + int itrPosition = decisionGraphs[i].getLeafs().indexOf(iterator); if(itrPosition == j || itrPosition == j+1){ // We've reached one of the new leafs. int mZero = ((Leaf)iterator).getMZero(); int mOne = ((Leaf)iterator).getMOne(); if(mZero > 0 && mOne > 0){ // It's still "interesting" to split. char alleleI = individual.getAllele(i); // Value of Xi in individual a. - for(int split: splitList[i]){ + + final IGraph finalIterator = iterator; + splitList[i].forEach( split -> { char alleleS = individual.getAllele(split); // Value of Xsplit in individual a. if(alleleI == '0'){ if(alleleS == '0') - ((Leaf)iterator).addPossibleSplitFrequency(0,split); // m00[split]++; + ((Leaf) finalIterator).addPossibleSplitFrequency(0,split); // m00[split]++; else - ((Leaf)iterator).addPossibleSplitFrequency(1,split); // m01[split]++; + ((Leaf) finalIterator).addPossibleSplitFrequency(1,split); // m01[split]++; } else{ if(alleleS == '0') - ((Leaf)iterator).addPossibleSplitFrequency(2,split); // m10[split]++; + ((Leaf) finalIterator).addPossibleSplitFrequency(2,split); // m10[split]++; else - ((Leaf)iterator).addPossibleSplitFrequency(3,split); // m11[split]++; + ((Leaf) finalIterator).addPossibleSplitFrequency(3,split); // m11[split]++; } - } + }); } } } for(int a = 0; a <= 1; a++){ - Leaf newLeaf = decisionGraphs[i].getLeaf(j+a); // The two new leafs are at positions 'j' and 'j+1'. + Leaf newLeaf = decisionGraphs[i].getLeaf(j + a); // The two new leafs are at positions 'j' and 'j+1'. int mZero = newLeaf.getMZero(); int mOne = newLeaf.getMOne(); - if(mZero > 0 && mOne > 0) - for(int s: splitList[i]){ + if(mZero > 0 && mOne > 0) + splitList[i].forEach( s -> { int m00 = newLeaf.getPossibleSplitFrequency(0,s); int m01 = newLeaf.getPossibleSplitFrequency(1,s); int m10 = newLeaf.getPossibleSplitFrequency(2,s); @@ -203,7 +218,7 @@ private void computeNewLeafScores(SelectedSet selectedSet, int i, int j){ double scoreGain = bayesianMetric.computeScoreGain(mZero, mOne, m00, m01, m10, m11); newLeaf.setScoreGain(s, scoreGain); newLeaf.updateBestSplit(s, scoreGain); // Responsible for updating the value of the best split score gain in this leaf. - } + }); } // END: for(int a = 0 ...) } // END: computeNewLeafScores(...) @@ -218,19 +233,17 @@ private void updateScoreGain(){ } } } - - private void getDescendants(HashSet descendants, int i){ - boolean notVisited = descendants.add(i); - if(notVisited) - for(int desc: adjacencyList[i]) - getDescendants(descendants, desc); + + final private void getDescendants(final IntHashSet descendants, final int i){ + if(descendants.add(i)) + adjacencyList[i].forEach( desc -> + getDescendants(descendants, desc) ); } - - private void getAscendants(HashSet ascendants, int k){ - boolean notVisited = ascendants.add(k); - if(notVisited) - for(int asc: parentList[k]) - getAscendants(ascendants, asc); + + final private void getAscendants(final IntHashSet ascendants, final int k){ + if(ascendants.add(k)) + parentList[k].forEach(asc -> + getAscendants(ascendants, asc)); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -243,7 +256,7 @@ private void getAscendants(HashSet ascendants, int k){ private void topologicalSort(){ color = new int[Problem.n]; // NOTE: color[] is initialized with all zeros, by default. - topSort = new ArrayList(); + topSort = new ArrayList<>(); for(int Xi = 0; Xi < Problem.n; Xi++) if(color[Xi] == 0) DFSVisit(Xi); @@ -251,9 +264,10 @@ private void topologicalSort(){ private void DFSVisit(int Xi){ color[Xi] = 1; // Xi is now GRAY. - for(int child: adjacencyList[Xi]) - if(color[child] == 0) + adjacencyList[Xi].forEach(child -> { + if(color[child] == 0) DFSVisit(child); + }); topSort.add(Xi); // NOTE: Topological sort is in ASCENDENT order of finishing time. } @@ -277,13 +291,18 @@ public String toString(){ String aList = ""; String sList = ""; for(int i = 0; i < Problem.n; i++){ - for(int p: parentList[i]) + /*for(int p: parentList[i]) pList += p + "|"; for(int a: adjacencyList[i]) aList += a + "|"; for(int s: splitList[i]) - sList += s + "|"; - str += i + " " + pList + " " + aList + " " + sList + "\n"; + sList += s + "|";*/ + pList += parentList[i]; + aList += adjacencyList[i]; + sList += splitList[i]; + + + str += i + " " + pList + " " + aList + " " + sList + '\n'; pList = ""; aList = ""; sList = ""; diff --git a/src/com/d_HBOA/DecisionGraph.java b/src/main/java/com/d_HBOA/DecisionGraph.java similarity index 92% rename from src/com/d_HBOA/DecisionGraph.java rename to src/main/java/com/d_HBOA/DecisionGraph.java index d0da346..3606aa3 100644 --- a/src/com/d_HBOA/DecisionGraph.java +++ b/src/main/java/com/d_HBOA/DecisionGraph.java @@ -1,18 +1,18 @@ package com.d_HBOA; -import java.util.ArrayList; -import java.util.HashSet; - +import com.gs.collections.impl.set.mutable.primitive.IntHashSet; import com.z_PORTFOLIO.PORTFOLIO; import com.z_PORTFOLIO.Problem; +import java.util.ArrayList; + interface IGraph{ - public void setParent(Variable parent, int side); + void setParent(Variable parent, int side); } class Variable implements IGraph{ - private int variable; + private final int variable; private IGraph zero, one; @@ -34,7 +34,7 @@ public Variable(int x, IGraph zero, IGraph one){ public void setOne(IGraph one){this.one = one;} public void setParent(Variable parent, int side){} // No need to store a variable's parent. - public String toString(){return "(X" + variable + " ("+ zero + ")" + " (" + one +"))";} + public String toString(){return "(X" + variable + " ("+ zero + ')' + " (" + one +"))";} } class Leaf implements IGraph{ @@ -42,8 +42,8 @@ class Leaf implements IGraph{ side, mZero, mOne; private Variable parent; - private int[][] possibleSplitFrequencies = new int[4][Problem.n]; // NOTE: 0 -> m00; 1 -> m01; 2 -> m10; 3 -> m11 - private double[] scoreGains = new double[Problem.n]; + private final int[][] possibleSplitFrequencies = new int[4][Problem.n]; // NOTE: 0 -> m00; 1 -> m01; 2 -> m10; 3 -> m11 + private final double[] scoreGains = new double[Problem.n]; private int bestSplit; private double bestSplitScoreGain; @@ -86,15 +86,15 @@ public void updateBestSplit(int k, double scoreGain){ // Responsible for upd } } - public void resetBestSplit(HashSet splitList){ + public void resetBestSplit(IntHashSet splitList){ this.bestSplitScoreGain = Double.NEGATIVE_INFINITY; - for(int s: splitList){ + splitList.forEach( s-> { double scoreGain = scoreGains[s]; if(scoreGain > bestSplitScoreGain){ this.bestSplit = s; this.bestSplitScoreGain = scoreGain; } - } + }); } public String toString(){ @@ -103,14 +103,14 @@ public String toString(){ str += scoreGains[i] + ","; // Print the scoreOrders array. str = str.substring(0, str.length()-1); // Remove the last comma. return "[d = " + depth + "; s = " + side + "; m0 = " + mZero + - "; m1= " + mOne + "]" + "; scoreGains=[" + str + "]"; + "; m1= " + mOne + ']' + "; scoreGains=[" + str + ']'; } } class DecisionGraph{ private IGraph graph; - private ArrayList leafs = new ArrayList(); + private final ArrayList leafs = new ArrayList<>(); private int bestLeafPos; // Position of the leaf that contains the best score gain for this decision graph. private double bestLeafScoreGain; // Best score gain among all possible splits for this decision graph. diff --git a/src/com/d_HBOA/HBOASolver.java b/src/main/java/com/d_HBOA/HBOASolver.java similarity index 85% rename from src/com/d_HBOA/HBOASolver.java rename to src/main/java/com/d_HBOA/HBOASolver.java index 7bd972e..d8131ea 100644 --- a/src/com/d_HBOA/HBOASolver.java +++ b/src/main/java/com/d_HBOA/HBOASolver.java @@ -19,9 +19,9 @@ public class HBOASolver extends IEASolver{ - private Selection selection; // NOTE: Use Parameter.initializeSelector() to generate the chosen selector type. - private BayesianNetwork bayesianNetwork; // NOTE: Use initializeBayesianNetwork() to initialize the chosen bayesian network generator. - private IReplacement replacement; // NOTE: Use Parameter.initializeReplacement() to generate the chosen replacement type. + private final Selection selection; // NOTE: Use Parameter.initializeSelector() to generate the chosen selector type. + private final BayesianNetwork bayesianNetwork; // NOTE: Use initializeBayesianNetwork() to initialize the chosen bayesian network generator. + private final IReplacement replacement; // NOTE: Use Parameter.initializeReplacement() to generate the chosen replacement type. public HBOASolver(String paramFile, int currentN){ diff --git a/src/com/d_HBOA/Parameter.java b/src/main/java/com/d_HBOA/Parameter.java similarity index 91% rename from src/com/d_HBOA/Parameter.java rename to src/main/java/com/d_HBOA/Parameter.java index 4374c75..7824996 100644 --- a/src/com/d_HBOA/Parameter.java +++ b/src/main/java/com/d_HBOA/Parameter.java @@ -1,13 +1,14 @@ package com.d_HBOA; +import com.z_PORTFOLIO.Problem; + import java.io.BufferedReader; import java.io.DataInputStream; -import java.io.FileInputStream; +import java.io.InputStream; import java.io.InputStreamReader; import java.util.Scanner; -import com.z_PORTFOLIO.Problem; - +import static com.z_PORTFOLIO.PortParameter.stream; public class Parameter{ @@ -52,7 +53,7 @@ public class Parameter{ public static void initializeParameters(String parameterFile){ try{ // Open the file to be read - FileInputStream fstream = new FileInputStream(parameterFile); + InputStream fstream = stream(parameterFile); // Create an object of DataInputStream DataInputStream in = new DataInputStream(fstream); BufferedReader buff = new BufferedReader(new InputStreamReader(in)); @@ -83,12 +84,12 @@ private static void validateOptionName(String line, String option, int nLine){ if(option.length() >= line.length()) exitError("Line " + nLine + " --> Missing equal sign '='"); if(!validateName(option)) - exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + "'"); + exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + '\''); } private static boolean validateName(String name){ - for(int i = 0; i < optionNames.length; i++) - if(name.equals((String)optionNames[i])) + for (String optionName : optionNames) + if (name.equals((String) optionName)) return true; return false; } @@ -203,21 +204,21 @@ public static IReplacement initializeReplacement(int currentN){ public static String writeParameters(String indent){ String str = " Selection Method:"; if(selectionMethod == 1) - str += "\n" + indent + " Selection = Tournament Selection with replacement" + - "\n" + indent + " pNS = " + pNS + - "\n" + indent + " tourSize = " + tourSize; + str += '\n' + indent + " Selection = Tournament Selection with replacement" + + '\n' + indent + " pNS = " + pNS + + '\n' + indent + " tourSize = " + tourSize; if(selectionMethod == 2) - str += "\n" + indent + " Selection = Tournament Selection without replacement" + - "\n" + indent + " pNS = " + pNS + - "\n" + indent + " tourSize = " + tourSize; + str += '\n' + indent + " Selection = Tournament Selection without replacement" + + '\n' + indent + " pNS = " + pNS + + '\n' + indent + " tourSize = " + tourSize; if(selectionMethod == 3) - str += "\n" + indent + " Selection = Truncation" + - "\n" + indent + " tau = " + tau; + str += '\n' + indent + " Selection = Truncation" + + '\n' + indent + " tau = " + tau; str += "\n\n" + " Replacement Method:" + - "\n" + indent + "Replacement Type = " + replacementType + - "\n" + indent + " pOffspringSize = " + pOffspringSize; + '\n' + indent + "Replacement Type = " + replacementType + + '\n' + indent + " pOffspringSize = " + pOffspringSize; if(replacementType == 1) - str += "\n" + indent + " windowSize = " + windowSize; + str += '\n' + indent + " windowSize = " + windowSize; return str; } diff --git a/src/com/d_HBOA/Replacement.java b/src/main/java/com/d_HBOA/Replacement.java similarity index 80% rename from src/com/d_HBOA/Replacement.java rename to src/main/java/com/d_HBOA/Replacement.java index b2994c6..a99f45c 100644 --- a/src/com/d_HBOA/Replacement.java +++ b/src/main/java/com/d_HBOA/Replacement.java @@ -12,7 +12,7 @@ abstract class IReplacement{ } class RestrictedReplacement extends IReplacement{ - private int windowSize; + private final int windowSize; public RestrictedReplacement(int wSize, int currentN){ int wS = currentN/20; @@ -24,25 +24,24 @@ public RestrictedReplacement(int wSize, int currentN){ public void replace(Population population, Individual[] newIndividuals){ int N = population.getN(); - for(int i = 0; i < newIndividuals.length; i++){ - Individual candidate = newIndividuals[i]; + for (Individual candidate : newIndividuals) { int bestPosition = -1; int bestDistance = Integer.MAX_VALUE; - for(int j = 1; j < windowSize; j++){ // Find within the window, the individual CLOSEST to the candidate. + for (int j = 1; j < windowSize; j++) { // Find within the window, the individual CLOSEST to the candidate. int picked = PORTFOLIO.random.nextInt(N); - Individual individual = population.getIndividual(picked); + Individual individual = population.getIndividual(picked); int distance = individual.distance(candidate); - if(distance < bestDistance){ + if (distance < bestDistance) { bestPosition = picked; bestDistance = distance; } } float candidateFit = candidate.computeFitness(); - if(candidateFit > population.getFitness(bestPosition)){ + if (candidateFit > population.getFitness(bestPosition)) { population.setIndividual(bestPosition, candidate, candidateFit); double bestFit = population.getBestFit(); - if(candidateFit > bestFit){ // The new individual is also the best. - population.setBestPos(bestPosition); // Update information about the best individual. + if (candidateFit > bestFit) { // The new individual is also the best. + population.setBestPos(bestPosition); // Update information about the best individual. population.setBestFit(candidateFit); } } @@ -56,7 +55,7 @@ class WorstReplacement extends IReplacement{ // Use this inner class to sort the current population, in ascending order of fitness. // BEGIN: Inner class 'PosFit' - class PosFit implements Comparable{ + static class PosFit implements Comparable{ int position; double fitness; @@ -79,17 +78,15 @@ public int compareTo(PosFit posFit){ } public String toString(){ - return "(" + position + ";" + fitness + ")"; + return "(" + position + ';' + fitness + ')'; } } // END: Inner class 'PosFit' - - private PosFit[] sortedPopulation; - + public WorstReplacement(){} // Default constructor public void replace(Population population, Individual[] newIndividuals){ int sortN = population.getN(); - sortedPopulation = new PosFit[sortN]; + PosFit[] sortedPopulation = new PosFit[sortN]; for(int i = 0; i < sortN; i++) sortedPopulation[i] = new PosFit(i, population.getFitness(i)); Arrays.sort(sortedPopulation); // Sort population in ascending order of fitness. diff --git a/src/com/d_HBOA/Selection.java b/src/main/java/com/d_HBOA/Selection.java similarity index 95% rename from src/com/d_HBOA/Selection.java rename to src/main/java/com/d_HBOA/Selection.java index 2c2f095..1138676 100644 --- a/src/com/d_HBOA/Selection.java +++ b/src/main/java/com/d_HBOA/Selection.java @@ -16,7 +16,7 @@ public Selection(){} // Default empty constructor. } class TourWithReplacement extends Selection{ - int tourSize; // Default: 2 (binary tournament). + final int tourSize; // Default: 2 (binary tournament). public TourWithReplacement(int NS, int tourSize){ this.NS = NS; @@ -52,7 +52,7 @@ public SelectedSet select(Population population){ class TourWithoutReplacement extends Selection{ - int tourSize; // Default binary tournament + final int tourSize; // Default binary tournament public TourWithoutReplacement(int NS, int tourSize){ this.NS = NS; @@ -99,7 +99,7 @@ private int tourSelect(Population population, SelectedSet selectedSet, int[] num return maxPos; } - private int[] shuffle(int n){ + private static int[] shuffle(int n){ int[] numbers = new int[n]; for(int i = 0; i < n; i++) numbers[i] = i; @@ -120,7 +120,7 @@ class Truncation extends Selection{ PosFit[] sortedPopulation; // Use this inner class to sort the current population, in ascending order of fitness. - class PosFit implements Comparable{ + static class PosFit implements Comparable{ int position; double fitness; @@ -143,7 +143,7 @@ public int compareTo(PosFit posFit){ } public String toString(){ - return "(" + position + ";" + fitness + ")"; + return "(" + position + ';' + fitness + ')'; } }// END: inner class PosFit. diff --git a/src/com/z_PORTFOLIO/ECGA.java b/src/main/java/com/z_PORTFOLIO/ECGA.java similarity index 100% rename from src/com/z_PORTFOLIO/ECGA.java rename to src/main/java/com/z_PORTFOLIO/ECGA.java diff --git a/src/com/z_PORTFOLIO/HBOA.java b/src/main/java/com/z_PORTFOLIO/HBOA.java similarity index 100% rename from src/com/z_PORTFOLIO/HBOA.java rename to src/main/java/com/z_PORTFOLIO/HBOA.java diff --git a/src/com/z_PORTFOLIO/IEASolver.java b/src/main/java/com/z_PORTFOLIO/IEASolver.java similarity index 96% rename from src/com/z_PORTFOLIO/IEASolver.java rename to src/main/java/com/z_PORTFOLIO/IEASolver.java index 56ef923..cb74856 100644 --- a/src/com/z_PORTFOLIO/IEASolver.java +++ b/src/main/java/com/z_PORTFOLIO/IEASolver.java @@ -3,8 +3,8 @@ //DESIGN PATTERN STRATEGY public abstract class IEASolver{ - protected int N; - protected Population currentPopulation; + protected final int N; + protected final Population currentPopulation; protected int currentGeneration; // Current generation for this solver. This is updated by each nextGeneration() call. protected int currentFitnessCalls; // Number of fitness calls for this solver. This must be updated for all RandomPopulation() and replace() calls. protected long totalFitnessCalls; // Total number of fitness calls for this solver. NOTE: This is not necessary. It's just extra information. diff --git a/src/com/z_PORTFOLIO/IEAlgorithm.java b/src/main/java/com/z_PORTFOLIO/IEAlgorithm.java similarity index 100% rename from src/com/z_PORTFOLIO/IEAlgorithm.java rename to src/main/java/com/z_PORTFOLIO/IEAlgorithm.java diff --git a/src/com/z_PORTFOLIO/Individual.java b/src/main/java/com/z_PORTFOLIO/Individual.java similarity index 86% rename from src/com/z_PORTFOLIO/Individual.java rename to src/main/java/com/z_PORTFOLIO/Individual.java index 6ccb423..d9d0817 100644 --- a/src/com/z_PORTFOLIO/Individual.java +++ b/src/main/java/com/z_PORTFOLIO/Individual.java @@ -1,9 +1,9 @@ package com.z_PORTFOLIO; public class Individual { - private char[] individual = new char[Problem.n]; + private final char[] individual; - public Individual(){} // Default constructor + public Individual(){ individual = new char[Problem.n]; } // Default constructor public Individual(Individual johnDoe){individual = johnDoe.getIndividual();} // Non shallow copy of an Individual public Individual(char[] individual){this.individual = individual;} // Shallow copy of an Individual @@ -16,10 +16,7 @@ public Individual(){} // Default constructor public char[] copyIndividual(){ char[] copy = new char[Problem.n]; - for(int i = 0; i < Problem.n; i++){ - char c = individual[i]; - copy[i] = c; - } + System.arraycopy(individual, 0, copy, 0, Problem.n); return copy; } diff --git a/src/com/z_PORTFOLIO/PORTFOLIO.java b/src/main/java/com/z_PORTFOLIO/PORTFOLIO.java similarity index 78% rename from src/com/z_PORTFOLIO/PORTFOLIO.java rename to src/main/java/com/z_PORTFOLIO/PORTFOLIO.java index 1ac1aa3..c0fb04e 100644 --- a/src/com/z_PORTFOLIO/PORTFOLIO.java +++ b/src/main/java/com/z_PORTFOLIO/PORTFOLIO.java @@ -4,16 +4,18 @@ public class PORTFOLIO{ - private static String portParamFile; // Name of the main parameters file. public static int portRuns; // Number of runs to perform with the same problem. - public static Random random = new Random(); // Responsible for all random number operations. + public static final Random random = new Random(); // Responsible for all random number operations. public static int nSuccess; // Number of successful runs; public static PortEngine portEngine; public static void main(String[] args){ //random.setSeed(654324); // This will fix the sequence of seeds that will be used on each run of the Portfolio. - - portParamFile = args[0]; + + + //portParamFile = args[0]; + String portParamFile = "PortParameters.txt"; + nSuccess = 0; portEngine = new PortEngine(portParamFile); // Initialize the Portfolio Engine. diff --git a/src/com/z_PORTFOLIO/ParBestSoFar.java b/src/main/java/com/z_PORTFOLIO/ParBestSoFar.java similarity index 96% rename from src/com/z_PORTFOLIO/ParBestSoFar.java rename to src/main/java/com/z_PORTFOLIO/ParBestSoFar.java index 05ac5d7..19b793e 100644 --- a/src/com/z_PORTFOLIO/ParBestSoFar.java +++ b/src/main/java/com/z_PORTFOLIO/ParBestSoFar.java @@ -75,14 +75,14 @@ public void reset(){ this.bestIndividualGeneration = 0; this.bestIndividualPopulation = null; this.bestIndividualPosition = 0; - this.bestIndividualFitness = Double.NEGATIVE_INFINITY;; - + this.bestIndividualFitness = Double.NEGATIVE_INFINITY; + this.bestAverageTime = 0; this.bestAverageIteration = 0; this.bestAverageSolverPosition = 0; this.bestAverageGeneration = 0; this.bestAveragePopulation = null; - this.bestAverageFitness = Double.NEGATIVE_INFINITY;; + this.bestAverageFitness = Double.NEGATIVE_INFINITY; } } diff --git a/src/com/z_PORTFOLIO/ParEngine.java b/src/main/java/com/z_PORTFOLIO/ParEngine.java similarity index 94% rename from src/com/z_PORTFOLIO/ParEngine.java rename to src/main/java/com/z_PORTFOLIO/ParEngine.java index 0a191f0..8c72695 100644 --- a/src/com/z_PORTFOLIO/ParEngine.java +++ b/src/main/java/com/z_PORTFOLIO/ParEngine.java @@ -8,9 +8,9 @@ public class ParEngine{ private boolean inactive; // This EA can be active or already inactive. private double multiplier; // Each EA uses this constant to compute its own maximum execution time allowed in each iteration. NOTE: All multipliers are initialized by portRegister. private long overTime; // Each EA uses this constant to compute its own maximum execution time allowed in each iteration. - private IEAlgorithm parAlgorithm; // Chosen EA to perform the parameterless strategy. Design Pattern Strategy. - private ParRegister parRegister; // Responsible for storing and processing all information related with this Parameterless Engine. - private ArrayList parSolvers; // The array of solvers on which to perform PEBS. + private final IEAlgorithm parAlgorithm; // Chosen EA to perform the parameterless strategy. Design Pattern Strategy. + private final ParRegister parRegister; // Responsible for storing and processing all information related with this Parameterless Engine. + private final ArrayList parSolvers; // The array of solvers on which to perform PEBS. private int solverPosition; // Current Solver position. private int highestN; // Highest current population size. private int lastSolver; // Position of the last active Solver; @@ -22,7 +22,7 @@ public ParEngine(int initPopSize, IEAlgorithm parAlgorithm, ParRegister parRegis this.inactive = false; this.parAlgorithm = parAlgorithm; this.parRegister = parRegister; - this.parSolvers = new ArrayList(); // Initialize the list of active Solvers; + this.parSolvers = new ArrayList<>(); // Initialize the list of active Solvers; this.parSolvers.add(this.parAlgorithm.newIEASolver(initPopSize)); // Initialize the first Solver. this.solverPosition = 0; // Initialize the current Solver position. this.highestN = initPopSize; // Highest current population size. diff --git a/src/com/z_PORTFOLIO/ParParameter.java b/src/main/java/com/z_PORTFOLIO/ParParameter.java similarity index 95% rename from src/com/z_PORTFOLIO/ParParameter.java rename to src/main/java/com/z_PORTFOLIO/ParParameter.java index 44f7ed2..1107492 100644 --- a/src/com/z_PORTFOLIO/ParParameter.java +++ b/src/main/java/com/z_PORTFOLIO/ParParameter.java @@ -2,10 +2,12 @@ import java.io.BufferedReader; import java.io.DataInputStream; -import java.io.FileInputStream; +import java.io.InputStream; import java.io.InputStreamReader; import java.util.Scanner; +import static com.z_PORTFOLIO.PortParameter.stream; + class ParParameter{ @@ -18,7 +20,7 @@ class ParParameter{ public static void initializeParameters(String parParameterFile){ try{ // Open the file to be read - FileInputStream fstream = new FileInputStream(parParameterFile); + InputStream fstream = stream(parParameterFile); // Create an object of DataInputStream DataInputStream in = new DataInputStream(fstream); BufferedReader buff = new BufferedReader(new InputStreamReader(in)); @@ -49,12 +51,12 @@ private static void validateOptionName(String line, String option, int nLine){ if(option.length() >= line.length()) exitError("Line " + nLine + " --> Missing equal sign '='"); if(!validateName(option)) - exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + "'"); + exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + '\''); } private static boolean validateName(String name){ - for(int i = 0; i < optionNames.length; i++) - if(name.equals((String)optionNames[i])) + for (String optionName : optionNames) + if (name.equals((String) optionName)) return true; return false; } diff --git a/src/com/z_PORTFOLIO/ParRegister.java b/src/main/java/com/z_PORTFOLIO/ParRegister.java similarity index 93% rename from src/com/z_PORTFOLIO/ParRegister.java rename to src/main/java/com/z_PORTFOLIO/ParRegister.java index 27357b1..05ed9c3 100644 --- a/src/com/z_PORTFOLIO/ParRegister.java +++ b/src/main/java/com/z_PORTFOLIO/ParRegister.java @@ -3,16 +3,16 @@ public class ParRegister{ - private int index; // Each ParEngine knows its own index. This index does not depend on whether the ParEngine + private final int index; // Each ParEngine knows its own index. This index does not depend on whether the ParEngine // is active or inactive and it remains constant throughout the entirety of the portfolio run. - private String EAName; // Each ParEngine knows the name of its own EAlgorithm. + private final String EAName; // Each ParEngine knows the name of its own EAlgorithm. private long maxGenerationTime; // Use this to compute next Ti. private long totalParTime; private long eliminationTime; private int totalIterations; private long currentFitnessCalls; private long totalFitnessCalls; - private ParBestSoFar parBestSoFar; + private final ParBestSoFar parBestSoFar; public ParRegister(int index, String EAName){ // NOTE: All other fields are automatically initialized to 0, has intended. diff --git a/src/com/z_PORTFOLIO/ParStopper.java b/src/main/java/com/z_PORTFOLIO/ParStopper.java similarity index 97% rename from src/com/z_PORTFOLIO/ParStopper.java rename to src/main/java/com/z_PORTFOLIO/ParStopper.java index ab4dec9..b9732e7 100644 --- a/src/com/z_PORTFOLIO/ParStopper.java +++ b/src/main/java/com/z_PORTFOLIO/ParStopper.java @@ -34,7 +34,7 @@ public static boolean criteria(ParRegister parRegister, IEASolver currentSolver) private static boolean allFitnessEqual(Population population){ - return allFitnessEqual == -1 ? false : population.getBestFit() == population.getAvgFit(); + return allFitnessEqual != -1 && population.getBestFit() == population.getAvgFit(); } private static boolean uniFreqConvergence(Population population){ diff --git a/src/com/z_PORTFOLIO/Population.java b/src/main/java/com/z_PORTFOLIO/Population.java similarity index 88% rename from src/com/z_PORTFOLIO/Population.java rename to src/main/java/com/z_PORTFOLIO/Population.java index c6c8920..ea3eb00 100644 --- a/src/com/z_PORTFOLIO/Population.java +++ b/src/main/java/com/z_PORTFOLIO/Population.java @@ -6,11 +6,11 @@ // NOTE: Use constructor Population() to generate empty populations. public class Population{ - protected int N; // Size for each population, in particular for SelectedSet (NS). - public Individual[] individuals; // Population of N char[] of size xSize. + protected final int N; // Size for each population, in particular for SelectedSet (NS). + public final Individual[] individuals; // Population of N char[] of size xSize. protected int worstPos, bestPos; // Position of Worst and Best individuals. computeFitnessValues() is responsible for computing these positions. protected double avgFit, worstFit, bestFit; // Worst and Best fitnesses. computeFitnessValues() is responsible for computing these fitnesses. - protected double[] fitness; // Array of N fitness values. + protected final double[] fitness; // Array of N fitness values. protected int[] uniFrequencies; // Array of xSize univariate frequencies. public Population(int otherN){ @@ -87,8 +87,11 @@ public double computeAvgFitness(){ //////////////////////////////////////////////////////////// public void computeUnivariateFrequencies(){ - uniFrequencies = new int[Problem.n]; // NOTE: uniFrequencies is initialized all zeros by default. + if (uniFrequencies == null || uniFrequencies.length!=Problem.n) + uniFrequencies = new int[Problem.n]; // NOTE: uniFrequencies is initialized all zeros by default. + for(int j = 0; j < Problem.n; j++){ + uniFrequencies[j] = 0; for(int i = 0; i < this.N; i++) if(individuals[i].getAllele(j) == '1') uniFrequencies[j]++; diff --git a/src/com/z_PORTFOLIO/PortEngine.java b/src/main/java/com/z_PORTFOLIO/PortEngine.java similarity index 99% rename from src/com/z_PORTFOLIO/PortEngine.java rename to src/main/java/com/z_PORTFOLIO/PortEngine.java index 95e8a41..0ef03d8 100644 --- a/src/com/z_PORTFOLIO/PortEngine.java +++ b/src/main/java/com/z_PORTFOLIO/PortEngine.java @@ -24,7 +24,7 @@ public PortEngine(String portParamFile){ } private void initializePortfolio(){ - portfolio = new ArrayList(); + portfolio = new ArrayList<>(); //portfolio.add(new ParEngine(N0, new SGA("SGAParameters.txt"), new ParRegister(0))); // Each EA "knows" its own index in the portfolio. portfolio.add(new ParEngine(N0, new UMDA("UMDAParameters.txt"), new ParRegister(0, "P-UMDA"))); // NOTE: When integrating a new EA to the portfolio, it is only necessary to add a new line to this block, portfolio.add(new ParEngine(N1, new ECGA("ECGAParameters.txt"), new ParRegister(1, "P-ECGA"))); // choose the correct initial population size (N0 or N1), diff --git a/src/com/z_PORTFOLIO/PortParameter.java b/src/main/java/com/z_PORTFOLIO/PortParameter.java similarity index 95% rename from src/com/z_PORTFOLIO/PortParameter.java rename to src/main/java/com/z_PORTFOLIO/PortParameter.java index 6b14b09..80fbbf7 100644 --- a/src/com/z_PORTFOLIO/PortParameter.java +++ b/src/main/java/com/z_PORTFOLIO/PortParameter.java @@ -2,12 +2,12 @@ import java.io.BufferedReader; import java.io.DataInputStream; -import java.io.FileInputStream; +import java.io.InputStream; import java.io.InputStreamReader; import java.util.Scanner; -class PortParameter{ +public class PortParameter{ // NOTE!! optionNames must coincide exactly with the option names in the 'Parameters.txt' file. private static final String optionNames[] = @@ -30,7 +30,8 @@ class PortParameter{ public static void initializeParameters(String parameterFile){ // NOTE: Execute this initialization PRIOR to any other. try{ - FileInputStream fstream = new FileInputStream(parameterFile); // Open the file to be read + InputStream fstream = stream(parameterFile); + //new FileInputStream(parameterFile); // Open the file to be read DataInputStream in = new DataInputStream(fstream); // Create an object of DataInputStream BufferedReader buff = new BufferedReader(new InputStreamReader(in)); int nLine = 0; // Line number @@ -55,18 +56,22 @@ public static void initializeParameters(String parameterFile){ // NOTE: Execu catch(Exception e){ // Catch open file error. System.err.println("Error: " + e.getMessage()); } - } - + } + + public static InputStream stream(String parameterFile) { + return PortParameter.class.getClassLoader().getResourceAsStream(parameterFile); + } + private static void validateOptionName(String line, String option, int nLine){ if(option.length() >= line.length()) exitError("Line " + nLine + " --> Missing equal sign '='"); if(!validateName(option)) - exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + "'"); + exitError("Line " + nLine + " --> INVALID OPTION NAME '" + option + '\''); } private static boolean validateName(String name){ - for(int i = 0; i < optionNames.length; i++) - if(name.equals((String)optionNames[i])) + for (String optionName : optionNames) + if (name.equals((String) optionName)) return true; return false; } @@ -157,7 +162,7 @@ private static void validateOptionValue(String optionName,String optionValue, in } if(optionName.equals("verbose")){ PortPress.verbose = Boolean.parseBoolean(optionValue); - if(PortPress.verbose != false && PortPress.verbose != true) + if(PortPress.verbose && !PortPress.verbose) exitError("Line " + nLine + " --> Verbose option must be either 'false' or 'true'."); return; // Option validated!! } diff --git a/src/com/z_PORTFOLIO/PortPress.java b/src/main/java/com/z_PORTFOLIO/PortPress.java similarity index 89% rename from src/com/z_PORTFOLIO/PortPress.java rename to src/main/java/com/z_PORTFOLIO/PortPress.java index 776fb2c..bf5f5db 100644 --- a/src/com/z_PORTFOLIO/PortPress.java +++ b/src/main/java/com/z_PORTFOLIO/PortPress.java @@ -7,36 +7,35 @@ public class PortPress{ public static boolean verbose; // Verbose mode prints all currentSolver info in each generation. Default = false. // NOTE: 'verbose' is initialized by PortParameter.validateOptionValue(). - - private static String testFileName; // This file stores all the information that is also printed in the console during an entire run. - private static FileWriter fstreamTest; + private static BufferedWriter testFileOut; // TODO: Write STATS file!! // private static String testFileNameStats; // This file stores only the statistics necessary to generate graphics. // private static FileWriter fstreamTestStats; // private static BufferedWriter testFileOutStats; - - - private static int indentSize = 7; + + private static String indent; public static void initializePress(){ indent = ""; + int indentSize = 7; for(int i = 0; i < indentSize; i++) indent += " "; - String str = "Runs" + PORTFOLIO.portRuns + "_T0" + PortEngine.T0 + "_alpha" + PortEngine.alpha + - "_" + Problem.problemName + "_n" + Problem.n + ".txt"; + String str = "Runs" + PORTFOLIO.portRuns + "_T0" + PortEngine.T0 + "_alpha" + PortEngine.alpha + + '_' + Problem.problemName + "_n" + Problem.n + ".txt"; + String testFileName; if(PortEngine.nextSolver > 99){ - testFileName = "PORT-STANDALONE_" + str; + testFileName = "PORT-STANDALONE_" + str; //testFileNameStats = "STATS_PORT-STANDALONE_" + str; } else{ - testFileName = "PORTFOLIO_" + str; + testFileName = "PORTFOLIO_" + str; //testFileNameStats = "STATS_PORTFOLIO_" + str; } try{ - fstreamTest = new FileWriter(testFileName); // 'true' => Append to file. + FileWriter fstreamTest = new FileWriter(testFileName); testFileOut = new BufferedWriter(fstreamTest); // fstreamTestStats = new FileWriter(testFileNameStats, true); // 'true' => Append to file. // testFileOutStats = new BufferedWriter(fstreamTest); @@ -46,7 +45,7 @@ public static void initializePress(){ public static void printString(String str){ // NOTE: Use this method to print simultaneous in System.out.println(str); // the console and in the testFileOut. try{ - testFileOut.write("\n" + str); + testFileOut.write('\n' + str); }catch(Exception e){System.err.println("ERROR: " + e.getMessage());} } @@ -86,24 +85,24 @@ public static void printInitialInfo(){ } public static void printRunInitialInfo(int r){ - printString("\n##### RUN " + (r+1) + "/" + PORTFOLIO.portRuns + " #####" + - "##### RUN " + (r+1) + "/" + PORTFOLIO.portRuns + " #####" + - "##### RUN " + (r+1) + "/" + PORTFOLIO.portRuns + " #####"); + printString("\n##### RUN " + (r+1) + '/' + PORTFOLIO.portRuns + " #####" + + "##### RUN " + (r+1) + '/' + PORTFOLIO.portRuns + " #####" + + "##### RUN " + (r+1) + '/' + PORTFOLIO.portRuns + " #####"); } public static void printRunFinalInfo(int r){ - printString("\n##### RUN " + (r+1) + "/" + PORTFOLIO.portRuns + " #####" + - "##### RUN " + (r+1) + "/" + PORTFOLIO.portRuns + " #####" + - "##### RUN " + (r+1) + "/" + PORTFOLIO.portRuns + " #####"); + printString("\n##### RUN " + (r+1) + '/' + PORTFOLIO.portRuns + " #####" + + "##### RUN " + (r+1) + '/' + PORTFOLIO.portRuns + " #####" + + "##### RUN " + (r+1) + '/' + PORTFOLIO.portRuns + " #####"); String str = "\n# " + " Success: " + PortStopper.foundOptimum() + - "\n# " + " Current Success Rate: " + PORTFOLIO.nSuccess + "/" + (r+1) + + "\n# " + " Current Success Rate: " + PORTFOLIO.nSuccess + '/' + (r+1) + "\n# " + " Final Active EAlgorithms: [ "; for(int i = 0; i < PortEngine.portRegister.getNEA(); i++){ ParEngine parEngine = PortEngine.portfolio.get(i); if(!parEngine.inactive()) - str += parEngine.getParRegister().getEAName() + " "; + str += parEngine.getParRegister().getEAName() + ' '; } - str += "]" + + str += ']' + "\n# " + "-------------------------------"; for(int i = 0; i < PortEngine.portRegister.getNEA(); i++){ ParRegister parRegister = PortEngine.portfolio.get(i).getParRegister(); @@ -156,9 +155,9 @@ public static void printTimeSlotFinalInfo(int timeSlot){ for(int i = 0; i < PortEngine.portRegister.getNEA(); i++){ ParEngine parEngine = PortEngine.portfolio.get(i); if(!parEngine.inactive()) - str += parEngine.getParRegister().getEAName() + " "; + str += parEngine.getParRegister().getEAName() + ' '; } - str += "]" + + str += ']' + "\n=> " + " Total Fitness Calls: " + PortEngine.portRegister.getTotalFitnessCalls() + "\n=> " + " Total Running Time: " + PortEngine.portRegister.getTotalRunTime() + "\n=> " + " Max Generation Time: " + PORTFOLIO.portEngine.getMaxTime() + @@ -180,14 +179,14 @@ public static void printParEngineInitialInfo(ParEngine currentParEngine, long ma ParRegister currentParRegister = currentParEngine.getParRegister(); String str; if(currentParEngine.inactive()) - str = "=>" + - "\n" + "==>> INACTIVE: " + currentParRegister.getEAName() + "(" + currentParRegister.getIndex() + ")"; + str = "=>" + + '\n' + "==>> INACTIVE: " + currentParRegister.getEAName() + '(' + currentParRegister.getIndex() + ')'; else{ - str = "=>" + - "\n" + "==>> RUNNING: " + currentParRegister.getEAName() + "(" + currentParRegister.getIndex() + ")" + + str = "=>" + + '\n' + "==>> RUNNING: " + currentParRegister.getEAName() + '(' + currentParRegister.getIndex() + ')' + " for a maximum allowed time of << " + maxTimeAllowed + " >> milliseconds."+ - "\n" + - "\n" + indent + "Iteration GenerationTime Pop. Size Generation Avg. Fitness BestCurrentFitness BestFitnessSoFar"; + '\n' + + '\n' + indent + "Iteration GenerationTime Pop. Size Generation Avg. Fitness BestCurrentFitness BestFitnessSoFar"; } printString(str); } @@ -198,7 +197,7 @@ public static void printParEngineCurrentInfo(ParEngine currentParEngine, long ma "\n====>> STOPPING: " + currentParRegister.getEAName() + "\n=> " + "\n=> " + " Currently Active: " + !currentParEngine.inactive() + - "\n=> " + " CurrentTime/AllowedTime: " + currentTime + "/" + maxTimeAllowed + " milliseconds" + + "\n=> " + " CurrentTime/AllowedTime: " + currentTime + '/' + maxTimeAllowed + " milliseconds" + "\n=> " + " TotalTime: " + currentParRegister.getTotalParTime() + " milliseconds" + "\n=> " + " Max Generation Time: " + currentParRegister.getMaxGenerationTime(); if(currentParEngine.inactive()) @@ -277,7 +276,7 @@ public static void printSolverCurrentInfo(ParRegister currentParRegister, IEASol } public static void printFinalInfo(){ - printString("\nSUCCESS RATE = " + PORTFOLIO.nSuccess + "/" + PORTFOLIO.portRuns + "\n"); + printString("\nSUCCESS RATE = " + PORTFOLIO.nSuccess + '/' + PORTFOLIO.portRuns + '\n'); } public static void closeTestFileOut(){ diff --git a/src/com/z_PORTFOLIO/PortRegister.java b/src/main/java/com/z_PORTFOLIO/PortRegister.java similarity index 99% rename from src/com/z_PORTFOLIO/PortRegister.java rename to src/main/java/com/z_PORTFOLIO/PortRegister.java index 1097856..14701b6 100644 --- a/src/com/z_PORTFOLIO/PortRegister.java +++ b/src/main/java/com/z_PORTFOLIO/PortRegister.java @@ -1,7 +1,7 @@ package com.z_PORTFOLIO; public class PortRegister{ - private int nEA; + private final int nEA; private int nActiveParEngines; private int firstActiveParEngine; private int totalIterations; diff --git a/src/com/z_PORTFOLIO/PortStopper.java b/src/main/java/com/z_PORTFOLIO/PortStopper.java similarity index 73% rename from src/com/z_PORTFOLIO/PortStopper.java rename to src/main/java/com/z_PORTFOLIO/PortStopper.java index 71ba2b3..3cc4a8c 100644 --- a/src/com/z_PORTFOLIO/PortStopper.java +++ b/src/main/java/com/z_PORTFOLIO/PortStopper.java @@ -12,9 +12,9 @@ public class PortStopper{ public static boolean criteria(PortRegister portRegister){ return (portRegister.getNActiveParEngines() == 0) || - ((maxIterations == -1)? false : portRegister.getTotalIterations() > maxIterations) || - ((maxFitnessCalls == -1)? false : portRegister.getTotalFitnessCalls() > maxFitnessCalls) || - ((maxTimeAllowed == -1)? false : portRegister.getTotalRunTime() > maxTimeAllowed); + ((maxIterations != -1) && portRegister.getTotalIterations() > maxIterations) || + ((maxFitnessCalls != -1) && portRegister.getTotalFitnessCalls() > maxFitnessCalls) || + ((maxTimeAllowed != -1) && portRegister.getTotalRunTime() > maxTimeAllowed); } public static int getMaxIterations(){return maxIterations;} diff --git a/src/com/z_PORTFOLIO/PortTime.java b/src/main/java/com/z_PORTFOLIO/PortTime.java similarity index 100% rename from src/com/z_PORTFOLIO/PortTime.java rename to src/main/java/com/z_PORTFOLIO/PortTime.java diff --git a/src/com/z_PORTFOLIO/Problem.java b/src/main/java/com/z_PORTFOLIO/Problem.java similarity index 97% rename from src/com/z_PORTFOLIO/Problem.java rename to src/main/java/com/z_PORTFOLIO/Problem.java index a617bfe..7ad5863 100644 --- a/src/com/z_PORTFOLIO/Problem.java +++ b/src/main/java/com/z_PORTFOLIO/Problem.java @@ -14,12 +14,12 @@ /////////////////////////////////////////////////////////////////// interface IProblem{ - public float computeFitness(Individual individual); - public String toString(); + float computeFitness(Individual individual); + String toString(); } public class Problem{ - private IProblem problem; + private final IProblem problem; public static int n; // Allele size. No default, it's problem dependent. public static float optimumValue; // Best fitness. No default, it's problem dependent. public static String problemName; @@ -30,7 +30,7 @@ public Problem(IProblem problem, int stringSize, float optValue, double sigmaK){ this.problem = problem; Problem.n = stringSize; Problem.optimumValue = optValue; - Problem.sigma = Math.sqrt((double)(sigmaK*stringSize)); + Problem.sigma = Math.sqrt(sigmaK*stringSize); Problem.problemName = (sigma == 0)? problem.toString() : "NOISY-" + problem.toString(); } @@ -40,7 +40,7 @@ public float computeFitness(Individual individual){ } public static boolean validateXSize(Individual individual){ - return (individual.getIndividual().length == n) ? true : false; + return (individual.getIndividual().length == n); } public String toString(){ @@ -165,7 +165,7 @@ public String toString(){ //###### 5 --> ZERO TRAP-K PROBLEM ###### class ZeroTrapK implements IProblem{ - private int kay; + private final int kay; public ZeroTrapK(int kay){this.kay = kay;} public float computeFitness(Individual individual){ @@ -321,7 +321,7 @@ public String toString(){ //###### 15 --> TRAP-K PROBLEM ###### class TrapK implements IProblem{ - private int kay; + private final int kay; public TrapK(int kay){this.kay = kay;} public float computeFitness(Individual individual){ @@ -386,7 +386,7 @@ public float computeFitness(Individual individual){ float flow = 1, fhigh = 1; // Parameters for topTrap - float topFlow = (float)0.9, + float topFlow = 0.9f, topFhigh = 1; // All levels except the top one. @@ -458,9 +458,9 @@ public float computeFitness(Individual individual){ int nLevels = (int)(Math.log(levelSize)/Math.log(3)); float levelFit; - float flow = (float)1 + (float)0.1/(float)nLevels, // Parameters for trap at all levels except the top one. + float flow = (float)1 + 0.1f /(float)nLevels, // Parameters for trap at all levels except the top one. fhigh = 1; - float topFlow = (float)0.9, // Parameters for topTrap + float topFlow = 0.9f, // Parameters for topTrap topFhigh = 1; while(levelSize > 3){ // All levels except the top one. diff --git a/src/com/z_PORTFOLIO/RandomPopulation.java b/src/main/java/com/z_PORTFOLIO/RandomPopulation.java similarity index 100% rename from src/com/z_PORTFOLIO/RandomPopulation.java rename to src/main/java/com/z_PORTFOLIO/RandomPopulation.java diff --git a/src/com/z_PORTFOLIO/SGA.java b/src/main/java/com/z_PORTFOLIO/SGA.java similarity index 100% rename from src/com/z_PORTFOLIO/SGA.java rename to src/main/java/com/z_PORTFOLIO/SGA.java diff --git a/src/com/z_PORTFOLIO/SelectedSet.java b/src/main/java/com/z_PORTFOLIO/SelectedSet.java similarity index 100% rename from src/com/z_PORTFOLIO/SelectedSet.java rename to src/main/java/com/z_PORTFOLIO/SelectedSet.java diff --git a/src/com/z_PORTFOLIO/UMDA.java b/src/main/java/com/z_PORTFOLIO/UMDA.java similarity index 100% rename from src/com/z_PORTFOLIO/UMDA.java rename to src/main/java/com/z_PORTFOLIO/UMDA.java diff --git a/bin/ECGAParameters.txt b/src/main/resources/ECGAParameters.txt similarity index 100% rename from bin/ECGAParameters.txt rename to src/main/resources/ECGAParameters.txt diff --git a/bin/HBOAParameters.txt b/src/main/resources/HBOAParameters.txt similarity index 100% rename from bin/HBOAParameters.txt rename to src/main/resources/HBOAParameters.txt diff --git a/bin/ParParameters.txt b/src/main/resources/ParParameters.txt similarity index 100% rename from bin/ParParameters.txt rename to src/main/resources/ParParameters.txt diff --git a/bin/PortParameters.txt b/src/main/resources/PortParameters.txt similarity index 99% rename from bin/PortParameters.txt rename to src/main/resources/PortParameters.txt index 795d05a..0479799 100644 --- a/bin/PortParameters.txt +++ b/src/main/resources/PortParameters.txt @@ -64,11 +64,11 @@ parParamFile = ParParameters.txt # # Problem type. # Default = 10 (OneMax) -problemType = 10 +problemType = 11 # Set the 'stringSize' in accordance with the chosen problem # Default = 100 (OneMax size) -stringSize = 100 +stringSize = 200 # NOTE: Both stop criteria 4 and 5 on 'ParParameters.txt' depend on the optimum value. # The user is responsible for setting the optimum value diff --git a/bin/SGAParameters.txt b/src/main/resources/SGAParameters.txt similarity index 100% rename from bin/SGAParameters.txt rename to src/main/resources/SGAParameters.txt diff --git a/bin/UMDAParameters.txt b/src/main/resources/UMDAParameters.txt similarity index 100% rename from bin/UMDAParameters.txt rename to src/main/resources/UMDAParameters.txt