public override void CiclicCrossover(IndividualBase parent1, IndividualBase parent2, out IndividualBase child1, out IndividualBase child2) { int[] L1 = (int[])(parent1 as CryptArithmeticSolution).LettersValues.Clone(); int[] L2 = (int[])(parent2 as CryptArithmeticSolution).LettersValues.Clone(); List<int> positionsToShare = new List<int>(); int amountOfChars = charArray.Count(); int itemIdx = Aleatoriety.GetRandomInt(amountOfChars); int tempValue; while (!positionsToShare.Contains(itemIdx)) { positionsToShare.Add(itemIdx); tempValue = L1[itemIdx]; itemIdx = Array.IndexOf(L2, tempValue); } int tempVal; foreach (int position in positionsToShare) { tempVal = L2[position]; L2[position] = L1[position]; L1[position] = tempVal; } child1 = new CryptArithmeticSolution(this, L1); child2 = new CryptArithmeticSolution(this, L2); }
public override void EvaluateIndividual(IndividualBase individual) { CryptArithmeticSolution cryptoSolution = (individual as CryptArithmeticSolution); long termsSum = 0; int charValue = -1; foreach (string term in terms) { long termCharSum = 0; long decimalBaseValTerm = 1; foreach (char c in term.ToCharArray().Reverse()) { charValue = cryptoSolution.LettersValues[Array.IndexOf(charArray, c)]; termCharSum += (charValue * decimalBaseValTerm); decimalBaseValTerm *= 10; } termsSum += termCharSum; } long resultCharSum = 0; long decimalBaseValResult = 1; foreach (char c in result.ToCharArray().Reverse()) { charValue = cryptoSolution.LettersValues[Array.IndexOf(charArray, c)]; resultCharSum += (charValue * decimalBaseValResult); decimalBaseValResult *= 10; } long resultValue = resultCharSum; cryptoSolution.DifferenceInExpectedResult = (int)Math.Abs(resultValue - termsSum); individual = cryptoSolution; }
public override IndividualBase CreateRandomSolution() { IndividualBase cryptoSolution = new CryptArithmeticSolution(this); //EvaluateIndividual(cryptoSolution); return(cryptoSolution); }
public override void CiclicCrossover(IndividualBase parent1, IndividualBase parent2, out IndividualBase child1, out IndividualBase child2) { int[] L1 = (int[])(parent1 as CryptArithmeticSolution).LettersValues.Clone(); int[] L2 = (int[])(parent2 as CryptArithmeticSolution).LettersValues.Clone(); List <int> positionsToShare = new List <int>(); int amountOfChars = charArray.Count(); int itemIdx = Aleatoriety.GetRandomInt(amountOfChars); int tempValue; while (!positionsToShare.Contains(itemIdx)) { positionsToShare.Add(itemIdx); tempValue = L1[itemIdx]; itemIdx = Array.IndexOf(L2, tempValue); } int tempVal; foreach (int position in positionsToShare) { tempVal = L2[position]; L2[position] = L1[position]; L1[position] = tempVal; } child1 = new CryptArithmeticSolution(this, L1); child2 = new CryptArithmeticSolution(this, L2); }
public override string SerializeIndividual(IndividualBase individual) { StringBuilder SB = new StringBuilder(); SB.AppendLine("Individual:"); SB.AppendLine("\t" + "Value: " + individual.GetValueForObjective(MonoObjectiveGoal)); CryptArithmeticSolution cryptoSolution = (individual as CryptArithmeticSolution); int charValue = -1; for (int idx = 0; idx < charArray.Length; ++idx) { charValue = cryptoSolution.LettersValues[idx]; SB.AppendLine("\t" + charArray[idx] + ": " + charValue); } return(SB.ToString()); }
public override void MutateIndividual(IndividualBase individual) { CryptArithmeticSolution cryptoSolution = (individual as CryptArithmeticSolution); int amountOfChars = charArray.Count(); int firstPositionIdx = Aleatoriety.GetRandomInt(amountOfChars); int secondPositionIdx; do { secondPositionIdx = Aleatoriety.GetRandomInt(amountOfChars); } while (secondPositionIdx == firstPositionIdx); int tempValue = cryptoSolution.LettersValues[secondPositionIdx]; cryptoSolution.LettersValues[secondPositionIdx] = cryptoSolution.LettersValues[firstPositionIdx]; cryptoSolution.LettersValues[firstPositionIdx] = tempValue; individual = cryptoSolution; }
public override bool Equals(object obj) { CryptArithmeticSolution cryptoSolution = (obj as CryptArithmeticSolution); return(LettersValues.SequenceEqual(cryptoSolution.LettersValues)); }
public override IndividualBase CreateRandomSolution() { IndividualBase cryptoSolution = new CryptArithmeticSolution(this); //EvaluateIndividual(cryptoSolution); return cryptoSolution; }