Rubicite Genetic Algorith Framework Tutorial
General:
Basic Info
Selection Bias
Hard Problem
Downloads
Crossovers:
Cycle
Order X
Order 1
Edge Recombination
PMX Crossover
Order Multiple
Direct Insertion
Mutations:
Inversion
Random Slide
Insertion
Single Swap
Random Swap
Scramble
Mutation Technique:
Insertion
VB.NET 2008 Source Code
'Default Float 0 is "0.01" and represents Minimum Alleles to move. Valid Values are [0, 0.5] representing fraction of Allele Count 'Default Float 1 is "0.5" and represents Maximum Alleles to move. Valid Values are [0, 0.5] representing fraction of Allele Count Sub Insertion_Mutation(ByRef child1 As PChromo) Dim Percentage As Double = (RAND.NextDouble * (Insertion_Master.Doubles(1) - Insertion_Master.Doubles(0))) + Insertion_Master.Doubles(0) Dim IndexOfFirst = 99999 '1. Initialize Flags() - True means that value is selected for insertion. False means it isn't. ' IndexOfFirst tracks the index of the first value selected for insertion Dim Flags(AlleleCount) As Boolean For j As Integer = 0 To AlleleCount - 1 If RAND.NextDouble < Percentage Then If j < IndexOfFirst Then IndexOfFirst = j Flags(j) = True Else Flags(j) = False End If Next If IndexOfFirst = 99999 Then Return End If '2. Fill up NewChild up to IndexOfFirst Dim NewChild As New PChromo ReDim NewChild.Alleles(AlleleCount) For j As Integer = 0 To IndexOfFirst - 1 NewChild.Alleles(j) = child1.Alleles(j) Next '3. Now, append all values selected for insertion Dim marker As Integer = IndexOfFirst 'this variable tracks the point to insert the next value in the newchild For j As Integer = IndexOfFirst To AlleleCount - 1 If Flags(j) Then NewChild.Alleles(marker) = child1.Alleles(j) marker += 1 End If Next '4. Now, go back and insert all the ones not selected for insertion ' remember, marker marks where we're at in regards to filling up the new child For j As Integer = IndexOfFirst To AlleleCount - 1 If Not Flags(j) Then NewChild.Alleles(marker) = child1.Alleles(j) marker += 1 End If Next 'Copy over new kid child1.setTo(NewChild) End Sub
© 2008/2009 Rubicite Interactive Inc.