Есть ли альтернативный метод или функция для «issorted» в Matlab для панели инструментов оптимизации - PullRequest
0 голосов
/ 20 февраля 2019

имеют переменную optimvar maniuplatedVariable, которую необходимо ограничить, чтобы она находилась в порядке убывания.

sorted = issorted(manipulatedVariable,'descend') == 1;
prob.Constraints.sorted = sorted;
"Error using issorted. Undefined function 'issorted' for input arguments of type 'optim.problemdef.OptimizationVariable'."

Есть ли альтернативная функция к "issorted" для реализации этого ограничения?Спасибо

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я реализовал простое, но несовершенное решение, предложенное мне на форуме Matlab.

prob.Constraints.sorted = ( A(2:end)<= A(1:end-1) );

Проблема меньше или равна компаратору.В крайнем случае (что проблема попадает) Конечный массив все равны друг другу (что удовлетворяет ограничению).Это нормально, но не идеально для моей проблемы.

0 голосов
/ 25 февраля 2019

Добро пожаловать в SX!У меня была похожая проблема, но с переменными в порядке по возрастанию .Я использовал ограничение линейного неравенства, которое можно легко адаптировать, учитывая, что используемый оптимизатор принимает ограничения линейного неравенства.

lengthOfVar = length(initialValues);
% Inequality Constraint: Second slot after first slot etc.
A = [diag(ones(lengthOfVar,1), 0) - diag(ones(lengthOfVar-1,1), 1), zeros(lengthOfVar)];
A(lengthOfVar, lengthOfVar) = -1;
b = -ones(lengthOfVar, 1);

Затем передайте A и b оптимизатору, например так:

x = fmincon(objFun, x0, A, b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...