Matlab R2014a与R2015a优化边界约束的问题

Matlab R2014a与R2015a优化边界约束的问题,matlab,debugging,optimization,constraints,Matlab,Debugging,Optimization,Constraints,我有个问题。我在我的工作机器(R2014a)和另一个机构的朋友的机器(R2015a)上运行GA优化,发现优化文件有一个非常严重的错误。我以以下方式使用GA: [x,fval]=ga(@massstress,7,[],[],[],[],[],[],[],[],[],[],LB,UB,@nonlinbound,intcon,options) 两个版本之间的错误源是对代码的@nonlinbound条件的评估。在我的优化中,@nonlinbound有四个关系,根据GA代码,在计算变量集“x”时,它们必须

我有个问题。我在我的工作机器(R2014a)和另一个机构的朋友的机器(R2015a)上运行GA优化,发现优化文件有一个非常严重的错误。我以以下方式使用GA:

[x,fval]=ga(@massstress,7,[],[],[],[],[],[],[],[],[],[],LB,UB,@nonlinbound,intcon,options)

两个版本之间的错误源是对代码的@nonlinbound条件的评估。在我的优化中,@nonlinbound有四个关系,根据GA代码,在计算变量集“x”时,它们必须小于或等于0,才能认为解决方案有效

评估R2014a上10个“x”溶液的@nonlinbound:

ans=
-0.0012   -0.0010    0.0000   -0.0067
-0.0014   -0.0008    0.0000   -0.0018
-0.0014   -0.0008    0.0000   -0.0010
-0.0013   -0.0009    0.0000   -0.0042
-0.0013   -0.0009    0.0000   -0.0030
-0.0012   -0.0010    0.0000   -0.0067
-0.0012   -0.0010   -0.0000   -0.0143
-0.0014   -0.0008    0.0000   -0.0018
-0.0014   -0.0008    0.0000   -0.0010
-0.0013   -0.0009   -0.0000   -0.0442
-0.0013   -0.0009    0.0000   -0.0042
-0.0013   -0.0009   -0.0000   -0.0169
-0.0013   -0.0009    0.0000   -0.0030
-0.0012   -0.0010   -0.0000   -0.0014
-0.0013-0.0009-0.0000-0.0246

评估R2015a上10个“x”值的@nonlinbound:

ans=
-0.0029    0.0006    0.0001   -4.1210
-0.0031    0.0008    0.0001   -3.4284
-0.0032    0.0008    0.0001   -1.6713
-0.0029    0.0006    0.0001   -8.3895
-0.0032    0.0008    0.0001   -0.3974
-0.0028    0.0005    0.0001   -8.4606
-0.0032    0.0009    0.0001   -1.6834
-0.0026    0.0004    0.0002   -6.5051
-0.0031    0.0008    0.0001   -8.1347
-0.0032    0.0008    0.0001   -1.4590
-0.0030    0.0006    0.0001   -7.6538
-0.0030    0.0006    0.0001   -2.2644
-0.0028    0.0006    0.0001   -7.2583
-0.0031 0.0007 0.0001-5.7414

如您所见,边界约束没有得到正确满足,我在R2015a中得到的解决方案在物理上不可行/不可制造(因此非线性约束设置了真实的物理几何体..)

有什么想法吗?两个版本之间会有什么变化


为了确认,是的,两个系统之间的代码是相同的。一台机器上的更改立即传播到第二台机器,因此我可以确认整个设置是在两台机器之间克隆的。

多亏了Mathworks的好心人,已经找到了解决方案!现引述如下:

我对这个问题做了更多的研究,似乎非线性约束的默认公差已从MATLAB R2014a更改为R2015a

由于在使用“gaoptimset”设置遗传算法选项时未指定公差,因此使用了默认值:R2015a中的1e-3和R2014a中的1e-6

更紧的公差可能是R2015a中违反约束(公差范围内)的原因

要设置公差,可以使用以下语法:

options.TolCon=1e-6

我可以确认这确实纠正了我的问题。非常感谢你,拉格哈夫·P·马修斯

注意:必须先收集选项,然后才能使用以下代码进行设置:


options=gaoptimset(@ga)

我对遗传算法不太了解(如果你说的是遗传算法的话),但它们不是意味着每次评估时都会输出不同的结果,即使是在同一台机器上?他们不使用随机抽样吗?是的,GA=遗传算法。它们确实输出不同的结果,并且它们确实使用了某种程度的随机抽样,但是由于结果的差异,我运行了几次遗传算法(每个解决方案在这台机器上收敛大约需要6-10秒)。所以你看到的结果,我发布的每个都来自一个GA解决方案(一台机器上有15个解决方案,另一台机器上有15个解决方案)。问题在于第二个集合的正值的存在,这意味着收敛解不满足约束关系。当然,您是否可以发布
nonlinbound
。代码本身将有以下信息:1:GA运行的优化优化了带孔的圆形截面。2:几何体由排列在环上的小圆定义,定义数量未指定且可扩展(我将在GA中运行GA,不想编写多个约束文件)3:如下图所示,
nonlinbound.m
的严格目标是防止几何元素的干涉和相交。4:传递给
nonlinbound.m
的单个变量使用外部.m文件进行解析,以获得变量
函数[c,ceq]=nonlinbound(x)[L,ro,m,rc,rf,n,j]=math2code(x);S1=0;S2=0;S3=rf*0.10;%BC的c(1)=[-L/ro+10];对于i=1:mc([2:4]+(i-1)*3)=[S1+rf(i)-rc(i)];[S2-ro+rc(i)+rf(i)];[S3(i)+2*rf(i)-rc(i)*sqrt(2-2*cos(2*pi/n(i))];];结束%BC:固定环间重叠i=1;q=[];对于j=1:(m-1)对于k=(j+1):mq(i,1)=i;q(i,2)=j;q(i,3)=k;i=i+1;如果i=q(:,1)%m~=1的实际约束条件c(大小(c,2)+1)=-[abs(rc(q(i,2))-rc(q(i,3))-(rf(q(i,2))+rf(q(i,3))]),则结束-end-end-if~isempty(q)%True;end end ceq=[]end