Ошибка CPLEX 5002:% s не выпуклый - проблема наименьших квадратов с двоичной формулировкой - PullRequest
0 голосов
/ 30 марта 2020

первый пост на SO.

Я работаю над квадратичной c проблемой оптимизации.
Я получаю следующую ошибку:

Aeq = beq = sostype =sosind = soswt = [] % for my specific problem

Другие параметры выглядят как правильно определяемые.

Error using cplexmiqp
CPLEX Error  5002: %s is not convex.
Error in MIP_CPLEX_OptL2_CstrL0 (line 78)
        [x,z,exitflag,output] = cplexmiqp(Hprim'*Hprim,(-y'*Hprim)',Aineq,bineq,Aeq,beq,sostype,sosind,soswt,lb,ub,ctype,z0,solveur);

Я уже проверил свойства матрицы (это полу-PSD).

Ошибка появляется только для измерения, превышающего 600 переменных (непрерывное и двоичное -> MIQP). Ниже этого значения модель работает правильно.

У кого-нибудь есть идеи? Огромное спасибо :)

1 Ответ

1 голос
/ 01 апреля 2020

Как говорится в сообщении об ошибке, проблема в том, что ваша целевая функция не выпуклая. По умолчанию CPLEX обрабатывает только выпуклые целевые функции в программах quadrati c. Однако вы можете переключить некоторые параметры, чтобы CPLEX принимал (и решал для) невыпуклые целевые функции.

Подробности можно найти в руководстве пользователя в разделе CPLEX> Руководство пользователя для CPLEX> Непрерывная оптимизация > Решение проблем с квадратичной c целью (QP) .

Для решения моделей с невыпуклой квадратичной целью c необходимо установить параметр Cplex.Param .optimalitytarget до 3 (найти глобальный оптимум).

...