我得到'TypeError:'numpy.float64'对象不可调用'

2024-06-02 05:59:44 发布

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

我有一个测试函数,我正试图使用scipy.optimize最小化它,但我得到了上面的错误。我的测试函数a用于0-100之间的变量。这些变量(4)的总和应为100。总和(a)=100。我尝试通过以前的类似情况解决错误读数,但我无法解决。解决方案应为2500,这是最小值,因为我用gekko optimizer解决了问题,现在正试图切换到Scipy。有人能告诉我或告诉我哪里做错了吗?代码如下:

import numpy as np                                                                 
from scipy.optimize import minimize                                                




def test_function(x):                                                              
    return np.dot(x, x)                                                            


A = np.zeros(4)                                                                    
# bnds = ([0, 100], [0, 100], [0, 100], [0, 100])                                  
bnds = tuple((0, 100) for x in range (len(A)))                                     
x0 = [1, 5, 5, 1]                                                                  


def constraint1(A):                                                                
    sum = 100                                                                      
    for i in range(4):                                                             
        sum = sum - A[i]                                                           
    return sum                                                                     


con1 = {'type': 'ineq', 'fun': constraint1}                                        

sol = minimize(test_function(A), x0, method='SLSQP', bounds=bnds, constraints=con1)

误差如下

Traceback (most recent call last):
  File "C:/Users/Lenovo/Desktop/truss-opt/optimisation2/test_example.py", line 24, in <module>
    sol = minimize(test_function(A), x0, method='SLSQP', bounds=bnds, constraints=con1)
  File "C:\Users\Lenovo\Anaconda3\envs\practice1\lib\site-packages\scipy\optimize\_minimize.py", line 608, in minimize
    constraints, callback=callback, **options)
  File "C:\Users\Lenovo\Anaconda3\envs\practice1\lib\site-packages\scipy\optimize\slsqp.py", line 399, in _minimize_slsqp
    fx = func(x)
  File "C:\Users\Lenovo\Anaconda3\envs\practice1\lib\site-packages\scipy\optimize\optimize.py", line 326, in function_wrapper
    return function(*(wrapper_args + args))
TypeError: 'numpy.float64' object is not callable

Process finished with exit code 1

Tags: inpytestreturnnplinefunctionscipy
1条回答
网友
1楼 · 发布于 2024-06-02 05:59:44

您需要将函数名发送到minimize(),而不是调用它。更改后的代码将是

sol = minimize(test_function, x0, method='SLSQP', bounds=bnds, constraints=con1)

如果您想优化test_函数。如果要优化constraint1,请将测试函数替换为constraint1

相关问题 更多 >