当前位置:文档之家› 遗传算法的VB程序【精品毕业设计】(完整版)

遗传算法的VB程序【精品毕业设计】(完整版)

遗传算法的VB程序最近看了下遗传算法,刚看了一点,就觉得手痒,非要把程序编制出来看看效果(我现在总认为那些理论再高深,无法用计算机实现就是空话,呵呵)。

下面是我调试了好久的代码,无赖没有学过数据结构&算法,程序写的很差,单效果还是出来了,高兴,和大家共同分享下成果吧。

还是一样,不想说原理,因为这里想搞个公式上去N麻烦。

直接给点实际的东西。

具体步骤是参考《MATLAB遗传算法工具箱及应用》(西安电子科技大学出版社)16~22页的相关说明编制的,有兴趣的同学可以去看看这本书。

在程序调试成功的同时,郁闷的是工作的事情,现在好多企业久是指名不要研究生,而我又是一个四不象,本专业是热能工程,可我本专业基本上还是本科水平,大部分时间都去自学一些杂七杂八的东西去了,比如人工智能,PLC,自动控制方面,图像处理啊,可又只是懂个皮毛,现在找工作也不知道怎么给自己定位了。

有相关经历的同学可要指点我一二哦。

Option Explicit'程序实现功能:用遗传算法求函数的最大值'作者: laviewpbt'联系方式:'QQ:33184777'版本:Version 1.4.0'说明:复制请保留源作者信息,转载请说明,欢迎大家提出意见和建议Dim N2(30) As Long '用来保存2的N次方的数据Dim Script As Object '调用其Eval函数Public Enum CrossOverOnePointCrossOver '单点交叉TwoPointCrossOver '两点交叉UniformCrossOver '平均交叉End EnumPublic Enum SelectionRouletteWheelSelection '轮盘赌选择StochasticTourament '随机竞争选择RandomLeagueMatches '随机联赛选择StochasticUniversalSampleing '随机遍历取样End EnumPublic Enum EnCodingBinary '标准二进制编码Gray '格雷码End EnumPrivate Type GAinfoMax As DoubleCordinate() As DoubleEnd Type'*********************************** 二进制码转格雷码***********************************''函数名: BinaryToGray'参数: Value - 要转换的二进制数的实值'说明:如3对应的二进制表示为0011,而用格雷码表示为0010,这个函数的value为0011代表的实数' 而返回的是0010所代表的实数(2)'返回值:返回格雷码对应的二进制数的实值'源作者:黄毅'开发语言: C语言'修改者: laviewpbt'时间: 2006-11-4''*********************************** 二进制码转格雷码***********************************Public Function BinaryToGray(Value As Long) As LongDim V As Long, Max As LongDim start As Long, mEnd As Long, Temp As Long, Counter As Long Dim Flag As BooleanV = Value: Max = 1While V > 0V = V / 2Max = Max * 2WendIf Max = 0 Then Exit FunctionFlag = TruemEnd = Max - 1While start < mEndTemp = (mEnd + start - 1) / 2If Value <= Temp ThenIf Not Flag ThenCounter = Counter + (mEnd - start + 1) / 2End IfmEnd = TempFlag = TrueElseIf Flag ThenCounter = Counter + (mEnd - start + 1) / 2End IfTemp = Temp + 1start = TempFlag = FalseEnd IfWendBinaryToGray = CounterEnd Function'*********************************** 格雷码转二进制码***********************************''函数名: BinaryToGray'参数: Value - 要转换的二进制数的实值'说明:如3对应的二进制表示为0011,而用格雷码表示为0010,这个函数的value为0010代表的实数' 而返回的是0010所代表的实数(2)'返回值:返回格雷码对应的二进制数的实值'源作者:黄毅,感谢viena(维也纳nn)'开发语言: C语言'修改者: laviewpbt'时间: 2006-11-4''*********************************** 格雷码转二进制码***********************************Public Function GrayToBinary(Value As Long) As LongDim V As Long, Max As LongDim start As Long, mEnd As Long, Temp As Long, Counter As Long Dim Flag As BooleanV = Value: Max = 1While V > 0V = V / 2Max = Max * 2WendFlag = TruemEnd = Max - 1While start < mEndTemp = Counter + (mEnd - start + 1) / 2If Flag Xor (Value < Temp) ThenIf Flag Then Counter = Tempstart = (start + mEnd + 1) / 2Flag = FalseElseIf Not Flag Then Counter = TempmEnd = (start + mEnd - 1) / 2Flag = TrueEnd IfWendGrayToBinary = startEnd Function'*********************************** 十进制转转二进制码***********************************''函数名: DecToBinary'参数: Value - 要转换的十进制数'返回值:返回对应的二进制数'修改者: laviewpbt'时间: 2006-11-4''*********************************** 十进制转转二进制码***********************************Private Function DecToBinary(ByVal Value As Long) As String Dim StrTemp As StringDim ModNum As IntegerDo While Value > 0ModNum = Value Mod 2Value = Value \ 2StrTemp = ModNum & StrTempLoopDecToBinary = StrTempEnd Function'************************************* 二十进制转换**********************************''函数名: BinToDec'参数: BinCode - 二进制字符串'返回值:转换后的十进制数'说明:二进制字符串转换位十进制数'作者: laviewpbt'时间: 2006-11-3''************************************* 二十进制转换**********************************Public Function BinToDec(BinCode As String) As LongDim i As Integer, Dec As Long, Length As IntegerLength = Len(BinCode)For i = 1 To LengthIf Mid(BinCode, i, 1) = "1" ThenDec = Dec + N2(Length - i)End IfNextBinToDec = DecEnd Function'*********************************** 编码***********************************''过程名: Coding'参数: Bits - 需要编码的位数' BinGroup - 保存群体编码数据的数组'说明:编码,准确的说应该是初始化种群,对于二进制码和格雷码这个过程一样的'作者: laviewpbt'时间: 2006-11-3''*********************************** 编码***********************************Public Sub Coding(Bits As Integer, BinGroup() As String)Dim i As Integer, j As IntegerDim Temp As StringRandomizeFor i = 1 To UBound(BinGroup, 1)Temp = ""For j = 1 To BitsIf Rnd >= 0.5 ThenTemp = Temp & "1"ElseTemp = Temp & "0"End IfNextBinGroup(i) = Temp。

相关主题