首页 > 编程知识 正文

差分进化算法原理,python为什么叫爬虫

时间:2023-05-04 17:49:19 阅读:147714 作者:3537

前言scikit-opt是将7种启发式算法一一封装的Python码库(差分进化算法、遗传算法、粒子群算法、模拟退火算法、蚁群算法) 源代码具有很大的学习价值。 该文主要根据差分进化(DE )算法原理解读源代码。

DE算法与源代码解读

设置函数,则有三个未知解

defobj_func(p ) : x1,x2,x3=p return x1 ** 2 x2 ** 2 x3 ** 2初始解形状

self.x=none#shape=(size_pop,n_dim )初始解)种群) DE继承系GeneticAlgorithmBase ) lb,ub为x的上下限,新解为均匀分布在约束条件上下界的向量

classde(geneticalgorithmbase ) :def_init_(self,func,n_dim,F=0.5,size_pop=50,max _ ITER constriter constrid constraint _ ueq=constraint _ ueq (self.f=f self.v、self.U=None、None self.lb、self.ub=NP.Array ) lb )

变异,产生新解向量v,v超过解的边界时,保留原来的初始解。 这里可以采用和改善最典型的变异方法。

defmutation(self ) :''v ) I )=x[r1]f ) x[r2]-x[R3]、where i、R1、R2、R3 arerandomlygenerated ' # and # and TD # and R3 shouldnotbeequalrandom _ idx=NP.random.randint (0,self.size_pop,size=) self.size R3=random _ idx [ :2 ] #其中f是固定的,并且能够转换成适应值self.v=3360 (-x [ R3,R3 ],] ) thelowerupperboundstillworksinmutationmask=NP.random.uniform (low=self.lb,high=Sigh self.n_dim )

交叉操作是使初始解x和变异解v概率性交叉,生成解向量u。 在此,self.prob_mut是CR

defcrossover(self ) : ''' if rand prob_crossover,use V,elseusex''mask=NP.Random.rand ) self.size_Pize

选择操作,然后根据函数值的大小选择是否保留u

defselection(self ) : ' ' greedy selection ' ' x=self.x.copy ) ) f_X=self.x2y ).copy ) self.x=

迭代,继续变异,选择

def run (自、 max _ ITER=none (: self.max _ ITER=max _ iterorself.max _ iterforiinrange (self.max _ ITER ) 3360 self.max _ max lf.generation_best_x.append ) self.x [ generation _ x.append ] 3360 ).copy ((self.generation _ best _ y ) global _ best _ index=NP.array (self.generation _ best _ y ).argmin ) self.best _ x=self.generation _ beration

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。