两周前我在stackoverflow上问过这个问题,但是,从零回复来看,那可能是错误的论坛。因此在这里复制它:
让我们F0,...,Fn成为带参数的函数p0,...,pn并G成为一个复合函数。说,对于n=3 G(x)=F3(p3,F2(p2,F1(p1,F0(p0,x))))。
我想p0,...,pn通过尽可能少的函数调用来全局优化参数。有几种优化方法:
1) 忽略sG的组合Fi,将其视为带参数的黑盒p0,...,pn,并使用任何通用全局优化器。
2)分层优化;为清楚起见,我们假设n=3:
循环 A:冻结参数p0,p1,p2并单独优化p3。因为G仅取决于p3具有冻结参数的先前函数的输出和我只需要评估F3;other Fs 的输出在迭代之间不会改变。
循环B:冻结参数p0,p1,改变p2,重复上述循环A。重复优化p2。
循环C:冻结p0,改变p1,重复循环B,从而优化p1。
循环 D:很明显。
这种“动态编程”方法将G通过减少迭代来实现优化。我有几个问题:
首先,我不确定这种分层优化方法是否会导致与通用“黑盒”方法质量相同的解决方案。是否对分层优化与黑盒优化产生的结果质量进行了任何研究?
其次,是否有任何可用的优化包支持这样的分层优化?我知道一些可用的通用黑盒优化器(NLOpt 等),但不是通用分层优化器。