Scipy Optimization TNC方法,规模是做什么的?解决“无法进步”的方法?

问题描述 投票:0回答:1

我正在使用已知的梯度(100到300个变量)运行多个有界优化。有时,TNC返回“无法进度”。

对于我的目标函数,与TNC相比,L-BFGS-B慢得多并且输出的结果也很差。 (也许是因为变量数量较大时,TNC会更好)在使用L-BFGS-B和niter_success到10进行贝辛跳跃时,我得到的结果接近TNC,速度降低了20倍。当TNC返回“无法进行”时,“ L-BFGS-B”返回更好的结果。因此,我当前的解决方案是在TNC出现状态6“无法进行”时发生故障时运行“盆地跳跃”。

似乎TNC无法减少x次迭代的目标函数时,将返回“无法进行”。我在比例因子上玩了一点,不一致地得到了更好的结果。

据我所知,在优化问题中扩展使优化器知道哪个变量更有效。我有此信息,我相信这将减少我得到的“无法进展”的数量。根据文档,https://docs.scipy.org/doc/scipy/reference/optimize.minimize-tnc.html“间隔范围变量的默认比例尺数组为上下,其他则为1+ | x]”。因此它是上限-有界变量的下界,无法理解如何处理无界。 什么是1+ | x]

[此外,我手动向上计算-低,并将无界设置为1,每次我使用相同的输入运行优化时,都会返回不同的结果。 ((奇怪?)

我还尝试研究代码,TNC如何处理秤,辛辣包装程序将空数组或输入数组发送到C代码https://github.com/scipy/scipy/blob/master/scipy/optimize/tnc/moduleTNC.c。在C代码中,我找不到在哪里创建比例尺数组或如何使用它。当“无法进行”触发时也找不到。有人可以指出我应该去的地方吗?

python optimization scipy newtons-method
1个回答
0
投票

我解决了TNC通过缩放输入引发的“无法进行进度”的问题。如果您正面临此问题,请在知道哪些变量有效地使目标函数最小化的情况下形成比例向量。

说X1比X2更有效,那么您的比例矢量将为[100,2]。使用它来更改范围,输入数据和结果(res.x)。

© www.soinside.com 2019 - 2024. All rights reserved.