├── src └── main │ ├── resources │ ├── neat │ │ ├── head │ │ └── easy-training.csv │ └── csp │ │ ├── r1000.csv │ │ ├── r1100.csv │ │ ├── r1200.csv │ │ ├── r800.csv │ │ └── r850.csv │ └── java │ └── dr │ └── mio │ └── evo │ ├── alg │ ├── util │ │ ├── neat │ │ │ ├── ConnectionTemplate.java │ │ │ ├── Connection.java │ │ │ ├── Node.java │ │ │ └── NodeTemplate.java │ │ └── cutting │ │ │ ├── Circle.java │ │ │ ├── RectangleTemplate.java │ │ │ └── Rectangle.java │ ├── genotype │ │ ├── Genotype.java │ │ ├── GenotypeEuclidean.java │ │ ├── GenotypeCuttingStock.java │ │ └── GenotypeNEAT.java │ ├── desc │ │ ├── SpaceDesc.java │ │ ├── TargetDesc.java │ │ ├── CrossingDesc.java │ │ ├── MutationDesc.java │ │ ├── SelectionDesc.java │ │ ├── CriterionDesc.java │ │ ├── PopulationInitDesc.java │ │ ├── MatingDesc.java │ │ └── EvolutionaryAlgorithmDesc.java │ ├── target │ │ ├── function │ │ │ └── TargetFunction.java │ │ └── Targets.java │ ├── Results.java │ ├── space │ │ ├── SpaceDescEuclidean.java │ │ ├── SpaceDescCuttingStock.java │ │ └── SpaceDescNEAT.java │ ├── mutation │ │ ├── MutationDescNone.java │ │ ├── MutationDescNEAT.java │ │ ├── MutationDescRandomRectangleShiftingAddingOrRemoving.java │ │ └── MutationDescOnePointGaussian.java │ ├── crossing │ │ ├── CrossingDescNone.java │ │ ├── CrossingDescStandardEuclideanFamilyModel.java │ │ └── CrossingDescRandomCuttingSplit.java │ ├── mating │ │ ├── MatingDescNone.java │ │ └── MatingDescRandomPairs.java │ ├── criterion │ │ └── CriterionDescFixedIterations.java │ ├── State.java │ ├── population │ │ ├── PopulationInitDescRandomCutting.java │ │ ├── PopulationInitDescRandomNEAT.java │ │ └── PopulationInitDescRandomUnifEuclidean.java │ ├── selection │ │ └── SelectionDescRank.java │ └── EvolutionaryAlgorithm.java │ ├── random │ └── GlobalRandom.java │ └── lab │ ├── LabThreeRunner.java │ ├── LabTwoRunner.java │ └── LabOneRunner.java ├── settings.gradle ├── .gitignore ├── gradlew.bat └── gradlew /src/main/resources/neat/head: -------------------------------------------------------------------------------- 1 | easy-training.csv 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'EvolutionaryAlgorithms' 2 | 3 | -------------------------------------------------------------------------------- /src/main/resources/csp/r1000.csv: -------------------------------------------------------------------------------- 1 | 200,120,200 2 | 200,160,300 3 | 250,160,500 4 | 100,120,40 5 | -------------------------------------------------------------------------------- /src/main/resources/csp/r1100.csv: -------------------------------------------------------------------------------- 1 | 250,120,100 2 | 120,360,300 3 | 250,160,600 4 | 150,120,40 5 | -------------------------------------------------------------------------------- /src/main/resources/csp/r1200.csv: -------------------------------------------------------------------------------- 1 | 200,120,200 2 | 200,160,300 3 | 250,160,500 4 | 100,120,40 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.gradle/ 2 | /.idea/ 3 | /build/ 4 | /out/ 5 | /EvolutionaryAlgorithms.iml 6 | /gradle/ 7 | -------------------------------------------------------------------------------- /src/main/resources/csp/r800.csv: -------------------------------------------------------------------------------- 1 | 250,120,100 2 | 320,160,500 3 | 250,160,600 4 | 150,120,40 5 | 400,30,400 6 | -------------------------------------------------------------------------------- /src/main/resources/csp/r850.csv: -------------------------------------------------------------------------------- 1 | 10,120,120 2 | 120,10,150 3 | 400,20,1200 4 | 300,30,1200 5 | 120,120,1200 6 | 100,100,900 7 | 450,80,11000 8 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/util/neat/ConnectionTemplate.java: -------------------------------------------------------------------------------- 1 | package dr.mio.evo.alg.util.neat; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ConnectionTemplate { 7 | private final int id; 8 | private final NodeTemplate inputNode; 9 | private final NodeTemplate outputNode; 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/genotype/Genotype.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.genotype; 9 | 10 | public interface Genotype { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/desc/SpaceDesc.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.desc; 9 | 10 | import dr.mio.evo.alg.genotype.Genotype; 11 | 12 | public interface SpaceDesc { 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/target/function/TargetFunction.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.target.function; 9 | 10 | import dr.mio.evo.alg.genotype.Genotype; 11 | 12 | public interface TargetFunction { 13 | double calculate(T genotype); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/util/neat/Connection.java: -------------------------------------------------------------------------------- 1 | package dr.mio.evo.alg.util.neat; 2 | 3 | import dr.mio.evo.random.GlobalRandom; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class Connection { 10 | private final ConnectionTemplate template; 11 | private Node requiredNode; 12 | private double weight = GlobalRandom.getRandom().nextGaussian(); 13 | private boolean active = true; 14 | 15 | public Connection(ConnectionTemplate template, Node requiredNode) { 16 | this.template = template; 17 | this.requiredNode = requiredNode; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/util/cutting/Circle.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.util.cutting; 9 | 10 | import lombok.Data; 11 | 12 | @Data 13 | public class Circle { 14 | private int radius; 15 | 16 | public Circle(int radius) { 17 | 18 | this.radius = radius; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/desc/TargetDesc.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.desc; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | public interface TargetDesc { 15 | void evalFitness(@NotNull State state); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/desc/CrossingDesc.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.desc; 9 | 10 | import dr.mio.evo.alg.genotype.Genotype; 11 | import org.jetbrains.annotations.NotNull; 12 | 13 | import java.util.List; 14 | 15 | public interface CrossingDesc { 16 | List cross(@NotNull List parents); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/desc/MutationDesc.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.desc; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | public interface MutationDesc { 15 | void performMutating(@NotNull State state); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/desc/SelectionDesc.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.desc; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | public interface SelectionDesc { 15 | void performSelection(@NotNull State state); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/desc/CriterionDesc.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.desc; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | public interface CriterionDesc { 15 | boolean isCriterionMet(@NotNull State state); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/desc/PopulationInitDesc.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.desc; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | public interface PopulationInitDesc { 15 | void initPopulation(@NotNull State state); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/util/cutting/RectangleTemplate.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | 9 | package dr.mio.evo.alg.util.cutting; 10 | 11 | import lombok.AllArgsConstructor; 12 | import lombok.Data; 13 | 14 | @Data 15 | @AllArgsConstructor 16 | public class RectangleTemplate { 17 | private final int width; 18 | private final int height; 19 | private final int value; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/desc/MatingDesc.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.desc; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | public interface MatingDesc { 15 | void performCrossing(@NotNull State state, @NotNull CrossingDesc crossingDesc); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/Results.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg; 9 | 10 | import dr.mio.evo.alg.genotype.Genotype; 11 | import lombok.AllArgsConstructor; 12 | import lombok.Data; 13 | import lombok.NoArgsConstructor; 14 | 15 | @Data 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class Results { 19 | private T bestGenotype; 20 | private Double value = Double.MAX_VALUE; 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/space/SpaceDescEuclidean.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.space; 9 | 10 | import dr.mio.evo.alg.desc.SpaceDesc; 11 | import dr.mio.evo.alg.genotype.GenotypeEuclidean; 12 | import lombok.Data; 13 | 14 | @Data 15 | public class SpaceDescEuclidean implements SpaceDesc { 16 | private final int dimension; 17 | private final double min; 18 | private final double max; 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/mutation/MutationDescNone.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.mutation; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.MutationDesc; 12 | import dr.mio.evo.alg.genotype.Genotype; 13 | import org.jetbrains.annotations.NotNull; 14 | 15 | public class MutationDescNone implements MutationDesc { 16 | @Override 17 | public void performMutating(@NotNull State state) { 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/crossing/CrossingDescNone.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.crossing; 9 | 10 | import dr.mio.evo.alg.desc.CrossingDesc; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | import java.util.List; 15 | 16 | public class CrossingDescNone implements CrossingDesc { 17 | @Override 18 | public List cross(@NotNull List parents) { 19 | return null; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/mating/MatingDescNone.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.mating; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.CrossingDesc; 12 | import dr.mio.evo.alg.desc.MatingDesc; 13 | import dr.mio.evo.alg.genotype.Genotype; 14 | import org.jetbrains.annotations.NotNull; 15 | 16 | public class MatingDescNone implements MatingDesc { 17 | @Override 18 | public void performCrossing(@NotNull State state, @NotNull CrossingDesc crossingDesc) { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/util/neat/Node.java: -------------------------------------------------------------------------------- 1 | package dr.mio.evo.alg.util.neat; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | @Data 9 | public class Node { 10 | private final NodeTemplate template; 11 | private double value; 12 | private final List requiredConnections = new ArrayList<>(); 13 | 14 | public Node(NodeTemplate template) { 15 | this.template = template; 16 | } 17 | 18 | public void calculateValue() { 19 | value = requiredConnections.stream() 20 | .mapToDouble(connection -> sigmoid(connection.getRequiredNode().value * connection.getWeight())).sum(); 21 | } 22 | 23 | public void addRequiredConnection(Connection connection) { 24 | requiredConnections.add(connection); 25 | } 26 | 27 | private static double sigmoid(double x) { 28 | return 1 / (1 + Math.exp(-x)); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/crossing/CrossingDescStandardEuclideanFamilyModel.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.crossing; 9 | 10 | import dr.mio.evo.alg.desc.CrossingDesc; 11 | import dr.mio.evo.alg.genotype.GenotypeEuclidean; 12 | import dr.mio.evo.random.GlobalRandom; 13 | import org.jetbrains.annotations.NotNull; 14 | 15 | import java.util.List; 16 | 17 | public class CrossingDescStandardEuclideanFamilyModel implements CrossingDesc { 18 | @Override 19 | public List cross(@NotNull List parents) { 20 | var dimension = parents.get(0).getSpaceDescEuclidean().getDimension(); 21 | return parents.get(0).crossWith(parents.get(1), new int[]{GlobalRandom.getRandom().nextInt(dimension)}); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/target/Targets.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.target; 9 | 10 | import dr.mio.evo.alg.desc.TargetDesc; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import dr.mio.evo.alg.target.function.TargetFunction; 13 | import org.jetbrains.annotations.Contract; 14 | import org.jetbrains.annotations.NotNull; 15 | 16 | import java.util.stream.Collectors; 17 | 18 | public class Targets { 19 | /* 20 | * Funkcja zwracająca opis celu dla danej funkcji w przestrzeni genotypów T 21 | * */ 22 | @Contract(pure = true) 23 | public static @NotNull TargetDesc targetFunction(TargetFunction function) { 24 | return state -> state.setFitnessValue(state.getPopulation().stream().map(function::calculate).collect(Collectors.toList())); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/random/GlobalRandom.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.random; 9 | 10 | import java.util.Random; 11 | 12 | public class GlobalRandom { 13 | private static GlobalRandom INSTANCE; 14 | 15 | private final Random random; 16 | 17 | private GlobalRandom() { 18 | random = new Random(); 19 | } 20 | 21 | private GlobalRandom(long seed) { 22 | random = new Random(seed); 23 | } 24 | 25 | public static void setUp(long seed) { 26 | INSTANCE = new GlobalRandom(seed); 27 | } 28 | 29 | public static GlobalRandom get() { 30 | return INSTANCE; 31 | } 32 | 33 | public static Random getRandom() { 34 | if (INSTANCE == null) 35 | INSTANCE = new GlobalRandom(); 36 | return INSTANCE.random; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/criterion/CriterionDescFixedIterations.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.criterion; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.CriterionDesc; 12 | import dr.mio.evo.alg.genotype.Genotype; 13 | import org.jetbrains.annotations.NotNull; 14 | 15 | public class CriterionDescFixedIterations implements CriterionDesc { 16 | private final int iterations; 17 | 18 | public CriterionDescFixedIterations(int iterations) { 19 | this.iterations = iterations; 20 | } 21 | 22 | /* 23 | * Kryterium to uznajemy za spełnione, jeśli osiągnięta zostanie określona liczba iteracji 24 | */ 25 | @Override 26 | public boolean isCriterionMet(@NotNull State state) { 27 | return state.getIteration() >= iterations; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/util/cutting/Rectangle.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.util.cutting; 9 | 10 | import lombok.AllArgsConstructor; 11 | import lombok.Data; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | @Data 15 | @AllArgsConstructor 16 | public class Rectangle { 17 | private RectangleTemplate template; 18 | private int x; 19 | private int y; 20 | 21 | public boolean intersectsWith(@NotNull Rectangle other) { 22 | return !(other.x > this.x + this.template.getWidth() || 23 | other.x + other.template.getWidth() < this.x || 24 | other.y + other.template.getHeight() < this.y || 25 | other.y > this.y + this.template.getHeight()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/mutation/MutationDescNEAT.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.mutation; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.MutationDesc; 12 | import dr.mio.evo.alg.genotype.GenotypeNEAT; 13 | import dr.mio.evo.random.GlobalRandom; 14 | import org.jetbrains.annotations.NotNull; 15 | 16 | import java.util.Random; 17 | 18 | public class MutationDescNEAT implements MutationDesc { 19 | private final Random random = GlobalRandom.getRandom(); 20 | 21 | @Override 22 | public void performMutating(@NotNull State state) { 23 | double val; 24 | for (GenotypeNEAT individual : state.getPopulation()) { 25 | val = random.nextDouble(); 26 | if (val < 0.5) { 27 | individual.mutateWeight(); 28 | } 29 | val = random.nextDouble(); 30 | if (val < 0.1) { 31 | individual.addRandomNode(); 32 | } 33 | } 34 | 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/util/neat/NodeTemplate.java: -------------------------------------------------------------------------------- 1 | package dr.mio.evo.alg.util.neat; 2 | 3 | import lombok.Data; 4 | import org.jetbrains.annotations.Contract; 5 | import org.jetbrains.annotations.NotNull; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | @Data 11 | public class NodeTemplate { 12 | private final int id; 13 | private final NodeType type; 14 | private final NodeTemplate precedingNode; 15 | private final NodeTemplate succeedingNode; 16 | 17 | private NodeTemplate(int id, NodeType type, NodeTemplate preceding, NodeTemplate succeeding) { 18 | this.id = id; 19 | this.type = type; 20 | this.precedingNode = preceding; 21 | this.succeedingNode = succeeding; 22 | } 23 | 24 | public NodeTemplate(int id, @NotNull NodeTemplate preceding, @NotNull NodeTemplate succeeding) { 25 | this(id, NodeType.HIDDEN, preceding, succeeding); 26 | } 27 | 28 | @Contract("_ -> new") 29 | public static @NotNull NodeTemplate input(int id) { 30 | return new NodeTemplate(id, NodeType.INPUT, null, null); 31 | } 32 | 33 | public static @NotNull NodeTemplate output(@NotNull List inputs) { 34 | return new NodeTemplate(inputs.size(), NodeType.OUTPUT, null, null); 35 | } 36 | 37 | public enum NodeType { 38 | INPUT, 39 | HIDDEN, 40 | OUTPUT 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/State.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg; 9 | 10 | import dr.mio.evo.alg.desc.SpaceDesc; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import lombok.Data; 13 | 14 | import java.util.List; 15 | 16 | @Data 17 | public class State { 18 | private final SpaceDesc spaceDesc; 19 | private int initialPopulationSize; 20 | private List population; 21 | private List fitnessValue; 22 | private Results best = new Results<>(); 23 | private int iteration = 0; 24 | 25 | public State(SpaceDesc spaceDesc){ 26 | this.spaceDesc = spaceDesc; 27 | } 28 | 29 | public void incrementCounter() { 30 | iteration++; 31 | } 32 | 33 | public void selectBest() { 34 | for (int i = 0; i < population.size(); i++) { 35 | if (fitnessValue.get(i) < best.getValue()) { 36 | best.setValue(fitnessValue.get(i)); 37 | best.setBestGenotype(population.get(i)); 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/population/PopulationInitDescRandomCutting.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.population; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.PopulationInitDesc; 12 | import dr.mio.evo.alg.genotype.GenotypeCuttingStock; 13 | import dr.mio.evo.alg.space.SpaceDescCuttingStock; 14 | import org.jetbrains.annotations.NotNull; 15 | 16 | import java.util.ArrayList; 17 | 18 | public class PopulationInitDescRandomCutting implements PopulationInitDesc { 19 | 20 | private final int initialPopulationSize; 21 | 22 | public PopulationInitDescRandomCutting(int initialPopulationSize) { 23 | this.initialPopulationSize = initialPopulationSize; 24 | } 25 | @Override 26 | public void initPopulation(@NotNull State state) { 27 | var population = new ArrayList(initialPopulationSize); 28 | var space = (SpaceDescCuttingStock) state.getSpaceDesc(); 29 | for (int i = 0; i < initialPopulationSize; i++) { 30 | population.add(GenotypeCuttingStock.getRandomCut(space, 100)); 31 | } 32 | state.setPopulation(population); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/population/PopulationInitDescRandomNEAT.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.population; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.PopulationInitDesc; 12 | import dr.mio.evo.alg.genotype.GenotypeNEAT; 13 | import dr.mio.evo.alg.space.SpaceDescNEAT; 14 | import org.jetbrains.annotations.NotNull; 15 | 16 | import java.util.ArrayList; 17 | 18 | public class PopulationInitDescRandomNEAT implements PopulationInitDesc { 19 | private final int initialPopulationSize; 20 | 21 | public PopulationInitDescRandomNEAT(int initialPopulationSize) { 22 | this.initialPopulationSize = initialPopulationSize; 23 | } 24 | 25 | @Override 26 | public void initPopulation(@NotNull State state) { 27 | var population = new ArrayList(initialPopulationSize); 28 | var desc = (SpaceDescNEAT) state.getSpaceDesc(); 29 | 30 | for (int i = 0; i < initialPopulationSize; i++) { 31 | population.add(desc.getSimpleNetwork()); 32 | } 33 | 34 | state.setPopulation(population); 35 | state.setInitialPopulationSize(initialPopulationSize); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/mutation/MutationDescRandomRectangleShiftingAddingOrRemoving.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.mutation; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.MutationDesc; 12 | import dr.mio.evo.alg.genotype.GenotypeCuttingStock; 13 | import dr.mio.evo.alg.space.SpaceDescCuttingStock; 14 | import dr.mio.evo.random.GlobalRandom; 15 | import org.jetbrains.annotations.NotNull; 16 | 17 | import java.util.Random; 18 | 19 | public class MutationDescRandomRectangleShiftingAddingOrRemoving implements MutationDesc { 20 | private final Random random = GlobalRandom.getRandom(); 21 | 22 | @Override 23 | public void performMutating(@NotNull State state) { 24 | state.getPopulation().stream() 25 | .filter(genotype -> random.nextDouble() < 0.2) 26 | .forEach(genotype -> { 27 | var type = random.nextDouble(); 28 | if (type < 0.05) genotype.removeRandomRectangle(); 29 | else if (type < 0.2) genotype.tryAddingRandomRectangles((SpaceDescCuttingStock) state.getSpaceDesc(), 100); 30 | else genotype.tryShiftingRandomRectangles(); 31 | }); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/desc/EvolutionaryAlgorithmDesc.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.desc; 9 | 10 | import dr.mio.evo.alg.EvolutionaryAlgorithm; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import lombok.AllArgsConstructor; 13 | import lombok.Builder; 14 | import lombok.Data; 15 | import lombok.NoArgsConstructor; 16 | 17 | @Data 18 | @Builder 19 | @NoArgsConstructor 20 | @AllArgsConstructor 21 | public class EvolutionaryAlgorithmDesc { 22 | private SpaceDesc spaceDesc; 23 | private PopulationInitDesc populationInitDesc; 24 | private TargetDesc targetDesc; 25 | private CrossingDesc crossingDesc; 26 | private MatingDesc matingDesc; 27 | private MutationDesc mutationDesc; 28 | private SelectionDesc selectionDesc; 29 | private CriterionDesc criterionDesc; 30 | 31 | public EvolutionaryAlgorithm getAlgorithm() { 32 | return new EvolutionaryAlgorithm<>( 33 | spaceDesc, 34 | populationInitDesc, 35 | targetDesc, 36 | matingDesc, 37 | crossingDesc, 38 | mutationDesc, 39 | selectionDesc, 40 | criterionDesc); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/mating/MatingDescRandomPairs.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.mating; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.CrossingDesc; 12 | import dr.mio.evo.alg.desc.MatingDesc; 13 | import dr.mio.evo.alg.genotype.Genotype; 14 | import dr.mio.evo.random.GlobalRandom; 15 | import org.jetbrains.annotations.NotNull; 16 | 17 | import java.util.Collections; 18 | import java.util.List; 19 | import java.util.stream.Collectors; 20 | import java.util.stream.IntStream; 21 | 22 | public class MatingDescRandomPairs implements MatingDesc { 23 | /* 24 | * Dokonujemy krzyżowania losowych par 25 | * */ 26 | @Override 27 | public void performCrossing(@NotNull State state, @NotNull CrossingDesc crossingDesc) { 28 | var population = state.getPopulation(); 29 | int numPairs = population.size() / 2; 30 | // osobnika o indeksie i krzyżujemy z osobnikiem i + numPairs dla i w {0, ... numPairs - 1} i każda para ma dwójkę dzieci 31 | population.addAll(IntStream.range(0, numPairs) 32 | .boxed() 33 | .flatMap(i -> crossingDesc.cross(List.of(population.get(i), population.get(i + numPairs))).stream()) 34 | .collect(Collectors.toList())); 35 | // przetasowujemy populację, by ususnąć informację, kto jest rodzicem, a kto potomkiem 36 | Collections.shuffle(population, GlobalRandom.getRandom()); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/mutation/MutationDescOnePointGaussian.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.mutation; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.MutationDesc; 12 | import dr.mio.evo.alg.genotype.GenotypeEuclidean; 13 | import dr.mio.evo.random.GlobalRandom; 14 | import org.jetbrains.annotations.NotNull; 15 | 16 | import java.util.Random; 17 | 18 | public class MutationDescOnePointGaussian implements MutationDesc { 19 | private final double probability; 20 | private final double mean; 21 | private final double deviation; 22 | private final Random random = GlobalRandom.getRandom(); 23 | 24 | public MutationDescOnePointGaussian(double probability, double mean, double deviation) { 25 | this.probability = probability; 26 | this.mean = mean; 27 | this.deviation = deviation; 28 | } 29 | 30 | public MutationDescOnePointGaussian(double probability) { 31 | this(probability, 0, 1); 32 | } 33 | 34 | /* 35 | * Losowo wybranym osobnikom dodajemy losowe mutacje z rozkładu normalnego 36 | * */ 37 | @Override 38 | public void performMutating(@NotNull State state) { 39 | var dimensions = state.getPopulation().get(0).getSpaceDescEuclidean().getDimension(); 40 | state.getPopulation() 41 | .forEach(genotype -> { 42 | if (random.nextDouble() < probability) 43 | genotype.mutateAt(random.nextInt(dimensions), random.nextGaussian() * deviation + mean); 44 | }); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/population/PopulationInitDescRandomUnifEuclidean.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.population; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.PopulationInitDesc; 12 | import dr.mio.evo.alg.genotype.GenotypeEuclidean; 13 | import dr.mio.evo.alg.space.SpaceDescEuclidean; 14 | import dr.mio.evo.random.GlobalRandom; 15 | import org.jetbrains.annotations.NotNull; 16 | 17 | import java.util.ArrayList; 18 | import java.util.Random; 19 | 20 | public class PopulationInitDescRandomUnifEuclidean implements PopulationInitDesc { 21 | 22 | private final int initialPopulationSize; 23 | 24 | private final Random random = GlobalRandom.getRandom(); 25 | 26 | public PopulationInitDescRandomUnifEuclidean(int initialPopulationSize) { 27 | this.initialPopulationSize = initialPopulationSize; 28 | } 29 | 30 | /* 31 | * inicjalizujemy populację losowo z rozkładu normalnego 32 | * */ 33 | @Override 34 | public void initPopulation(@NotNull State state) { 35 | var population = new ArrayList(); 36 | var spaceDesc = (SpaceDescEuclidean) state.getSpaceDesc(); 37 | var dimension = spaceDesc.getDimension(); 38 | var min = spaceDesc.getMin(); 39 | var max = spaceDesc.getMax(); 40 | for (int i = 0; i < initialPopulationSize; i++) { 41 | population.add(new GenotypeEuclidean(random.doubles(dimension, min, max).toArray(), spaceDesc)); 42 | } 43 | state.setInitialPopulationSize(initialPopulationSize); 44 | state.setPopulation(population); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/genotype/GenotypeEuclidean.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.genotype; 9 | 10 | import dr.mio.evo.alg.space.SpaceDescEuclidean; 11 | import lombok.Getter; 12 | import org.jetbrains.annotations.Contract; 13 | import org.jetbrains.annotations.NotNull; 14 | 15 | import java.util.Arrays; 16 | import java.util.List; 17 | 18 | public class GenotypeEuclidean implements Genotype { 19 | private final double[] genome; 20 | @Getter 21 | private final SpaceDescEuclidean spaceDescEuclidean; 22 | 23 | @Contract(pure = true) 24 | public GenotypeEuclidean(double @NotNull [] genome, SpaceDescEuclidean spaceDescEuclidean) { 25 | this.genome = genome; 26 | this.spaceDescEuclidean = spaceDescEuclidean; 27 | } 28 | 29 | public double at(int position) { 30 | return genome[position]; 31 | } 32 | 33 | public void mutateAt(int position, double mutation) { 34 | genome[position] = genome[position] + mutation; 35 | } 36 | 37 | public List crossWith(@NotNull GenotypeEuclidean other, int @NotNull [] positions) { 38 | var offspringOne = this.genome.clone(); 39 | var offspringTwo = other.genome.clone(); 40 | for (var position : positions) { 41 | offspringOne[position] = other.genome[position]; 42 | offspringTwo[position] = this.genome[position]; 43 | } 44 | return List.of(new GenotypeEuclidean(offspringOne, spaceDescEuclidean), new GenotypeEuclidean(offspringTwo, spaceDescEuclidean)); 45 | } 46 | 47 | @Override 48 | public String toString() { 49 | return Arrays.toString(genome); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/space/SpaceDescCuttingStock.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.space; 9 | 10 | import dr.mio.evo.alg.desc.SpaceDesc; 11 | import dr.mio.evo.alg.genotype.GenotypeCuttingStock; 12 | import dr.mio.evo.alg.util.cutting.Circle; 13 | import dr.mio.evo.alg.util.cutting.RectangleTemplate; 14 | import lombok.Data; 15 | import org.jetbrains.annotations.Nullable; 16 | 17 | import java.io.BufferedReader; 18 | import java.io.FileReader; 19 | import java.io.IOException; 20 | import java.util.ArrayList; 21 | import java.util.List; 22 | 23 | @Data 24 | public class SpaceDescCuttingStock implements SpaceDesc { 25 | private final Circle circle; 26 | private final List templates; 27 | 28 | public SpaceDescCuttingStock(int circleRadius, List templates) { 29 | this.templates = templates; 30 | this.circle = new Circle(circleRadius); 31 | } 32 | 33 | public static @Nullable SpaceDescCuttingStock fromCSVFile(String path, int radius) { 34 | var rectangles = new ArrayList(); 35 | try (var csvReader = new BufferedReader(new FileReader(path))) { 36 | String row; 37 | while ((row = csvReader.readLine()) != null) { 38 | String[] data = row.split(","); 39 | rectangles.add(new RectangleTemplate(Integer.parseInt(data[0]), Integer.parseInt(data[1]), Integer.parseInt(data[2]))); 40 | } 41 | return new SpaceDescCuttingStock(radius, rectangles); 42 | } catch (IOException e) { 43 | e.printStackTrace(); 44 | return null; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/selection/SelectionDescRank.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.selection; 9 | 10 | import dr.mio.evo.alg.State; 11 | import dr.mio.evo.alg.desc.SelectionDesc; 12 | import dr.mio.evo.alg.genotype.Genotype; 13 | import dr.mio.evo.random.GlobalRandom; 14 | import org.jetbrains.annotations.NotNull; 15 | 16 | import java.util.*; 17 | import java.util.stream.Collectors; 18 | import java.util.stream.IntStream; 19 | 20 | public class SelectionDescRank implements SelectionDesc { 21 | 22 | private final Random random = GlobalRandom.getRandom(); 23 | 24 | /* 25 | * Funkcja do dokonywania selekcji metodą rankingową 26 | * */ 27 | @Override 28 | public void performSelection(@NotNull State state) { 29 | var population = state.getPopulation(); 30 | var fitnessValues = state.getFitnessValue(); 31 | // ustalamy kolejność według wartości fitness value 32 | var order = IntStream.range(0, population.size()) 33 | .boxed() 34 | .sorted(Comparator.comparingDouble(fitnessValues::get)) 35 | .collect(Collectors.toList()); 36 | 37 | var newPopulation = new ArrayList(state.getInitialPopulationSize()); 38 | // wybieramy indeksy osobników, którzy przetrwają 39 | var newIndices = sample(getWeights(order, population.size()), state.getInitialPopulationSize()); 40 | newIndices.forEach(index -> newPopulation.add(population.get(index))); 41 | // ustawiamy te osobniki jako nową populację 42 | state.setPopulation(newPopulation); 43 | } 44 | 45 | private @NotNull List getWeights(@NotNull List order, int populationSize) { 46 | var ret = new ArrayList<>(Collections.nCopies(populationSize, 0)); 47 | for (int i = 0; i < populationSize; i++) { 48 | ret.set(order.get(i), (int) Math.floor(100 / (1 + Math.exp(((double) 8 * i) / populationSize - 4)))); 49 | } 50 | return ret; 51 | } 52 | 53 | private @NotNull List sample(@NotNull List weights, int sampleSize) { 54 | var ret = new ArrayList(sampleSize); 55 | long totalNum = weights.stream().mapToInt(value -> value).sum(); 56 | for (int i = 0; i < sampleSize; i++) { 57 | var item = (long) Math.floor(random.nextFloat() * totalNum); 58 | int j = 0; 59 | long itemsPast = weights.get(0); 60 | while (itemsPast < item) { 61 | j++; 62 | itemsPast += weights.get(j); 63 | } 64 | ret.add(j); 65 | totalNum -= weights.get(j); 66 | weights.remove(j); 67 | } 68 | return ret; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 33 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 34 | 35 | @rem Find java.exe 36 | if defined JAVA_HOME goto findJavaFromJavaHome 37 | 38 | set JAVA_EXE=java.exe 39 | %JAVA_EXE% -version >NUL 2>&1 40 | if "%ERRORLEVEL%" == "0" goto init 41 | 42 | echo. 43 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 44 | echo. 45 | echo Please set the JAVA_HOME variable in your environment to match the 46 | echo location of your Java installation. 47 | 48 | goto fail 49 | 50 | :findJavaFromJavaHome 51 | set JAVA_HOME=%JAVA_HOME:"=% 52 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 53 | 54 | if exist "%JAVA_EXE%" goto init 55 | 56 | echo. 57 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 58 | echo. 59 | echo Please set the JAVA_HOME variable in your environment to match the 60 | echo location of your Java installation. 61 | 62 | goto fail 63 | 64 | :init 65 | @rem Get command-line arguments, handling Windows variants 66 | 67 | if not "%OS%" == "Windows_NT" goto win9xME_args 68 | 69 | :win9xME_args 70 | @rem Slurp the command line arguments. 71 | set CMD_LINE_ARGS= 72 | set _SKIP=2 73 | 74 | :win9xME_args_slurp 75 | if "x%~1" == "x" goto execute 76 | 77 | set CMD_LINE_ARGS=%* 78 | 79 | :execute 80 | @rem Setup the command line 81 | 82 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 83 | 84 | @rem Execute Gradle 85 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 86 | 87 | :end 88 | @rem End local scope for the variables with windows NT shell 89 | if "%ERRORLEVEL%"=="0" goto mainEnd 90 | 91 | :fail 92 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 93 | rem the _cmd.exe /c_ return code! 94 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 95 | exit /b 1 96 | 97 | :mainEnd 98 | if "%OS%"=="Windows_NT" endlocal 99 | 100 | :omega 101 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/EvolutionaryAlgorithm.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg; 9 | 10 | import dr.mio.evo.alg.desc.*; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | 13 | public class EvolutionaryAlgorithm { 14 | private final PopulationInitDesc populationInitDesc; 15 | private final TargetDesc targetDesc; 16 | private final CrossingDesc crossingDesc; 17 | private final MatingDesc matingDesc; 18 | private final MutationDesc mutationDesc; 19 | private final SelectionDesc selectionDesc; 20 | private final CriterionDesc criterionDesc; 21 | 22 | private final State state; 23 | 24 | public EvolutionaryAlgorithm(SpaceDesc spaceDesc, 25 | PopulationInitDesc populationInitDesc, 26 | TargetDesc targetDesc, 27 | MatingDesc matingDesc, 28 | CrossingDesc crossingDesc, 29 | MutationDesc mutationDesc, 30 | SelectionDesc selectionDesc, 31 | CriterionDesc criterionDesc) { 32 | this.populationInitDesc = populationInitDesc; 33 | this.targetDesc = targetDesc; 34 | this.mutationDesc = mutationDesc; 35 | this.matingDesc = matingDesc; 36 | this.crossingDesc = crossingDesc; 37 | this.selectionDesc = selectionDesc; 38 | this.criterionDesc = criterionDesc; 39 | state = new State<>(spaceDesc); 40 | } 41 | 42 | public void run(boolean verbose) { 43 | // nazwy są, mam nadzieję, dość samoopisujące - wszystkie dokonują zmian w obiekcie State 44 | // przechowującym stan populacji w danym momencie i delegują wykonanie metod do implementacji 45 | // interfejsów opisujących poszczególne kroki 46 | initPopulation(); 47 | evalFitness(); 48 | if (verbose) System.out.println("Best value at init: " + getResults().getValue()); 49 | while (!isCriterionMet()) { 50 | incrementCounter(); 51 | performCrossing(); 52 | performMutating(); 53 | evalFitness(); 54 | if (verbose) System.out.println("Best value after " + state.getIteration() + " iteration: " + getResults().getValue()); 55 | performSelection(); 56 | } 57 | } 58 | 59 | public void run() { 60 | run(false); 61 | } 62 | 63 | private void incrementCounter() { 64 | state.incrementCounter(); 65 | } 66 | 67 | private void initPopulation() { 68 | populationInitDesc.initPopulation(state); 69 | } 70 | 71 | private void evalFitness() { 72 | targetDesc.evalFitness(state); 73 | state.selectBest(); 74 | } 75 | 76 | private boolean isCriterionMet() { 77 | return criterionDesc.isCriterionMet(state); 78 | } 79 | 80 | private void performCrossing() { 81 | matingDesc.performCrossing(state, crossingDesc); 82 | } 83 | 84 | private void performMutating() { 85 | mutationDesc.performMutating(state); 86 | } 87 | 88 | private void performSelection() { 89 | selectionDesc.performSelection(state); 90 | } 91 | 92 | public Results getResults() { 93 | return state.getBest(); 94 | } 95 | 96 | } 97 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/lab/LabThreeRunner.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.lab; 9 | 10 | import com.opencsv.CSVReader; 11 | import com.opencsv.exceptions.CsvValidationException; 12 | import dr.mio.evo.alg.criterion.CriterionDescFixedIterations; 13 | import dr.mio.evo.alg.crossing.CrossingDescNone; 14 | import dr.mio.evo.alg.desc.EvolutionaryAlgorithmDesc; 15 | import dr.mio.evo.alg.genotype.GenotypeNEAT; 16 | import dr.mio.evo.alg.mating.MatingDescNone; 17 | import dr.mio.evo.alg.mutation.MutationDescNEAT; 18 | import dr.mio.evo.alg.population.PopulationInitDescRandomNEAT; 19 | import dr.mio.evo.alg.selection.SelectionDescRank; 20 | import dr.mio.evo.alg.space.SpaceDescNEAT; 21 | import dr.mio.evo.alg.target.Targets; 22 | import dr.mio.evo.random.GlobalRandom; 23 | import lombok.Data; 24 | import org.jetbrains.annotations.Contract; 25 | import org.jetbrains.annotations.NotNull; 26 | 27 | import java.io.FileReader; 28 | import java.io.IOException; 29 | import java.util.ArrayList; 30 | import java.util.Arrays; 31 | import java.util.List; 32 | import java.util.stream.Collectors; 33 | 34 | public class LabThreeRunner { 35 | public static void main(String[] args) throws IOException, CsvValidationException { 36 | //ustawiamy seed 37 | GlobalRandom.setUp(1998); 38 | 39 | // wczytywanie danych z pliku CSV 40 | var data = TrainData.readCSV("src/main/resources/neat/easy-training.csv"); 41 | 42 | // ten schemat algorytmu opisuje algorytmm NEAT z wejsciem dwuwymiarowym (jak w danych easy) 43 | var algorithm = EvolutionaryAlgorithmDesc.builder() 44 | .spaceDesc(new SpaceDescNEAT(2)) 45 | .populationInitDesc(new PopulationInitDescRandomNEAT(1000)) 46 | .targetDesc(Targets.targetFunction(net -> net.calculateMSE(data.getX(), data.getY()))) 47 | // parowanie i krzyzowanie nie wystepują 48 | .matingDesc(new MatingDescNone<>()) 49 | .crossingDesc(new CrossingDescNone<>()) 50 | // mutacja polegająca na modyfikacji wag i wstawianiu nowych neuronów 51 | .mutationDesc(new MutationDescNEAT()) 52 | .criterionDesc(new CriterionDescFixedIterations<>(10)) 53 | .selectionDesc(new SelectionDescRank<>()) 54 | .build() 55 | .getAlgorithm(); 56 | 57 | algorithm.run(); 58 | System.out.println(algorithm.getResults()); 59 | // value=0.512812364091438 60 | } 61 | 62 | @Data 63 | static class TrainData { 64 | private final List> X; 65 | private final List y; 66 | 67 | private TrainData(@NotNull List> X, @NotNull List y) { 68 | this.X = X; 69 | this.y = y; 70 | } 71 | 72 | @Contract("_ -> new") 73 | public static @NotNull TrainData readCSV(String file) throws IOException, CsvValidationException { 74 | var X = new ArrayList>(); 75 | var y = new ArrayList(); 76 | try (CSVReader csvReader = new CSVReader(new FileReader(file))) { 77 | String[] values = csvReader.readNext(); 78 | while ((values = csvReader.readNext()) != null) { 79 | boolean r = Boolean.parseBoolean(values[values.length - 1]); 80 | y.add(r ? 1.0 : 0.0); 81 | X.add(Arrays.stream(Arrays.copyOfRange(values, 0, values.length - 1)) 82 | .map(Double::parseDouble) 83 | .collect(Collectors.toList())); 84 | } 85 | } 86 | return new TrainData(X, y); 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/space/SpaceDescNEAT.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.space; 9 | 10 | import dr.mio.evo.alg.desc.SpaceDesc; 11 | import dr.mio.evo.alg.genotype.Genotype; 12 | import dr.mio.evo.alg.genotype.GenotypeNEAT; 13 | import dr.mio.evo.alg.util.neat.Connection; 14 | import dr.mio.evo.alg.util.neat.ConnectionTemplate; 15 | import dr.mio.evo.alg.util.neat.Node; 16 | import dr.mio.evo.alg.util.neat.NodeTemplate; 17 | import lombok.AllArgsConstructor; 18 | import lombok.Data; 19 | import org.jetbrains.annotations.NotNull; 20 | 21 | import java.util.ArrayList; 22 | import java.util.List; 23 | import java.util.stream.Collectors; 24 | import java.util.stream.IntStream; 25 | 26 | public class SpaceDescNEAT implements SpaceDesc { 27 | private final int inputSize; 28 | 29 | private final List nodeTemplates; 30 | private final List connectionTemplates; 31 | 32 | public SpaceDescNEAT(int inputSize) { 33 | this.inputSize = inputSize; 34 | 35 | this.nodeTemplates = IntStream.range(0, inputSize + 1) 36 | .mapToObj(NodeTemplate::input) 37 | .collect(Collectors.toList()); 38 | nodeTemplates.add(NodeTemplate.output(nodeTemplates)); 39 | 40 | this.connectionTemplates = IntStream.range(0, inputSize + 1) 41 | .mapToObj(i -> new ConnectionTemplate(i, nodeTemplates.get(i), nodeTemplates.get(inputSize + 1))) 42 | .collect(Collectors.toList()); 43 | } 44 | 45 | public ConnectionTemplate getConnectionTemplateBetweenTwoNodes(@NotNull Node precedingNode, @NotNull Node succeedingNode) { 46 | var precedingNodeTemplate = precedingNode.getTemplate(); 47 | var succeedingNodeTemplate = succeedingNode.getTemplate(); 48 | var potentialTemplate = connectionTemplates.stream() 49 | .filter(template -> template.getInputNode() == precedingNodeTemplate && template.getOutputNode() == succeedingNodeTemplate) 50 | .findFirst(); 51 | if (potentialTemplate.isPresent()) return potentialTemplate.get(); 52 | else { 53 | var connectionTemplate = new ConnectionTemplate(connectionTemplates.size(), precedingNodeTemplate, succeedingNodeTemplate); 54 | connectionTemplates.add(connectionTemplate); 55 | return connectionTemplate; 56 | } 57 | } 58 | 59 | public NodeTemplate getNodeTemplateOnConnection(@NotNull Connection connection) { 60 | var outputNode = connection.getTemplate().getOutputNode(); 61 | var inputNode = connection.getTemplate().getInputNode(); 62 | var potentialTemplate = nodeTemplates.stream() 63 | .filter(template -> template.getPrecedingNode() == inputNode && template.getSucceedingNode() == outputNode) 64 | .findFirst(); 65 | if (potentialTemplate.isPresent()) return potentialTemplate.get(); 66 | else { 67 | var nodeTemplate = new NodeTemplate(nodeTemplates.size(), inputNode, outputNode); 68 | nodeTemplates.add(nodeTemplate); 69 | return nodeTemplate; 70 | } 71 | } 72 | 73 | public GenotypeNEAT getSimpleNetwork() { 74 | var nodes = nodeTemplates.subList(0, inputSize + 2).stream() 75 | .map(Node::new) 76 | .collect(Collectors.toList()); 77 | 78 | var connections = IntStream.range(0, inputSize + 1) 79 | .mapToObj(i -> new Connection(connectionTemplates.get(i), nodes.get(i))) 80 | .collect(Collectors.toList()); 81 | 82 | nodes.get(inputSize + 1).getRequiredConnections().addAll(connections); 83 | 84 | return new GenotypeNEAT(nodes, connections, this); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/lab/LabTwoRunner.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.lab; 9 | 10 | import dr.mio.evo.alg.EvolutionaryAlgorithm; 11 | import dr.mio.evo.alg.criterion.CriterionDescFixedIterations; 12 | import dr.mio.evo.alg.crossing.CrossingDescRandomCuttingSplit; 13 | import dr.mio.evo.alg.desc.EvolutionaryAlgorithmDesc; 14 | import dr.mio.evo.alg.mutation.MutationDescRandomRectangleShiftingAddingOrRemoving; 15 | import dr.mio.evo.alg.space.SpaceDescCuttingStock; 16 | import dr.mio.evo.alg.mating.MatingDescRandomPairs; 17 | import dr.mio.evo.alg.genotype.GenotypeCuttingStock; 18 | import dr.mio.evo.alg.selection.SelectionDescRank; 19 | import dr.mio.evo.alg.population.PopulationInitDescRandomCutting; 20 | import dr.mio.evo.alg.target.Targets; 21 | import dr.mio.evo.random.GlobalRandom; 22 | 23 | public class LabTwoRunner { 24 | public static void main(String[] args) { 25 | //ustawiamy seed 26 | GlobalRandom.setUp(1998); 27 | 28 | // projektujemy algorytm 29 | // rozwiązaniem jest tutaj lista prostokątów ze współrzędnymi całkowitymi, zawierającymi się w zadanym kole 30 | var desc = EvolutionaryAlgorithmDesc.builder() 31 | // populacja bedzie inicjalizowana losowo przez wstawianie w koła losowo prostokątów 32 | .populationInitDesc(new PopulationInitDescRandomCutting(1000)) 33 | // funkcja celu (do minimalizacji) to minus suma wartości prostokątów 34 | .targetDesc(Targets.targetFunction(cut -> -cut.getRectangles().stream().mapToInt(rect -> rect.getTemplate().getValue()).sum())) 35 | // pary będą parowane losowo, każdy w jednej parze 36 | .matingDesc(new MatingDescRandomPairs<>()) 37 | // krzyżowanie odbywa się przez wybór losowo miejsca przecięcia dwóch rodziców A i B horyzontalnie lub wertykalnie 38 | // dla przeciecia wertyklanego: dziecko C otrzymuje wszystkie prostokąty zawarte na lewo od cięcia z rodzica A 39 | // oraz wszystkie prostokądy zawarte na prawo od cięcia z rodzica B 40 | // a dziecko D otrzymuje wszystkie prostokądy zawarte na prawo od cięcia z rodzica A oraz wszystkie 41 | // prostokąty na lewo od cięcia z rodzica A 42 | .crossingDesc(new CrossingDescRandomCuttingSplit()) 43 | // mutatcja danego prostokąta zachodzi z prawd. 0.2. Jeśli zachodzi, to 44 | // z prawd. 0.05 usuwany jest jeden prostokąt z rozwiązania, z prawd. 45 | // z prawd. 0.15 próbujemy wstawić nowy prostokąt 46 | // z prawd. 0.8 przesuwamy jeden prostokąt o losową wartość z rozkładu normalnego 47 | .mutationDesc(new MutationDescRandomRectangleShiftingAddingOrRemoving()) 48 | // ewolucja będzie trwać 10000 iteracji 49 | .criterionDesc(new CriterionDescFixedIterations<>(10000)) 50 | // selekcja rankingowa 51 | .selectionDesc(new SelectionDescRank<>()); 52 | 53 | EvolutionaryAlgorithm algorithm; 54 | 55 | for (var size : new int[]{800, 850, 1000, 1100, 1200}) { 56 | algorithm = desc 57 | .spaceDesc(SpaceDescCuttingStock.fromCSVFile("src/main/resources/csp/r" + size + ".csv", size)) 58 | .build() 59 | .getAlgorithm(); 60 | 61 | algorithm.run(); 62 | var results = algorithm.getResults(); 63 | System.out.println("radius: " + size + "\nvalue: " + results.getValue() + "\nrectangles:\n" + results.getBestGenotype() + "\n"); 64 | } 65 | 66 | //wyniki dla poszczególnych zadań: 67 | //800: -9320.0 68 | //850: -107720.0 69 | //1000: -10300.0 70 | //1100: -10740.0 71 | //1200: -13580.0 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/crossing/CrossingDescRandomCuttingSplit.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.crossing; 9 | 10 | import dr.mio.evo.alg.desc.CrossingDesc; 11 | import dr.mio.evo.alg.genotype.GenotypeCuttingStock; 12 | import dr.mio.evo.random.GlobalRandom; 13 | import org.jetbrains.annotations.NotNull; 14 | 15 | import java.util.List; 16 | import java.util.Random; 17 | import java.util.stream.Collectors; 18 | 19 | public class CrossingDescRandomCuttingSplit implements CrossingDesc { 20 | private final Random random = GlobalRandom.getRandom(); 21 | 22 | @Override 23 | public List cross(@NotNull List parents) { 24 | var radius = parents.get(0).getSpace().getCircle().getRadius(); 25 | var split = (int) (random.nextDouble() * radius - (double) radius / 2); 26 | 27 | var offspring = List.of( 28 | new GenotypeCuttingStock(parents.get(0).getSpace()), 29 | new GenotypeCuttingStock(parents.get(0).getSpace())); 30 | if (random.nextBoolean()) { 31 | offspring.get(0).getRectangles().addAll( 32 | parents.get(0) 33 | .getRectangles() 34 | .stream() 35 | .filter(rect -> rect.getX() + rect.getTemplate().getWidth() <= split) 36 | .collect(Collectors.toList()) 37 | ); 38 | offspring.get(0).getRectangles().addAll( 39 | parents.get(1) 40 | .getRectangles() 41 | .stream() 42 | .filter(rect -> rect.getX() > split) 43 | .collect(Collectors.toList()) 44 | ); 45 | offspring.get(1).getRectangles().addAll( 46 | parents.get(1) 47 | .getRectangles() 48 | .stream() 49 | .filter(rect -> rect.getX() + rect.getTemplate().getWidth() <= split) 50 | .collect(Collectors.toList()) 51 | ); 52 | offspring.get(1).getRectangles().addAll( 53 | parents.get(0) 54 | .getRectangles() 55 | .stream() 56 | .filter(rect -> rect.getX() > split) 57 | .collect(Collectors.toList()) 58 | ); 59 | } else { 60 | offspring.get(0).getRectangles().addAll( 61 | parents.get(0) 62 | .getRectangles() 63 | .stream() 64 | .filter(rect -> rect.getY() + rect.getTemplate().getHeight() <= split) 65 | .collect(Collectors.toList()) 66 | ); 67 | offspring.get(0).getRectangles().addAll( 68 | parents.get(1) 69 | .getRectangles() 70 | .stream() 71 | .filter(rect -> rect.getY() > split) 72 | .collect(Collectors.toList()) 73 | ); 74 | offspring.get(1).getRectangles().addAll( 75 | parents.get(1) 76 | .getRectangles() 77 | .stream() 78 | .filter(rect -> rect.getY() + rect.getTemplate().getHeight() <= split) 79 | .collect(Collectors.toList()) 80 | ); 81 | offspring.get(1).getRectangles().addAll( 82 | parents.get(0) 83 | .getRectangles() 84 | .stream() 85 | .filter(rect -> rect.getY() > split) 86 | .collect(Collectors.toList()) 87 | ); 88 | } 89 | return offspring; 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/lab/LabOneRunner.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.lab; 9 | 10 | import dr.mio.evo.alg.crossing.CrossingDescStandardEuclideanFamilyModel; 11 | import dr.mio.evo.alg.desc.EvolutionaryAlgorithmDesc; 12 | import dr.mio.evo.alg.mating.MatingDescRandomPairs; 13 | import dr.mio.evo.alg.genotype.GenotypeEuclidean; 14 | import dr.mio.evo.alg.population.PopulationInitDescRandomUnifEuclidean; 15 | import dr.mio.evo.alg.selection.SelectionDescRank; 16 | import dr.mio.evo.alg.space.SpaceDescEuclidean; 17 | import dr.mio.evo.alg.target.Targets; 18 | import dr.mio.evo.alg.criterion.CriterionDescFixedIterations; 19 | import dr.mio.evo.alg.mutation.MutationDescOnePointGaussian; 20 | import dr.mio.evo.random.GlobalRandom; 21 | 22 | import java.util.stream.IntStream; 23 | 24 | public class LabOneRunner { 25 | public static void main(String[] args) { 26 | // ustawiamy seed 27 | GlobalRandom.setUp(1998); 28 | 29 | // tworzymy algorytm ewolucyjny 30 | var algorithm = EvolutionaryAlgorithmDesc.builder() 31 | // określamy przestrzeń działania algorytmu 32 | .spaceDesc(new SpaceDescEuclidean(3, -10, 10)) 33 | // każdy osobnik z naszej populacji będzie punktem w 3-wymiarowej przestrzeni o maks./min. wartości wymiaru +-10; populacja będzie liczyć 1000 osobnikóœ 34 | .populationInitDesc(new PopulationInitDescRandomUnifEuclidean(1000)) 35 | // naszym celem jest minimalizacja zadanej funckji 36 | .targetDesc(Targets.targetFunction(x -> x.at(0) * x.at(0) + x.at(1) * x.at(1) + 2 * x.at(2) * x.at(2))) 37 | // krzyżywane pary będą dobierane losowo 38 | .matingDesc(new MatingDescRandomPairs<>()) 39 | // dwoje rodzicow - dwoje dzieci 40 | .crossingDesc(new CrossingDescStandardEuclideanFamilyModel()) 41 | // mutacja będzie zachodziła u ok 20% osobników i będzie dotyczyła jednej współrzędnej 42 | .mutationDesc(new MutationDescOnePointGaussian(0.2)) 43 | // wykonanych zostanie 1000 iteracji 44 | .criterionDesc(new CriterionDescFixedIterations<>(1000)) 45 | // selekcja będzie dokonywana metodą rankingową 46 | .selectionDesc(new SelectionDescRank<>()) 47 | // budujemy wzorzec algorytmu 48 | .build() 49 | // uzyskujemy algorytm 50 | .getAlgorithm(); 51 | //uruchamiamy algorytm - to kluczowa funkcja całego programu 52 | algorithm.run(); 53 | //wypisujemy wyniki 54 | System.out.println(algorithm.getResults().toString()); 55 | // bestGenotype=[0.056271070833511336, -0.2000371245861285, 1.6493333649530733], value=0.0019387734117407693 56 | 57 | // analogicznie jak wyżej, zmienia się funkcja celu 58 | algorithm = EvolutionaryAlgorithmDesc.builder() 59 | .spaceDesc (new SpaceDescEuclidean(5, -5.12, 5.12)) 60 | .populationInitDesc(new PopulationInitDescRandomUnifEuclidean(1000)) 61 | .targetDesc (Targets.targetFunction(x -> 50 + IntStream.range(0, 5).mapToDouble(i -> x.at(i) * x.at(i) - 10 * Math.cos(2 * Math.PI * x.at(i))).sum())) 62 | .matingDesc (new MatingDescRandomPairs<>()) 63 | .crossingDesc (new CrossingDescStandardEuclideanFamilyModel()) 64 | .mutationDesc (new MutationDescOnePointGaussian(0.2)) 65 | .criterionDesc (new CriterionDescFixedIterations<>(1000)) 66 | .selectionDesc (new SelectionDescRank<>()) 67 | .build() 68 | .getAlgorithm(); 69 | algorithm.run(); 70 | System.out.println(algorithm.getResults().toString()); 71 | // bestGenotype=[0.035019690059640896, 1.0298196287914652, -1.0857039449239803, -0.0269322544928296, -0.02863954212613734], value=4.377650314246928 72 | 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/genotype/GenotypeCuttingStock.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.genotype; 9 | 10 | import dr.mio.evo.alg.space.SpaceDescCuttingStock; 11 | import dr.mio.evo.alg.util.cutting.Rectangle; 12 | import dr.mio.evo.alg.util.cutting.RectangleTemplate; 13 | import dr.mio.evo.random.GlobalRandom; 14 | import lombok.Data; 15 | import org.jetbrains.annotations.Contract; 16 | import org.jetbrains.annotations.NotNull; 17 | 18 | import java.util.ArrayList; 19 | import java.util.List; 20 | import java.util.Map; 21 | import java.util.Random; 22 | import java.util.stream.Collectors; 23 | 24 | @Data 25 | public class GenotypeCuttingStock implements Genotype { 26 | private final List rectangles; 27 | private final Random random = GlobalRandom.getRandom(); 28 | private final SpaceDescCuttingStock space; 29 | 30 | public GenotypeCuttingStock(@NotNull SpaceDescCuttingStock space) { 31 | this.space = space; 32 | rectangles = new ArrayList<>(); 33 | } 34 | 35 | @Contract(pure = true) 36 | public static @NotNull GenotypeCuttingStock getRandomCut(@NotNull SpaceDescCuttingStock space, int trials) { 37 | var ret = new GenotypeCuttingStock(space); 38 | ret.tryAddingRandomRectangles(space, trials); 39 | return ret; 40 | } 41 | 42 | public void tryAddingRandomRectangles(@NotNull SpaceDescCuttingStock space, int trials) { 43 | for (int i = 0; i < trials; i++) { 44 | tryAddingRandomRectangle(space); 45 | } 46 | } 47 | 48 | private void tryAddingRandomRectangle(@NotNull SpaceDescCuttingStock space) { 49 | int radius = space.getCircle().getRadius(); 50 | var x = (int) (random.nextDouble() * radius * 2 - radius); 51 | var y = (int) (random.nextDouble() * radius * 2 - radius); 52 | 53 | var template = space.getTemplates().get(random.nextInt(space.getTemplates().size())); 54 | tryAddingRectangle(new Rectangle(template, x, y), radius); 55 | } 56 | 57 | private boolean tryAddingRectangle(@NotNull Rectangle candidateRectangle, int radius) { 58 | var x = candidateRectangle.getX(); 59 | var y = candidateRectangle.getY(); 60 | if ( 61 | isInCircle(x, y, radius) && 62 | isInCircle(x + candidateRectangle.getTemplate().getWidth(), y, radius) && 63 | isInCircle(x, y + candidateRectangle.getTemplate().getHeight(), radius) && 64 | isInCircle(x + candidateRectangle.getTemplate().getWidth(), y + candidateRectangle.getTemplate().getHeight(), radius) && 65 | rectangles.stream().noneMatch(rectangle -> rectangle.intersectsWith(candidateRectangle))) { 66 | rectangles.add(candidateRectangle); 67 | return true; 68 | } 69 | return false; 70 | } 71 | 72 | public void removeRandomRectangle() { 73 | if (rectangles.size() == 0) return; 74 | rectangles.remove(random.nextInt(rectangles.size())); 75 | } 76 | 77 | public void tryShiftingRandomRectangles() { 78 | if (rectangles.size() == 0) return; 79 | for (int i = 0; i < rectangles.size() * 5; i++) { 80 | if (tryShiftingRandomRectangle()) break; 81 | } 82 | } 83 | 84 | private boolean tryShiftingRandomRectangle() { 85 | var radius = space.getCircle().getRadius(); 86 | var index = random.nextInt(rectangles.size()); 87 | var rectangle = rectangles.get(index); 88 | var xShift = (int) Math.ceil(random.nextGaussian() * radius / 10); 89 | var yShift = (int) Math.ceil(random.nextGaussian() * radius / 10); 90 | rectangles.remove(index); 91 | if (tryAddingRectangle(new Rectangle( 92 | rectangle.getTemplate(), 93 | rectangle.getX() + xShift, 94 | rectangle.getY() + yShift), radius)) { 95 | return true; 96 | } else { 97 | rectangles.add(rectangle); 98 | return false; 99 | } 100 | } 101 | 102 | @Override 103 | public String toString() { 104 | Map> groups = rectangles.stream() 105 | .collect(Collectors.groupingBy(Rectangle::getTemplate)); 106 | 107 | return groups.keySet().stream() 108 | .map(key -> "" + key.getWidth() + "x" + key.getHeight() + ": " + groups.get(key).size()) 109 | .collect(Collectors.joining("\n")); 110 | } 111 | 112 | private boolean isInCircle(double x, double y, int radius) { 113 | return x * x + y * y <= radius * radius; 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /src/main/java/dr/mio/evo/alg/genotype/GenotypeNEAT.java: -------------------------------------------------------------------------------- 1 | // Oświadczam, że niniejsza praca stanowiąca podstawę do uznania osiągnięcia efektów uczenia się z przedmiotu Metody Inteligencji Obliczeniowej w Analizie Danych została wykonana przeze mnie samodzielnie. 2 | // Dominik Rafacz 3 | // 291128 4 | 5 | // Potwierdzam samodzielność powyższej pracy oraz niekorzystanie przeze mnie z niedozwolonych źródeł. 6 | // Dominik Rafacz 7 | 8 | package dr.mio.evo.alg.genotype; 9 | 10 | import dr.mio.evo.alg.space.SpaceDescNEAT; 11 | import dr.mio.evo.alg.util.neat.Connection; 12 | import dr.mio.evo.alg.util.neat.Node; 13 | import dr.mio.evo.alg.util.neat.NodeTemplate; 14 | import dr.mio.evo.random.GlobalRandom; 15 | import org.jetbrains.annotations.NotNull; 16 | 17 | import java.util.ArrayList; 18 | import java.util.List; 19 | import java.util.Random; 20 | import java.util.stream.Collectors; 21 | 22 | public class GenotypeNEAT implements Genotype { 23 | private final List nodes; 24 | private final List connections; 25 | private final SpaceDescNEAT spaceDesc; 26 | private final Random random = GlobalRandom.getRandom(); 27 | 28 | public @NotNull GenotypeNEAT(@NotNull List nodes, @NotNull List connections, SpaceDescNEAT spaceDescNEAT) { 29 | 30 | this.nodes = nodes; 31 | this.connections = connections; 32 | this.spaceDesc = spaceDescNEAT; 33 | } 34 | 35 | public double feedForward(@NotNull List input) { 36 | 37 | var calcNodes = new ArrayList(); 38 | var notCalcNodes = new ArrayList(); 39 | var calcConnections = new ArrayList(); 40 | var notCalcConnections = new ArrayList<>(connections); 41 | 42 | for (var node : nodes) { 43 | if (node.getTemplate().getType() == NodeTemplate.NodeType.INPUT) { 44 | var id = node.getTemplate().getId(); 45 | if (id == 0) 46 | node.setValue(1); 47 | else 48 | node.setValue(input.get(node.getTemplate().getId() - 1)); 49 | calcNodes.add(node); 50 | } else { 51 | notCalcNodes.add(node); 52 | } 53 | } 54 | 55 | var outputNode = nodes.stream() 56 | .filter(node -> node.getTemplate().getType() == NodeTemplate.NodeType.OUTPUT) 57 | .findFirst() 58 | .orElseThrow(); 59 | 60 | List connectionsToMove; 61 | List nodesToMove; 62 | do { 63 | connectionsToMove = notCalcConnections.stream() 64 | .filter(connection -> calcNodes.contains(connection.getRequiredNode())) 65 | .collect(Collectors.toList()); 66 | calcConnections.addAll(connectionsToMove); 67 | notCalcConnections.removeAll(connectionsToMove); 68 | 69 | nodesToMove = notCalcNodes.stream() 70 | .filter(node -> calcConnections.containsAll(node.getRequiredConnections())) 71 | .collect(Collectors.toList()); 72 | nodesToMove.forEach(Node::calculateValue); 73 | calcNodes.addAll(nodesToMove); 74 | notCalcNodes.removeAll(nodesToMove); 75 | } while (!nodesToMove.contains(outputNode)); 76 | 77 | return outputNode.getValue(); 78 | } 79 | 80 | public double calculateMSE(@NotNull List> X, @NotNull List y) { 81 | double sum = 0; 82 | for (int i = 0; i < X.size(); i++) { 83 | sum += Math.pow(feedForward(X.get(i)) - y.get(i), 2); 84 | } 85 | return sum / X.size(); 86 | } 87 | 88 | public void mutateWeight() { 89 | var connection = selectRandomConnection(); 90 | if (random.nextDouble() < 0.9) 91 | connection.setWeight(connection.getWeight() + random.nextGaussian()); 92 | else 93 | connection.setWeight(random.nextGaussian()); 94 | } 95 | 96 | public void addRandomNode() { 97 | while (true) { 98 | if (!tryAddingRandomNode()) break; 99 | } 100 | } 101 | 102 | public boolean tryAddingRandomNode() { 103 | Connection connection = selectRandomConnection(); 104 | NodeTemplate nodeTemplate = spaceDesc.getNodeTemplateOnConnection(connection); 105 | if (nodes.stream().map(Node::getTemplate).noneMatch(template -> template == nodeTemplate)) { 106 | var node = new Node(nodeTemplate); 107 | var precedingConnection = new Connection( 108 | spaceDesc.getConnectionTemplateBetweenTwoNodes(connection.getRequiredNode(), node), 109 | connection.getRequiredNode()); 110 | var succeedingConnection = new Connection( 111 | spaceDesc.getConnectionTemplateBetweenTwoNodes(node, new Node(connection.getTemplate().getOutputNode())), 112 | node); 113 | node.addRequiredConnection(precedingConnection); 114 | nodes.add(node); 115 | connection.setActive(false); 116 | connections.add(precedingConnection); 117 | connections.add(succeedingConnection); 118 | return true; 119 | } 120 | return false; 121 | } 122 | 123 | private Connection selectRandomConnection() { 124 | return connections.get(random.nextInt(connections.size())); 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | # Determine the Java command to use to start the JVM. 86 | if [ -n "$JAVA_HOME" ] ; then 87 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 88 | # IBM's JDK on AIX uses strange locations for the executables 89 | JAVACMD="$JAVA_HOME/jre/sh/java" 90 | else 91 | JAVACMD="$JAVA_HOME/bin/java" 92 | fi 93 | if [ ! -x "$JAVACMD" ] ; then 94 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 95 | 96 | Please set the JAVA_HOME variable in your environment to match the 97 | location of your Java installation." 98 | fi 99 | else 100 | JAVACMD="java" 101 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 102 | 103 | Please set the JAVA_HOME variable in your environment to match the 104 | location of your Java installation." 105 | fi 106 | 107 | # Increase the maximum file descriptors if we can. 108 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 109 | MAX_FD_LIMIT=`ulimit -H -n` 110 | if [ $? -eq 0 ] ; then 111 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 112 | MAX_FD="$MAX_FD_LIMIT" 113 | fi 114 | ulimit -n $MAX_FD 115 | if [ $? -ne 0 ] ; then 116 | warn "Could not set maximum file descriptor limit: $MAX_FD" 117 | fi 118 | else 119 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 120 | fi 121 | fi 122 | 123 | # For Darwin, add options to specify how the application appears in the dock 124 | if $darwin; then 125 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 126 | fi 127 | 128 | # For Cygwin or MSYS, switch paths to Windows format before running java 129 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 130 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 131 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 132 | JAVACMD=`cygpath --unix "$JAVACMD"` 133 | 134 | # We build the pattern for arguments to be converted via cygpath 135 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 136 | SEP="" 137 | for dir in $ROOTDIRSRAW ; do 138 | ROOTDIRS="$ROOTDIRS$SEP$dir" 139 | SEP="|" 140 | done 141 | OURCYGPATTERN="(^($ROOTDIRS))" 142 | # Add a user-defined pattern to the cygpath arguments 143 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 144 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 145 | fi 146 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 147 | i=0 148 | for arg in "$@" ; do 149 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 150 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 151 | 152 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 153 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 154 | else 155 | eval `echo args$i`="\"$arg\"" 156 | fi 157 | i=`expr $i + 1` 158 | done 159 | case $i in 160 | 0) set -- ;; 161 | 1) set -- "$args0" ;; 162 | 2) set -- "$args0" "$args1" ;; 163 | 3) set -- "$args0" "$args1" "$args2" ;; 164 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 165 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 166 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 167 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 168 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 169 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 170 | esac 171 | fi 172 | 173 | # Escape application args 174 | save () { 175 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 176 | echo " " 177 | } 178 | APP_ARGS=`save "$@"` 179 | 180 | # Collect all arguments for the java command, following the shell quoting and substitution rules 181 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 182 | 183 | exec "$JAVACMD" "$@" 184 | -------------------------------------------------------------------------------- /src/main/resources/neat/easy-training.csv: -------------------------------------------------------------------------------- 1 | "x","y","c" 2 | -72.8294612374157,-40.2393911033869,FALSE 3 | -65.4643957968801,-60.5015160515904,FALSE 4 | 14.3895885441452,74.2239937651902,FALSE 5 | -92.3356276005507,17.4669155851007,FALSE 6 | -61.0584213398397,-16.761820204556,FALSE 7 | -80.0649728160352,-38.6409192346036,FALSE 8 | -79.3898013886064,32.5749691575766,FALSE 9 | -17.9508126806468,34.2979093082249,FALSE 10 | -78.1859350390732,64.560045581311,FALSE 11 | -76.3857035432011,63.3152775466442,FALSE 12 | 56.7236769478768,97.9200878180563,FALSE 13 | 19.3258540704846,29.3521591927856,FALSE 14 | -63.3414033334702,-19.182394258678,FALSE 15 | -81.19604755193,-18.48811856471,FALSE 16 | 29.7595305833966,66.2146964576095,FALSE 17 | 16.5426459163427,17.4818174447864,FALSE 18 | 82.4636552017182,99.6269651222974,FALSE 19 | 37.2350348159671,39.6446310915053,FALSE 20 | -14.9480457417667,63.1868213880807,FALSE 21 | -99.1222658660263,-88.5879547800869,FALSE 22 | -52.5672650896013,54.0805748663843,FALSE 23 | -10.3282765951008,22.2806702833623,FALSE 24 | -89.0585906337947,-21.647840552032,FALSE 25 | -43.2341030333191,72.3851464688778,FALSE 26 | -71.7993917874992,-41.49698773399,FALSE 27 | -77.6072643697262,-77.1275876555592,FALSE 28 | -94.4575974252075,-53.3546988852322,FALSE 29 | -97.3828342743218,14.6868031006306,FALSE 30 | -75.6020882632583,-35.0693671498448,FALSE 31 | -64.8367378860712,-20.3808046411723,FALSE 32 | -94.4452316034585,98.6861737444997,FALSE 33 | -57.8454202972353,-57.5289337430149,FALSE 34 | -63.3943367749453,-1.34138632565737,FALSE 35 | -14.5250782370567,61.4701552782208,FALSE 36 | -56.5219659823924,-31.3929358031601,FALSE 37 | 16.4069987367839,66.3902405649424,FALSE 38 | -43.6596453655511,99.3672778364271,FALSE 39 | 16.34640712291,94.8084862437099,FALSE 40 | 21.8938108533621,94.1111223306507,FALSE 41 | -40.7764190342277,62.5435289461166,FALSE 42 | -76.2467376422137,87.6911964733154,FALSE 43 | 17.3010250553489,55.0158140715212,FALSE 44 | -16.6547514498234,38.7547414749861,FALSE 45 | -94.0516075119376,93.2549917139113,FALSE 46 | -86.3020437303931,-57.5191469397396,FALSE 47 | -13.6555882170796,41.5957272052765,FALSE 48 | -90.4315507039428,-88.577315537259,FALSE 49 | -48.3911104500294,10.7363430317491,FALSE 50 | -15.5580831691623,58.8446744717658,FALSE 51 | -94.0559944603592,-52.2263269871473,FALSE 52 | 62.130747968331,65.6629214063287,FALSE 53 | -87.7093335147947,-20.0271334033459,FALSE 54 | -26.232396485284,47.3344319034368,FALSE 55 | -35.6121012475342,7.77170388028026,FALSE 56 | -55.0186939537525,52.1134856157005,FALSE 57 | -19.7109180968255,50.11962428689,FALSE 58 | -10.6285374611616,62.5323319341987,FALSE 59 | 23.897060053423,96.5808419510722,FALSE 60 | -2.98898480832577,96.4264824055135,FALSE 61 | -83.1303401850164,68.4174296911806,FALSE 62 | -81.7909397184849,5.53726772777736,FALSE 63 | 80.3927145432681,99.5799049735069,FALSE 64 | -57.3597652837634,10.2778944186866,FALSE 65 | -55.4443747270852,-35.8532507903874,FALSE 66 | 7.60694481432438,99.8225596733391,FALSE 67 | -45.3272148966789,-9.3330112285912,FALSE 68 | -29.7180115245283,77.6639522518963,FALSE 69 | -66.4968201890588,-9.57522881217301,FALSE 70 | -74.4563242886215,27.966258302331,FALSE 71 | -46.3856136891991,-26.414742320776,FALSE 72 | 37.8380879294127,65.3849895577878,FALSE 73 | -49.7964512556791,25.2274491358548,FALSE 74 | -25.7695355918258,15.7131698448211,FALSE 75 | -93.6171418987215,-62.3424225021154,FALSE 76 | -37.6379814464599,94.3434789311141,FALSE 77 | -81.8149565719068,-10.873399535194,FALSE 78 | 68.7326943967491,93.9975539688021,FALSE 79 | -77.0316021516919,-59.7195857204497,FALSE 80 | -62.8637147601694,-20.1369741000235,FALSE 81 | -39.0905532054603,70.8035044837743,FALSE 82 | -85.1681021973491,-12.623477447778,FALSE 83 | -30.5285229347646,91.0236705094576,FALSE 84 | 4.19257082976401,9.20769292861223,FALSE 85 | -56.8558872677386,31.9669211748987,FALSE 86 | -98.2842267956585,30.078588007018,FALSE 87 | -22.8869155049324,78.1216925475746,FALSE 88 | 76.130526792258,80.8763933833688,FALSE 89 | -90.6181944999844,33.5091041401029,FALSE 90 | -34.1936119832098,6.16393038071692,FALSE 91 | -96.1489046923816,17.1015168074518,FALSE 92 | -51.7362967599183,38.8912912923843,FALSE 93 | -69.2698920145631,-38.4621746838093,FALSE 94 | 28.9110102225095,33.9117654599249,FALSE 95 | -70.126741938293,-20.9540981333703,FALSE 96 | -55.4245494306087,69.5490756072104,FALSE 97 | -53.9009727537632,-33.8156999088824,FALSE 98 | -86.1670124810189,86.8097221944481,FALSE 99 | -95.1732355635613,-63.499658787623,FALSE 100 | -32.4294899124652,37.74523162283,FALSE 101 | -67.2169688623399,-15.4174492694438,FALSE 102 | -38.5542694944888,0.256951712071896,FALSE 103 | -76.547261280939,-61.6138353012502,FALSE 104 | 7.33426595106721,49.1306751035154,FALSE 105 | -50.1637849956751,-42.7002963609993,FALSE 106 | -21.2402857840061,88.5667690541595,FALSE 107 | 66.4785669185221,72.9379881639034,FALSE 108 | -20.1502949930727,-18.2334529235959,FALSE 109 | -4.65499903075397,28.0988088808954,FALSE 110 | -48.6557390540838,-3.31940553151071,FALSE 111 | -32.7357645146549,-22.8486938402057,FALSE 112 | -65.8323012758046,23.9728425629437,FALSE 113 | -28.0413341708481,-13.3700370788574,FALSE 114 | -5.23043582215905,14.6547173149884,FALSE 115 | -54.9411229323596,-42.9116305429488,FALSE 116 | -80.5254914797843,-60.6433114036918,FALSE 117 | -8.42508268542588,22.2100654616952,FALSE 118 | -25.6105066742748,-19.6458309423178,FALSE 119 | 51.929728128016,84.32233245112,FALSE 120 | -57.3815263807774,4.77146939374506,FALSE 121 | -10.8714594505727,14.0934521798044,FALSE 122 | 10.1552038453519,34.092167345807,FALSE 123 | -80.1235182676464,67.4366452731192,FALSE 124 | -26.8933519721031,51.9794984254986,FALSE 125 | 39.8534536827356,85.5178711004555,FALSE 126 | 15.464537171647,48.2634696178138,FALSE 127 | -74.3834137450904,50.5085969809443,FALSE 128 | -44.0360509324819,-43.948341300711,FALSE 129 | 15.8583504613489,28.4569661598653,FALSE 130 | -41.0856184083968,35.204482730478,FALSE 131 | -78.5642304923385,-9.84698114916682,FALSE 132 | -79.3636729009449,94.8683731257915,FALSE 133 | -30.6850668508559,30.5489020887762,FALSE 134 | -63.693768857047,-49.6467812452465,FALSE 135 | 18.2485269848257,28.3171869348735,FALSE 136 | -65.929645486176,74.529534811154,FALSE 137 | -68.1082147173584,-26.7800124362111,FALSE 138 | 60.14050305821,99.952428881079,FALSE 139 | -97.0337896142155,79.4361179694533,FALSE 140 | -34.8198267631233,37.1924425009638,FALSE 141 | 13.9431546442211,83.8040535803884,FALSE 142 | -34.7467145882547,7.14248404838145,FALSE 143 | -43.8839591573924,47.7761290967464,FALSE 144 | 34.437911817804,64.433939801529,FALSE 145 | 67.7097733598202,96.3552691973746,FALSE 146 | -32.9375522676855,-26.510543609038,FALSE 147 | 86.3597926683724,99.2401675786823,FALSE 148 | 7.51825920306146,10.1471102796495,FALSE 149 | -93.6138029675931,-84.5030379015952,FALSE 150 | -90.5232491903007,60.0046444218606,FALSE 151 | -79.2268922552466,-26.0714000556618,FALSE 152 | -59.0258138254285,-50.4036099184304,FALSE 153 | -55.7156360708177,3.21252993308008,FALSE 154 | -54.7810924705118,-44.6367409545928,FALSE 155 | -48.0334231164306,53.3085831440985,FALSE 156 | 24.1052946541458,75.5744568537921,FALSE 157 | -99.3613579776138,-61.7949434556067,FALSE 158 | -80.7439494878054,20.551311923191,FALSE 159 | 29.7412325162441,81.0748776886612,FALSE 160 | 30.6431212462485,48.5798563808203,FALSE 161 | -47.0018083229661,32.4502141680568,FALSE 162 | 13.7284458614886,36.8532037362456,FALSE 163 | -52.2454980760813,94.8530900292099,FALSE 164 | -83.5325266700238,-13.3861151523888,FALSE 165 | -34.5443469472229,-31.50051725097,FALSE 166 | -46.2623579893261,69.6926227770746,FALSE 167 | -79.9990648869425,20.7889868877828,FALSE 168 | 20.5798035953194,45.1297317631543,FALSE 169 | -25.6132339593023,-24.505418445915,FALSE 170 | -54.9267787486315,-21.0883625317365,FALSE 171 | -48.7633886281401,86.2387099768966,FALSE 172 | 37.4781704973429,88.1223787553608,FALSE 173 | -56.5484486985952,96.7025238089263,FALSE 174 | -68.3914437424392,80.0385570619255,FALSE 175 | -43.2182099670172,47.1075436100364,FALSE 176 | 19.0671446267515,63.3383412379771,FALSE 177 | 35.2025579661131,80.6970116216689,FALSE 178 | -11.3192609511316,38.900343934074,FALSE 179 | 46.8290757387877,48.5495452769101,FALSE 180 | -19.6074713021517,21.3507961016148,FALSE 181 | -51.2662857305259,96.2280639447272,FALSE 182 | -25.3953113220632,22.3983950447291,FALSE 183 | -3.00101707689464,12.0677690487355,FALSE 184 | -93.6382472049445,-19.1819647327065,FALSE 185 | -48.0771326459944,17.1928224619478,FALSE 186 | -97.4311944562942,78.6721686366946,FALSE 187 | -97.6872310973704,94.4087046664208,FALSE 188 | -74.9446466099471,-19.9298192281276,FALSE 189 | -63.1004393100739,4.4408599846065,FALSE 190 | 23.9421519916505,60.9730367548764,FALSE 191 | 6.94004772230983,20.7022259011865,FALSE 192 | -79.1001200210303,-60.8040326274931,FALSE 193 | -98.5813107807189,-36.6564639378339,FALSE 194 | 84.4180883839726,97.3837420810014,FALSE 195 | -72.2789581865072,21.2113903369755,FALSE 196 | -42.0619592536241,-26.5655107330531,FALSE 197 | -73.1338928453624,86.9178871624172,FALSE 198 | -85.8749547973275,60.8744404278696,FALSE 199 | -22.0235553570092,-19.1327812615782,FALSE 200 | -52.7882934547961,52.8939030133188,FALSE 201 | 19.6348292287439,44.9641783256084,FALSE 202 | 7.34795234166086,45.4532865434885,FALSE 203 | 59.1270764824003,75.9294299874455,FALSE 204 | -10.3412036783993,2.06301989965141,FALSE 205 | -36.9309848174453,-15.3096321970224,FALSE 206 | -0.0356803648173809,73.0277026072145,FALSE 207 | -91.2301283795387,32.7757745981216,FALSE 208 | -51.9255838822573,-48.0962735135108,FALSE 209 | 53.4686991479248,62.1526537463069,FALSE 210 | -52.1719053387642,29.4748908374459,FALSE 211 | -84.9478322081268,93.8772681634873,FALSE 212 | -30.7241716887802,-11.7152527906001,FALSE 213 | -58.4619048051536,89.7131832782179,FALSE 214 | -50.3463464323431,29.3809950351715,FALSE 215 | -87.9554269835353,-77.5355673860759,FALSE 216 | -79.7041325364262,-24.6267704758793,FALSE 217 | -55.6663716677576,96.1746461689472,FALSE 218 | 4.22989372164011,86.8966304231435,FALSE 219 | 60.0117943249643,61.6043978370726,FALSE 220 | -22.7327903266996,-21.5952229686081,FALSE 221 | -70.916771935299,-39.3085619434714,FALSE 222 | -0.0865141861140728,85.9651766717434,FALSE 223 | 8.73413626104593,40.0585231836885,FALSE 224 | -17.1033600345254,27.9197726398706,FALSE 225 | 22.2776993643492,42.019764566794,FALSE 226 | -3.53064741939306,85.160814691335,FALSE 227 | -5.59530360624194,40.292327105999,FALSE 228 | -40.9237599465996,11.0148540232331,FALSE 229 | -59.5028746407479,83.698399644345,FALSE 230 | -25.4078601952642,90.9175541717559,FALSE 231 | -41.4808863773942,43.2792384643108,FALSE 232 | -0.210350239649415,11.3913418259472,FALSE 233 | 47.685223352164,95.9805388003588,FALSE 234 | -91.6223090142012,-80.5366862565279,FALSE 235 | 6.7666026763618,65.1241999585181,FALSE 236 | 14.7172043565661,95.5342737957835,FALSE 237 | -64.0554626937956,1.01887085475028,FALSE 238 | 49.6081033255905,76.8579779658467,FALSE 239 | -47.6354127749801,99.5243098586798,FALSE 240 | -43.2420291937888,31.2675800174475,FALSE 241 | 81.3881878741086,94.6435500867665,FALSE 242 | -97.8130461648107,-59.8607064690441,FALSE 243 | -28.2846793532372,24.9505221843719,FALSE 244 | -65.3209546580911,-52.2312934976071,FALSE 245 | 12.1224615722895,24.3845683988184,FALSE 246 | -99.6560890693218,-74.0958203095943,FALSE 247 | 63.6238327715546,99.8541534878314,FALSE 248 | -95.9421404171735,-35.9873611479998,FALSE 249 | -98.3717818278819,51.3335471041501,FALSE 250 | -57.1699859574437,48.1706486083567,FALSE 251 | -84.9488800857216,74.0384968928993,FALSE 252 | 29.6491681598127,23.9108028821647,TRUE 253 | 25.5981395486742,-58.8792681228369,TRUE 254 | 11.3165832590312,-97.3691304214299,TRUE 255 | -43.6587442178279,-58.9302987325937,TRUE 256 | 42.1501807402819,-47.9476694017649,TRUE 257 | 99.1137339733541,-96.6358709149063,TRUE 258 | 67.7075832616538,27.5976494885981,TRUE 259 | -31.2418513465673,-75.4791595973074,TRUE 260 | 53.828950272873,-10.9980723354965,TRUE 261 | 45.398691855371,-37.3782249167562,TRUE 262 | -17.1783574391156,-91.6797024197876,TRUE 263 | -2.27338918484747,-65.5888950452209,TRUE 264 | -1.48646798916161,-25.298935174942,TRUE 265 | 71.1779844481498,-28.9122730027884,TRUE 266 | 69.588958658278,-77.4311668239534,TRUE 267 | -11.566902929917,-31.7757652606815,TRUE 268 | -24.1525563877076,-61.8954607285559,TRUE 269 | 24.5613200124353,-77.6190022006631,TRUE 270 | 43.4840106405318,40.3748701326549,TRUE 271 | 2.18283976428211,-93.069395236671,TRUE 272 | 27.8899510856718,-17.8501211106777,TRUE 273 | 87.4285947531462,-7.06896963529289,TRUE 274 | 46.7561978846788,-73.6753514967859,TRUE 275 | -7.27232010103762,-36.599829280749,TRUE 276 | -6.87829423695803,-27.0945705007762,TRUE 277 | 57.5650086160749,-28.0710896477103,TRUE 278 | 45.5105613451451,-37.3523625545204,TRUE 279 | 32.8997744247317,-60.8988288789988,TRUE 280 | 99.3343035690486,86.3597506191581,TRUE 281 | 32.5537187047303,27.9085222631693,TRUE 282 | -7.40168425254524,-85.4859843850136,TRUE 283 | 99.1839577443898,-52.9421920422465,TRUE 284 | 93.2529035024345,8.14482751302421,TRUE 285 | 24.3374085985124,-83.2180512603372,TRUE 286 | 10.5554141569883,-27.970076398924,TRUE 287 | 31.4655768685043,-83.2717716228217,TRUE 288 | 50.1497700344771,41.5148870553821,TRUE 289 | -71.5042414609343,-82.9966531600803,TRUE 290 | 2.57373154163361,-14.5912076346576,TRUE 291 | 42.7357415203005,-28.6546424031258,TRUE 292 | -61.676294868812,-81.150921434164,TRUE 293 | 37.8812299109995,-18.6568403150886,TRUE 294 | 80.9578861575574,2.34036948531866,TRUE 295 | 40.3873290866613,40.3554072603583,TRUE 296 | 60.901005519554,51.2141576036811,TRUE 297 | -33.0920678563416,-54.4872145634145,TRUE 298 | 55.7503244373947,-29.2447190731764,TRUE 299 | -19.1653690300882,-79.893997265026,TRUE 300 | -0.615119654685259,-78.7384250666946,TRUE 301 | 49.436058010906,-89.5685631781816,TRUE 302 | 62.5978490803391,-20.3654306475073,TRUE 303 | 81.3772324472666,73.1825364287943,TRUE 304 | -8.39463346637785,-27.4318714626133,TRUE 305 | 29.294449929148,-65.0639193598181,TRUE 306 | 78.7845681421459,13.3162358775735,TRUE 307 | 17.782988678664,2.98131043091416,TRUE 308 | -17.6309592556208,-78.1695213168859,TRUE 309 | 90.2473411988467,-20.8453929517418,TRUE 310 | -33.7194216903299,-69.1236244048923,TRUE 311 | 55.4482715670019,-38.2459453772753,TRUE 312 | 38.8756996020675,-70.5882634501904,TRUE 313 | 91.0097718238831,-78.8485150784254,TRUE 314 | -71.3100515771657,-92.5298825837672,TRUE 315 | 90.8127390313894,54.9288073088974,TRUE 316 | 85.4139531031251,80.3101232741028,TRUE 317 | -17.0096967834979,-49.6031725779176,TRUE 318 | 80.8964038733393,20.5347565934062,TRUE 319 | 51.4563504606485,-57.5437876395881,TRUE 320 | -16.0662787500769,-54.5269083697349,TRUE 321 | -7.08448220975697,-79.0850720368326,TRUE 322 | 22.160112997517,-86.6193634457886,TRUE 323 | 48.0913939885795,-27.5424860883504,TRUE 324 | 2.18746340833604,-68.5935890767723,TRUE 325 | 1.52653818950057,-69.2431225907058,TRUE 326 | 71.6259010601789,-47.1218702849001,TRUE 327 | 51.5024111606181,25.8251749444753,TRUE 328 | -60.2935540955514,-69.9386984109879,TRUE 329 | -61.6298526059836,-80.1539320033044,TRUE 330 | 8.85198251344264,-73.6296925228089,TRUE 331 | -31.5167575143278,-75.1020839903504,TRUE 332 | 36.7962627205998,5.44502809643745,TRUE 333 | 88.3899430278689,-59.077788842842,TRUE 334 | 23.6746723763645,-71.6131383553147,TRUE 335 | -29.4366781134158,-48.2070401310921,TRUE 336 | 59.7655846737325,-40.0919177103788,TRUE 337 | 72.2527236677706,59.0788749046624,TRUE 338 | 53.8349820766598,39.0329862013459,TRUE 339 | 12.5368566252291,-38.4815374389291,TRUE 340 | 46.157128829509,-33.972243219614,TRUE 341 | 27.4194345343858,-35.1411439944059,TRUE 342 | 27.0900191739202,7.02776396647096,TRUE 343 | -11.013792315498,-95.3835401218385,TRUE 344 | -21.847668569535,-37.6667040865868,TRUE 345 | 36.1948434263468,-87.5009389594197,TRUE 346 | -9.51655199751258,-26.5122496522963,TRUE 347 | 99.1584019735456,23.1685347855091,TRUE 348 | 32.5852959882468,-32.1116846520454,TRUE 349 | 59.6279791090637,-33.4192370995879,TRUE 350 | 25.0700303819031,-13.6750082951039,TRUE 351 | 8.84315664879978,-88.3113015908748,TRUE 352 | 24.7209227643907,-62.2572481632233,TRUE 353 | -0.303316302597523,-3.3011800609529,TRUE 354 | 93.2851356919855,-98.3004511334002,TRUE 355 | 30.998314730823,-11.1799083650112,TRUE 356 | 52.6327594183385,8.7786516174674,TRUE 357 | -33.3851843141019,-96.5413365978748,TRUE 358 | 85.9504064079374,50.127353426069,TRUE 359 | 10.6048790272325,-5.53005328401923,TRUE 360 | 35.0856343749911,11.8162148632109,TRUE 361 | 80.7467270176858,-68.460708996281,TRUE 362 | 93.5547247994691,-70.9123399108648,TRUE 363 | 43.7970281112939,-28.5323290619999,TRUE 364 | -9.23783867619932,-77.3568768985569,TRUE 365 | 52.7957269921899,-42.762580467388,TRUE 366 | 37.8058067522943,-32.2618022561073,TRUE 367 | 78.363200603053,31.2533180695027,TRUE 368 | 18.4959304053336,-96.6989015694708,TRUE 369 | 84.1964307241142,49.5379691943526,TRUE 370 | -47.2871313337237,-64.0701401978731,TRUE 371 | -48.6327310092747,-51.5427485574037,TRUE 372 | -36.9612756185234,-92.2662546858191,TRUE 373 | 91.2383690010756,42.4548998009413,TRUE 374 | 40.3348338324577,-55.341224046424,TRUE 375 | 86.5388359874487,79.239285364747,TRUE 376 | 82.7385722193867,-98.4956328757107,TRUE 377 | 82.5406529009342,8.10451442375779,TRUE 378 | 61.4273455459625,-98.0921663343906,TRUE 379 | 85.9262834768742,-1.95824326947331,TRUE 380 | 58.3795597311109,-57.5607609469444,TRUE 381 | 13.9450947288424,-2.79246694408357,TRUE 382 | 91.850276151672,30.9508536010981,TRUE 383 | 37.7351824194193,-12.6526808831841,TRUE 384 | 23.1148258317262,-26.6659088432789,TRUE 385 | 80.1383986137807,-68.6183786951005,TRUE 386 | -2.76939161121845,-42.6367516629398,TRUE 387 | 52.5552090257406,-79.899441730231,TRUE 388 | 49.5323407929391,49.1123415064067,TRUE 389 | 32.8316715545952,2.98901526257396,TRUE 390 | 78.7049629725516,-89.0019051730633,TRUE 391 | 60.9189725946635,-9.81939588673413,TRUE 392 | -39.6123719867319,-99.5225661434233,TRUE 393 | 32.2616340126842,-81.5911552868783,TRUE 394 | 58.0569706857204,-27.4819025304168,TRUE 395 | -0.768406363204122,-46.7629186809063,TRUE 396 | 10.7380419503897,-84.5037219114602,TRUE 397 | -11.8704113643616,-26.0351030621678,TRUE 398 | 65.7431870698929,4.79663917794824,TRUE 399 | 15.0242772884667,-9.9993041716516,TRUE 400 | 24.5368750300258,-86.2226891797036,TRUE 401 | -4.41726306453347,-96.0252275224775,TRUE 402 | 12.0440701022744,-32.4784061405808,TRUE 403 | -7.61143970303237,-38.4296135976911,TRUE 404 | 61.0700571443886,41.5404145605862,TRUE 405 | 99.6432265732437,-95.5195383168757,TRUE 406 | 5.99641366861761,-2.95502999797463,TRUE 407 | 10.3874354157597,-40.2175966650248,TRUE 408 | 31.9796531461179,20.0398446060717,TRUE 409 | 77.038854919374,-2.8418455272913,TRUE 410 | 52.7897150721401,-83.4969216492027,TRUE 411 | 55.859579751268,-44.6705840993673,TRUE 412 | 93.510118778795,59.3516334891319,TRUE 413 | 55.0490631721914,51.6738294158131,TRUE 414 | -25.3324567805976,-45.9539555944502,TRUE 415 | 98.6357268411666,57.1179519873112,TRUE 416 | 53.0285057611763,-17.3990062437952,TRUE 417 | 74.4397814851254,-49.9942228663713,TRUE 418 | -9.55690569244325,-49.7053244616836,TRUE 419 | -22.1046067308635,-29.7583234030753,TRUE 420 | 79.3540105689317,-45.361784985289,TRUE 421 | -16.0599962808192,-81.0636274982244,TRUE 422 | 51.5466168988496,-34.9168532527983,TRUE 423 | 97.951227100566,-55.2769364323467,TRUE 424 | 75.244079483673,-83.6532265879214,TRUE 425 | 17.4328444991261,-40.3474104590714,TRUE 426 | -20.1888614799827,-32.2993243578821,TRUE 427 | -2.61970227584243,-64.1361685004085,TRUE 428 | 98.360728379339,-69.8925575707108,TRUE 429 | 60.8600275125355,-7.3805961292237,TRUE 430 | -14.8781210649759,-74.109206115827,TRUE 431 | 35.1636810228229,-11.0007500741631,TRUE 432 | 92.8165546152741,76.6851810738444,TRUE 433 | -23.6521229147911,-71.1069217417389,TRUE 434 | -4.07675784081221,-97.3883089143783,TRUE 435 | 18.0393122602254,-66.8771495111287,TRUE 436 | -30.0850397907197,-36.9411046616733,TRUE 437 | 71.5238861739635,-17.4661855213344,TRUE 438 | 11.224494734779,-17.8951044101268,TRUE 439 | 56.4508111216128,3.68405105546117,TRUE 440 | 7.84450308419764,-43.4834435582161,TRUE 441 | 73.3306005597115,50.4897810518742,TRUE 442 | 57.1576238144189,48.9723288454115,TRUE 443 | 22.6004988420755,3.93868973478675,TRUE 444 | 66.8348828796297,-2.65583796426654,TRUE 445 | 11.933979857713,-98.0542645324022,TRUE 446 | 85.3247138205916,-67.9090427234769,TRUE 447 | 94.3321329075843,-81.2526245601475,TRUE 448 | 98.8886680919677,-89.1566693782806,TRUE 449 | 64.42157975398,-32.0008113048971,TRUE 450 | 52.052523707971,-72.1034843474627,TRUE 451 | 22.6831302978098,-39.4954777788371,TRUE 452 | 44.3135657347739,-73.4062584582716,TRUE 453 | 65.2980102691799,-79.9229274969548,TRUE 454 | -52.9993860982358,-64.7890069987625,TRUE 455 | -56.8870708812028,-62.2515732422471,TRUE 456 | -17.4689871724695,-84.0377044398338,TRUE 457 | 68.7559800688177,-20.058673620224,TRUE 458 | -91.0052599851042,-92.5904313102365,TRUE 459 | 47.2589487675577,-39.2225720454007,TRUE 460 | 98.6139421351254,90.6724852509797,TRUE 461 | 96.0206037387252,-35.266100987792,TRUE 462 | 93.8823042437434,9.14420019835234,TRUE 463 | 75.9581030346453,0.238755298778415,TRUE 464 | 1.79888023994863,-84.6159847918898,TRUE 465 | 16.70260024257,-34.1854460537434,TRUE 466 | 90.8038156107068,77.0823906175792,TRUE 467 | -28.4344401210546,-61.1398736946285,TRUE 468 | -15.9391359426081,-36.0713253729045,TRUE 469 | 30.1619119476527,5.02395858056843,TRUE 470 | -36.060087243095,-74.5282301679254,TRUE 471 | 37.4729111790657,-64.0201784670353,TRUE 472 | 46.6146772261709,-95.6032615620643,TRUE 473 | 54.8074780032039,-21.3880416937172,TRUE 474 | 81.5301998984069,64.6331403870136,TRUE 475 | -20.583863183856,-81.9874665234238,TRUE 476 | -53.5312349908054,-56.5010470338166,TRUE 477 | 67.0034872833639,-4.25605531781912,TRUE 478 | 43.4805502649397,-95.179565390572,TRUE 479 | 7.20924590714276,-7.30274980887771,TRUE 480 | 4.38430332578719,-70.7781369332224,TRUE 481 | 97.3220388870686,93.0838388390839,TRUE 482 | 66.9845229946077,-42.6599096041173,TRUE 483 | 11.3023238722235,-48.1310493778437,TRUE 484 | -5.19012007862329,-72.3445171490312,TRUE 485 | -35.4600346647203,-57.821130566299,TRUE 486 | 46.9949172344059,-9.41888457164168,TRUE 487 | 78.5557564813644,59.011708619073,TRUE 488 | 81.6168246790767,47.6927314419299,TRUE 489 | -28.9587859530002,-81.5353407524526,TRUE 490 | 7.86602851003408,-12.9600362852216,TRUE 491 | 83.1631754059345,-6.58367145806551,TRUE 492 | 76.7400878481567,72.1690282225609,TRUE 493 | 96.9762040302157,-83.7483811192214,TRUE 494 | 92.5895045511425,-78.1381347216666,TRUE 495 | 70.7975430879742,40.8333150669932,TRUE 496 | -6.36073499917984,-49.5481610763818,TRUE 497 | 96.2798633612692,-95.125533035025,TRUE 498 | -41.6253377217799,-48.7137204036117,TRUE 499 | -64.5454430952668,-91.3170346058905,TRUE 500 | -27.066598739475,-89.8947183508426,TRUE 501 | 6.30746120586991,-48.3415510971099,TRUE 502 | --------------------------------------------------------------------------------