gpt4 book ai didi

python - 如何在 scipy.optimize.minimize 上为 Powell 方法设置正确的方向向量?

转载 作者:行者123 更新时间:2023-12-04 13:55:50 24 4
gpt4 key购买 nike

我正在构建一些 Spring 网络以构建橡胶牵引测试模型。我对我的一些网络节点施加位移,并锁定其他一些节点,然后对系统能量运行最小化函数以获得稳定的系统。
首先,用Nelder-Mead方法,我有发散问题,系统的能量随着迭代次数的增加而增长,所以我正在尝试鲍威尔的方法。方向向量应该帮助我的函数在正确的方向上“移动”我的节点。
不幸的是,我仍然收到错误消息。
这是我的代码:

import scipy as sc
import scipy.optimize as opt
import numpy as np
### Scipy.optimize.minimize with Powell's method
# Algorithm' starting point
x0 = np.array([1., 1., 2., 1., 2., 3., 1., 2., 3., 1., 2., 3., 2., 3., 3., 0., 1.,
0., 2., 1., 0., 3., 2., 1., 4., 3., 2., 4., 3., 4.])

# Setting up the variables we will need
Bounds= opt.Bounds(lb=0, ub=10)
Direc = (np.array([[1, 1, 2, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 1, 2,-1, 0, 1,-2,-1, 0,-2,-1,-2]]))

# Run the optimization function
x_pow = opt.minimize(minimize_energy, x0, method='Powell', tol=1e-6, bounds = Bounds,
options={'maxiter': 1e4, 'disp': True, 'direc':Direc})
这是我得到的错误:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-23-f0bb1bfcaa17> in <module>
8 # Run the optimization function
9 x_pow = opt.minimize(minimize_energy, x0, method='Powell', tol=1e-6, bounds = Bounds,
---> 10 options={'maxiter': 1e4, 'disp': True, 'direc':Direc})
11
12 print('final x')

C:\Bib\envs\statmath3\lib\site-packages\scipy\optimize\_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
598 return _minimize_neldermead(fun, x0, args, callback, **options)
599 elif meth == 'powell':
--> 600 return _minimize_powell(fun, x0, args, callback, **options)
601 elif meth == 'cg':
602 return _minimize_cg(fun, x0, args, jac, callback, **options)

C:\Bib\envs\statmath3\lib\site-packages\scipy\optimize\optimize.py in _minimize_powell(func, x0, args, callback, xtol, ftol, maxiter, maxfev, disp, direc, return_all, **unknown_options)
2638 delta = 0.0
2639 for i in ilist:
-> 2640 direc1 = direc[i]
2641 fx2 = fval
2642 fval, x, direc1 = _linesearch_powell(func, x, direc1,

IndexError: index 2 is out of bounds for axis 0 with size 2
我不明白为什么我的方向向量与 x0 的长度相同时却越界了,将被优化的参数向量。
谢谢你的帮助!

最佳答案

我相信你需要设置适当的界限。您有 30 个参数,因此您需要为每个参数设置适当的界限。你可以尝试这样的事情:bounds = opt.Bounds(np.full(30, 0.0), np.full(30, 10.0))

关于python - 如何在 scipy.optimize.minimize 上为 Powell 方法设置正确的方向向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62690453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com