Pythonを使用して最適化問題を解決する-二分法を使用して単峰性関数の極値を解決する

アルゴリズムの原理

ここに画像の説明を挿入します

  • ステップ1:目的関数f(x)について、初期区間[a、b]を決定し、計算終了条件(点距離基準)εを決定します。
  • ステップ2:f '((a + b)/ 2);を計算します。
  • ステップ3:f '((a + b)/ 2)<0の場合、極値が[(a + b)/ 2、b]の区間にあることを示し、a =(a + b)/ 2とします。 ;
  • ステップ4:f '((a + b)/ 2)> 0の場合、極値点が区間[a、(a + b)/ 2]にあることを意味し、b =(a + b)/ 2とします。 ;
  • ステップ5:ba <εの場合は反復を終了し、そうでない場合はステップ2に戻ります。

備考:関数が微分関数を見つけるのに都合が悪い場合、少量のσを使用できます。f((a + b)/2-σ)<f((a + b)/ 2 +σ )、これはf '((a + b)/ 2)> 0を意味し、それ以外の場合はf'((a + b)/ 2)<0;

アルゴリズムの実装

def func(x):
    return x**2 + x + 5


left = -100
right = 100
sigma = 0.0001
mid = (left + right) / 2
while (1):
    x1 = mid - sigma
    x2 = mid + sigma
    if (func(x1) < func(x2)):
        right = x2
    else:
        left = x1
    if (right - left < 0.001):
        break
    mid = (left + right) / 2

print("left=%s,right=%s" % (left, right))

おすすめ

転載: blog.csdn.net/weixin_41754258/article/details/114100179