У меня есть тестовая функция, которую я пытаюсь минимизировать с помощью 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