这里的主要思想是了解在目标函数定义中如何使用黑盒函数以及优化算法如何调用这些函数。
让'假设我们有一个定义如下的函数:
f是针对给定问题最小化的目标函数。让我们说:
f(Xi,Yi)=(Ai.Xi)+(Bi.Xi.Yi)i = 1,2 ... n
其中Yi = N(X1,X2,... Xn)是一个黑盒函数(模拟),其分析形式未知,将所有Xi作为输入
N指的是正在模拟的网络。
Ai和Bi是常数
问题有以下限制:
X1 + X2 + ... + Xn = C
以下功能定义只是为了展示我如何调用我的模拟结果并将其用于我的优化目标。如果可以做得更好,我也愿意接受建议。 (但我的主要问题是我的函数定义)
def fun(X):
sim_inpfile(X) # function that has been already defined which is called now by taking x as arguments to write the input file to a simulation
Popen('python Test02.py') # running a python code to execute the simulation
jn.output.Results # Extracting results of simulation by importing a custom made python module called jn
Y=[] # Simulation Result
for i in range(len(jn.output.Results.res)):
if jn.output.Results.res[i].name in nodes:
y += [(jn.output.Results.res[i].pr)] # extracting y as a list from the simulation results
sum = 0 # optimization objective
for i in range(len(a)): # len[a]=len[b]=len[X]=len[Y]
sum += a[i]*X[i]+ b[i]*X[i]*Y[i] #a and b are constants which are lists with the same size as x and y
return sum #the ultimate objective function that takes y(simulation results) as arguments to return the optimization objective value
我现在调用python优化求解器。
res = scipy.optimize.minimize(fun, x0, method='SLSQP', bounds=bnds, constraints=cons) # x0=initial x values, bounds= Variable bounds on X, Constraint =equality constraint
Qns:
对于算法的每次迭代,目标函数都是 要求评估?
如果是的话,是我编码的方式,是回归目标的适当方式 在每次迭代时使用黑盒函数评估函数 求解器?
如果任何python优化包或类似问题和示例中存在或类似问题,请分享他们的链接或主题。
感谢您的时间和经验可以帮助我解决这个问题。
答案 0 :(得分:0)
这是一个非常广泛的问题,优化是一个非常复杂的话题!所以只是一些评论:
对于算法的每次迭代,是否会调用目标函数进行评估?
当你调用它时,由于你没有提供jacobian,该函数每次迭代会多次调用 。 SLSQP将使用数值微分来推断它将采取的步进方向(以及它的长度)!
不,可能不是!如果是,那就是我编码的方式,这是回归目标的合适方式 在求解器的每次迭代中使用黑盒函数评估函数?
第一个显而易见的事情是基于流程的模拟调用会导致开销。如果你的模拟在时间方面占主导地位,那就不那么重要了,但在这种情况下,这通常是错误的方法。
所以尽管你的问题没有太多具体细节(细节/假设很重要!),scipy并不是最有用的库来实现你想要的!有关于全球/无衍生品优化概述替代方案的调查报告(example)。一个例子(任意选择;开源)将是CoinOR的RBFOpt,其页面总结了我们上面的问题:
它不假设f(x)以分析形式已知:f(x)只是一个黑盒子,给定输入值产生输出值。假设变量x_L,x_U的边界是有限的。 RBFOpt特别针对目标函数f(x)的每个评估都很昂贵(在计算时间,成本或其他一些测量方面)的问题,并且我们希望找到具有尽可能少的函数的全局最小值评估尽可能。由于这是一类非常困难的问题(我们不假设一阶导数的可用性),RBFOpt最适用于尺寸相对较小的问题(最多20个变量,理想情况下小于10)并且边界框不是太大了。