Эффективная квадратичная оптимизация с простым линейным ограничением MatLab с использованием CVX

(Извините за форматирование, я буду стараться изо всех сил) Я хочу решить:

x = argmin_x (Ax - p)'(Ax - p)
s.t. x >= b

где A это NxH логическая матрица (примерно половина нулей, половина), b это Hx1 постоянный вектор, где каждая запись одинакова (например, b = (0.1,0.1,0.1,...), p постоянная Nx1 вектор вероятностей, поэтому все записи находятся в [0,1], оптимальный x это также дистрибутив, поэтому все его записи должны быть в [0,1], Обратите внимание, что на практике H очень большой, например 2 million а также N относительно мала, например 150,

Я в настоящее время использую CVX, чтобы решить эту проблему. Явно мой код:

b= 0.1.*ones(H,1)/H;
cvx_begin quiet
    variable x(H)
    minimize( norm((A*x-p),2)) 
    subject to
       x >= b;
cvx_end

Это дает правильный результат. Тем не менее, это довольно медленно, когда H большой. Учитывая структуру моей программы оптимизации (логический A, постоянное ограничение, проблема, которая имеет аналитическое решение, если не было ограничений, и т. Д.), Есть ли лучший способ приблизиться к этому? Здесь рекомендуется CVX?

Спасибо за помощь.

0 ответов

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