python - 寻找一种算法,也可以返回局部最小值
问题描述
我知道的所有黑盒函数优化算法,如模拟退火或贝叶斯优化,都提供了全局最小值。
我正在寻找一种 python 算法,它可以将全局和所有局部最小值返回给我。
有没有解决这个任务的算法?
或者是否有任何全局最小算法也可以返回局部最小值?
解决方案
或者是否有任何全局最小算法也可以返回局部最小值?
我不明白你所说的全局最小算法是什么意思,但既然你提到了模拟退火,我会假设你在谈论具有全局搜索能力的元启发式算法。
无法保证经常用于解决 NP 难题的元启发式算法会探索整个搜索空间,因此无法保证找到每个局部最小值。但是,我假设您知道这一点并且您想要的是以一种方法来修改它,而不仅仅是一种解决方案(最好找到),一个在查找全局最小值的过程中找到的局部最小值列表。
基于单一解决方案的算法,如禁忌搜索、迭代局部搜索等,都是基于局部搜索工作的。他们执行局部搜索,直到找到局部最优解,然后,他们应用各自的规则试图摆脱局部最小值。让我们考虑迭代局部搜索,它执行局部搜索,直到解决方案S
局部最优,然后它扰动当前的局部最优以摆脱它并在搜索空间中获取另一个点再次执行局部搜索,直到满足条件。在您的情况下,您应该每次在搜索过程中找到一个局部最优解。
下面的伪代码是修改后的 ILS 算法,以保留在搜索过程中找到的所有局部最优解。
HillClimbing(S)
while S is not locally optimal do
S ← best(N(S)) // best solution in neighborhood N of solution S
Return S
IteratedLocalSearch()
L ← {} // set of locally optimal solutions
G ← randomSolution()
S ← G
while criterionIsNotMeet() do
HillClimbing(S)
Add S to L // add the current local
if S.objective < G.objective do // minimization
G ← S // best solution found
perturbateSolution(Copy(S))
这种算法很容易实现。如果您决定自己实现,请获得一份好的参考论文,如果这还不够,您可以尝试在 GitHub 或 Mathworks 发现上找到一个好的实现来作为您编码的基础。
推荐阅读
- xcode - React Native Builds 在 App Store Connect 中不可见
- python - 计算字符串长度为 2 或更多且第一个和最后一个字符相同的字符串的数量
- django - 从 dajngo 中的数据库加载模板
- ruby-on-rails - SQL 使用 group_by 统计用户
- python-3.x - 尝试检查字典中是否添加了任何不需要的键
- php - 从 Patreon API 获取赞助人数据
- python - Python 套接字绑定:重试直到套接字/端口可用且不再使用
- c++ - 在 Windows 上调用 cuda 库
- reactjs - 与 React.PropType 不同,React 道具类型验证无需验证即可编译代码,这是正常行为吗?
- google-cloud-platform - gcloud 构建提交时致命:不是 git 存储库