获取资源
请见文章第4节:资源获取】光学显微镜算法(Optical Microscope Algorithm,OMA)是受显微镜放大倍数启发的一种新的元启发式算法,可用于解决工程优化问题。
新颖的 OMA 具有鲁棒性、易于实现且使用较少控制参数的特点,可用于解决各种数值优化问题。
OMA 是一种基于物理的算法,它模拟观察者放大物体的过程,从观察者的眼睛开始,然后通过显微镜镜头。OMA用于获得最佳目标对象的四步过程如下图所示。
该算法中目标物体的放大倍数遵循复合显微镜使用的放大原理,并使用公式(1)进行建模。
M
t
o
t
a
l
=
M
O
∗
M
E
(1)
M_{total}=M_{O}*M_{E}\tag1
Mtotal=MO∗ME(1)
其中,
M
t
o
t
a
l
M_{total}
Mtotal代表显微镜的总视觉放大倍数,
M
O
M_{O}
MO是物镜的放大倍数,
M
E
M_{E}
ME并且是目镜的放大倍数。物镜的放大倍率方程一般用用公式(2)表示:
M
O
=
L
f
0
(2)
M_{O}=\frac{L}{f_{0}}\tag2
MO=f0L(2)
其中,
L
L
L是显微镜的镜筒长度,
f
0
f_{0}
f0是物镜的焦距。要计算这两个值,需要从最佳目标对象的位置进行参考(
M
b
e
s
t
M_{best}
Mbest),用物镜放大。
修改后的目标对象
M
i
,
n
e
w
M_{i,new}
Mi,new的数学表达式为:
M
i
,
n
e
w
=
M
i
+
m
r
∗
1.40
∗
M
b
e
s
t
(3)
M_{i,new}=M_{i}+m^{r}*1.40*M_{best}\tag3
Mi,new=Mi+mr∗1.40∗Mbest(3)
修改后的目标对象(
M
i
,
n
e
w
M_{i,new}
Mi,new)然后与当前物体进行比较,选择两者中较好的一个作为最佳放大倍数。
显微镜的第二个透镜是目镜,它是继物镜之后用来放大物体的。目镜的放大倍率方程一般用公式(4)表示:
M
O
=
D
f
e
(4)
M_{O}=\frac{D}{f_{e}}\tag4
MO=feD(4)
其中,
D
D
D是最短视觉距离,
f
e
f_{e}
fe并且是目镜的焦距。目镜阶段是高级放大倍率的更具体的阶段。因此,为了确定两者的长度,需要从用目镜放大的局部搜索空间的距离作为参考。
为了模拟目镜的放大效果,根据所选目标物体之间的距离确定放大空间(
i
i
i)和群体中的另一个目标对象(
j
j
j)。目标对象(
i
i
i)被随机选择来计算局部搜索空间。
这种修改后的放大倍数被认为是对本地搜索空间的有效利用。公式(5)和(6)分别用于模拟目标物体的放大和修改模式。
s
p
a
c
e
=
{
M
j
−
M
i
,
i
f
f
(
M
i
)
>
=
f
(
M
j
)
M
i
−
M
j
,
i
f
f
(
M
i
)
<
f
(
M
j
)
(5)
space=\left\{
M
i
,
n
e
w
=
M
i
+
m
r
∗
0.55
∗
s
p
a
c
e
(6)
M_{i,new}=M_{i}+m^{r}*0.55*space\tag6
Mi,new=Mi+mr∗0.55∗space(6)
close all
clear
clc
SearchAgents_no=30; % Number of search agents
Function_name='F1'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper)
Max_iteration=500; % Maximum numbef of iterations
% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);
[OMA_Best_score,OMA_Best_pos,OMA_cg_curve]=OMA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
figure('Position',[500 500 660 290])
% Draw search space
subplot(1,2,1);
func_plot(Function_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])
% Draw objective space
subplot(1,2,2);
semilogy(OMA_cg_curve,'Color','r','Linewidth',1.5)
title('OMA优化过程')
xlabel('迭代次数');
ylabel('适应度值曲线');
axis tight
grid on
box on
legend('OMA')
display(['The best solution obtained by OMA is : ', num2str(OMA_Best_pos)]);
display(['The best optimal value of the objective funciton found by OMA is : ', num2str(OMA_Best_score)]);
可以获取完整代码资源。👇👇👇👀名片