图片缩略图

基本遗传算法

version 1.2.0.0 (5.52 KB) by 泽维尔Blasco
一个易于使用的遗传算法
4.6
15评级

131下载

更新2018年5月10日

视图版本历史

查看许可协议

这些脚本实现了中描述的遗传算法版本
《高等教育优化模式下的基础教育控制预测。应用非线性和多变量过程》,F.Xavier Blasco Ferragud,博士,1999年(西班牙语),编辑版UPV.ISBN 84-699-5429-6。
它是一个易于使用的GA和基本的指令提供。
网址:http://hdl.handle.net/10251/15995

引用作为

泽维尔Blasco(2021)。基本遗传算法(//www.tatmou.com/matlabcentral/fileexchange/39021-basic-genetic-algorithm),MATLAB中心文件交换

评论和评级(36

Murali光辉

泽维尔Blasco

对何塞·丹尼尔的答复:
事实上,目前beta参数的范围是[-0.5,0.5]。当β在[0,1]范围内时,你会得到父级(P1父级1,P2父级2,H1子级1)之间的纯线性组合:

H1=β1*P1+(1-β1)*P2

在[-0.5,0.5]中选择β使线性组合超出了父母所设定的限制。这扩展了父母双方建立的探索限制(增加了孩子可以定位的区域)

正如我在之前的一篇文章(2020年5月29日回答Tom)中所说的,我正在评估设置贝塔在el rango[0,1]的可能性。但我现在的印象是,我们不会注意到算法行为的显著变化。

你好。我有下一个问题:beta1参数“% Child1 = beta1*Parent1+(1-beta1)*Parent2”我认为应该在内部[0,1](对于线性重组)。然而,由于“beta =rand(2,1)-0.5;”,matlab代码生成beta <0;(α= 0)。你觉得呢?

热天巴拉米

如何使用KH算法来规范化像Ackley函数这样的问题?

泽维尔Blasco

回答Sunghyun:
用同样的方法来回答Heonyong。使用惩罚条款。
实例:
函数J =成本(x)
%x=[x1,x2]二维搜索空间。
J = x (1) ^ 2 + 5 * x (2);
%非线性罚项:x(1)^2-0.3*x(2)^3>=1
p = abs (min (x (1) ^ 2 - 0.3 * x (2) ^ 3 - 1, 0)) * 1 e5;
J=J+p;

Sunghyun全

如何引入两个变量的非线性约束?

泽维尔Blasco

对韩勇的答复:
包含限制的一种简单方法是在目标函数中添加一个术语,该术语在限制不满足时进行惩罚。
例如,如果必须最小化f(x)=x^2 s.t.x>=1,则成本函数可以是:
函数J =成本(x)
J = x ^ 2;
当x>=1时,%罚项
p = abs (min (x - 1, 0)) * 1 e5;
J=J+p;

Heonyong Lim

如何在这个问题上引入约束?

泽维尔Blasco

汤姆回答:
在一个极端的情况下,例如,P1=1000和P2=1005(在您建议的搜索空间的边界上),和beta1=-0.4 (beta1是在范围[-0.5,0.5]内随机生成的,我想将范围改为[0 1])
H1=β1*P1+(1-β1)*P2
H1= -0.4*1000+1.4*1005=1007(不是1400)
无论如何,这个值超出了边界,但在交叉种群后通过突变操作(mutbga函数)。如您所见,在这个函数的末尾有一些代码可以防止超出边界的点。

%强制点数界外
辅助= 1(宁德,1);
auxf1 =辅助* FieldDR (1:);
: auxf2 =辅助* FieldDR (2);
NewChrom = (NewChrom > auxf2)。* auxf2 + (NewChrom < auxf1)。* auxf1 + (NewChrom < = auxf2 & NewChrom > = auxf1)。* NewChrom;

当然,这不是实现交叉和变异的唯一方法,您的建议可能是有效的。但我不知道是不是更好。

汤姆

假设是一维,但你可以把我的想法扩展到多维。假设下界是1000,上界是1005。因此只允许1000到1005之间的值。因此,父值在1000到1005之间。当我将1000到1005之间的值与1.4相乘时,我最终会得到1400左右,这远远超出了边界。先取父元素的值,从中减去1000,然后做A的乘法,然后再加1000,不是更符合逻辑吗?

泽维尔Blasco

亲爱的汤姆,我很高兴我的代码能有用。

至于你问我的问题,我不确定我是否理解了,但我会尽力回答。
您所描述的操作是在交叉操作数中执行的(而不是在变异操作数中)。
这是一个线性交叉,两个子项(代码中的NewChrom(pin:pin+1,:)由两个父项(代码中的oldcrom(pin:pin+1,:))生成)。
例如,如果我们称子结点H1和H2,父结点P1和P2,我们考虑=0(为了简化):
H1=β1*P1+(1-β1)*P2
H2 = beta2 * P1 + (1-beta2) * P2

在代码中,矩阵A (2x2)包含每个变量的重组因子(随机生成的“beta”)。

例如,对于带有三维的情况:
>> alpha= 0 %默认值
α=
0
> >β=兰德(2,1)*(1 + 2 *α)-(0.5 +α)
贝塔=
0.1324
-0.4025
> > =(贝塔(1)1-betas (1);1-betas(2)贝塔(2))
一个=
0.1324 - 0.8676
1.4025 -0.4025
>> OldChrom=[5 10 2;3 14 4]
奥德克姆=
5 10 2
3 14 4
> > NewChrom = * OldChrom
NewChrom =
3.2647 13.4706 3.7353
5.8049 8.3902 1.1951

汤姆

我非常喜欢代码。我只是想知道为什么你在突变中包含了范围而在交叉中不包含?这有什么原因吗?

贝塔=兰德(2,1)*(1 + 2 *α)-(0.5 +α);
=(贝塔(1)1-betas (1);1-betas(2)贝塔(2)];
NewChrom(pin:pin+1,:)=A*oldcrom(pin:pin+1,:);

假设你有一个非常接近的上下边界(例如1000和1005,那么范围是1,但你需要乘以*1000)。减去1000,然后A*5,再加上1000,这不是更合乎逻辑吗?
或者在上面的公式背后是否有一个统计逻辑,而不是我所建议的?

汤姆Wambecq

马修-赖斯

西

谢谢你的回答,我在自己改变的过程中遇到了一个问题,现在我已经解决了

泽维尔Blasco

习的答案:

如果你定义一个只有一个参数的函数。
函数值= objfun_y (x)
值= x。^ 2 + sin (x) + 3 * x + x ^ 3 - 1;

和执行:
gaDat.Objfun =“objfun_y”;
磅= [1];
ub=[1];
gaDat.FieldD =[磅;乌兰巴托];

它的工作原理。

如果你将函数定义为一个4参数函数:
函数值= objfun_y4 (x)
价值= x (1) ^ 2 + sin (x (2)) + 3 * x (3) + (4) ^ 3 - 1;

和执行:
gaDat.Objfun =“objfun_y4”;
Lb =[-1 -1 -1];
Ub =[1 1 1 1];
gaDat.FieldD =[磅;乌兰巴托];
%执行遗传算法
gaDat=ga(gaDat);

它同样适用。我不明白是什么问题。

西

我想用这段代码来解一个四元方程,我应该如何修改它?例如y = x (1) ^ 2 + sin (x (2)) + 3 * x(3) +(4) ^ 3 - 1。当我修改目标参数时。在修改了参数的上下限后,仍然无法求解。error in function chrom=crtrp(Nind,FieldDR);

Ranran徐

伊斯兰教萨米

请,我想编码的遗传算法与适应度函数

泽维尔Blasco

听迈赫迪·埃尔卡多里的
我不能重复这个错误。我想你就是一个例子。但是当我运行它时,一切都很正常。您的注释建议我您没有执行示例的第1到4行,或者您在执行第5行之前删除了变量gaDat。

Mehdi Elkaddouri

未定义函数或变量'gaDat'。

错误在ga(第5行)
gaDat=ga(gaDat)我如何通过这个错误?

岩洞里portu

岩洞里portu

你好,Xavier,非常感谢你的代码,我的问题是利用遗传算法最大化PV系统的功率。非常感谢

Md Alamgir侯赛因

伯克尔辛

伯克尔辛

泽维尔Blasco

回答丽迪雅·哈米斯。
你必须为你的问题建立一个成本函数。这里有一个简短的教程,你可以看到使用的例子。

丽迪雅哈密

我的研究是关于使用约束最小二乘滤波器进行图像重建。为了得到更好的结果,我想实现遗传算法。如何将此代码实现为当前结果?

Sherlin prem Nishold S

tayueyue

哈利·史密斯

感谢代码,快速转换从Matlab求解器GA到您的

泽维尔Blasco

回答Jaouadi Zouhour。
没有一种启发式算法能保证找到全局最优解。在当前版本的算法中,停止是在固定的迭代次数下完成的,但用户可以在函数gaiteration.m中添加自己的停止准则。该函数在算法的每次迭代时执行。
例如,你可以加上:
如果yourStopCriterionIsSatisfied
gaDat.gen = gaDat.NIND;
结束
改变你的停止标准满足于你自己的条件。

jaouadi zouhour

谢谢你的代码。
在应用ga alg时,我有一个问题。我的最优函数从一次迭代开始收敛到一个固定值(迭代:50)。它是否对应于最优点?是否可以停止迭代并假设它为最小值?

sawon pratiher

艾哈迈德瓦利

一种新的SLM方案,用于降低OFDM信号的峰均比
遗传算法

美国Garcia-Nieto

satyendra raghuvanshi

MATLAB版本兼容性
创建R2009b
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!