Альтернативы приложения оптимизации

Оптимизируйте без Использования приложения

Несмотря на то, что приложение Оптимизации предоставляет удобные способы установить опции и проблемы выполнения, оно будет удалено в будущем релизе. Эта тема описывает другие способы выполнить задачи оптимизации, не используя приложение.

Установите опции Используя live скрипты

Начинаясь с R2018a, live скрипты показывают предложения для имен optimoptions и значений.

  1. На вкладке Home, в разделе File, нажимают New Live Script, чтобы создать live скрипт.

  2. В Live Editor, опциях набора путем ввода options = optimoptions(. MATLAB® показывает список решателей.

  3. Выберите решатель, затем введите запятую. MATLAB отображает список пар "имя-значение" для решателя.

    Выберите пару "имя-значение" одним из этих способов:

    • Кликните по паре "имя-значение".

    • Используйте клавиши со стрелками, чтобы подсветить пару "имя-значение", и затем нажать Tab.

    • Введите первые буквы от пары "имя-значение", и затем нажмите Tab.

  4. Введите соответствующее значение для выбранного имени. Если значение из списка выбора, можно выбрать его тот же способ, которым вы выбрали имя.

  5. Продолжите добавлять пары "имя-значение", пока опции не будут завершены.

  6. Обязательно передайте опции вашему решателю.

    [x,fval,exitflag,output] = ...
        fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nlcon,options)

Совет

Установка опций: командная строка или стандартные скрипты

Начинаясь с R2018a, командная строка MATLAB и стандартный Редактор показывают предложения для имен optimoptions и значений.

  1. Установите опции путем ввода options = optimoptions(' и нажатия Tab. MATLAB показывает список решателей.

  2. Выберите решатель одним из этих способов:

    • Дважды кликните решатель.

    • Используйте клавиши со стрелками, чтобы подсветить решатель, и затем нажать Tab.

    • Введите первые буквы от решателя, и затем нажмите Tab.

  3. Введите ',' и затем нажмите Tab. MATLAB отображает список пар "имя-значение" для решателя.

    Выберите пару "имя-значение" с помощью одного из путей, описанных на шаге 2.

  4. Введите соответствующее значение для выбранного имени. Если значение из списка выбора, можно выбрать его тот же способ, которым вы выбрали имя.

  5. Продолжите добавлять пары "имя-значение", пока опции не будут завершены.

  6. Обязательно передайте опции вашему решателю.

    [x,fval,exitflag,output] = ...
        fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nlcon,options)

Совет

Выберите Plot Functions

Чтобы контролировать вашу оптимизацию, в то время как это запускается, используйте функцию построения графика. Решатели имеют набор встроенных функций построения графика. Используйте optimoptions, чтобы установить пару "имя-значение" 'PlotFcn' на встроенную функцию построения графика, массив ячеек встроенных функций построения графика, или указатель на функцию или cell-массив указателей на функцию в функции построения графика.

Выберите функции построения графика с помощью live скриптов:

Чтобы выбрать функции построения графика с помощью Редактора или командной строки, введите options = optimoptions('solvername','PlotFcn',{' и затем нажмите Tab:

Чтобы выбрать пользовательскую функцию построения графика, передайте указатель на функцию, такой как @myplotfun. Для получения дополнительной информации при записи пользовательской функции построения графика, смотрите Синтаксис Функции построения графика.

linprog, lsqlin, quadprog и lsqnonneg не поддерживают функции построения графика, потому что эти решатели, обычно запущенные быстро. Чтобы контролировать их прогресс, можно использовать итеративное отображение для linprog, алгоритма 'interior-point' lsqlin и алгоритма 'interior-point-convex' quadprog. Установите опцию 'Display' на 'iter'.

fminbnd, fminsearch и решатели fzero не используют опции, созданные optimoptions, только optimset. Чтобы видеть который функции построения графика эти решатели использование, консультируйтесь с их страницами с описанием:

Передайте аргументы решателя

Решатели используют позиционные аргументы функции. Например, синтаксис для аргументов fmincon

fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

Если вы хотите включать только fun, x0, lb и аргументы options, то соответствующий синтаксис

fmincon(fun,x0,[],[],[],[],lb,[],[],options)

Иногда неопытное желание, вместо этого, пишет

fmincon(fun,x0,lb,options) % This is incorrect!

Этот вызов выдает ошибку. В этой неправильной команде fmincon интерпретирует аргумент lb как представление матрицы A и аргумента options как представление вектора b. Третий аргумент всегда представляет матрицу A, и четвертый аргумент всегда представляет вектор b.

Может быть трудно отслеживать позиционные параметры, когда вы вводите команду. Следующее является предложениями для получения правильного синтаксиса.

  • Используйте live скрипты. При вводе команду, вы видите подсказчик функций, который ведет вас, чтобы ввести правильный аргумент в каждое положение. Введите [] для неиспользованных аргументов.

  • Используйте редактора MATLAB или командную строку. При вводе команды, вы видите списки правильного синтаксиса, которые ведут вас, чтобы ввести правильный аргумент в каждое положение. Введите [] для неиспользованных аргументов.

  • Создайте структуру problem. Таким образом, можно передать меньше аргументов и передать параметры, передаваемые по имени вместо позиционных параметров. Для fmincon структура problem требует, по крайней мере, objective, x0, solver и полей options. Так, чтобы дать только fun, x0, lb и аргументы options, создают структуру problem можно следующим образом:

    % These commands assume that fun, x0, lb, and opts exist
    prob.objective = fun;
    prob.x0 = x0;
    prob.lb = lb;
    prob.options = opts;
    prob.solver = 'fmincon';

    Можно также создать структуру problem с помощью одной команды struct.

    % This command assumes that fun, x0, lb, and opts exist
    prob = struct('objective',fun,'x0',x0,'lb',lb,...
        'options',opts,'solver','fmincon')
  • Если у вас есть Global Optimization Toolbox, можно создать структуру задачи для fmincon, fminunc, lsqcurvefit и lsqnonlin при помощи createOptimProblem.

Похожие темы