Минимизация Scipy - TypeError: объект 'int' не вызывается - PullRequest
0 голосов
/ 11 декабря 2018

Я очень, очень плохо знаком с программированием на Python и пытаюсь написать код, который оптимизирует количество, которое я должен заказать, когда Net Inventory становится ниже определенного значения.Я получаю сообщение об ошибке, которое, как мне кажется, связано со строкой 42 из сообщения терминала.Я не знаю, может ли кто-нибудь помочь мне, но я приложу свой код ниже и ошибки, которые я получаю, не уверенный, делаю ли я какие-либо очевидные ошибки.Заранее спасибо.

РЕДАКТИРОВАТЬ: Когда я комментирую строку, где я использую функцию минимизации, я не получаю ошибок.Не уверен, что я там не так делаю.

Код:

import random
import numpy as np
from scipy.optimize import minimize

def objective (h, b, Ip, Im, NIt, s, Qt):
    return h*Ip+b*Im

def constraint1 (h, b, Ip, Im, NIt, s, Qt):
    return NIt-s

def constraint2 (h, b, Ip, Im, NIt, s, Qt):
    return Qt

def test(T, d, RT, LT, h, b, I0, s):
    i = 1
    It = [0] * T
    Qt = [0] * T
    NIt = [0] * T
    It[0] = I0 - d[0]
    Qt[0] = d[0]
    NIt[0] = I0
    while i < T:
        if (i - LT) >= 0:
            It[i] = It[i-1] - d[i] + Qt[i-LT]
        else:
            It[i] = It[i-1] - d[i]
        NIt[i] = NIt[i-1] - d[i-1] + Qt[i-1]
        if It[i-1] > 0:
            Ip = It[i-1]
            Im = 0
        if It[i-1] < 0:
            Ip = 0
            Im = It[i-1]
        if It[i-1] == 0:
            Ip = 0
            Im = 0

        x0 = [h, b, Ip, Im, NIt[i], s, Qt[i]]
        con1 = {'type': 'ineq', 'fun': constraint1(h, b, Ip, Im, NIt[i], s, 
Qt[i])}
        con2 = {'type': 'ineq', 'fun': constraint2(h, b, Ip, Im, NIt[i], s, 
Qt[i])}
        cons = [con1, con2]
        sol = minimize(objective, x0, constraints=cons)

        Qt[i] = sol.Qt
        i += 1
    return It, NIt, Qt

d = []
for j in range(30):
    d.append(random.randint(0, 2)) 

[It, NIt, Qt] = test(30, d, 1, 1, 1, 1, 1, 2)

Ошибки:

Traceback (most recent call last):
  File "c:/Users/Fernandes/Desktop/HelloWorld/app1.py", line 52, in <module>
    [It, NIt, Qt] = test(30, d, 1, 1, 1, 1, 1, 2)
  File "c:/Users/Fernandes/Desktop/HelloWorld/app1.py", line 42, in test
    sol = minimize(objective, x0, constraints=cons)
  File "C:\Users\Fernandes\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scipy\optimize\_minimize.py", line 611, in minimize
    constraints, callback=callback, **options)
  File "C:\Users\Fernandes\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scipy\optimize\slsqp.py", line 315, in _minimize_slsqp
    for c in cons['ineq']]))
  File "C:\Users\Fernandes\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scipy\optimize\slsqp.py", line 315, in <listcomp>
    for c in cons['ineq']]))
TypeError: 'int' object is not callable

1 Ответ

0 голосов
/ 11 декабря 2018

сворачивание ожидает ndarray, и вы передаете ему массив.попробуй:

x0 = np.array([h, b, Ip, Im, NIt[i], s, Qt[i]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...