Genetic Algorithm Info

Crossover Operators

Mutation Operators

Direct Insertion Crossover Operator

Public Sub OrderSingleCrossover(ByRef Child As PChromo, ByRef Parent1 As PChromo, ByRef Parent2 As PChromo)
Dim counter1, counter2 As Integer
Dim CityTotal = AlleleCount - 1
Dim TempSeedPositionsMainC As New OrderMultipleCollection1
Dim AmountofSwaths As Integer = RAND.Next(0.3 * CityTotal, 0.7 * CityTotal) 'amount of swaths to create
Dim Swaths(AmountofSwaths - 1) As Integer
Dim Done As Boolean = False
Dim TempSwathSize As Integer = 0
Dim MaxSwathSize As Integer = AmountofSwaths * 2.5 'max swath size
Dim SwathHashTable1 As New Hashtable

'stack
'Dim P2Stack As New Stack
Dim P2Queue As New Queue

'Determines where all the seeds start
For counter1 = 0 To AmountofSwaths - 1
Swaths(counter1) = RAND.Next(0, CityTotal)
'If hashtable does not contain parent1.value then its ok to start another seed at this location
If (SwathHashTable1.ContainsKey(Parent1.Alleles(Swaths(counter1))) = False) Then
TempSwathSize = RAND.Next(1, MaxSwathSize)
Else
'Else, randomizer chose an already chosen location... so try for another
While (Done = False)
Swaths(counter1) = RAND.Next(0, CityTotal)
If (SwathHashTable1.ContainsKey(Parent1.Alleles(Swaths(counter1))) = False) Then
TempSwathSize = RAND.Next(1, MaxSwathSize)

Done = True
End If
End While
End If
Next

'move down parent 1 values
For counter1 = 0 To CityTotal
'this moves down parent 1 values to child
If (SwathHashTable1.Contains(Parent1.Alleles(counter1))) Then
Child.Alleles(counter1) = Parent1.Alleles(counter1)
Else
Child.Alleles(counter1) = -1
End If

'this sets which values of parent 2 to use
If (SwathHashTable1.ContainsKey(Parent2.Alleles(counter1)) = False) Then
P2Queue.Enqueue(Parent2.Alleles(counter1))
End If
Next

'move down parent2 values to child
For counter1 = 0 To CityTotal
If (Child.Alleles(counter1) = -1) Then
Child.Alleles(counter1) = P2Queue.Dequeue()
End If
Next

End Sub