Я новичок в программировании и пытался решить задачу математической оптимизации с помощью Python.
Идея проблемы состоит в том, чтобы минимизировать значение функции при соблюдении некоторых ограничений.Это может показаться очень простым, однако по какой-то причине результат, который я получаю, явно не удовлетворяет ограничениям.
Рассматриваемая функция заключается в следующем (у меня недостаточно репутационных баллов для публикации изображений уравнений LaTeX):
f (a, b, c, d) = 2 * a + 3 * b + c + 2 * d
Со следующими ограничениями:
- a + b = 2
- c + d = 8
- a + c = 3
- b + d = 7
Я использовал scipy.optimize.minimize в Python, чтобы попытаться решить его, вот мой код:
import numpy as np
import scipy
from scipy.optimize import minimize as min
def f(x):
return 2*x[0] + 3*x[1] + x[2] + 2*x[3]
cons = ({'type' : 'eq','fun': lambda x: np.array([x[0]+x[1]-2])},
{'type' : 'eq','fun': lambda x: np.array([x[2]+x[3]-8])},
{'type':'eq' , 'fun': lambda x: np.array([x[0]+x[2]-3])},
{'type':'eq' , 'fun': lambda x: np.array([x[1]+x[3]-7])},
{'type':'ineq' , 'fun': lambda x: np.array([x[0]])},
{'type':'ineq' , 'fun': lambda x: np.array([x[1]])},
{'type':'ineq' , 'fun': lambda x: np.array([x[2]])},
{'type':'ineq' , 'fun': lambda x: np.array([x[3]])},
{'type':'ineq' , 'fun':f})
u = min(f,[1.5,0.5,1.5,6.5],constraints=cons,method='Nelder-Mead',options={'Disp':True,'maxiter':2})
print(u)
print(f(u.x))
Он дает мне некоторые значения для a, b, c, d, которые не удовлетворяют равенствам.Я пытался изменить метод оптимизации, но это не помогло.
Любой совет будет очень признателен, спасибо за чтение!