擅长:python、mysql、java
<p>你想要的是所谓的“记忆化”。当函数g计算一个值时,它将结果存储在一个字典中,由参数x,y索引。每次调用g时,它都会检查字典,看它需要的值是否已经存储在那里。如果需要重置值,请清除字典。像这样:</p>
<pre><code>class Minimization(object):
'''A class to optimizae a function'''
def __init__(self,x,y):
self.x = x
self.y = y
self.p = np.array([x,y])
self.cache = {} # previously computed values of g
def g(self,x,y):
cache_index = (x, y)
if cache_index in self.cache: # check cache first
return self.cache[cache_index]
value = x - y
self.cache[cache_index] = value # save for later
return value
def f(self,p):
return (self.g(*p) - 1)**2
def df(self,p):
fprime = 2*(self.g(*p) - 1)
return np.array([fprime,-fprime])
def optimize(self):
self.cache.clear() # Blow the cache
P1 = minimize(fun=self.f, x0=self.p, args=(), method='Newton-CG',jac=self.df)
return P1
</code></pre>