Python求ackley函数最优解
时间: 2024-05-24 13:08:47 浏览: 205
Ackley函数是一个经典的优化问题,它是一个具有多个局部极小值的非凸优化问题。Python有许多优化库可以用来求解这个问题,其中比较流行的是Scipy库中的optimize模块。
下面是一个使用Scipy库中optimize模块求解Ackley函数最优解的示例代码:
```
import numpy as np
from scipy.optimize import minimize
def ackley(x):
"""
Ackley函数
"""
a = 20
b = 0.2
c = 2*np.pi
d = len(x)
sum1 = np.sum(np.square(x))
sum2 = np.sum(np.cos(c*x))
return -a*np.exp(-b*np.sqrt(sum1/d)) - np.exp(sum2/d) + a + np.exp(1)
bounds = [(-5, 5)]*30 # 30维变量,每个变量的取值范围为[-5, 5]
result = minimize(ackley, np.random.uniform(-5, 5, 30), method='L-BFGS-B', bounds=bounds)
print(result.fun) # 输出最优解对应的函数值
print(result.x) # 输出最优解
```
上述代码中使用了Scipy库中的minimize函数来求解Ackley函数的最优解,其中np.random.uniform(-5, 5, 30)表示生成一个30维的随机向量作为初始点。bounds表示每个变量的取值范围,method参数表示使用L-BFGS-B算法进行优化。运行上述代码后,将会输出最优解对应的函数值和最优解。
阅读全文