0.618法(最優化方法)Python實現


def f(x):
    return x ** 3 - 2 * x + 1


def solve(a, b, epsilon):
    p = a + 0.382 * (b - a)
    q = a + 0.618 * (b - a)
    phip = f(p)
    phiq = f(q)
    while True:
        if phip <= phiq:
            if abs(b - p) <= epsilon:
                return a, q
                break
            else:
                b = q
                phiq = phip
                q = p
                p = a + 0.382 * (b - a)
                phip = f(p)
        if phip > phiq:
            if abs(b - p) <= epsilon:
                return p, b
                break
            else:
                a = p
                phip = phiq
                p = q
                q = a + 0.618 * (b - a)
                phiq = f(q)


if __name__ == '__main__':
    a, b = solve(0, 3, 5e-10)
    print('a: {}\nb: {}\nf((a+b)/2): {}'.format(a, b, f((a + b) / 2)))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM