学习过程,把代码过程较好的代码段做个记录,如下的代码段是关于Python illustrating Downhill simplex method for minimizing the user-supplied scalar function的代码,应该能对各位朋友有较大用途。 ''' x = downhill(F,xStart,side,tol=1.0e-6) Downhill simplex method for minimizing the user-supplied scalar function F(x) with respect to the vector x. xStart = starting vector x. side = side length of the starting simplex (default is 0.1)'''from numpy import zeros,dot,argmax,argmin,sumfrom math import sqrtdef downhill(F,xStart,side=0.1,tol=1.0e-6): n = len(xStart) # Number of variables x = zeros((n+1,n)) f = zeros(n+1) # Generate starting simplex x[0] = xStart for i in range(1,n+1): x[i] = xStart x[i,i-1] = xStart[i-1] + side # Compute values of F at the vertices of the simplex for i in range(n+1): f[i] = F(x[i]) # Main loop for k in range(500): # Find highest and lowest vertices iLo = argmin(f) iHi = argmax(f) # Compute the move vector d # Check for convergence if sqrt(dot(d,d)/n) < tol: return x[iLo] # Try reflection fNew = F(xNew) if fNew <= f[iLo]: # Accept reflection x[iHi] = xNew f[iHi] = fNew # Try expanding the reflection xNew = x[iHi] + d fNew = F(xNew) if fNew <= f[iLo]: # Accept expansion x[iHi] = xNew f[iHi] = fNew else: # Try reflection again if fNew <= f[iHi]: # Accept reflection x[iHi] = xNew f[iHi] = fNew else: # Try contraction fNew = F(xNew) if fNew <= f[iHi]: # Accept contraction x[iHi] = xNew f[iHi] = fNew else: # Use shrinkage for i in range(len(x)): if i != iLo: f[i] = F(x[i]) print "Too many iterations in downhill" print "Last values of x were" return x[iLo]
转载于:https://www.cnblogs.com/51jiaoshou/p/10819255.html
相关资源:Real-Time.Software.Design.for.Embedded.Systems