fminconГенерация кода является преобразованием кода MATLAB® к коду С с помощью MATLAB Coder™. Генерация кода требует лицензии MATLAB Coder.
Как правило, вы используете генерацию кода, чтобы развернуть код по оборудованию, которое не запускает MATLAB. Например, можно развернуть код по роботу, с помощью fmincon для оптимизации перемещения или планирования.
Для примера смотрите Генерацию кода для Основ Оптимизации. Для квадратичного программирования смотрите Генерацию кода для quadprog.
fmincon генерация кода поддержек, использующая любого codegen функционируйте или приложение MATLAB Coder. У вас должна быть лицензия MATLAB Coder, чтобы сгенерировать код.
Целевой компьютер должен поддержать стандартные расчеты с плавающей точкой с двойной точностью. Вы не можете сгенерировать код для расчетов или фиксированной точки с одинарной точностью.
Всем кодом для генерации должен быть код MATLAB. В частности, вы не можете использовать пользовательскую функцию черного ящика в качестве целевой функции для fmincon. Можно использовать coder.ceval выполнять пользовательскую функцию, закодированную в C или C++. Однако пользовательская функция должна быть вызвана в функции MATLAB.
fmincon не поддерживает problem аргумент для генерации кода.
[x,fval] = fmincon(problem) % Not supportedНеобходимо задать целевую функцию и любую нелинейную ограничительную функцию при помощи указателей на функцию, не строк или имен персонажей.
x = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon) % Supported % Not supported: fmincon('fun',...) or fmincon("fun",...)
Весь fmincon введите матрицы, такие как A, Aeq, lb, и ub должно быть полным, не разреженным. Можно преобразовать разреженные матрицы в полный при помощи full функция.
lb и ub аргументы должны иметь любого то же количество записей как x0 аргументом или должен быть пустой [].
Для усовершенствованной оптимизации кода, включающей встраиваемые процессоры, вам также нужна лицензия Embedded Coder®.
Необходимо включать опции для fmincon и задайте их использующий optimoptions. Опции должны включать Algorithm опция, набор к 'sqp' или 'sqp-legacy'.
options = optimoptions('fmincon','Algorithm','sqp'); [x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
Генерация кода поддерживает эти опции:
Algorithm — Должен быть 'sqp' или 'sqp-legacy'
ConstraintTolerance
FiniteDifferenceStepSize
FiniteDifferenceType
MaxFunctionEvaluations
MaxIterations
ObjectiveLimit
OptimalityTolerance
ScaleProblem
SpecifyConstraintGradient
SpecifyObjectiveGradient
StepTolerance
TypicalX
Сгенерированный код ограничил проверку ошибок на опции. Таким образом, рекомендуемый способ обновить опцию состоит в том, чтобы использовать optimoptions, не запись через точку.
opts = optimoptions('fmincon','Algorithm','sqp'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
Не загружайте опции из файла. Выполнение так может заставить генерацию кода перестать работать. Вместо этого создайте опции в своем коде.
Обычно, если вы задаете опцию, которая не поддержана, опция тихо проигнорирована во время генерации кода. Однако, если вы задаете функцию построения графика или выходную функцию при помощи записи через точку, генерация кода может ошибка. Для надежности задайте только поддерживаемые опции.
Поскольку выходные функции и функции построения графика не поддержаны, fmincon не возвращается выход отмечают –1.
По умолчанию сгенерированный код для использования вне среды MATLAB пользуется библиотеками линейной алгебры, которые не многопоточны. Поэтому этот код может запуститься значительно медленнее, чем код в среде MATLAB.
Если ваш целевой компьютер имеет несколько ядер, то можно достигнуть лучшей производительности при помощи пользовательских многопоточных библиотек LAPACK и BLAS. Чтобы включить эти библиотеки в ваш сгенерированный код, смотрите, Ускоряют Линейную алгебру в Сгенерированном Автономном Коде при помощи Вызовов LAPACK (MATLAB Coder).
codegen | fmincon | optimoptions