Как установить ограничения SDP?
Z - матричная переменная, которая получается из кода CVX SDP с использованием Matlab; Как я могу включить ограничение, что значения элементов матрицы Z должны быть либо ноль или один?
Есть опция "полоса", но она не работает для матриц.
1 ответ
Вы не можете, поскольку cvx не поддерживает целочисленное полуопределенное программирование (особый случай, когда Z равен 2x2, был бы возможен, так как это представимо в SOCP, и, таким образом, разрешимо через сопряженный смешанный целочисленный SOCP-решатель Mosek).
Если вы хотите остаться в MATLAB, вы можете легко преобразовать свой код в YALMIP (бесстыдный плагин, разработанный мной), так как там поддерживаются смешанные целочисленные SDP (Z=binvar(n), и вы в основном сделали). Обратите внимание, что общедоступных решателей MISDP нет, поэтому YALMIP будет самостоятельно выполнять весь механизм ветвления и привязки, полагаясь на внешние решатели SDP для решения проблем ослабления.
Вот пример, который решает проблему полуопределенного программирования со смешанными целыми числами.
http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Examples.ExperimentDesign