Чтобы решить проблему квадратичного минимума, я использовал scipy.Optimize.Minimize
.
Сначала я инициализирую свою функцию и некоторые пункты:
def func(x):
return 1/4*(x[0]**2+x[1]**2) + x[2]
P1=[]
for i in range(3):
P1.append((rd.uniform(-1,1), rd.uniform(-1,1)))
P2=[]
for i in range(3):
P2.append((rd.uniform(-1,1), rd.uniform(-1,1)))
Но затем у меня проблема с ограничениями.Когда я делаю это, нет ошибки, она работает:
cons = [{'type': 'ineq', 'fun': lambda x: x[2] - x[0] * P1[0][0] - x[1] * P1[0][1] - (P1[0][0] ** 2 + P1[0][1] ** 2)},
{'type': 'ineq', 'fun': lambda x: x[2] - x[0] * P1[1][0] - x[1] * P1[1][1] - (P1[1][0] ** 2 + P1[1][1] ** 2)},
{'type': 'ineq', 'fun': lambda x: x[2] - x[0] * P1[2][0] - x[1] * P1[2][1] - (P1[2][0] ** 2 + P1[2][1] ** 2)}]
for i in range(len(P2)):
cons.append({'type': 'ineq', 'fun': lambda x: -x[2] + x[0]*P2[i][0] + x[1]*P2[i][1] + (P2[i][0]**2+P2[i][1]**2)})
Но когда я делаю это, она возвращает RuntimeWarning
: недопустимое значение, обнаруженное в double_scalars
и не работает:
cons=[]
for i in range(0, len(P1)):
cons.append({'type': 'ineq', 'fun': lambda x: x[2] - x[0] * P1[i][0] - x[1] * P1[i][1] - (P1[i][0] ** 2 + P1[i][1] ** 2)})
for i in range(len(P2)):
cons.append({'type': 'ineq', 'fun': lambda x: -x[2] + x[0]*P2[i][0] + x[1]*P2[i][1] + (P2[i][0]**2+P2[i][1]**2)})
PS: Вот конец:
x0 = np.array([0, 0, 0])
res = minimize(func, x0, constraints=cons)
Я не знаю, где моя ошибка в деле, которое не работает.Заранее спасибо:)