0

我一直在编写一些代码来自动将我的光纤(其 X、Y、Z 位置由电机控制)与光源对齐。为此,我编写了axis.move_to(pos)将轴移动到某个位置的pm.meas_power()方法,以及从功率计测量光功率的方法。

我的目标是找到最佳 (Y, Z) 位置(此阶段不需要 X)以最大化光功率。现在,搜索区域与光点大小相比相当大,所以如果我从只发现噪声的区域开始,简单的梯度搜索将无济于事,所以我所做的是随机移动穿过搜索区域,然后移动到一旦我发现一个高于某个阈值的功率,爬山算法。

问题在于,它的效率很低。优化的第一种方法是在螺旋中而不是随机地搜索第一道光,但从计算上讲,它并没有真正提高步数。

相反,我遇到了单纯形算法,据说它产生的结果比爬山好得多。我发现 scipy 有一种optimize.linprog()具有单纯形算法的方法,但在我看来,这仅适用于一维问题。

我尝试阅读文档并编写自己的代码,但我对优化知之甚少,所以我很难真正理解它是如何工作的。

我想知道你是否可以帮我写一个给定的算法[ystart, zstart, yend, zend],即搜索区域限制,以及我的两种方法axis.move_to(pos)pm.meas_power()

from labFunctions import PowerMeter, MotorAxis

pm = PowerMeter('pm_address')
yaxis = MotorAxis('y_address')
zaxis = MotorAxis('z_address')

limits = [ystart, zstart, yend, zend] # These can be formatted differently if needed
4

2 回答 2

2

不幸的是,有两种非常不同的 Simplex 方法:

于 2021-09-13T13:23:27.550 回答
1

我认为您的问题是物理问题,因此您在错误的论坛中提问。不过,我会尝试回答。

如果您尝试匹配激光器的 TEM00 模式,那么您在达到阈值功率后的爬山算法是一个非常好的细化策略,因为功率分布没有任何其他最大值。

关于随机搜索,我认为如果您无法在物理上限制搜索空间,您不妨在等距网格上进行随机搜索,网格点约为激光光斑大小的一半。

于 2021-09-13T11:50:43.057 回答