zoukankan      html  css  js  c++  java
  • Python illustrating Downhill simplex method for minimizing the user-supplied scalar function的代码

    学习过程,把代码过程较好的代码段做个记录,如下的代码段是关于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,sum
    from math import sqrt

    def 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]




  • 相关阅读:
    菜鸡的Java笔记
    Python 练习 进程
    laravel 目录结构
    mysql 操作详解
    菜鸡的Java笔记
    菜鸡的Java笔记
    菜鸡的Java笔记
    菜鸡的Java笔记 数字操作类
    【模板】多项式求逆
    交互题[CF1103B Game with modulo、CF1019B The hat、CF896B Ithea Plays With Chtholly]
  • 原文地址:https://www.cnblogs.com/51jiaoshou/p/10819255.html
Copyright © 2011-2022 走看看