当前位置:首页 » 操作系统 » 基于遗传算法

基于遗传算法

发布时间: 2022-01-23 18:22:48

㈠ matlab怎么运行基于遗传算法的vrp

function [x fx string]=fun_SuiJiSuanFa2(N,genLenth,Pc,Pm,downbound,upbound,generation)
%[x fx string]=fun_SuiJiSuanFa2(6,16,0.7,0.01,-3,3,100)
%f 表示函数
%N表示染色体种群大小
%genLenth表示染色体长度
%Pc表示交叉概率
%Pm表示突变概率
%downbound
%upbound
%generation循环代数

%进制编码,此处编写为二进制
num=2;
initdata=randi([0 num-1],N,genLenth);
%二进制编码的权值
weight=(num).^(genLenth/2-1:-1:0);
weights=repmat(weight,N,1);
%保存每代的最好值和平均值,
meanally=zeros(1,generation);
maxally=zeros(1,generation);

Nowx=zeros(generation,genLenth);
for k=1:generation
%解码后的整数
allx1=sum(initdata(:,1:genLenth/2).*weights,2);
allx2=sum(initdata(:,genLenth/2+1:end).*weights,2);
%映射到取值范围
delt=(upbound-downbound)/(num^(genLenth/2)-1);
allx1=allx1.*delt+downbound;
allx2=allx2.*delt+downbound;
%染色体的适应性
ally=f(allx1,allx2);
%平均值,最大值
meanally(k)=mean(ally);
maxally(k)=max(ally);
%找下标,确定是哪条染色体
index=find(ally==maxally(k));
Nowx(k,:)=initdata(index(1),:);
%最大值没有提高就取上次的
if(k>=2&&maxally(k)<maxally(k-1))
maxally(k)=maxally(k-1);
Nowx(k,:)=Nowx(k-1,:);
end
%染色体的适应性比率
ratio=ally./sum(ally);
%交叉,变异
%??交叉几个,从第几个开始。
%此处只交叉1个(总共才6个),随机给一个。
sumRatio=cumsum(ratio);
data=zeros(N,genLenth);
for i=1:N/2
Select1=find(sumRatio>=rand);
Select2=find(sumRatio>=rand);
data(2*i-1,:)=initdata(Select1(1),:);
data(2*i,:)=initdata(Select2(1),:);
if(rand<Pc)
%交叉
location=randi([1,genLenth]);
temp=data(2*i-1,location:end);
data(2*i-1,location:end)=data(2*i,location:end);
data(2*i,location:end)=temp;
else
%变异
if(rand<Pm)
location=randi([1,genLenth]);
data(2*i-1,location)=1-data(2*i-1,location);
end
if(rand<Pm)
location=randi([1,genLenth]);
data(2*i,location)=1-data(2*i,location);
end
end
end
initdata=data;
end

fx=max(maxally);
lastIndex=find(maxally==fx);
string=Nowx(lastIndex(1),:);

x(1)=sum(string(1:genLenth/2).*weight).*(upbound-downbound)/(num^(genLenth/2)-1)+downbound;
x(2)=sum(string(1+genLenth/2:end).*weight).*(upbound-downbound)/(num^(genLenth/2)-1)+downbound;
%绘制性能图
%figure,hold on;
clf;figure(1),hold on;
plot((1:k)',meanally,'b.-');
plot((1:k)',maxally,'r.:');
end

function fun=f(x,y)
fun=(1-x).^2.*exp(-x.^2-(1+y).^2)-(x-x.^3-y.^3).*exp(-x.^2-y.^2);
%fun=-(x-1).^2-3.*(y-2).^2+100;
end

㈡ 基于遗传算法的DNA序列编码。。谁告诉我这个题目什么意思啊。。我只学过遗传算法。。。

大哥,你要真的把基因编码写出来了,你就是活生生的神啊。

遗传算法演算的遗传编码只是计算得到的一个或多个方程的解,代表是的是性状,而且是种群的表现性,可以理解为宏观遗传学,同样的性状的控制基因都是不确定的,甚至还涉及到表观遗传学。怎么去搞?

㈢ 基于遗传算法的水文频率计算与研究

对广西壮族自治区梧州藤县大任河水库1966~2005年年最大24h降雨量进行分析研究,根据经验,采用P-Ⅲ型曲线对降雨量分布点据进行拟合,运用矩法、概率权重矩法、单权函数法、双权函数法对P-Ⅲ型曲线的三个参数初估,把P-Ⅲ型曲线的三个参数作为GA的决策变量,分析调整得到GA决策变量的取值范围,最后,通过GA优化决策变量的取值,计算得出设计洪水,并进行了合理性分析。结论如下:

1)采用矩法、概率权重矩法、单权函数法和双权函数法,初估P-Ⅲ型分布曲线的三个参数,通过适当的调整,来确定GA的决策变量的取值范围。预先设定了12组GA运行参数,从12次的程序调试运行成果中,分析确定合适的运行参数取值范围;GA程序调试过程表明,初始的种群数要足够大,才能保证交叉和变异操作的有效进行;初始的种群数太小,交叉和变异操作后的个体缺乏多样性,不利于程序搜索最优点。种群规模足够大,交叉概率为0.6和0.8时,对适应度函数收敛曲线的影响不是很大,而变异概率过大,适应度函数收敛曲线上下波动大。在实际操作中,GA的运行参数中的种群规模、交叉概率和变异概率三者之间是相互约束的。一般来说,当种群规模大时,交叉概率就相应的选择小一点的值,但也并非一成不变,需要从整体上考虑,找出其中的平衡点,目前并没有完善的理论加以指导,还得根据实际问题,反复不停的调试,最终才能发现适合实际情况的GA运行参数。

2)GA是一种新的自适应搜索方法,它是建立在生物遗传学和计算机的基础上,通过运用杂交、变异两种算子作为搜索工具,用适应度的函数对搜索到的解的质量进行评价,并根据评价的结果用选择算子来引导以后的搜索方向。

3)GA拟合曲线的精度较高,30次计算成果的相对误差都在允许的偏差的范围内, GA计算有效性的合格率为70%,总体上优于双权函数法,实际应用时,需根据实际的计算结果,选择精度高(平均相对误差较小)的一次运算作为计算依据;同时,由于GA以及其在水文水资源系统工程中的应用尚未成熟,所以实际计算应结合计算精度也较高的双权函数法进行比较,GA的计算可以作为一种参考,或在综合比较和论证的情况下作为设计依据。

㈣ 基于遗传算法的自动组卷系统的设计与实现(毕业设计) 求大神给一个系统

请问最后您是用什么方式实现的呢,不知是否保留代码?诚求!(价钱可继续商议)

㈤ 基于遗传算法路径优化C++编程

[cpp]
bool CAStar::Search(int X, int Y, std::list<POINT> &lResult, double dbGapBreak)
{
if(X < 0 || Y < 0
|| X > m_dwMapWidth || Y > m_dwMapWidth ||
m_dwDestinationX < 0 || m_dwDestinationX < 0 ||
m_dwDestinationX > m_dwMapWidth || m_dwDestinationY > m_dwMapHeight)
{
//_outf("坐标或地图参数错误!");
return false;
}

LPAPOINT p = new APOINT;
p->x = X;
p->y = Y;
p->parent = NULL;
p->dbGap = _p2g(X, Y, m_dwDestinationX, m_dwDestinationY);
m_lOpen.push_front(p);//起始节点加入到开启列表
m_lSafe.push_back(p);//加入到公共容器,任何新分配的节点,都要加入到这里,便于算法执行完后清理

std::list<LPAPOINT>::iterator it;
DWORD dwTime = clock();
while(!m_lOpen.empty())
{
//这里就是反复遍历开启列表选择距离最小的节点
it = GetMingapNode();
if((*it)->dbGap <= dbGapBreak)
break;
p = *it;
GenerateSuccessors(it);
}

if(!m_lOpen.empty())
{
//如果列表不为空,从最后一个节点开始拷贝路径到返回值中
//_outf("最终寻路到:%X, %X", p->x, p->y);
POINT point;
while(p)
{
point.x = p->x;
point.y = p->y;
lResult.push_front(point);
p = p->parent;
}
}

for(it = m_lSafe.begin(); it != m_lSafe.end(); ++it)
{
//清理内存
if(*it != NULL)
{
m_pMap[(*it)->y][(*it)->x] = 1;//会被添加到m_lSafe的节点,一定是最初为1的节点,所以可以在这里恢复地图数据
delete (*it);
*it = NULL;
}
}

m_lSafe.clear();//清空容器

//_outf("耗时:%d 毫秒", clock() - dwTime);

if(m_lOpen.empty())
{
//_outf("寻路失败");
return false;
}

m_lOpen.clear();//清空开启列表
//_outf("寻路成功,节点数:%d", lResult.size());
return true;
}
bool CAStar::Search(int X, int Y, std::list<POINT> &lResult, double dbGapBreak)
{
if(X < 0 || Y < 0
|| X > m_dwMapWidth || Y > m_dwMapWidth ||
m_dwDestinationX < 0 || m_dwDestinationX < 0 ||
m_dwDestinationX > m_dwMapWidth || m_dwDestinationY > m_dwMapHeight)
{
//_outf("坐标或地图参数错误!");
return false;
}

LPAPOINT p = new APOINT;
p->x = X;
p->y = Y;
p->parent = NULL;
p->dbGap = _p2g(X, Y, m_dwDestinationX, m_dwDestinationY);
m_lOpen.push_front(p);//起始节点加入到开启列表
m_lSafe.push_back(p);//加入到公共容器,任何新分配的节点,都要加入到这里,便于算法执行完后清理

std::list<LPAPOINT>::iterator it;
DWORD dwTime = clock();
while(!m_lOpen.empty())
{
//这里就是反复遍历开启列表选择距离最小的节点
it = GetMingapNode();
if((*it)->dbGap <= dbGapBreak)
break;
p = *it;
GenerateSuccessors(it);
}

if(!m_lOpen.empty())
{
//如果列表不为空,从最后一个节点开始拷贝路径到返回值中
//_outf("最终寻路到:%X, %X", p->x, p->y);
POINT point;
while(p)
{
point.x = p->x;
point.y = p->y;
lResult.push_front(point);
p = p->parent;
}
}

for(it = m_lSafe.begin(); it != m_lSafe.end(); ++it)
{
//清理内存
if(*it != NULL)
{
m_pMap[(*it)->y][(*it)->x] = 1;//会被添加到m_lSafe的节点,一定是最初为1的节点,所以可以在这里恢复地图数据
delete (*it);
*it = NULL;
}
}

m_lSafe.clear();//清空容器

//_outf("耗时:%d 毫秒", clock() - dwTime);

if(m_lOpen.empty())
{
//_outf("寻路失败");
return false;
}

m_lOpen.clear();//清空开启列表
//_outf("寻路成功,节点数:%d", lResult.size());
return true;
}

新增的SearchEx源代码如下:
nBeginSift 参数为循环初始值,nEndSift为循环结束值,其实就是一个for循环的起始值与结束值。
这个循环的引用计数,最终会被 乘于 10 来作为距离分段选择路径进行路线优化
nBeginSift 与 nEndSift的间距越大,并不表示最终路径就越好,最终优化出来的路径,还是会和地形有关。
其实最好路径优化算法是按照角度的变化来选择路径优化,但是预计开销会比较大,有了这个优化方式作为基础,你可以自己去写根据角度变化来优化的算法。

[cpp]
bool CAStar::SearchEx(int X, int Y, std::list<POINT> &lResult, double dbGapBreak, int nBeginSift, int nEndSift)
{
DWORD dwTime = clock();
if(!Search(X, Y, lResult, dbGapBreak))
return false;
std::list<POINT>::iterator it = lResult.begin();
std::list<POINT>::iterator it2 = it;

std::list<POINT> l2;
for(int i = nBeginSift; i < nEndSift; i++)
{
it = lResult.begin();
it2 = it;
for(;it != lResult.end(); ++it)
{
if(_p2g(it2->x, it2->y, it->x, it->y) > (double)(i * 10))
{
SetDestinationPos(it->x, it->y);
l2.clear();
if(Search(it2->x, it2->y, l2, 0.0))
{
it = lResult.erase(it2, it);
lResult.insert(it, (l2.begin()), (l2.end()));
}
it2 = it;
}
}
}

_outf("耗时:%d 毫秒", clock() - dwTime);
return true;
}
bool CAStar::SearchEx(int X, int Y, std::list<POINT> &lResult, double dbGapBreak, int nBeginSift, int nEndSift)
{
DWORD dwTime = clock();
if(!Search(X, Y, lResult, dbGapBreak))
return false;
std::list<POINT>::iterator it = lResult.begin();
std::list<POINT>::iterator it2 = it;

std::list<POINT> l2;
for(int i = nBeginSift; i < nEndSift; i++)
{
it = lResult.begin();
it2 = it;
for(;it != lResult.end(); ++it)
{
if(_p2g(it2->x, it2->y, it->x, it->y) > (double)(i * 10))
{
SetDestinationPos(it->x, it->y);
l2.clear();
if(Search(it2->x, it2->y, l2, 0.0))
{
it = lResult.erase(it2, it);
lResult.insert(it, (l2.begin()), (l2.end()));
}
it2 = it;
}
}
}

_outf("耗时:%d 毫秒", clock() - dwTime);
return true;
}

㈥ 基于遗传算法的bp模型问题——请高手给思路!!

我会! 线下联系!已经再帮你做了

㈦ 基于遗传算法的多目标网络优化算法的实现代码

Yovf5网站优化所考虑的因素不仅仅是搜索引擎,也包括充分满足用户的需求特征、清晰的网站导航、完善的在线帮助等,在此基础上使得网站功能和信息发挥最好的效果。也就是以企业网站为基础,与网络服务商(如搜索引擎等)、合作伙伴、顾客、供应商、销售商等网络营销环境中各方面因素建立良好的关系。搜索引擎会将站点彼此间的内容做一些相关性的数据比对,然后再由浏览器将这些内容以最快速且接近最完整的方式,呈现给搜索者。网站优化白帽方法,网站优化的白帽法包括遵循搜索引擎哪些可接受哪些不能接受的指导方针。他们的建议一般是为用户创造内容,而非搜索引擎、是让这些内容易于被蜘蛛机器人索引、并且不尝试对搜索引擎系统耍花招。网站员经常于设计或构建他们的网站时,犯下致命错误、疏忽“毒害”该站以致排名不会很好。ivoet

㈧ 基于遗传算法的路径优化

有木有诚意啊,加你的QQ的验证问题竟然是你的真名叫什么……

热点内容
缓存行原理 发布:2024-11-14 13:08:56 浏览:431
简单的vb编程 发布:2024-11-14 13:06:45 浏览:522
绿色linux 发布:2024-11-14 12:56:11 浏览:349
游戏本缓存 发布:2024-11-14 12:55:28 浏览:649
微软提供的编译软件 发布:2024-11-14 12:55:16 浏览:17
长沙java培训机构哪家好 发布:2024-11-14 12:40:53 浏览:229
外存储器硬盘能存储的高清电影数 发布:2024-11-14 12:33:23 浏览:265
python分号作用 发布:2024-11-14 12:31:50 浏览:224
方舟编译器下载要钱吗 发布:2024-11-14 12:29:20 浏览:62
jspoa源码 发布:2024-11-14 12:21:31 浏览:420