Я пытаюсь максимизировать следующую функцию, используя scipy.optimize от Python. Однако после многих попыток он не работает. Функция и мой код вставляются ниже. Спасибо за помощь!Оптимизация с помощью Python (scipy.optimize)
Проблема
Maximize [sum (x_i/y_i)**gamma]**(1/gamma)
subject to the constraint sum x_i = 1; x_i is in the interval (0,1).
x
является вектором выбора переменных; y
- вектор параметров; gamma
- параметр. Сумма x
s должна быть равна сумме. И каждый x
должен находиться в интервале (0,1).
Код
def objective_function(x, y):
sum_contributions = 0
gamma = 0.2
for count in xrange(len(x)):
sum_contributions += (x[count]/y[count]) ** gamma
value = math.pow(sum_contributions, 1/gamma)
return -value
cons = ({'type': 'eq', 'fun': lambda x: np.array([sum(x) - 1])})
y = [0.5, 0.3, 0.2]
initial_x = [0.2, 0.3, 0.5]
opt = minimize(objective_function, initial_x, args=(y,), method='SLSQP',
constraints=cons,bounds=[(0, 1)] * len(x))
Это может быть полезно, если бы вы были более конкретно о том, что «много попыток» повлекло за собой, чтобы осветить цели вашего вопроса. – Erik
Ваш код работает для меня. В чем проблема? Я получаю оптимальный 'x_opt: array ([0.29465573, 0.33480638, 0.37053789])'. Все, что мне нужно было изменить, было 'bounds' должно иметь' len (initial_x) 'или' len (y) 'в нем, так как' x' не определен в вашем коде. – askewchan
@askewchan, может быть проблемой с числовой стабильностью. На моем Mac я получаю 'nan''nan''nan',' 'Превышен предел итерации'' –