package test;

import org.jgap.Chromosome;
import org.jgap.Configuration;
import org.jgap.Gene;
import org.jgap.InvalidConfigurationException;

public class CalculChromosome extends Chromosome {

	private final class DivOperation implements Operation {
		public double calcul(double d1, double d2) {
			return d1 / d2;
		}

		@Override
		public String toString() {
			return "/";
		}
	}

	private final class MultiOperation implements Operation {
		public double calcul(double d1, double d2) {
			return d1 * d2;
		}

		@Override
		public String toString() {
			return "*";
		}
	}

	private final class MoinsOperation implements Operation {
		public double calcul(double d1, double d2) {
			return d1 - d2;
		}

		@Override
		public String toString() {
			return "-";
		}
	}

	private final class PlusOperation implements Operation {
		public double calcul(double d1, double d2) {
			return d1 + d2;
		}

		@Override
		public String toString() {
			return "+";
		}
	}

	public CalculChromosome(Configuration a_configuration, int a_desiredSize) throws InvalidConfigurationException {
		super(a_configuration, a_desiredSize);
		Gene[] g = new Gene[a_desiredSize];
		for (int i = 0; i < a_desiredSize; i++) {
			double k = Math.random();
			Operation op;
			if (k < 0.25)
				op = new PlusOperation();
			else if (k < 0.5)
				op = new MoinsOperation();
			else if (k < 0.75)
				op = new MultiOperation();
			else
				op = new DivOperation();
			g[i] = new CalculGene(a_configuration, op);
		}
		setGenes(g);
	}
	
	@Override
	public String toString() {
		return super.toString();
	}
}
