Я пытаюсь решить следующую проблему для многих различных значений K:
Я пытаюсь использовать scipy optimize для большей универсальности ( на каком-то этапе я хотел бы иметь возможность изменять функции).
Это мой код:
import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
from scipy import optimize
n=10
p1 = 0.2
p2 = 0.3
orig = (0,0)
endw = (1,1)
def U1(x):
return p1*(x[0])**0.5 + (1-p1)*(x[1])**0.5
def U2(x):
return p2*(1-x[0])**0.5 + (1-p2)*(1-x[1])**0.5
itervals = np.linspace(endw, orig, n)
utvals = np.array([U2(vec) for vec in itervals])
parvals = np.zeros((2, len(utvals)))
for it in range(len(utvals)):
def obj(x):
return -U1(x)
def constr(x):
return -U2(x)+utvals[it]
con = {'type': 'eq', 'fun': constr}
res = optimize.minimize(obj, itervals[it], method='SLSQP', constraints=con)
parvals[:, it] = res['x']
print(constr(parvals[:,it]), utvals[it])
Однако, когда я проверяю, соблюдается ли ограничение, я получаю отрицательные значения constr(parvals[:,it])
в приведенном выше коде, и если я поверну ограничение на
def constr(x):
return U2(x)-utvals[it]
, я получу положительные значения constr(parvals[:,it])
. Почему?
Я имею в виду, мое первоначальное предположение (содержащееся в itervals
) всегда возвращает 0 для ограничения. Поэтому всегда можно достичь 0, почему это иногда положительно, а иногда отрицательно?