У меня есть проблема многоцелевой оптимизации в условиях ограничения (максимизация), фактически я преобразовал ее в монообъективную задачу с помощью метода взвешивания и добавил 2 переменные x1, x2 (для оптимизации) с ограничением 0 <x1 + x2 <1
поэтому их сумма должна быть строго меньше 1, чтобы вызвать 3-ю целевую функцию, как описано в приведенном ниже коде.
Когда я выполняю, сумма всегда больше 1.
for i in range(len(f1)):
def f(x):
x1= x[0]
x2= x[1]
return -(x1*f1[i]+ x2*f2[i]+ (1-x1-x2)*f3[i])
def constraint(x):
return x[0]+x[1]-1
b= (0.2, 0.8)
bnds= (b, b)
x0=[0.5,0.4]
cons= ({'type': 'ineq','fun':constraint})
res = minimize(f,x0, method= 'SLSQP', bounds=bnds, constraints=cons)
print('Vect_ponderation : ', res.x)
Выход:
Vect_ponderation : [0.8 0.8]
Vect_ponderation : [0.8 0.8]
Vect_ponderation : [0.8 0.8]
Vect_ponderation : [0.8 0.8]