Ограничить параметры в минимизации
Для моего класса теории информации я должен максимизировать следующую функцию:
def MutualInfo_Channel(P):
sum_i = 0
for i in range(len(P)):
sum_j = 0
for j in range(len(Q[i])):
sum_t = 0
for t in range(len(P)):
sum_t += P[t]+Q[t][j]
sum_j += Q[i][j]*math.log(Q[i][j]/sum_t, 2)
sum_i += P[i]*sum_j
return sum_i
где P = [0.4, 0.5, 0.1]
, Я искал методы для этого, и все указывает на optimize.minimize
функция включена в SciPy. Я уже закодировал метод, но мне нужно применить следующие ограничения:
- Все значения в P должны быть между 0 и 1.
- Сумма всех значений в P должна быть равна 1.
- P может иметь n значений.
Мой текущий код выглядит так:
P_In = [0.4, 0.5, 0.1]
Q = [[0.94, 0.04, 0.02], [0.01, 0.93, 0.06], [0.03, 0.04, 0.93]]
Cc = minimize(MutualInfo_Channel, P_In)
if Cc.success:
optimal = Cc.x
print(optimal)
else:
raise ValueError(Cc.message)
Можно ли добавить все ограничения, описанные выше? Как я могу применить их к моей функции минимизации?