CPD Results

The following document contains the results of PMD's CPD 7.14.0.

Duplications

File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithDoubleTournament.java Samples 129
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 128
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithSRT.java Samples 134
.survivorSelectionPolicy(doubleTournament)
						.build())
				.combinationPolicy(ProgramRandomCombine.build())
				.mutationPolicies(ProgramRandomMutate.of(0.10),
						ProgramRandomPrune.of(0.12),
						NodeReplacement.of(0.05),
						ProgramApplyRules.of(SimplificationRules.SIMPLIFY_RULES))
				.optimization(Optimization.MINIMIZE) // <3>
				.termination(or(ofMaxGeneration(200), ofFitnessAtMost(0.00001)))
				.fitness(computeFitness);
		final EAConfiguration<Double> eaConfiguration = eaConfigurationBuilder.build();
		// end::ea_config[]

		final var eaExecutionContextBuilder = GPEAExecutionContexts.<Double>forGP(random);
		EAExecutionContexts.enrichForScalarFitness(eaExecutionContextBuilder);

		eaExecutionContextBuilder.populationSize(populationSize);
		eaExecutionContextBuilder.numberOfPartitions(Math.max(1,
				Runtime.getRuntime()
						.availableProcessors() - 1));

		eaExecutionContextBuilder.addEvolutionListeners(
				EvolutionListeners.ofLogTopN(logger, 5, Comparator.<Double>reverseOrder(), (genotype) -> {
					final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genotype.getChromosome(0);
					final TreeNode<Operation<?>> root = chromosome.getRoot();

					return TreeNodeUtils.toStringTreeNode(root);
				}),
				SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
						evolutionStep -> evolutionStep.fitness(),
						evolutionStep -> (double) evolutionStep.individual()
								.getChromosome(0, TreeChromosome.class)
								.getSize()));

		final EAExecutionContext<Double> eaExecutionContext = eaExecutionContextBuilder.build();
		final EASystem<Double> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);

		final EvolutionResult<Double> evolutionResult = eaSystem.evolve();
		final Genotype bestGenotype = evolutionResult.bestGenotype();
		final TreeChromosome<Operation<?>> bestChromosome = (TreeChromosome<Operation<?>>) bestGenotype.getChromosome(0);
		logger.info("Best genotype: {}", bestChromosome.getRoot());
		logger.info("Best genotype - pretty print: {}", TreeNodeUtils.toStringTreeNode(bestChromosome.getRoot()));
	}

	public static void main(String[] args) throws IOException {

		/**
		 * Parse CLI
		 */

		final CommandLineParser parser = new DefaultParser();

		final Options options = new Options();
		options.addOption(PARAM_DEST_CSV, LONG_PARAM_DEST_CSV, true, "destination csv file");

		options.addOption(PARAM_POPULATION_SIZE, LONG_PARAM_POPULATION_SIZE, true, "Population size");

		String csvFilename = DEFAULT_DEST_CSV;
		int populationSize = DEFAULT_POPULATION_SIZE;
		try {
			final CommandLine line = parser.parse(options, args);

			if (line.hasOption(PARAM_DEST_CSV)) {
				csvFilename = line.getOptionValue(PARAM_DEST_CSV);
			}

			if (line.hasOption(PARAM_POPULATION_SIZE)) {
				populationSize = Integer.parseInt(line.getOptionValue(PARAM_POPULATION_SIZE));
			}

		} catch (ParseException exp) {
			cliError(options, "Unexpected exception:" + exp.getMessage());
		}

		logger.info("Population size: {}", populationSize);

		logger.info("CSV output located at {}", csvFilename);
		FileUtils.forceMkdirParent(new File(csvFilename));

		final var symbolicRegression = new SymbolicRegressionWithDoubleTournament();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOO.java Samples 153
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOOSPEA2.java Samples 178
.get(1)));

		final EAExecutionContext<FitnessVector<Double>> eaExecutionContext = eaExecutionContextBuilder.build();
		final EASystem<FitnessVector<Double>> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);

		final EvolutionResult<FitnessVector<Double>> evolutionResult = eaSystem.evolve();
		final Genotype bestGenotype = evolutionResult.bestGenotype();
		final TreeChromosome<Operation<?>> bestChromosome = (TreeChromosome<Operation<?>>) bestGenotype.getChromosome(0);
		logger.info("Best genotype: {}", bestChromosome.getRoot());
		logger.info("Best genotype - pretty print: {}", TreeNodeUtils.toStringTreeNode(bestChromosome.getRoot()));

		final int depthIdx = 1;
		for (int i = 0; i < 15; i++) {
			final int depth = i;
			final Optional<Integer> optIdx = IntStream.range(0,
					evolutionResult.fitness()
							.size())
					.boxed()
					.filter((idx) -> evolutionResult.fitness()
							.get(idx)
							.get(depthIdx) == depth)
					.sorted((a, b) -> Double.compare(evolutionResult.fitness()
							.get(a)
							.get(0),
							evolutionResult.fitness()
									.get(b)
									.get(0)))
					.findFirst();

			optIdx.stream()
					.forEach((idx) -> {
						final TreeChromosome<Operation<?>> treeChromosome = (TreeChromosome<Operation<?>>) evolutionResult
								.population()
								.get(idx)
								.getChromosome(0);

						logger.info("Best genotype for depth {} - score {} -> {}",
								depth,
								evolutionResult.fitness()
										.get(idx)
										.get(0),
								TreeNodeUtils.toStringTreeNode(treeChromosome.getRoot()));
					});
		}
	}

	public static void main(String[] args) throws IOException {

		/**
		 * Parse CLI
		 */

		final CommandLineParser parser = new DefaultParser();

		final Options options = new Options();
		options.addOption(PARAM_DEST_CSV, LONG_PARAM_DEST_CSV, true, "destination csv file");

		options.addOption(PARAM_POPULATION_SIZE, LONG_PARAM_POPULATION_SIZE, true, "Population size");

		String csvFilename = DEFAULT_DEST_CSV;
		int populationSize = DEFAULT_POPULATION_SIZE;
		try {
			final CommandLine line = parser.parse(options, args);

			if (line.hasOption(PARAM_DEST_CSV)) {
				csvFilename = line.getOptionValue(PARAM_DEST_CSV);
			}

			if (line.hasOption(PARAM_POPULATION_SIZE)) {
				populationSize = Integer.parseInt(line.getOptionValue(PARAM_POPULATION_SIZE));
			}

		} catch (ParseException exp) {
			cliError(options, "Unexpected exception:" + exp.getMessage());
		}

		logger.info("Population size: {}", populationSize);

		logger.info("CSV output located at {}", csvFilename);
		FileUtils.forceMkdirParent(new File(csvFilename));

		final var symbolicRegression = new SymbolicRegressionWithMOO();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 115
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithDoubleTournament.java Samples 137
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 136
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithSRT.java Samples 142
.termination(or(ofMaxGeneration(200), ofFitnessAtMost(20.0d))) // <3>
				.fitness(computeFitness);
		final EAConfiguration<Double> eaConfiguration = eaConfigurationBuilder.build();
		// end::ea_config[]

		final var eaExecutionContextBuilder = GPEAExecutionContexts.<Double>forGP(random);
		EAExecutionContexts.enrichForScalarFitness(eaExecutionContextBuilder);

		eaExecutionContextBuilder.populationSize(populationSize);
		eaExecutionContextBuilder.numberOfPartitions(Math.max(1,
				Runtime.getRuntime()
						.availableProcessors() - 1));

		eaExecutionContextBuilder.addEvolutionListeners(
				EvolutionListeners.ofLogTopN(logger, 5, Comparator.<Double>reverseOrder(), (genotype) -> {
					final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genotype.getChromosome(0);
					final TreeNode<Operation<?>> root = chromosome.getRoot();

					return TreeNodeUtils.toStringTreeNode(root);
				}),
				SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
						evolutionStep -> evolutionStep.fitness(),
						evolutionStep -> (double) evolutionStep.individual()
								.getChromosome(0, TreeChromosome.class)
								.getSize()));

		final EAExecutionContext<Double> eaExecutionContext = eaExecutionContextBuilder.build();
		final EASystem<Double> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);

		final EvolutionResult<Double> evolutionResult = eaSystem.evolve();
		final Genotype bestGenotype = evolutionResult.bestGenotype();
		final TreeChromosome<Operation<?>> bestChromosome = (TreeChromosome<Operation<?>>) bestGenotype.getChromosome(0);
		logger.info("Best genotype: {}", bestChromosome.getRoot());
		logger.info("Best genotype - pretty print: {}", TreeNodeUtils.toStringTreeNode(bestChromosome.getRoot()));
	}

	public static void main(String[] args) throws IOException {

		/**
		 * Parse CLI
		 */

		final CommandLineParser parser = new DefaultParser();

		final Options options = new Options();
		options.addOption(PARAM_DEST_CSV, LONG_PARAM_DEST_CSV, true, "destination csv file");

		options.addOption(PARAM_POPULATION_SIZE, LONG_PARAM_POPULATION_SIZE, true, "Population size");

		String csvFilename = DEFAULT_DEST_CSV;
		int populationSize = DEFAULT_POPULATION_SIZE;
		try {
			final CommandLine line = parser.parse(options, args);

			if (line.hasOption(PARAM_DEST_CSV)) {
				csvFilename = line.getOptionValue(PARAM_DEST_CSV);
			}

			if (line.hasOption(PARAM_POPULATION_SIZE)) {
				populationSize = Integer.parseInt(line.getOptionValue(PARAM_POPULATION_SIZE));
			}

		} catch (ParseException exp) {
			cliError(options, "Unexpected exception:" + exp.getMessage());
		}

		logger.info("Population size: {}", populationSize);

		logger.info("CSV output located at {}", csvFilename);
		FileUtils.forceMkdirParent(new File(csvFilename));

		final var symbolicRegression = new SymbolicRegressionWithConstantParsimonyPressure();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOO.java Samples 67
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOOSPEA2.java Samples 69
formatter.printHelp(SymbolicRegressionWithMOO.class.getSimpleName(), options);
		System.exit(-1);
	}

	@SuppressWarnings("unchecked")
	public void run(String csvFilename, int populationSize) {
		Validate.isTrue(StringUtils.isNotBlank(csvFilename));
		Validate.isTrue(populationSize > 0);

		final Random random = new Random();

		final Program program = SymbolicRegressionUtils.buildProgram(random);

		final Comparator<Genotype> deduplicator = (a, b) -> TreeNodeUtils.compare(a, b, 0);

		// tag::compute_fitness[]
		final Fitness<FitnessVector<Double>> computeFitness = (genoType) -> {
			final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genoType.getChromosome(0);
			final Double[][] inputs = new Double[100][1];
			for (int i = 0; i < 100; i++) {
				inputs[i][0] = (i - 50) * 1.2;
			}

			double mse = 0;
			for (final Double[] input : inputs) {

				final double x = input[0];
				final double expected = SymbolicRegressionUtils.evaluate(x);
				final Object result = ProgramUtils.execute(chromosome, input);

				if (Double.isFinite(expected)) {
					final Double resultDouble = (Double) result;
					if (Double.isFinite(resultDouble)) {
						mse += (expected - resultDouble) * (expected - resultDouble);
					} else {
						mse += 1_000_000_000;
					}
				}
			}

			return Double.isFinite(mse) ? new FitnessVector<Double>(mse / 100.0,
					(double) chromosome.getRoot()
							.getSize())
					: new FitnessVector<Double>(Double.MAX_VALUE, Double.MAX_VALUE);
		};
		// end::compute_fitness[]

		// tag::ea_config[]
		final var eaConfigurationBuilder = new EAConfiguration.Builder<FitnessVector<Double>>();
		eaConfigurationBuilder.chromosomeSpecs(ProgramTreeChromosomeSpec.of(program)) // <1>
				.parentSelectionPolicy(TournamentNSGA2Selection.ofFitnessVector(2, 3, deduplicator)) // <2>
				.replacementStrategy(Elitism.builder() // <3>
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 130
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 132
final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genotype.getChromosome(0);
					final TreeNode<Operation<?>> root = chromosome.getRoot();

					return TreeNodeUtils.toStringTreeNode(root);
				}),
				SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
						evolutionStep -> evolutionStep.fitness(),
						evolutionStep -> (double) evolutionStep.individual()
								.getChromosome(0, TreeChromosome.class)
								.getSize()));

		final EAExecutionContext<Double> eaExecutionContext = eaExecutionContextBuilder.build();
		final EASystem<Double> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);

		final EvolutionResult<Double> evolutionResult = eaSystem.evolve();
		final Genotype bestGenotype = evolutionResult.bestGenotype();
		final TreeChromosome<Operation<?>> bestChromosome = (TreeChromosome<Operation<?>>) bestGenotype.getChromosome(0);
		logger.info("Best genotype: {}", bestChromosome.getRoot());
		logger.info("Best genotype - pretty print: {}", TreeNodeUtils.toStringTreeNode(bestChromosome.getRoot()));
	}

	public static void main(String[] args) throws IOException {

		/**
		 * Parse CLI
		 */

		final CommandLineParser parser = new DefaultParser();

		final Options options = new Options();
		options.addOption(PARAM_DEST_CSV, LONG_PARAM_DEST_CSV, true, "destination csv file");

		options.addOption(PARAM_POPULATION_SIZE, LONG_PARAM_POPULATION_SIZE, true, "Population size");

		String csvFilename = DEFAULT_DEST_CSV;
		int populationSize = DEFAULT_POPULATION_SIZE;
		try {
			final CommandLine line = parser.parse(options, args);

			if (line.hasOption(PARAM_DEST_CSV)) {
				csvFilename = line.getOptionValue(PARAM_DEST_CSV);
			}

			if (line.hasOption(PARAM_POPULATION_SIZE)) {
				populationSize = Integer.parseInt(line.getOptionValue(PARAM_POPULATION_SIZE));
			}

		} catch (ParseException exp) {
			cliError(options, "Unexpected exception:" + exp.getMessage());
		}

		logger.info("Population size: {}", populationSize);

		logger.info("CSV output located at {}", csvFilename);
		FileUtils.forceMkdirParent(new File(csvFilename));

		final var symbolicRegression = new SymbolicRegressionWithConstantParsimonyPressure();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithDoubleTournament.java Samples 152
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 132
final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genotype.getChromosome(0);
					final TreeNode<Operation<?>> root = chromosome.getRoot();

					return TreeNodeUtils.toStringTreeNode(root);
				}),
				SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
						evolutionStep -> evolutionStep.fitness(),
						evolutionStep -> (double) evolutionStep.individual()
								.getChromosome(0, TreeChromosome.class)
								.getSize()));

		final EAExecutionContext<Double> eaExecutionContext = eaExecutionContextBuilder.build();
		final EASystem<Double> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);

		final EvolutionResult<Double> evolutionResult = eaSystem.evolve();
		final Genotype bestGenotype = evolutionResult.bestGenotype();
		final TreeChromosome<Operation<?>> bestChromosome = (TreeChromosome<Operation<?>>) bestGenotype.getChromosome(0);
		logger.info("Best genotype: {}", bestChromosome.getRoot());
		logger.info("Best genotype - pretty print: {}", TreeNodeUtils.toStringTreeNode(bestChromosome.getRoot()));
	}

	public static void main(String[] args) throws IOException {

		/**
		 * Parse CLI
		 */

		final CommandLineParser parser = new DefaultParser();

		final Options options = new Options();
		options.addOption(PARAM_DEST_CSV, LONG_PARAM_DEST_CSV, true, "destination csv file");

		options.addOption(PARAM_POPULATION_SIZE, LONG_PARAM_POPULATION_SIZE, true, "Population size");

		String csvFilename = DEFAULT_DEST_CSV;
		int populationSize = DEFAULT_POPULATION_SIZE;
		try {
			final CommandLine line = parser.parse(options, args);

			if (line.hasOption(PARAM_DEST_CSV)) {
				csvFilename = line.getOptionValue(PARAM_DEST_CSV);
			}

			if (line.hasOption(PARAM_POPULATION_SIZE)) {
				populationSize = Integer.parseInt(line.getOptionValue(PARAM_POPULATION_SIZE));
			}

		} catch (ParseException exp) {
			cliError(options, "Unexpected exception:" + exp.getMessage());
		}

		logger.info("Population size: {}", populationSize);

		logger.info("CSV output located at {}", csvFilename);
		FileUtils.forceMkdirParent(new File(csvFilename));

		final var symbolicRegression = new SymbolicRegressionWithDoubleTournament();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 151
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 132
final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genotype.getChromosome(0);
					final TreeNode<Operation<?>> root = chromosome.getRoot();

					return TreeNodeUtils.toStringTreeNode(root);
				}),
				SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
						evolutionStep -> evolutionStep.fitness(),
						evolutionStep -> (double) evolutionStep.individual()
								.getChromosome(0, TreeChromosome.class)
								.getSize()));

		final EAExecutionContext<Double> eaExecutionContext = eaExecutionContextBuilder.build();
		final EASystem<Double> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);

		final EvolutionResult<Double> evolutionResult = eaSystem.evolve();
		final Genotype bestGenotype = evolutionResult.bestGenotype();
		final TreeChromosome<Operation<?>> bestChromosome = (TreeChromosome<Operation<?>>) bestGenotype.getChromosome(0);
		logger.info("Best genotype: {}", bestChromosome.getRoot());
		logger.info("Best genotype - pretty print: {}", TreeNodeUtils.toStringTreeNode(bestChromosome.getRoot()));
	}

	public static void main(String[] args) throws IOException {

		/**
		 * Parse CLI
		 */

		final CommandLineParser parser = new DefaultParser();

		final Options options = new Options();
		options.addOption(PARAM_DEST_CSV, LONG_PARAM_DEST_CSV, true, "destination csv file");

		options.addOption(PARAM_POPULATION_SIZE, LONG_PARAM_POPULATION_SIZE, true, "Population size");

		String csvFilename = DEFAULT_DEST_CSV;
		int populationSize = DEFAULT_POPULATION_SIZE;
		try {
			final CommandLine line = parser.parse(options, args);

			if (line.hasOption(PARAM_DEST_CSV)) {
				csvFilename = line.getOptionValue(PARAM_DEST_CSV);
			}

			if (line.hasOption(PARAM_POPULATION_SIZE)) {
				populationSize = Integer.parseInt(line.getOptionValue(PARAM_POPULATION_SIZE));
			}

		} catch (ParseException exp) {
			cliError(options, "Unexpected exception:" + exp.getMessage());
		}

		logger.info("Population size: {}", populationSize);

		logger.info("CSV output located at {}", csvFilename);
		FileUtils.forceMkdirParent(new File(csvFilename));

		final var symbolicRegression = new SymbolicRegressionWithProportionalTournament();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithSRT.java Samples 157
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 132
final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genotype.getChromosome(0);
					final TreeNode<Operation<?>> root = chromosome.getRoot();

					return TreeNodeUtils.toStringTreeNode(root);
				}),
				SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
						evolutionStep -> evolutionStep.fitness(),
						evolutionStep -> (double) evolutionStep.individual()
								.getChromosome(0, TreeChromosome.class)
								.getSize()));

		final EAExecutionContext<Double> eaExecutionContext = eaExecutionContextBuilder.build();
		final EASystem<Double> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);

		final EvolutionResult<Double> evolutionResult = eaSystem.evolve();
		final Genotype bestGenotype = evolutionResult.bestGenotype();
		final TreeChromosome<Operation<?>> bestChromosome = (TreeChromosome<Operation<?>>) bestGenotype.getChromosome(0);
		logger.info("Best genotype: {}", bestChromosome.getRoot());
		logger.info("Best genotype - pretty print: {}", TreeNodeUtils.toStringTreeNode(bestChromosome.getRoot()));
	}

	public static void main(String[] args) throws IOException {

		/**
		 * Parse CLI
		 */

		final CommandLineParser parser = new DefaultParser();

		final Options options = new Options();
		options.addOption(PARAM_DEST_CSV, LONG_PARAM_DEST_CSV, true, "destination csv file");

		options.addOption(PARAM_POPULATION_SIZE, LONG_PARAM_POPULATION_SIZE, true, "Population size");

		String csvFilename = DEFAULT_DEST_CSV;
		int populationSize = DEFAULT_POPULATION_SIZE;
		try {
			final CommandLine line = parser.parse(options, args);

			if (line.hasOption(PARAM_DEST_CSV)) {
				csvFilename = line.getOptionValue(PARAM_DEST_CSV);
			}

			if (line.hasOption(PARAM_POPULATION_SIZE)) {
				populationSize = Integer.parseInt(line.getOptionValue(PARAM_POPULATION_SIZE));
			}

		} catch (ParseException exp) {
			cliError(options, "Unexpected exception:" + exp.getMessage());
		}

		logger.info("Population size: {}", populationSize);

		logger.info("CSV output located at {}", csvFilename);
		FileUtils.forceMkdirParent(new File(csvFilename));

		final var symbolicRegression = new SymbolicRegressionWithSRT();
File Project Line
net/bmahe/genetics4j/samples/mixturemodel/ClusteringUtils.java Samples 36
net/bmahe/genetics4j/samples/mixturemodel/ClusteringUtils.java Samples 86
final var fChromosome = genotype.getChromosome(0, DoubleChromosome.class);
		final int[] clusters = new int[samples.length];
		final double[] bestProb = new double[samples.length];

		for (int c = 0; c < clusters.length; c++) {
			clusters[c] = 0;
			bestProb[c] = Double.MIN_VALUE;
		}

		double sumAlpha = 0.0f;
		int k = 0;
		while (k < fChromosome.getSize()) {
			sumAlpha += fChromosome.getAllele(k);
			k += distributionNumParameters;
		}

		int i = 0;
		int clusterIndex = 0;
		while (i < fChromosome.getSize()) {

			final double alpha = fChromosome.getAllele(i) / sumAlpha;
			final double[] mean = new double[] { fChromosome.getAllele(i + 1), fChromosome.getAllele(i + 2) };
			final double[][] covariance = new double[][] {
					{ fChromosome.getAllele(i + 3) - 15, fChromosome.getAllele(i + 4) - 15 },
					{ fChromosome.getAllele(i + 4) - 15, fChromosome.getAllele(i + 5) - 15 } };

			try {
				final var multivariateNormalDistribution = new MultivariateNormalDistribution(mean, covariance);

				for (int j = 0; j < samples.length; j++) {
					float likelyhood = (float) (alpha * multivariateNormalDistribution.density(samples[j]));

					if (clusters[j] < 0 || bestProb[j] < likelyhood) {
						bestProb[j] = likelyhood;
						clusters[j] = clusterIndex;
					}
				}
			} catch (NonPositiveDefiniteMatrixException | SingularMatrixException | MathUnsupportedOperationException e) {
			}

			i += distributionNumParameters;
			clusterIndex++;
		}

		return clusters;
	}

	public static int[] assignClustersFloatChromosome(final int distributionNumParameters, final double[][] samples,
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithDoubleTournament.java Samples 69
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithSRT.java Samples 69
formatter.printHelp(SymbolicRegressionWithDoubleTournament.class.getSimpleName(), options);
		System.exit(-1);
	}

	@SuppressWarnings("unchecked")
	public void run(String csvFilename, int populationSize) {
		Validate.isTrue(StringUtils.isNotBlank(csvFilename));
		Validate.isTrue(populationSize > 0);

		final Random random = new Random();

		final Program program = SymbolicRegressionUtils.buildProgram(random);

		// tag::compute_fitness[]
		final Double[][] inputs = new Double[100][1];
		for (int i = 0; i < 100; i++) {
			inputs[i][0] = (i - 50) * 1.2;
		}

		final Fitness<Double> computeFitness = (genoType) -> {
			final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genoType.getChromosome(0);

			double mse = 0;
			for (final Double[] input : inputs) {

				final double x = input[0];
				final double expected = SymbolicRegressionUtils.evaluate(x);
				final Object result = ProgramUtils.execute(chromosome, input);

				if (Double.isFinite(expected)) {
					final Double resultDouble = (Double) result;
					mse += Double.isFinite(resultDouble) ? (expected - resultDouble) * (expected - resultDouble)
							: 1_000_000_000;
				}
			}
			return Double.isFinite(mse) ? mse / 100.0d : Double.MAX_VALUE;
		};
		// end::compute_fitness[]

		// tag::double_tournament[]
		final Comparator<Individual<Double>> parsimonyComparator = (a, b) -> {
			final var treeChromosomeA = a.genotype()
					.getChromosome(0, TreeChromosome.class);
			final var treeChromosomeB = b.genotype()
					.getChromosome(0, TreeChromosome.class);

			return Integer.compare(treeChromosomeA.getSize(), treeChromosomeB.getSize());
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 67
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 67
formatter.printHelp(SymbolicRegressionWithConstantParsimonyPressure.class.getSimpleName(), options);
		System.exit(-1);
	}

	@SuppressWarnings("unchecked")
	public void run(String csvFilename, int populationSize) {
		Validate.isTrue(StringUtils.isNotBlank(csvFilename));
		Validate.isTrue(populationSize > 0);

		final Random random = new Random();

		final Program program = SymbolicRegressionUtils.buildProgram(random);

		// tag::compute_fitness[]
		final Fitness<Double> computeFitness = (genoType) -> {
			final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genoType.getChromosome(0);
			final Double[][] inputs = new Double[100][1];
			for (int i = 0; i < 100; i++) {
				inputs[i][0] = (i - 50) * 1.2;
			}

			double mse = 0;
			for (final Double[] input : inputs) {

				final double x = input[0];
				final double expected = SymbolicRegressionUtils.evaluate(x);
				final Object result = ProgramUtils.execute(chromosome, input);

				if (Double.isFinite(expected)) {
					final Double resultDouble = (Double) result;
					mse += Double.isFinite(resultDouble) ? (expected - resultDouble) * (expected - resultDouble)
							: 1_000_000_000;
				}
			}
			return Double.isFinite(mse) ? mse / 100.0 + 1.5 * chromosome.getSize() : Double.MAX_VALUE; // <1>
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 67
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 69
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 67
formatter.printHelp(SymbolicRegressionWithConstantParsimonyPressure.class.getSimpleName(), options);
		System.exit(-1);
	}

	@SuppressWarnings("unchecked")
	public void run(String csvFilename, int populationSize) {
		Validate.isTrue(StringUtils.isNotBlank(csvFilename));
		Validate.isTrue(populationSize > 0);

		final Random random = new Random();

		final Program program = SymbolicRegressionUtils.buildProgram(random);

		// tag::compute_fitness[]
		final Fitness<Double> computeFitness = (genoType) -> {
			final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genoType.getChromosome(0);
			final Double[][] inputs = new Double[100][1];
			for (int i = 0; i < 100; i++) {
				inputs[i][0] = (i - 50) * 1.2;
			}

			double mse = 0;
			for (final Double[] input : inputs) {

				final double x = input[0];
				final double expected = SymbolicRegressionUtils.evaluate(x);
				final Object result = ProgramUtils.execute(chromosome, input);

				if (Double.isFinite(expected)) {
					final Double resultDouble = (Double) result;
					mse += Double.isFinite(resultDouble) ? (expected - resultDouble) * (expected - resultDouble)
							: 1_000_000_000;
				}
			}
			return Double.isFinite(mse) ? mse / 100.0 + 1.5 * chromosome.getSize() : Double.MAX_VALUE; // <1>
File Project Line
net/bmahe/genetics4j/gp/mutation/NodeReplacementMutator.java Genetic Programming 139
net/bmahe/genetics4j/gp/mutation/ProgramRandomPruneMutator.java Genetic Programming 69
}
	}

	@Override
	public Genotype mutate(final long generation, final Genotype original) {
		Validate.isTrue(generation >= 0);
		Objects.requireNonNull(original);

		if (randomGenerator.nextDouble() < populationMutationProbability == false) {
			return original;
		}

		final Chromosome[] newChromosomes = new Chromosome[original.getSize()];
		final Chromosome[] chromosomes = original.getChromosomes();
		for (int chromosomeIndex = 0; chromosomeIndex < chromosomes.length; chromosomeIndex++) {
			final ChromosomeSpec chromosomeSpec = eaConfiguration.getChromosomeSpec(chromosomeIndex);
			final Chromosome chromosome = chromosomes[chromosomeIndex];

			if (chromosomeSpec instanceof ProgramTreeChromosomeSpec == false) {
				throw new IllegalArgumentException("This mutator does not support chromosome specs " + chromosomeSpec);
			}

			if (chromosome instanceof TreeChromosome<?> == false) {
				throw new IllegalArgumentException(
						"This mutator does not support chromosome of type " + chromosome.getClass()
								.getSimpleName());
			}

			final ProgramTreeChromosomeSpec programTreeChromosomeSpec = (ProgramTreeChromosomeSpec) chromosomeSpec;

			final TreeChromosome<Operation<?>> treeChromosome = (TreeChromosome<Operation<?>>) chromosome;
			final int chromosomeSize = treeChromosome.getSize();

			if (chromosomeSize > 2) {
				final int cutPoint = randomGenerator.nextInt(chromosomeSize - 1) + 1;

				final TreeNode<Operation<?>> root = treeChromosome.getRoot();
				final TreeNode<Operation<?>> newRoot = duplicateAndReplaceNode(programTreeChromosomeSpec.program(),
File Project Line
net/bmahe/genetics4j/core/selection/SelectiveRefinementTournamentSelector.java Core 33
net/bmahe/genetics4j/gp/selection/DoubleTournamentSelector.java Genetic Programming 36
this.randomGenerator = _randomGenerator;
	}

	protected Individual<T> randomIndividual(final List<Genotype> population, final List<T> fitnessScore) {
		Objects.requireNonNull(population);
		Objects.requireNonNull(fitnessScore);
		Validate.isTrue(fitnessScore.size() > 0);
		Validate.isTrue(population.size() == fitnessScore.size());

		final int candidateIndex = randomGenerator.nextInt(fitnessScore.size());
		return Individual.of(population.get(candidateIndex), fitnessScore.get(candidateIndex));

	}

	protected Individual<T> selectForFitness(final AbstractEAConfiguration<T> eaConfiguration,
			final Comparator<Individual<T>> fitnessComparator, final int numCandidates, final List<Genotype> population,
			final List<T> fitnessScore) {
		Objects.requireNonNull(population);
		Objects.requireNonNull(fitnessScore);
		Validate.isTrue(fitnessScore.isEmpty() == false);

		return IntStream.range(0, numCandidates)
				.boxed()
				.map(i -> randomIndividual(population, fitnessScore))
				.max((a, b) -> fitnessComparator.compare(a, b))
				.get();
	}

	protected Individual<T> selectForRefinement(final Comparator<Individual<T>> refinementComparator,
File Project Line
net/bmahe/genetics4j/samples/clustering/FitnessUtils.java Samples 132
net/bmahe/genetics4j/samples/clustering/FitnessUtils.java Samples 165
public final static Fitness<Double> computeFitness(final int numDataPoints, final double[][] data,
			double[][] distances, final int numClusters) {
		Validate.notNull(data);
		Validate.notNull(distances);
		Validate.isTrue(numDataPoints > 0);
		Validate.isTrue(numDataPoints == data.length);
		Validate.isTrue(numDataPoints == distances.length);
		Validate.isTrue(numClusters > 0);

		return (genoType) -> {

			final double[][] clusters = PhenotypeUtils.toPhenotype(genoType);

			final int[] closestClusterIndex = assignDataToClusters(data, distances, clusters);

			final Map<Integer, Set<Integer>> clusterToMembers = new HashMap<>();

			for (int i = 0; i < numDataPoints; i++) {
				final var members = clusterToMembers.computeIfAbsent(closestClusterIndex[i], k -> new HashSet<>());
				members.add(i);
			}

			double sum_si = 0.0;
			for (int i = 0; i < numDataPoints; i++) {
				sum_si += computeSilhouetteScore(data, distances, numClusters, clusterToMembers, closestClusterIndex, i);
			}
File Project Line
net/bmahe/genetics4j/samples/mixturemodel/ClusteringUtils.java Samples 133
net/bmahe/genetics4j/samples/mixturemodel/ClusteringUtils.java Samples 160
public static void persistClusters(final float[] x, final float[] y, final int[] cluster, final String filename)
			throws IOException {
		Validate.isTrue(x.length == y.length);
		Validate.isTrue(x.length == cluster.length);
		logger.info("Saving clusters to CSV: {}", filename);

		final CSVPrinter csvPrinter;
		try {
			csvPrinter = CSVFormat.DEFAULT.withAutoFlush(true)
					.withHeader(new String[] { "cluster", "x", "y" })
					.print(Path.of(filename), StandardCharsets.UTF_8);
		} catch (IOException e) {
			logger.error("Could not open {}", filename, e);
			throw new RuntimeException("Could not open file " + filename, e);
		}

		for (int i = 0; i < cluster.length; i++) {
			try {
				csvPrinter.printRecord(cluster[i], x[i], y[i]);
			} catch (IOException e) {
				throw new RuntimeException("Could not write data", e);
			}
		}
		csvPrinter.close(true);
	}

	// TODO fix duplication
	public static void persistClusters(final double[] x, final double[] y, final int[] cluster, final String filename)
File Project Line
net/bmahe/genetics4j/samples/mixturemodel/MooCPU.java Samples 83
net/bmahe/genetics4j/samples/mixturemodel/SingleObjectiveMethod.java Samples 78
final float alpha = fChromosome.getAllele(i) / sumAlpha;
				if (alpha > 0.0001) {
					final double[] mean = new double[] { fChromosome.getAllele(i + 1), fChromosome.getAllele(i + 2) };
					final double[][] covariances = new double[][] {
							{ fChromosome.getAllele(i + 3) - 15, fChromosome.getAllele(i + 4) - 15 },
							{ fChromosome.getAllele(i + 4) - 15, fChromosome.getAllele(i + 5) - 15 } };

					try {
						final var multivariateNormalDistribution = new MultivariateNormalDistribution(mean, covariances);

						for (int j = 0; j < samples.length; j++) {
							final var density = multivariateNormalDistribution.density(samples[j]);
							likelyhoods[j] += alpha * density;
						}
					} catch (NonPositiveDefiniteMatrixException | MathUnsupportedOperationException
							| SingularMatrixException e) {
					}
				}
				i += distributionNumParameters;
			}
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 149
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOO.java Samples 197
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOOSPEA2.java Samples 222
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 170
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithSRT.java Samples 176
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 152
}

	public static void main(String[] args) throws IOException {

		/**
		 * Parse CLI
		 */

		final CommandLineParser parser = new DefaultParser();

		final Options options = new Options();
		options.addOption(PARAM_DEST_CSV, LONG_PARAM_DEST_CSV, true, "destination csv file");

		options.addOption(PARAM_POPULATION_SIZE, LONG_PARAM_POPULATION_SIZE, true, "Population size");

		String csvFilename = DEFAULT_DEST_CSV;
		int populationSize = DEFAULT_POPULATION_SIZE;
		try {
			final CommandLine line = parser.parse(options, args);

			if (line.hasOption(PARAM_DEST_CSV)) {
				csvFilename = line.getOptionValue(PARAM_DEST_CSV);
			}

			if (line.hasOption(PARAM_POPULATION_SIZE)) {
				populationSize = Integer.parseInt(line.getOptionValue(PARAM_POPULATION_SIZE));
			}

		} catch (ParseException exp) {
			cliError(options, "Unexpected exception:" + exp.getMessage());
		}

		logger.info("Population size: {}", populationSize);

		logger.info("CSV output located at {}", csvFilename);
		FileUtils.forceMkdirParent(new File(csvFilename));

		final var symbolicRegression = new SymbolicRegressionWithConstantParsimonyPressure();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithDoubleTournament.java Samples 171
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOO.java Samples 197
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOOSPEA2.java Samples 222
}

	public static void main(String[] args) throws IOException {

		/**
		 * Parse CLI
		 */

		final CommandLineParser parser = new DefaultParser();

		final Options options = new Options();
		options.addOption(PARAM_DEST_CSV, LONG_PARAM_DEST_CSV, true, "destination csv file");

		options.addOption(PARAM_POPULATION_SIZE, LONG_PARAM_POPULATION_SIZE, true, "Population size");

		String csvFilename = DEFAULT_DEST_CSV;
		int populationSize = DEFAULT_POPULATION_SIZE;
		try {
			final CommandLine line = parser.parse(options, args);

			if (line.hasOption(PARAM_DEST_CSV)) {
				csvFilename = line.getOptionValue(PARAM_DEST_CSV);
			}

			if (line.hasOption(PARAM_POPULATION_SIZE)) {
				populationSize = Integer.parseInt(line.getOptionValue(PARAM_POPULATION_SIZE));
			}

		} catch (ParseException exp) {
			cliError(options, "Unexpected exception:" + exp.getMessage());
		}

		logger.info("Population size: {}", populationSize);

		logger.info("CSV output located at {}", csvFilename);
		FileUtils.forceMkdirParent(new File(csvFilename));

		final var symbolicRegression = new SymbolicRegressionWithDoubleTournament();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOO.java Samples 130
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOOSPEA2.java Samples 128
.anyMatch(fv -> fv.get(0) <= 0.000001 && fv.get(1) <= 20))) // <4>
				.fitness(computeFitness);
		final EAConfiguration<FitnessVector<Double>> eaConfiguration = eaConfigurationBuilder.build();
		// end::ea_config[]

		// tag::eae_moo[]
		final var eaExecutionContextBuilder = GPEAExecutionContexts.<FitnessVector<Double>>forGP(random);
		// end::eae_moo[]
		eaExecutionContextBuilder.populationSize(populationSize);
		eaExecutionContextBuilder.numberOfPartitions(Math.max(1,
				Runtime.getRuntime()
						.availableProcessors() - 3));

		eaExecutionContextBuilder.addEvolutionListeners(
				EvolutionListeners.ofLogTopN(logger,
						5,
						Comparator.<FitnessVector<Double>, Double>comparing(fv -> fv.get(0))
								.reversed(),
						(genotype) -> TreeNodeUtils.toStringTreeNode(genotype, 0)),
				SymbolicRegressionUtils.csvLogger(csvFilename,
						evolutionStep -> evolutionStep.fitness()
								.get(0),
						evolutionStep -> evolutionStep.fitness()
								.get(1)));
File Project Line
net/bmahe/genetics4j/core/combination/singlepointarithmetic/IntChromosomeSinglePointArithmetic.java Core 24
net/bmahe/genetics4j/core/combination/singlepointcrossover/IntChromosomeSinglePointCrossover.java Core 21
}

	@Override
	public List<Chromosome> combine(final AbstractEAConfiguration<T> eaConfiguration, final Chromosome chromosome1,
			final T firstParentFitness, final Chromosome chromosome2, final T secondParentFitness) {
		Validate.notNull(chromosome1);
		Validate.notNull(chromosome2);
		Validate.isInstanceOf(IntChromosome.class, chromosome1);
		Validate.isInstanceOf(IntChromosome.class, chromosome2);
		Validate.isTrue(chromosome1.getNumAlleles() == chromosome2.getNumAlleles());

		final int alleleSplit = randomGenerator.nextInt(chromosome1.getNumAlleles());

		final IntChromosome intChromosome1 = (IntChromosome) chromosome1;
		final IntChromosome intChromosome2 = (IntChromosome) chromosome2;

		final int numAlleles = chromosome1.getNumAlleles();
		final int[] firstChildValues = new int[numAlleles];
		final int[] secondChildValues = new int[numAlleles];

		for (int i = 0; i < numAlleles; i++) {
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 76
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithEnforcedMaxDepth.java Samples 42
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 78
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 76
final Random random = new Random();

		final Program program = SymbolicRegressionUtils.buildProgram(random);

		// tag::compute_fitness[]
		final Fitness<Double> computeFitness = (genoType) -> {
			final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genoType.getChromosome(0);
			final Double[][] inputs = new Double[100][1];
			for (int i = 0; i < 100; i++) {
				inputs[i][0] = (i - 50) * 1.2;
			}

			double mse = 0;
			for (final Double[] input : inputs) {

				final double x = input[0];
				final double expected = SymbolicRegressionUtils.evaluate(x);
				final Object result = ProgramUtils.execute(chromosome, input);

				if (Double.isFinite(expected)) {
File Project Line
net/bmahe/genetics4j/moo/nsga2/impl/NSGA2Selector.java Multi-Objective Optimization 50
net/bmahe/genetics4j/moo/nsga2/impl/TournamentNSGA2Selector.java Multi-Objective Optimization 54
final Comparator<Genotype> individualDeduplicator = nsga2Selection.deduplicate()
					.get();
			final Set<Genotype> seenGenotype = new TreeSet<>(individualDeduplicator);

			for (int i = 0; i < population.size(); i++) {
				final Genotype genotype = population.get(i);
				final T fitness = fitnessScore.get(i);

				if (seenGenotype.add(genotype)) {
					individuals.add(genotype, fitness);
				}
			}

		} else {
			for (int i = 0; i < population.size(); i++) {
				final Genotype genotype = population.get(i);
				final T fitness = fitnessScore.get(i);

				individuals.add(genotype, fitness);
			}
		}

		logger.debug("Selecting {} individuals from a population of {}", numIndividuals, individuals.size());

		final int numberObjectives = nsga2Selection.numberObjectives();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 81
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOO.java Samples 83
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOOSPEA2.java Samples 85
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 83
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 81
final Fitness<Double> computeFitness = (genoType) -> {
			final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genoType.getChromosome(0);
			final Double[][] inputs = new Double[100][1];
			for (int i = 0; i < 100; i++) {
				inputs[i][0] = (i - 50) * 1.2;
			}

			double mse = 0;
			for (final Double[] input : inputs) {

				final double x = input[0];
				final double expected = SymbolicRegressionUtils.evaluate(x);
				final Object result = ProgramUtils.execute(chromosome, input);

				if (Double.isFinite(expected)) {
					final Double resultDouble = (Double) result;
File Project Line
net/bmahe/genetics4j/gp/mutation/NodeReplacementMutator.java Genetic Programming 152
net/bmahe/genetics4j/gp/mutation/ProgramRandomMutateMutator.java Genetic Programming 91
net/bmahe/genetics4j/gp/mutation/ProgramRandomPruneMutator.java Genetic Programming 82
final Chromosome[] chromosomes = original.getChromosomes();
		for (int chromosomeIndex = 0; chromosomeIndex < chromosomes.length; chromosomeIndex++) {
			final ChromosomeSpec chromosomeSpec = eaConfiguration.getChromosomeSpec(chromosomeIndex);
			final Chromosome chromosome = chromosomes[chromosomeIndex];

			if (chromosomeSpec instanceof ProgramTreeChromosomeSpec == false) {
				throw new IllegalArgumentException("This mutator does not support chromosome specs " + chromosomeSpec);
			}

			if (chromosome instanceof TreeChromosome<?> == false) {
				throw new IllegalArgumentException(
						"This mutator does not support chromosome of type " + chromosome.getClass()
								.getSimpleName());
			}

			final ProgramTreeChromosomeSpec programTreeChromosomeSpec = (ProgramTreeChromosomeSpec) chromosomeSpec;

			final TreeChromosome<Operation<?>> treeChromosome = (TreeChromosome<Operation<?>>) chromosome;
			final int chromosomeSize = treeChromosome.getSize();

			if (chromosomeSize > 2) {
				final int cutPoint = randomGenerator.nextInt(chromosomeSize - 1) + 1;
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 135
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithEnforcedMaxDepth.java Samples 103
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 156
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithSRT.java Samples 162
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 137
SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
						evolutionStep -> evolutionStep.fitness(),
						evolutionStep -> (double) evolutionStep.individual()
								.getChromosome(0, TreeChromosome.class)
								.getSize()));

		final EAExecutionContext<Double> eaExecutionContext = eaExecutionContextBuilder.build();
		final EASystem<Double> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);

		final EvolutionResult<Double> evolutionResult = eaSystem.evolve();
		final Genotype bestGenotype = evolutionResult.bestGenotype();
		final TreeChromosome<Operation<?>> bestChromosome = (TreeChromosome<Operation<?>>) bestGenotype.getChromosome(0);
		logger.info("Best genotype: {}", bestChromosome.getRoot());
		logger.info("Best genotype - pretty print: {}", TreeNodeUtils.toStringTreeNode(bestChromosome.getRoot()));
	}

	public static void main(String[] args) throws IOException {
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithDoubleTournament.java Samples 157
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithEnforcedMaxDepth.java Samples 103
SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
						evolutionStep -> evolutionStep.fitness(),
						evolutionStep -> (double) evolutionStep.individual()
								.getChromosome(0, TreeChromosome.class)
								.getSize()));

		final EAExecutionContext<Double> eaExecutionContext = eaExecutionContextBuilder.build();
		final EASystem<Double> eaSystem = EASystemFactory.from(eaConfiguration, eaExecutionContext);

		final EvolutionResult<Double> evolutionResult = eaSystem.evolve();
		final Genotype bestGenotype = evolutionResult.bestGenotype();
		final TreeChromosome<Operation<?>> bestChromosome = (TreeChromosome<Operation<?>>) bestGenotype.getChromosome(0);
		logger.info("Best genotype: {}", bestChromosome.getRoot());
		logger.info("Best genotype - pretty print: {}", TreeNodeUtils.toStringTreeNode(bestChromosome.getRoot()));
	}

	public static void main(String[] args) throws IOException {
File Project Line
net/bmahe/genetics4j/core/replacement/DeleteNLastImpl.java Core 26
net/bmahe/genetics4j/core/replacement/GenerationalReplacementImpl.java Core 24
this.offspringSelector = _offspringSelector;
	}

	@Override
	public Population<T> select(final AbstractEAConfiguration<T> eaConfiguration, final long generation,
			final int numIndividuals, final List<Genotype> population, final List<T> populationScores,
			final List<Genotype> offsprings, final List<T> offspringScores) {
		Objects.requireNonNull(eaConfiguration);
		Validate.isTrue(generation >= 0);
		Validate.isTrue(numIndividuals > 0);
		Objects.requireNonNull(population);
		Objects.requireNonNull(populationScores);
		Validate.isTrue(population.size() == populationScores.size());
		Objects.requireNonNull(offsprings);
		Objects.requireNonNull(offspringScores);
		Validate.isTrue(offsprings.size() == offspringScores.size());

		final Comparator<T> populationComparator = eaConfiguration.fitnessComparator();
File Project Line
net/bmahe/genetics4j/gp/mutation/NodeReplacementMutator.java Genetic Programming 151
net/bmahe/genetics4j/gp/mutation/ProgramRulesApplicatorMutator.java Genetic Programming 90
final Chromosome[] newChromosomes = new Chromosome[original.getSize()];
		final Chromosome[] chromosomes = original.getChromosomes();
		for (int chromosomeIndex = 0; chromosomeIndex < chromosomes.length; chromosomeIndex++) {
			final ChromosomeSpec chromosomeSpec = eaConfiguration.getChromosomeSpec(chromosomeIndex);
			final Chromosome chromosome = chromosomes[chromosomeIndex];

			if (chromosomeSpec instanceof ProgramTreeChromosomeSpec == false) {
				throw new IllegalArgumentException("This mutator does not support chromosome specs " + chromosomeSpec);
			}

			if (chromosome instanceof TreeChromosome<?> == false) {
				throw new IllegalArgumentException(
						"This mutator does not support chromosome of type " + chromosome.getClass()
								.getSimpleName());
			}

			final ProgramTreeChromosomeSpec programTreeChromosomeSpec = (ProgramTreeChromosomeSpec) chromosomeSpec;

			final TreeChromosome<Operation<?>> treeChromosome = (TreeChromosome<Operation<?>>) chromosome;
			final int chromosomeSize = treeChromosome.getSize();
File Project Line
net/bmahe/genetics4j/gp/mutation/ProgramRandomPruneMutator.java Genetic Programming 81
net/bmahe/genetics4j/gp/mutation/ProgramRulesApplicatorMutator.java Genetic Programming 90
final Chromosome[] newChromosomes = new Chromosome[original.getSize()];
		final Chromosome[] chromosomes = original.getChromosomes();
		for (int chromosomeIndex = 0; chromosomeIndex < chromosomes.length; chromosomeIndex++) {
			final ChromosomeSpec chromosomeSpec = eaConfiguration.getChromosomeSpec(chromosomeIndex);
			final Chromosome chromosome = chromosomes[chromosomeIndex];

			if (chromosomeSpec instanceof ProgramTreeChromosomeSpec == false) {
				throw new IllegalArgumentException("This mutator does not support chromosome specs " + chromosomeSpec);
			}

			if (chromosome instanceof TreeChromosome<?> == false) {
				throw new IllegalArgumentException(
						"This mutator does not support chromosome of type " + chromosome.getClass()
								.getSimpleName());
			}

			final ProgramTreeChromosomeSpec programTreeChromosomeSpec = (ProgramTreeChromosomeSpec) chromosomeSpec;

			final TreeChromosome<Operation<?>> treeChromosome = (TreeChromosome<Operation<?>>) chromosome;
			final int chromosomeSize = treeChromosome.getSize();
File Project Line
net/bmahe/genetics4j/core/replacement/DeleteNLastImpl.java Core 27
net/bmahe/genetics4j/moo/spea2/replacement/SPEA2ReplacementStrategyImplementor.java Multi-Objective Optimization 305
}

	@Override
	public Population<T> select(final AbstractEAConfiguration<T> eaConfiguration, final long generation,
			final int numIndividuals, final List<Genotype> population, final List<T> populationScores,
			final List<Genotype> offsprings, final List<T> offspringScores) {
		Objects.requireNonNull(eaConfiguration);
		Validate.isTrue(generation >= 0);
		Validate.isTrue(numIndividuals > 0);
		Objects.requireNonNull(population);
		Objects.requireNonNull(populationScores);
		Validate.isTrue(population.size() == populationScores.size());
		Objects.requireNonNull(offsprings);
		Objects.requireNonNull(offspringScores);
		Validate.isTrue(offsprings.size() == offspringScores.size());

		final Comparator<T> populationComparator = eaConfiguration.fitnessComparator();
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithEnforcedMaxDepth.java Samples 46
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOO.java Samples 83
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOOSPEA2.java Samples 85
final Fitness<Double> computeFitness = (genoType) -> {
			final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genoType.getChromosome(0);
			final Double[][] inputs = new Double[100][1];
			for (int i = 0; i < 100; i++) {
				inputs[i][0] = (i - 50) * 1.2;
			}

			double mse = 0;
			for (final Double[] input : inputs) {

				final double x = input[0];
				final double expected = SymbolicRegressionUtils.evaluate(x);
				final Object result = ProgramUtils.execute(chromosome, input);

				if (Double.isFinite(expected)) {
File Project Line
net/bmahe/genetics4j/core/replacement/DeleteNLastImpl.java Core 27
net/bmahe/genetics4j/core/replacement/ElitismImpl.java Core 32
net/bmahe/genetics4j/core/replacement/GenerationalReplacementImpl.java Core 25
net/bmahe/genetics4j/moo/spea2/replacement/SPEA2ReplacementStrategyImplementor.java Multi-Objective Optimization 305
}

	@Override
	public Population<T> select(final AbstractEAConfiguration<T> eaConfiguration, final long generation,
			final int numIndividuals, final List<Genotype> population, final List<T> populationScores,
			final List<Genotype> offsprings, final List<T> offspringScores) {
		Objects.requireNonNull(eaConfiguration);
		Validate.isTrue(generation >= 0);
		Validate.isTrue(numIndividuals > 0);
		Objects.requireNonNull(population);
		Objects.requireNonNull(populationScores);
		Validate.isTrue(population.size() == populationScores.size());
		Objects.requireNonNull(offsprings);
		Objects.requireNonNull(offspringScores);
		Validate.isTrue(offsprings.size() == offspringScores.size());
File Project Line
net/bmahe/genetics4j/gp/program/FullProgramGenerator.java Genetic Programming 57
net/bmahe/genetics4j/gp/program/GrowProgramGenerator.java Genetic Programming 58
Class[] acceptedTypes = currentNode.acceptedTypes();

		for (int i = 0; i < acceptedTypes.length; i++) {
			final Class acceptedType = acceptedTypes[i];
			final TreeNode<Operation<?>> operation = generate(program, acceptedType, maxDepth, 1);

			currentTreeNode.addChild(operation);
		}

		return currentTreeNode;
	}

	@Override
	public <T, U> TreeNode<Operation<T>> generate(final Program program, final int maxDepth, final Class<U> rootType) {
		Validate.notNull(program);
		Validate.notNull(rootType);
		Validate.isTrue(maxDepth > 0);

		return generate(program, rootType, maxDepth, 0);
	}
}
File Project Line
net/bmahe/genetics4j/gp/math/SimplificationRules.java Genetic Programming 130
net/bmahe/genetics4j/gp/math/SimplificationRules.java Genetic Programming 273
if (isOperation(t, Functions.NAME_SUB) == false) {
			return false;
		}

		if (hasChildOperation(t, 0, Terminals.TYPE_INPUT) == false) {
			return false;
		}

		if (hasChildOperation(t, 1, Terminals.TYPE_INPUT) == false) {
			return false;
		}

		final InputOperation<?> firstInput = (InputOperation<Double>) t.getChild(0)
				.getData();

		final InputOperation<?> secondInput = (InputOperation<Double>) t.getChild(1)
				.getData();

		return firstInput.index() == secondInput.index();
	}, (program, t) -> {

		final InputSpec inputSpec = program.inputSpec();

		final OperationFactory coefficientFactory = OperationFactories
File Project Line
net/bmahe/genetics4j/gp/mutation/ProgramRandomMutateMutator.java Genetic Programming 88
net/bmahe/genetics4j/gp/mutation/TrimTreeMutator.java Genetic Programming 84
logger.trace("Mutating genotype {}", originalGenotype);

		final Chromosome[] newChromosomes = new Chromosome[originalGenotype.getSize()];
		final Chromosome[] chromosomes = originalGenotype.getChromosomes();
		for (int chromosomeIndex = 0; chromosomeIndex < chromosomes.length; chromosomeIndex++) {
			final ChromosomeSpec chromosomeSpec = eaConfiguration.getChromosomeSpec(chromosomeIndex);
			final Chromosome chromosome = chromosomes[chromosomeIndex];

			if (chromosomeSpec instanceof ProgramTreeChromosomeSpec == false) {
				throw new IllegalArgumentException("This mutator does not support chromosome specs " + chromosomeSpec);
			}

			if (chromosome instanceof TreeChromosome<?> == false) {
				throw new IllegalArgumentException(
						"This mutator does not support chromosome of type " + chromosome.getClass()
								.getSimpleName());
			}

			final ProgramTreeChromosomeSpec programTreeChromosomeSpec = (ProgramTreeChromosomeSpec) chromosomeSpec;

			final TreeChromosome<Operation<?>> treeChromosome = (TreeChromosome<Operation<?>>) chromosome;
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithDoubleTournament.java Samples 91
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 90
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithSRT.java Samples 91
double mse = 0;
			for (final Double[] input : inputs) {

				final double x = input[0];
				final double expected = SymbolicRegressionUtils.evaluate(x);
				final Object result = ProgramUtils.execute(chromosome, input);

				if (Double.isFinite(expected)) {
					final Double resultDouble = (Double) result;
					mse += Double.isFinite(resultDouble) ? (expected - resultDouble) * (expected - resultDouble)
							: 1_000_000_000;
				}
			}
			return Double.isFinite(mse) ? mse / 100.0d : Double.MAX_VALUE;
		};
		// end::compute_fitness[]

		// tag::double_tournament[]
		final Comparator<Individual<Double>> parsimonyComparator = (a, b) -> {
			final var treeChromosomeA = a.genotype()
File Project Line
net/bmahe/genetics4j/samples/clustering/IOUtils.java Samples 102
net/bmahe/genetics4j/samples/clustering/IOUtils.java Samples 129
public static void persistDataPoints(final double[][] data, final String filename) throws IOException {
		Validate.notBlank(filename);

		logger.info("Saving data to CSV: {}", filename);

		final int numDataPoints = data.length;

		final CSVPrinter csvPrinter;
		try {
			csvPrinter = CSVFormat.DEFAULT.withAutoFlush(true)
					.withHeader(new String[] { "cluster", "x", "y" })
					.print(Path.of(filename), StandardCharsets.UTF_8);
		} catch (IOException e) {
			logger.error("Could not open {}", filename, e);
			throw new RuntimeException("Could not open file " + filename, e);
		}

		for (int i = 0; i < numDataPoints; i++) {
			try {
				csvPrinter.printRecord((int) data[i][2], data[i][0], data[i][1]);
File Project Line
net/bmahe/genetics4j/gp/program/FullProgramGenerator.java Genetic Programming 17
net/bmahe/genetics4j/gp/program/StdProgramGenerator.java Genetic Programming 21
OperationFactory currentNode = depth < maxDepth - 1 ? programHelper.pickRandomFunction(program, acceptedType)
				: programHelper.pickRandomTerminal(program, acceptedType);

		final Operation<T> currentOperation = currentNode.build(program.inputSpec());
		final TreeNode<Operation<T>> currentTreeNode = new TreeNode<>(currentOperation);

		final Class[] acceptedTypes = currentNode.acceptedTypes();

		for (int i = 0; i < acceptedTypes.length; i++) {
			final Class childAcceptedType = acceptedTypes[i];
			final TreeNode<Operation<T>> operation = generate(program, childAcceptedType, maxDepth, depth + 1);

			currentTreeNode.addChild(operation);
		}

		return currentTreeNode;
	}

	public FullProgramGenerator(final ProgramHelper _programHelper) {
File Project Line
net/bmahe/genetics4j/core/selection/ProportionalTournamentSelector.java Core 28
net/bmahe/genetics4j/core/selection/TournamentSelector.java Core 27
Validate.isInstanceOf(ProportionalTournament.class, _selectionPolicy);
		Objects.requireNonNull(_randomGenerator);

		this.selectionPolicy = _selectionPolicy;
		this.randomGenerator = _randomGenerator;
	}

	@Override
	public Population<T> select(final AbstractEAConfiguration<T> eaConfiguration, final long generation,
			final int numIndividuals, final List<Genotype> population, final List<T> fitnessScore) {
		Objects.requireNonNull(eaConfiguration);
		Objects.requireNonNull(population);
		Objects.requireNonNull(fitnessScore);
		Validate.isTrue(generation >= 0);
		Validate.isTrue(numIndividuals > 0);
		Validate.isTrue(population.size() == fitnessScore.size());

		@SuppressWarnings("unchecked")
		final ProportionalTournament<T> proportionalTournament = (ProportionalTournament<T>) selectionPolicy;
File Project Line
net/bmahe/genetics4j/moo/nsga2/impl/NSGA2Selector.java Multi-Objective Optimization 33
net/bmahe/genetics4j/moo/nsga2/impl/TournamentNSGA2Selector.java Multi-Objective Optimization 37
}

	@Override
	public Population<T> select(final AbstractEAConfiguration<T> eaConfiguration, final long generation,
			final int numIndividuals, final List<Genotype> population, final List<T> fitnessScore) {
		Objects.requireNonNull(eaConfiguration);
		Objects.requireNonNull(population);
		Objects.requireNonNull(fitnessScore);
		Validate.isTrue(generation >= 0);
		Validate.isTrue(numIndividuals > 0);
		Validate.isTrue(population.size() == fitnessScore.size());

		logger.debug("Incoming population size is {}", population.size());

		final Population<T> individuals = new Population<>();
		if (nsga2Selection.deduplicate()
File Project Line
net/bmahe/genetics4j/gp/program/FullProgramGenerator.java Genetic Programming 17
net/bmahe/genetics4j/gp/program/GrowProgramGenerator.java Genetic Programming 18
net/bmahe/genetics4j/gp/program/StdProgramGenerator.java Genetic Programming 21
OperationFactory currentNode = depth < maxDepth - 1 ? programHelper.pickRandomFunction(program, acceptedType)
				: programHelper.pickRandomTerminal(program, acceptedType);

		final Operation<T> currentOperation = currentNode.build(program.inputSpec());
		final TreeNode<Operation<T>> currentTreeNode = new TreeNode<>(currentOperation);

		final Class[] acceptedTypes = currentNode.acceptedTypes();

		for (int i = 0; i < acceptedTypes.length; i++) {
			final Class childAcceptedType = acceptedTypes[i];
			final TreeNode<Operation<T>> operation = generate(program, childAcceptedType, maxDepth, depth + 1);

			currentTreeNode.addChild(operation);
		}

		return currentTreeNode;
	}

	public FullProgramGenerator(final ProgramHelper _programHelper) {
File Project Line
net/bmahe/genetics4j/gp/mutation/ProgramRandomMutateMutator.java Genetic Programming 91
net/bmahe/genetics4j/gp/mutation/ProgramRulesApplicatorMutator.java Genetic Programming 91
final Chromosome[] chromosomes = originalGenotype.getChromosomes();
		for (int chromosomeIndex = 0; chromosomeIndex < chromosomes.length; chromosomeIndex++) {
			final ChromosomeSpec chromosomeSpec = eaConfiguration.getChromosomeSpec(chromosomeIndex);
			final Chromosome chromosome = chromosomes[chromosomeIndex];

			if (chromosomeSpec instanceof ProgramTreeChromosomeSpec == false) {
				throw new IllegalArgumentException("This mutator does not support chromosome specs " + chromosomeSpec);
			}

			if (chromosome instanceof TreeChromosome<?> == false) {
				throw new IllegalArgumentException(
						"This mutator does not support chromosome of type " + chromosome.getClass()
								.getSimpleName());
			}

			final ProgramTreeChromosomeSpec programTreeChromosomeSpec = (ProgramTreeChromosomeSpec) chromosomeSpec;

			final TreeChromosome<Operation<?>> treeChromosome = (TreeChromosome<Operation<?>>) chromosome;
			final int chromosomeSize = treeChromosome.getSize();
File Project Line
net/bmahe/genetics4j/gpu/spec/fitness/cldata/StaticDataLoaders.java GPU 79
net/bmahe/genetics4j/gpu/spec/fitness/cldata/StaticDataLoaders.java GPU 107
final double[] dataLinear = new double[data.length * numColumns];
		for (int i = 0; i < data.length; i++) {
			if (data[i].length != numColumns) {
				throw new IllegalArgumentException(
						String.format("Got %d columns for index %d. Should have been %d", data[i].length, i, numColumns));
			}

			final int baseIndex = i * numColumns;
			for (int j = 0; j < numColumns; j++) {
				dataLinear[baseIndex + j] = data[i][j];
			}
		}

		return of(dataLinear, readOnly);
	}

	/**
	 * Expect an evenly shaped data
	 * 
	 * @param data
	 * @param readOnly
	 * @return
	 */
	public static StaticDataLoader ofLinearize(final float[][] data, final boolean readOnly) {
File Project Line
net/bmahe/genetics4j/gp/math/SimplificationRules.java Genetic Programming 66
net/bmahe/genetics4j/gp/math/SimplificationRules.java Genetic Programming 87
net/bmahe/genetics4j/gp/math/SimplificationRules.java Genetic Programming 108
final public static Rule ADD_TWO_COEFFCIENTS = ImmutableRule.of((t) -> isOperation(t, Functions.NAME_ADD)
			&& hasChildOperation(t, 0, Terminals.TYPE_COEFFICIENT) && hasChildOperation(t, 1, Terminals.TYPE_COEFFICIENT),
			(program, t) -> {

				final InputSpec inputSpec = program.inputSpec();

				final CoefficientOperation<Double> firstCoefficient = getChildAs(t, 0, CoefficientOperation.class);
				final Double firstValue = firstCoefficient.value();

				final CoefficientOperation<Double> secondCoefficient = getChildAs(t, 1, CoefficientOperation.class);
				final Double secondValue = secondCoefficient.value();

				final OperationFactory coefficientFactory = OperationFactories
						.ofCoefficient(Terminals.TYPE_COEFFICIENT, Double.class, firstValue + secondValue);
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOO.java Samples 122
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithMOOSPEA2.java Samples 120
.build())
				.combinationPolicy(ProgramRandomCombine.build())
				.mutationPolicies(MultiMutations
						.of(ProgramRandomMutate.of(0.15 * 3), ProgramRandomPrune.of(0.15 * 3), NodeReplacement.of(0.15 * 3)),
						ProgramApplyRules.of(SimplificationRules.SIMPLIFY_RULES))
				.optimization(Optimization.MINIMIZE)
				.termination(Terminations.or(Terminations.<FitnessVector<Double>>ofMaxGeneration(200),
						(eaConfiguration, generation, population, fitness) -> fitness.stream()
								.anyMatch(fv -> fv.get(0) <= 0.000001 && fv.get(1) <= 20))) // <4>
File Project Line
net/bmahe/genetics4j/gp/math/SimplificationRules.java Genetic Programming 66
net/bmahe/genetics4j/gp/math/SimplificationRules.java Genetic Programming 644
final public static Rule ADD_TWO_COEFFCIENTS = ImmutableRule.of((t) -> isOperation(t, Functions.NAME_ADD)
			&& hasChildOperation(t, 0, Terminals.TYPE_COEFFICIENT) && hasChildOperation(t, 1, Terminals.TYPE_COEFFICIENT),
			(program, t) -> {

				final InputSpec inputSpec = program.inputSpec();

				final CoefficientOperation<Double> firstCoefficient = getChildAs(t, 0, CoefficientOperation.class);
				final Double firstValue = firstCoefficient.value();

				final CoefficientOperation<Double> secondCoefficient = getChildAs(t, 1, CoefficientOperation.class);
				final Double secondValue = secondCoefficient.value();

				final OperationFactory coefficientFactory = OperationFactories
						.ofCoefficient(Terminals.TYPE_COEFFICIENT, Double.class, firstValue + secondValue);
File Project Line
net/bmahe/genetics4j/moo/nsga2/spec/NSGA2Selection.java Multi-Objective Optimization 85
net/bmahe/genetics4j/moo/nsga2/spec/TournamentNSGA2Selection.java Multi-Objective Optimization 96
final int numberObjectives, final Comparator<Genotype> deduplicate) {

		final var builder = new Builder<FitnessVector<U>>();

		builder.objectiveComparator((m) -> (a, b) -> Double.compare(a.get(m)
				.doubleValue(),
				b.get(m)
						.doubleValue()))
				.distance((a, b, m) -> Math.abs(b.get(m)
						.doubleValue()
						- a.get(m)
								.doubleValue()))
				.numberObjectives(numberObjectives)
				.deduplicate(Optional.ofNullable(deduplicate));
File Project Line
net/bmahe/genetics4j/core/combination/multipointarithmetic/DoubleChromosomeMultiPointArithmetic.java Core 35
net/bmahe/genetics4j/core/combination/multipointarithmetic/IntChromosomeMultiPointArithmetic.java Core 35
Validate.isInstanceOf(DoubleChromosome.class, chromosome2);
		Validate.isTrue(chromosome1.getNumAlleles() == chromosome2.getNumAlleles());

		Validate.isTrue(multiPointArithmeticPolicy.numCrossovers() < chromosome1.getNumAlleles());
		Validate.isTrue(multiPointArithmeticPolicy.numCrossovers() < chromosome2.getNumAlleles());

		final int numCrossovers = multiPointArithmeticPolicy.numCrossovers();
		final double alpha = multiPointArithmeticPolicy.alpha();

		final int[] alleleSplits = randomGenerator.ints(0, chromosome1.getNumAlleles())
				.distinct()
				.limit(numCrossovers)
				.sorted()
				.toArray();

		final DoubleChromosome doubleChromosome1 = (DoubleChromosome) chromosome1;
File Project Line
net/bmahe/genetics4j/core/combination/multipointarithmetic/IntChromosomeMultiPointArithmetic.java Core 69
net/bmahe/genetics4j/core/combination/singlepointarithmetic/IntChromosomeSinglePointArithmetic.java Core 49
if (useChromosome1) {
				firstChildValues[i] = (int) (alpha * firstAllele + (1 - alpha) * secondAllele);
				secondChildValues[i] = (int) ((1 - alpha) * firstAllele + alpha * secondAllele);
			} else {
				firstChildValues[i] = (int) ((1 - alpha) * firstAllele + alpha * secondAllele);
				secondChildValues[i] = (int) (alpha * firstAllele + (1 - alpha) * secondAllele);
			}
		}

		return List.of(
				new IntChromosome(numAlleles, intChromosome1.getMinValue(), intChromosome2.getMaxValue(), firstChildValues),
File Project Line
net/bmahe/genetics4j/gpu/spec/fitness/cldata/StaticDataLoaders.java GPU 79
net/bmahe/genetics4j/gpu/spec/fitness/cldata/StaticDataLoaders.java GPU 145
final double[] dataLinear = new double[data.length * numColumns];
		for (int i = 0; i < data.length; i++) {
			if (data[i].length != numColumns) {
				throw new IllegalArgumentException(
						String.format("Got %d columns for index %d. Should have been %d", data[i].length, i, numColumns));
			}

			final int baseIndex = i * numColumns;
			for (int j = 0; j < numColumns; j++) {
				dataLinear[baseIndex + j] = data[i][j];
			}
		}

		return of(dataLinear, readOnly);
	}

	/**
	 * Expect an evenly shaped data
	 * 
	 * @param data
	 * @param readOnly
	 * @return
	 */
	public static StaticDataLoader ofLinearize(final float[][] data, final boolean readOnly) {
File Project Line
net/bmahe/genetics4j/core/combination/multipointarithmetic/DoubleChromosomeMultiPointArithmetic.java Core 46
net/bmahe/genetics4j/core/combination/multipointcrossover/DoubleChromosomeMultiPointCrossover.java Core 43
.limit(numCrossovers)
				.sorted()
				.toArray();

		final DoubleChromosome doubleChromosome1 = (DoubleChromosome) chromosome1;
		final DoubleChromosome doubleChromosome2 = (DoubleChromosome) chromosome2;

		final int numAlleles = chromosome1.getNumAlleles();
		final double[] firstChildValues = new double[numAlleles];
		final double[] secondChildValues = new double[numAlleles];

		boolean useChromosome1 = true;
		int splitIndex = 0;
		for (int i = 0; i < doubleChromosome1.getNumAlleles(); i++) {

			if (splitIndex < alleleSplits.length && i == alleleSplits[splitIndex]) {
				splitIndex++;
				useChromosome1 = !useChromosome1;
			}
File Project Line
net/bmahe/genetics4j/core/combination/multipointarithmetic/FloatChromosomeMultiPointArithmetic.java Core 46
net/bmahe/genetics4j/core/combination/multipointcrossover/FloatChromosomeMultiPointCrossover.java Core 43
.limit(numCrossovers)
				.sorted()
				.toArray();

		final FloatChromosome floatChromosome1 = (FloatChromosome) chromosome1;
		final FloatChromosome floatChromosome2 = (FloatChromosome) chromosome2;

		final int numAlleles = chromosome1.getNumAlleles();
		final float[] firstChildValues = new float[numAlleles];
		final float[] secondChildValues = new float[numAlleles];

		boolean useChromosome1 = true;
		int splitIndex = 0;
		for (int i = 0; i < floatChromosome1.getNumAlleles(); i++) {

			if (splitIndex < alleleSplits.length && i == alleleSplits[splitIndex]) {
				splitIndex++;
				useChromosome1 = !useChromosome1;
			}
File Project Line
net/bmahe/genetics4j/core/combination/multipointarithmetic/IntChromosomeMultiPointArithmetic.java Core 46
net/bmahe/genetics4j/core/combination/multipointcrossover/IntChromosomeMultiPointCrossover.java Core 43
.limit(numCrossovers)
				.sorted()
				.toArray();

		final IntChromosome intChromosome1 = (IntChromosome) chromosome1;
		final IntChromosome intChromosome2 = (IntChromosome) chromosome2;

		final int numAlleles = chromosome1.getNumAlleles();
		final int[] firstChildValues = new int[numAlleles];
		final int[] secondChildValues = new int[numAlleles];

		boolean useChromosome1 = true;
		int splitIndex = 0;
		for (int i = 0; i < intChromosome1.getNumAlleles(); i++) {

			if (splitIndex < alleleSplits.length && i == alleleSplits[splitIndex]) {
				splitIndex++;
				useChromosome1 = !useChromosome1;
			}
File Project Line
net/bmahe/genetics4j/gpu/spec/fitness/cldata/StaticDataLoaders.java GPU 79
net/bmahe/genetics4j/gpu/spec/fitness/cldata/StaticDataLoaders.java GPU 173
final double[] dataLinear = new double[data.length * numColumns];
		for (int i = 0; i < data.length; i++) {
			if (data[i].length != numColumns) {
				throw new IllegalArgumentException(
						String.format("Got %d columns for index %d. Should have been %d", data[i].length, i, numColumns));
			}

			final int baseIndex = i * numColumns;
			for (int j = 0; j < numColumns; j++) {
				dataLinear[baseIndex + j] = data[i][j];
			}
		}

		return of(dataLinear, readOnly);
	}

	/**
	 * Expect an evenly shaped data
	 * 
	 * @param data
	 * @param readOnly
	 * @return
	 */
	public static StaticDataLoader ofLinearize(final float[][] data, final boolean readOnly) {
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 115
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithTarpeianMethod.java Samples 116
.termination(or(ofMaxGeneration(200), ofFitnessAtMost(20.0d))) // <3>
				.fitness(computeFitness);
		final EAConfiguration<Double> eaConfiguration = eaConfigurationBuilder.build();
		// end::ea_config[]

		final var eaExecutionContextBuilder = GPEAExecutionContexts.<Double>forGP(random);
		EAExecutionContexts.enrichForScalarFitness(eaExecutionContextBuilder);

		eaExecutionContextBuilder.populationSize(populationSize);
		eaExecutionContextBuilder.numberOfPartitions(Math.max(1,
				Runtime.getRuntime()
						.availableProcessors() - 1));

		eaExecutionContextBuilder.addEvolutionListeners(
				EvolutionListeners.ofLogTopN(logger, 5, Comparator.<Double>reverseOrder(), (genotype) -> {
					final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genotype.getChromosome(0);
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithConstantParsimonyPressure.java Samples 123
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithEnforcedMaxDepth.java Samples 91
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithProportionalTournament.java Samples 144
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithSRT.java Samples 150
eaExecutionContextBuilder.populationSize(populationSize);
		eaExecutionContextBuilder.numberOfPartitions(Math.max(1,
				Runtime.getRuntime()
						.availableProcessors() - 1));

		eaExecutionContextBuilder.addEvolutionListeners(
				EvolutionListeners.ofLogTopN(logger, 5, Comparator.<Double>reverseOrder(), (genotype) -> {
					final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genotype.getChromosome(0);
					final TreeNode<Operation<?>> root = chromosome.getRoot();

					return TreeNodeUtils.toStringTreeNode(root);
				}),
				SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
File Project Line
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithDoubleTournament.java Samples 145
net/bmahe/genetics4j/samples/symbolicregression/SymbolicRegressionWithEnforcedMaxDepth.java Samples 91
eaExecutionContextBuilder.populationSize(populationSize);
		eaExecutionContextBuilder.numberOfPartitions(Math.max(1,
				Runtime.getRuntime()
						.availableProcessors() - 1));

		eaExecutionContextBuilder.addEvolutionListeners(
				EvolutionListeners.ofLogTopN(logger, 5, Comparator.<Double>reverseOrder(), (genotype) -> {
					final TreeChromosome<Operation<?>> chromosome = (TreeChromosome<Operation<?>>) genotype.getChromosome(0);
					final TreeNode<Operation<?>> root = chromosome.getRoot();

					return TreeNodeUtils.toStringTreeNode(root);
				}),
				SymbolicRegressionUtils.csvLoggerDouble(csvFilename,
File Project Line
net/bmahe/genetics4j/moo/nsga2/spec/NSGA2Selection.java Multi-Objective Optimization 21
net/bmahe/genetics4j/moo/nsga2/spec/TournamentNSGA2Selection.java Multi-Objective Optimization 22
public abstract class NSGA2Selection<T extends Comparable<T>> implements SelectionPolicy {

	/**
	 * Number of objectives
	 * 
	 * @return
	 */
	@Value.Parameter
	public abstract int numberObjectives();

	/**
	 * Override the dominance operator.
	 * <p>If not specified, it assumes the default comparator conforms to the Pareto dominance relation
	 * 
	 * @return
	 */
	@Value.Default
	public Comparator<T> dominance() {
		return (a, b) -> a.compareTo(b);
	}

	/**
	 * Comparator used for deduplication of solution prior to processing
	 * <p>If not specified, it defaults to not do any deduplication
	 * 
	 * @return
	 */
	@Value.Default
	public Optional<Comparator<Genotype>> deduplicate() {
		return Optional.empty();
	}

	/**
	 * Sort T based on the objective passed as a parameter
	 * 
	 * @return
	 */
	@Value.Parameter
	public abstract Function<Integer, Comparator<T>> objectiveComparator();

	/**
	 * Define how to compute distances between fitness scores along their objectives
	 * 
	 * @return Distance computation method
	 */
	@Value.Parameter
	public abstract ObjectiveDistance<T> distance();
File Project Line
net/bmahe/genetics4j/core/combination/multipointcrossover/DoubleChromosomeMultiPointCrossover.java Core 63
net/bmahe/genetics4j/core/combination/singlepointcrossover/DoubleChromosomeSinglePointCrossover.java Core 43
if (useChromosome1) {
				firstChildValues[i] = doubleChromosome1.getAllele(i);
				secondChildValues[i] = doubleChromosome2.getAllele(i);
			} else {
				firstChildValues[i] = doubleChromosome2.getAllele(i);
				secondChildValues[i] = doubleChromosome1.getAllele(i);
			}
		}

		/**
		 * TODO Should the min/max values be extended based on the lowest/highest values?
		 */
		final double minValue = doubleChromosome1.getMinValue();
		final double maxValue = doubleChromosome2.getMaxValue();

		return List.of(new DoubleChromosome(numAlleles, minValue, maxValue, firstChildValues),
				new DoubleChromosome(numAlleles, minValue, maxValue, secondChildValues));
	}
}
File Project Line
net/bmahe/genetics4j/core/combination/multipointcrossover/FloatChromosomeMultiPointCrossover.java Core 63
net/bmahe/genetics4j/core/combination/singlepointcrossover/FloatChromosomeSinglePointCrossover.java Core 43
if (useChromosome1) {
				firstChildValues[i] = floatChromosome1.getAllele(i);
				secondChildValues[i] = floatChromosome2.getAllele(i);
			} else {
				firstChildValues[i] = floatChromosome2.getAllele(i);
				secondChildValues[i] = floatChromosome1.getAllele(i);
			}
		}

		/**
		 * TODO Should the min/max values be extended based on the lowest/highest values?
		 */
		final float minValue = floatChromosome1.getMinValue();
		final float maxValue = floatChromosome2.getMaxValue();

		return List.of(new FloatChromosome(numAlleles, minValue, maxValue, firstChildValues),
				new FloatChromosome(numAlleles, minValue, maxValue, secondChildValues));
	}
}
File Project Line
net/bmahe/genetics4j/gp/program/FullProgramGenerator.java Genetic Programming 52
net/bmahe/genetics4j/gp/program/StdProgramGenerator.java Genetic Programming 55
final OperationFactory currentNode = programHelper.pickRandomFunction(program);

		final Operation currentOperation = currentNode.build(program.inputSpec());
		final TreeNode<Operation<?>> currentTreeNode = new TreeNode<>(currentOperation);

		Class[] acceptedTypes = currentNode.acceptedTypes();

		for (int i = 0; i < acceptedTypes.length; i++) {
			final Class acceptedType = acceptedTypes[i];
			final TreeNode<Operation<?>> operation = generate(program, acceptedType, maxDepth, 1);

			currentTreeNode.addChild(operation);
		}

		return currentTreeNode;
	}

	@Override
	public <T, U> TreeNode<Operation<T>> generate(final Program program, final int maxDepth, final Class<U> rootType) {