Я пытаюсь решить проблему максимизации энтропии численно с помощью CVXPY. Несмотря на то, что проблема проходит проверку DCP, я продолжаю получать бесконечный результат, а статусы проблем недопустимы и не ограничены_независимыми (в зависимости от значений, которые я выбираю для параметров). Мне удается решить ту же проблему, используя нелинейный ограниченный оптимизатор, такой как Alabama в R. Ниже приведен небольшой пример, который воспроизводит проблему.Максимизация энтропии неограниченно/неосуществимо с использованием CVXPY
import cvxpy as cvx
vals = array([ 750., 770., 790., 810., 830., 850., 870., 890.,
910., 930., 950., 970., 990., 1010., 1030., 1050.,
1070., 1090., 1110., 1130.])
n = size(freq)
z = cvx.Variable(2,n)
a = cvx.Parameter(sign="positive", value=989.)
b = cvx.Parameter(sign="positive", value=.1)
d = cvx.Parameter(sign="positive", value=10.)
obj = cvx.Maximize(cvx.sum_entries(cvx.entr(z)))
cons = []
cons += [ z >= 0., cvx.sum_entries(z) == 1, cvx.sum_entries(z, axis=0) * vals == a ]
for i in range(n):
cons += [ cvx.logistic(b*(vals[i] - a - d)) * z[1,i] == cvx.exp(b*(vals[i] - a - d)) * (z[0,i] + z[1,i]) ]
prob = cvx.Problem(obj, cons)
prob.solve(solver=cvx.SCS)
Я не совсем понимаю, почему CVX испытывает трудное время, чтобы решить эту проблему, чем другие алгоритмы, которые не предназначены для задач выпуклого программирования. Я что-то упустил из-за того, как я написал ограничения?
* EDIT *
Не получив никакого ответа до сих пор, я буду также задать этот вопрос на CVXPY Google group. Я буду обновлять этот поток соответственно.