python - 我收到'TypeError:'numpy.float64'对象不可调用'
问题描述
我有一个测试函数,我试图使用 scipy.optimize 最小化,但我得到了上面的错误。我的测试函数 A 具有介于 0-100 之间的变量。这些变量的总和 (4) 应该加起来为 100 .sum(A)=100。我尝试通过以前的类似案例解决错误读取,但我不能。解决方案应该是 2500,这是最小值,因为我用 gekko 优化器解决了,现在正试图切换到 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
解决方案
您需要将函数名称发送到 minimize() 而不是调用它。更改后的代码将是
sol = minimize(test_function, x0, method='SLSQP', bounds=bnds, constraints=con1)
如果你想优化 test_function。如果要针对约束 1 进行优化,请将test_function替换为约束1。
推荐阅读
- java - 有没有办法像 Java 中的模拟时钟指针一样旋转 Rectangles2D?
- hyperledger-fabric - HyperLedger 作曲家将 Rest 服务器暴露给外界
- css - Telerik Kendo Angular UI DropDownList 块调整大小
- typescript - 是否可以创建一个 Typescript 的子集,其中结果将具有健全的类型系统?
- mysql - 最小值函数返回最大值和最大值函数返回最小值
- java - 循环遍历具有交替元素的数组
- python - 如何将 printSchema 的结果保存到 PySpark 中的文件中
- php - 在 laravel 的重定向方法中添加 get 参数
- ionic3 - 如何在inappbrowser之外而不是在Inapp浏览器内打开外部Url
- python - 如何将现有字符串的一部分保存在新列中