如果你是想找一个三阶的多项式拟合你的离散数据的话,可以用PSO。
直接用基础pso就可以,不过你的适应度函数是三维(因为是3阶的多项式),要利用你的数据编一个,常用的话就是差值平方和,就是fitness=(真实值1-多项式计算值1)^2+(真实值2-多项式计算值2)^2+ 你有13组数据就可以加13次够了,不过提醒一下,你的每个变量的范围要注意设置。
如果还有不懂的可以M我,不过我不常在(⊙o⊙)哦,谢谢
需要很多的子函数 %子程序:新物种交叉 *** 作,函数名称存储为crossoverm function scro=crossover(population,seln,pc); BitLength=size(population,2); pcc=IfCroIfMut(pc);%根据交叉概率决定是否进行交叉 *** 作,1则是,0则否 if pcc==1 chb=round(rand(BitLength-2))+1;%在[1,BitLength-1]范围内随机产生一个交叉位 scro(1,:)=[population(seln(1),1:chb) population(seln(2),chb+1:BitLength)] scro(2,:)=[population(seln(2),1:chb) population(seln(1),chb+1:BitLength)] else scro(1,:)=population(seln(1),:); scro(2,:)=population(seln(2),:); end %子程序:计算适应度函数,函数名称存储为fitnessfunm function [Fitvalue,cumsump]=fitnessfun(population); global BitLength global boundsbegin global boundsend popsize=size(population,1);%有popsize个个体 for i=1:popsize x=transform2to10(population(i,:));%将二进制转换为十进制 %转化为[-2,2]区间的实数 xx=boundsbegin+x(boundsend-boundsbegin)/(power(2,BitLength)-1); Fitvalue(i)=targetfun(xx);%计算函数值,即适应度 end %给适
望采纳!
我来说一种可行但不唯一的方案:
PSO求适应度函数F=f(x1,x2,,xn)的最小值,如果你想添加比如x1+x2<2这样的不等式,就可以在计算完适应度函数F后,判断变量是否满足你所要求的约束不等式,如果不满足,则可以给适应度函数值加入一个惩罚因子,比如原先函数值是215,加入惩罚因子inf(无穷大),就使得适应度函数值变成了无穷大,这就达到了约束的效果;而如果满足约束不等式,就不加入惩罚因子。
就是这样子,不懂追问。
以上就是关于如何用pso算法优化离散数据(matlab程序)全部的内容,包括:如何用pso算法优化离散数据(matlab程序)、如图,如何用这个PSO算法或遗传算法来求函数极值,用C语言编写代码、PSO算法里不等式约束怎么编程啊 x1+x2<2这些不等式怎么在程序里实现两个变量的范围求解!急求,必重谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)