| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 575 人关注过本帖
标题:vb 遗传算法
只看楼主 加入收藏
gumengyin
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2014-3-19
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:2 
vb 遗传算法
Public Function selectoperation()
Dim i, j, sortnumber As Integer
Dim p, sum, avfitnessvalue(100) As Double
sum = 0
Randomize (137)
For i = 0 To popsize - 1
sum = sum + fitnessvalue(i) '求种群个体总适应度值
Next i
For i = 0 To opsize - 1
If (sum <> 0) Then
avfitnessvalue(i) = fitnessvalue(i) / sum
'归一化适应度值
End If
Next i
For i = 1 To popsize - 1
avfitnessvalue(i) = avfitnessvalue(i - 1) + avfitnessvalue(i)
Next i
For i = 0 To popsize - 1 '轮盘法选择下代种群个体
avfitnessvalue(i) = avfitnessvalue(i - 1) + avfitnessvalue(i)
Next i
For i = 0 To popsize - 1
p = (1000 * Rnd + 1) / 1000#
sortnumber = 0
Do Until p > avfitnessvalue(sortnumber)
sortnumber = sortnumber + 1
Loop
For j = 0 To chromlength - 1
newpopulationchrom(i, j) = populationchrom(sortnumber, j)
Next j
Next i
For i = 0 To popsize - 1
For j = 0 To chromlength - 1
populationchorm(i, j) = nexpopulationchrom(i, j)
Next j
Next i
End Function

'交叉操作实现
Public Function crossoveroperation()
Dim i, j As Integer
Dim index(150) As Integer
Dim piont, median As Integer
Dim p As Single
Dim ch As Integer
Randomize (137)
For i = 0 To popsize - 1
index(i) = i
Next i
For i = 0 To popsize - 1 '随机重新排列种群中的个体序列
Point = Round((popsize - 1 - i) * Rnd)
median = index(i)
index(i) = index(Point + i)
index(Point + i) = median
Next i
For i = 0 To popsize - 1 Step 2
'按一定的随机概率单点交叉相邻两个体
p = (1000# * Rnd + 1) / 1000#
If (p < pc) Then
Point = chromlength * Rnd
For j = Point To chromlength - 1
ch = populationchrom(index(i), j)
populationchrom(i, j) = populationchrom(idex(i + 1), j)
poplationchrom(index(i + 1), j) = ch
Next j
End If
Next i

End Function

'变异操作实现
Public Function mutionoperation()
Dim i, j As Integer
Dim p As Single
For i = 0 To popsize - 1
'按一定随机概率取反变异点的位置值
For j = 0 To chromlength - 1
p = 1000# * Rnd / 1000#
If (p < pm) Then
If populationchrom(i, j) = 0 Then
populationchrom(i, j) = 1
Else: populationchrom(i, j) = 0
End If
End If
Next j
Next i

End Function
这是我在某篇论文里摘下的VB写的遗传算法代码,想问下怎么添加适应度函数和约束条件。
2015-01-12 11:34
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:10 
回复 楼主 gumengyin
1、适应度函数就是计算代码中fitnessvalue(i)的值,就是评价个体对函境的适应程度;
2、约束条件的处理也是遗传算法的一个重点,比如效率比较低的抛弃不可行解、化约束为自由的罚函数法等。建议多看看教材,明白了原理。才能编程实现。




[ 本帖最后由 lianyicq 于 2015-1-13 09:43 编辑 ]

大开眼界
2015-01-13 09:09
gumengyin
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2014-3-19
收藏
得分:0 
回复 2楼 lianyicq
好的,谢谢咯
2015-01-13 10:57
快速回复:vb 遗传算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016037 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved