public SomaManyToOne(final double pathLength, final double step, final double perturbationLevel, final int populationSize, final long amountOfMigrations,
            final FitnessFunction fitnessFunction, final Specimen specimen) {
        super(fitnessFunction, specimen);
        if (pathLength <= 1) {
            throw new IllegalArgumentException("Path length should not be smaller or equal to 1");
        }
        if (step > pathLength) {
            throw new IllegalArgumentException("Step should not be greater than path length");
        }
        if (step <= 0) {
            throw new IllegalArgumentException("Step should be greater than 0");
        }
        if (perturbationLevel < 0 || perturbationLevel > 1) {
            throw new IllegalArgumentException("Perturbation level range is <0,1>");
        }
        if (populationSize < 2) {
            throw new IllegalArgumentException("Population size should be bigger than 2");
        }
        if (amountOfMigrations < 1) {
            throw new IllegalArgumentException("Amount of migrations must be at least 1 or bigger");
        }
        this.pathLength = pathLength;
        this.step = step;
        this.prt = perturbationLevel;
        this.populationSize = populationSize;
        this.amountOfMigrations = amountOfMigrations;
    }