У меня есть целочисленная задача оптимизации программирования, которую я решаю в Matlab, используя yalmip и xpress в качестве решателя. Для решателя я хочу установить два критерия остановки - ограничение по времени и оптимальный предел пропуска.
Я пытался использовать функции xpress MAXTIME
и MIPRELSTOP
, код Matlab компилирует и запускает оптимизацию, но критерии остановки не передаются в решатель.
Соответствующая часть кода выглядит следующим образом:
Cons = [sum(sum((dVar_mat.*(x_mat.*y_vec))')) >= a]; %constraint
obj = sum(sum(dVar_mat.*z_mat)); %objective
ops = sdpsettings('solver', 'xpress', 'verbose', 2); %solver options
ops.xpress.MAXTIME = 10000; %set timelimit
ops.xpress.MIPRELSTOP = 0.05; %set relative gap as stop limit
solIP = optimize(Cons, obj, ops); % Solve
Когда я запускаю оптимизацию, решение найдено, но значительно позже, чем я хотел бы остановить. В отчете говорится:
STOPPING - MIPRELSTOP target reached (MIPRELSTOP=0.0001)
означает, что цель MIPRELSTOP
по-прежнему установлена по умолчанию, то есть 0.0001
. Аналогичным образом, оптимизация выполняется в течение определенного периода времени, не учитывая этот критерий остановки.
Как правильно установить критерии остановки в matlab / yalmip / xpress?