public override void OnePointCrossover(MOOSolution rhs) { if (mData.Count == 1) { return; } int cut_point = 1; if (mData.Count > 2) { cut_point = DistributionModel.NextInt(mData.Count); } ContinuousVector rhs_vector = (ContinuousVector)rhs; double temp = 0; for (int dimension = 0; dimension != cut_point; ++dimension) { temp = this[dimension]; this[dimension] = rhs_vector[dimension]; rhs_vector[dimension] = temp; } }
public override ISolution Clone() { ContinuousVector clone = new ContinuousVector(mPopulation, mProblem); clone.Copy(this); int dimension_count = mData.Count; for (int dimension = 0; dimension < dimension_count; ++dimension) { clone.mData.Add(mData[dimension]); } return(clone); }
public override void UniformCrossover(MOOSolution rhs) { ContinuousVector rhs_vector = (ContinuousVector)rhs; int length = mData.Count; for (int dimension = 0; dimension != length; ++dimension) { double val1 = this[dimension]; double val2 = rhs_vector[dimension]; if (DistributionModel.GetUniform() < 0.5) { this[dimension] = val2; } if (DistributionModel.GetUniform() < 0.5) { rhs_vector[dimension] = val1; } } }