public override void ApplyCrossoverOpr(Chromosome.Chromosome chromosome1, Chromosome.Chromosome chromosome2) { int crossoverPoint = GARandom.BoundedRandomInteger(0, Template.DesignVariables.Count - 1); for (int i = 0; i <= crossoverPoint; i++) { double tempGene = chromosome1[i]; chromosome1[i] = chromosome2[i]; chromosome2[i] = tempGene; } }
public override void ApplyMutationOpr(Chromosome.Chromosome chromosome) { int mutationPosition = GARandom.BoundedRandomInteger(0, Template.DesignVariables.Count); double gene = 0; if (Template.DesignVariables[mutationPosition].Type == DesignVariableType.Integer) { gene = GARandom.BoundedRandomInteger((int)Template.DesignVariables[mutationPosition].LowerBound, (int)Template.DesignVariables[mutationPosition].UpperBound); } else if (Template.DesignVariables[mutationPosition].Type == DesignVariableType.Double) { gene = GARandom.BoundedRandomDouble(Template.DesignVariables[mutationPosition].LowerBound, Template.DesignVariables[mutationPosition].UpperBound); } else { //System.out.println("Invalid Design Variable Type"); //System.exit(1); } chromosome[mutationPosition] = gene; }
public Chromosome(OptimisationTemplate Template, GAParameters gaParameters, bool empty) { this.Template = Template; this.gaParameters = gaParameters; int noOfDesignVariables = Template.DesignVariables.Count; genes = new double[noOfDesignVariables]; for (int i = 0; i < noOfDesignVariables; i++) { if (Template.DesignVariables[i].Type == DesignVariableType.Integer) { if (!empty) { genes[i] = GARandom.BoundedRandomInteger((int)Template.DesignVariables[i].LowerBound, (int)Template.DesignVariables[i].UpperBound); } else { genes[i] = 0.0; } } if (Template.DesignVariables[i].Type == DesignVariableType.Double) { if (!empty) { genes[i] = GARandom.BoundedRandomDouble(Template.DesignVariables[i].LowerBound, Template.DesignVariables[i].UpperBound); } else { genes[i] = 0.0; } } } constraintValues = new double[Template.Constraints.Count]; constraintViolationValues = new double[Template.Constraints.Count]; }