使用scipy最小化python中的三个变量

2024-09-29 21:51:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助在python中使用三个变量约束最小化函数。在

我发布了错误代码。如果您愿意,我可以把整个代码发布到显示数学计算:

# the time-series data.
coeff = [0.2, 0.3, 0.4]

x =[146, 96, 59, 133, 192, 127, 79, 186, 272, 155, 98, 219]
test = y(x,coeff)
print("x : ", x)
print("y : ",test)

result = minimize(mape, coeff, (x,), bounds =[(0,1),(0,1), (0,1)], method='SLSQP')

opt = result.x
print("opt : ", result.x)

这是我的代码:

^{pr2}$

这是错误消息。没有最小化函数的函数工作得很好。在

Traceback (most recent call last):
  File "C:\Users\gelalmp\Desktop\Bibha Gelal_SD\testing_Optimization_HWM.py", line 100, in <module>
    result = minimize(mape, coeff, (x,), method ="L-BFGS-B", bounds =bnds)
  File "C:\Python27\lib\site-packages\scipy\optimize\_minimize.py", line 380, in minimize
    callback=callback, **options)
  File "C:\Python27\lib\site-packages\scipy\optimize\lbfgsb.py", line 314, in _minimize_lbfgsb
    f, g = func_and_grad(x)
  File "C:\Python27\lib\site-packages\scipy\optimize\lbfgsb.py", line 258, in func_and_grad
    f = fun(x, *args)
  File "C:\Users\gelalmp\Desktop\Bibha Gelal_SD\testing_Optimization_HWM.py", line 12, in mape
    diff = abs(y(x,coeffList)-x)
  File "C:\Users\gelalmp\Desktop\Bibha Gelal_SD\testing_Optimization_HWM.py", line 30, in y
    xbar2 =sum([x[i] for i in range(c, 2 * c)])/ fc
IndexError: index out of bounds

Tags: 函数inpylineresultusersfileprint
1条回答
网友
1楼 · 发布于 2024-09-29 21:51:36

将最后4行更改为:

M=lambda p1, p2: mape(p2, p1)
result = minimize(M, coeff, (x,), method ="L-BFGS-B", bounds =bnds)

opt = result['x']
print("opt : ", result['x'])

现在应该有用了,需要解释吗?我得到优化结果('opt : ', array([ 0.45330204, 0.26761714, 0. ]))

lambda函数颠倒参数提供给mape的顺序。当您试图找到使coeff最小化的mape()给定一个固定的x时,目标函数应该首先使用coeff,然后再使用x,而不是{}。在

对于您的评论问题:我以为您在代码中使用L-BFGS-B。区别在这里解释:http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html#tutorial-sqlsp。我不得不承认,我对SLSQP没有太多的细节,因为那是很久以前在研究生院的时候。BFGS更为常见,每一本教科书都有解释。^{cd10>约束约束最小化。SLSQP支持边界,以及等式和不等式约束。所以,SLSQP能起作用,而L-BFGS-B不能。看,http://scipy-lectures.github.io/advanced/mathematical_optimization/index.html?utm_source=twitterfeed&utm_medium=twitter。在

相关问题 更多 >

    热门问题