当前位置:   article > 正文

2024年智能优化算法——蝙蝠算法(Python&Matlab实现),2024年最新电工面试题及答案

2024年智能优化算法——蝙蝠算法(Python&Matlab实现),2024年最新电工面试题及答案

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Lower_bound = lower * np.ones((1,d))

Upper_bound = upper * np.ones((1,d))

Q = np.zeros((N_pop, 1)) # 频率

v = np.zeros((N_pop, d)) # 速度

S = np.zeros((N_pop, d))

#=初始化种群、初始解===

Sol = np.random.uniform(Lower_bound, Upper_bound, (N_pop, d))

Fitness = objfun(Sol)

Sol = np.zeros((N_pop, d))

Fitness = np.zeros((N_pop, 1))

for i in range(N_pop):

Sol[i] = np.random.uniform(Lower_bound, Upper_bound, (1, d))

Fitness[i] = objfun(Sol[i])

#找出初始最优解=======

fmin = min(Fitness)

Index = list(Fitness).index(fmin)

best = Sol[Index]

#开始迭代=

for t in range(N_gen):

#====对所有蝙蝠/解决方案进行循环 ======

for i in range(N_pop):

Q[i] = Qmin + (Qmin - Qmax) * np.random.rand

Q[i] = np.random.uniform(Qmin, Qmax)

v[i] = v[i] + (Sol[i] - best) * Q[i]

S[i] = Sol[i] + v[i]

#=应用简单的界限/限制==

Sol[i] = simplebounds(Sol[i], Lower_bound, Upper_bound)

Pulse rate

if rand() > r:

The factor 0.001 limits the step sizes of random walks

S[i] = best + 0.001*np.random.randn(1, d)

#====评估新的解决方案 ===========

print(i)

Fnew = objfun(S[i])

#如果解决方案有所改进,或者声音不太大,请更新

if (Fnew <= Fitness[i]) and (rand() < A):

Sol[i] = S[i]

Fitness[i] = Fnew

#更新当前的最佳解决方案==

if Fnew <= fmin:

best = S[i]

fmin = Fnew

N_iter = N_iter + N_pop

print('Number of evaluations: ', N_iter)

print("Best = ", best, '\n fmin = ', fmin)

return best

def simplebounds(s, Lower_bound, Upper_bound):

Index = s > Lower_bound

s = Index * s + ~Index * Lower_bound

Index = s < Upper_bound

s = Index * s + ~Index * Upper_bound

return s

#目标函数=========

def test_function(u):

a = u ** 2

return a.sum(axis=0)

if name == ‘main’:

print(bat_algorithm(test_function))

bat_algorithm(test_function)

4.2 结果

5 Matlab实现


5.1 代码

clear

wmax=0.9;%惯性权重最大值

wmin=0.4;%惯性权重最小值

n=10000; % 群体大小

A=rand(1,n); % 声音响度 (不变或者减小)

%% 频率范围

Qmin=0; % 最低频率

Qmax=1; % 最高频率

d=2;% 搜索变量的维数(即频率和速度)

%% 初始矩阵

Q=zeros(n,1); % 频率矩阵初始化

v=zeros(n,d); % 速度矩阵初始化,初始化意义就是产生一个初始矩阵

%% x自变量范围

u=-3;

o=12.1;

% y自变量范围

p=4.1;

l=5.8;

%% 初始化群体/解

for i=1:n

Sol(i,1)=-3+(12.1+3)*rand(1,1);%x自变量范围【-3,12.1】

Sol(i,2)=4.1+(5.8-4.1)*rand(1,1);%y自变量【4.1,5.8范围】

%将随机生成的两个自变量带入函数式

Fitness(i)=Fun(Sol(i,:));%函数值

end

%% 寻找当前最优解

[fmax,I]=max(Fitness);

best=Sol(I,:);

T=100;%飞行次数

%% 开始飞行

for t=1:T

for i=1:n,

Q(i)=Qmin+(Qmin-Qmax)*rand;%rand均匀分布的随机数

%v(i,:)=v(i,:)+(Sol(i,:)-best)*Q(i);(原速度)

w=(wmax-wmin)exp(-2(t/T)^2)+wmin;%惯性权重因子

v(i,:)=w*v(i,:)+(Sol(i,:)-best)*A(i)*Q(i);%更改后的速度

S(i,:)=Sol(i,:)+v(i,:);%位置移动

%% 边界问题,如果下次飞行超出自变量范围外了,那么下次飞行的位置为投影在的边界上的位置

%x轴

if S(i,1)>o

S(i,1)=o;

end

if S(i,1)<u

S(i,1)=u;

end

%y轴

if S(i,2)>l

S(i,2)=l;

end

if S(i,2)<p

S(i,2)=p;

end

%% 评估该次飞行后产生的新解

Fnew(i)=Fun(S(i,:));

end

[Fmax,Z]=max(Fnew);%找出该次飞行后产生的最大值

C(t,:)=S(Z,:);

FFnew(t)=Fmax;

end

[Ffmax,N]=max(FFnew);%找出整个飞行过程中的最大值

M=C(N,:)

Ffmax

%目标函数

function z=Fun(u)

z=21.5+u(1)sin(4piu(1))+u(2)sin(20piu(2));

5.2 结果

5.3 展望

如果是其他函数怎么办呢?

函数z=21.5+u(1)*sin(4*pi*u(1))+u(2)*sin(20*pi*u(2))中的两个自变量对应程序中的是Sol(i,1)=-3+(12.1+3)*rand(1,1);%x自变量范围【-3,12.1】和Sol(i,2)=4.1+(5.8-4.1)*rand(1,1);%y自变量【4.1,5.8范围】,两自变量产生的是列矩阵,而程序中Sol(i,:) 提取的是矩阵中的行,所以如果对该函数增减自变量,或者想求其他含有多个自变量的函数,程序中只用修改以下程序部分,其他参数也可以自行更改(注:自变量的范围和个数增加了,那么种群个数和飞行次数务必要增加):

Sol(i,1)=-3+(12.1+3)*rand(1,1);%x自变量范围【-3,12.1】

Sol(i,2)=4.1+(5.8-4.1)*rand(1,1);%y自变量【4.1,5.8范围】

% x自变量范围

u=-3;

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/561728
推荐阅读
相关标签
  

闽ICP备14008679号