日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【学习笔记】powell法的python实现

發(fā)布時間:2024/8/1 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习笔记】powell法的python实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學習最優(yōu)化理論算法時用到了《優(yōu)化設計》和《最優(yōu)理論與方法》兩本書。

根據(jù)的《優(yōu)化設計》第55頁的流程圖,實現(xiàn)了流程圖前半部分的代碼設計(尚未添加Powell判斷條件),給自己也給正在學習的朋友們留下學習筆記。

代碼如下:

import numpy as np

from sympy import symbols,solve,diff

import time

e = 0.01 ?#精度

n = int(input('請輸入n的值:'))

count = 0 # 迭代次數(shù)計數(shù)器

maxtimes = int(input('請輸入最大迭代次數(shù):')) ?# 最大迭代次數(shù)

time_s = time.time()

# 定義初始點

X0 = []

for i in range(1,n+3):

? ? if i % 3 == 0:

? ? ? ? X0.append(0.5)

? ? elif i % 3 == 1:

? ? ? ? X0.append(0.5)

? ? elif i % 3 == 2:

? ? ? ? X0.append(1)

# 初始方向

d = np.identity(n+2,dtype = int)

# 定義目標函數(shù)

def objfun(n,x):

? ? f = 0

? ? for i in range(1,n+1):

? ? ? ? item = (-x[i-1] + x[i] + x[i+1])**2 + (x[i-1] - x[i] + x[i+1])**2 + (x[i-1] + x[i] - x[i+1])**2

? ? ? ? f += item ? ?

? ? return f

# 定義步長符號

alpha = symbols('alpha')

# 循環(huán)開始

while count < maxtimes:

? ? count = count + 1

? ? x = [X0]

? ? F = [objfun(n,X0)]

? ? delta_list = []

? ? # 定義迭代公式

? ? def X(i,alpha):

? ? ? ? if i <= 1:

? ? ? ? ? ? return list(np.array(X0)+alpha*d[:,i-1])

? ? ? ? else:

? ? ? ? ? ? return list(np.array(x[i-1]) + alpha*d[:,i-1])

? ? # 求X1,X2,...,X(n+2)

? ? for i in range(1,n+3):

? ? ? ? res = objfun(n,X(i,alpha))

? ? ? ? b = solve(diff(res,alpha)) ?# 寫入需要解的方程體

? ? ? ? a1 = complex(b[0]).real ?# 取出復數(shù)的實部

? ? ? ? a1 = round(a1,4)

? ? ? ? x.append(X(i,a1))

? ? ? ? F.append(objfun(n,x[i]))

? ? ? ? delta = abs(F[i]-F[i-1])

? ? ? ? # 取沿搜索方向增量的最大者

? ? ? ? delta_list.append(delta)

? ? ? ? d_delta = max(delta_list)

? ? ? ? m = delta_list.index(d_delta)

? ? if abs((F[n+2]-F[n-1])/F[n+2]) <= e:

? ? ? ? X_bestpoint = x[n+2]

? ? ? ? F_bestpoint = F[n+2]

? ? ? ? print('-------經(jīng)過{}次迭代后,求得最優(yōu)-------'.format(count))

? ? ? ? print('迭代時間為:{}秒'.format(time.time()-time_s))

? ? ? ? print('最優(yōu)解為:',X_bestpoint)

? ? ? ? print('最優(yōu)函數(shù)值為:',F_bestpoint)

? ? ? ? break

? ? else:

? ? ? ? d_n = np.array(x[n+2])-np.array(x[0])

? ? ? ? d = np.delete(d,m,1)

? ? ? ? d = np.column_stack((d,d_n))

? ? ? ? X0 = x[-1]

總結

以上是生活随笔為你收集整理的【学习笔记】powell法的python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。