Scipy.optimize.minimize:回调价格昂贵时如何有效?

问题描述 投票:0回答:1
关于scipy.optimize.minimize的问题:在TOSCA优化软件的词汇中,以计算人们必须基于设计变量(又称优化变量的值)构建和求解模型的设计响应,并且设计响应用于目标功能的定义和约束。是否有任何规定来计算设计变量的给定值一次设计响应,然后为目标函数和约束提供它们?该模型的构造和解决价格昂贵,因此,如果优化器需要多少次访问设计变量的给定值的回调,则该模型都会好多了,只需构建和求解一次模型。任何洞察力都将不胜感激。

scipy scipy-optimize minimize
1个回答
0
投票

from scipy.optimize import minimize class Memoizer: def __init__(self): self.cache = {} def obj_and_con(self, x): x_hashable = tuple(x) if x_hashable in self.cache: return self.cache[x_hashable] obj_con = [x @ x, x[0] + x[1] - 1] self.cache[x_hashable] = obj_con return obj_con def fun(self, x): return self.obj_and_con(x)[0] def con(self, x): return self.obj_and_con(x)[1] memoizer = Memoizer() x0 = [2, 3] constraints = {'type': 'eq', 'fun': memoizer.con} minimize(memoizer.fun, x0, constraints=constraints)

在某些情况下,您可以使用
lru_cache

而不是手动缓存,但是它并不像仅将装饰器应用于

obj_and_con
时那样简单,因为numpy阵列不可用。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.