Ограничить параметры в минимизации

Для моего класса теории информации я должен максимизировать следующую функцию:

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)

Можно ли добавить все ограничения, описанные выше? Как я могу применить их к моей функции минимизации?

0 ответов

Другие вопросы по тегам