我有一个安装在电动压电平台上的激光笔,可以倾斜和倾斜它。激光需要击中光电二极管,我想写一些Python代码来自动对齐电机,以获得光电二极管的最高信号。
问题是电机运动缓慢(超过50次迭代将是非常长的),不是完全可重复的(压电电机倾向于“滑动”),并且不是完全正交的(即,不能一次独立地优化一个电机)。
因此,我的问题是最大化函数$f(m_1,m_2,m_3)$,其中$f$是在电机位置$m_1,m_2,m_3 $处测量的光电二极管信号-复杂的是函数可能取决于电机位置历史。
我知道在scipy中有整个库用于最小化,但它们似乎是面向数据不可变(函数总是给出相同的答案)和函数调用相当便宜的应用程序的。在我的情况下,有什么好的迭代优化方法?
我的第一次尝试是扫描每个电机,并将一个峰值与扫描结果相匹配,然后移动到那里。由于电机不是独立的,我不得不手动迭代地扫描每个电机。这是一个缓慢的过程,我想在没有曲线拟合过程的情况下实现自动化
1条答案
按热度按时间f87krz0w1#
看起来这个确切的用例是用sci-kit optimize包(https://scikit-optimize.github.io/stable/getting_started.html)解决的。这个包是围绕优化一个调用起来很昂贵的噪声函数而构建的,它很好地满足了我的项目需求。