Optimize.Minimize передает 2 аргумента функции 1 аргумента. - PullRequest
1 голос
/ 23 сентября 2019

У меня проблема с optimize.minimize.Я вставлю код и объясню его после.

def getC(p,q):
    def C1D(l):

        firstTerm = 1/np.sqrt(-(-l + 2*p*(-1+l))*(2 - l + 2*p*(-1+l)))
        secondTerm = firstTerm = 1/np.sqrt(-(-l + 2*q*(-1+l))*(2 - l + 2*q*(-1+l)))

        return 2*l*(firstTerm + secondTerm)
    return C1D

pVal = []
qVal = []
lMinVal = []

for p in np.round(np.linspace(0,1,10,False),3):
    for q in np.round(np.linspace(0,1,10,False),3):
        pVal.append(p)
        qVal.append(q)

        C = getC(p,q)

        def cons_quantum(l):
            return C(l) - 2


        cons = {'type':'ineq', 'fun': cons_quantum}

        opt.minimize(C, 1, cons, bounds=((0,1),))

Есть эта функция 3vars, и я пытаюсь просмотреть некоторые значения p и q (определенные в цикле for) и для каждого из них.У меня будет более простая функция - это просто функция C с фиксированными p и q.Затем я минимизирую эту более простую 1-параметрическую функцию с ограничением на то, что функция C (l) должна быть больше или равна 2. (В конце концов я добавлю строку, которая добавляет минимальное значение l в список lMinVal)

Моя проблема в том, что при запуске я получаю следующую ошибку:

 File "C:\Users\*****\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\optimize\optimize.py", line 293, in function_wrapper
    return function(*(wrapper_args + args))

TypeError: C1D() takes 1 positional argument but 2 were given

1 Ответ

1 голос
/ 23 сентября 2019

Третий аргумент scipy.optimize.optimize - это список дополнительных аргументов, передаваемых функции, а не ограничений.Вы хотите:

opt.minimize(C, 1, constraints=cons, bounds=((0,1),))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...