MATLAB | 优化工具箱(optimization toolbox)改版后的live editor工具咋用

优化工具箱(optimization toolbox)改版后的live editor工具咋用?本来是不咋想讲这玩意的,但奈何问的人还不少,这里简单讲一下咋用哈。

很多人下了比较新版本MATLAB就顺手像往常一样点开了优化工具箱,但是熟悉的优化APP界面却并没蹦出来,反而出来了这样一个警告,嗯?实时编辑器任务是啥玩意??

优化live editor创建

首先要创建实时脚本:

之后点击 实时编辑器->任务->优化工具

之后会出现个这玩意:

我们先讲基于问题,点击左侧基于问题方法:


基于问题简单优化(求最大值)

假设要求最值的函数为:

5.*sin(x)+6.*cos(y).^2

有约束条件:

x^2+y^2<=4

优化起点为:

x=1;y=0;

首先既然有x,y俩变量,我们就需要在最前面定义俩变量,可以点击最右侧+号新增变量:

点击添加可以增添约束:

需要注意的是默认的目标和约束那灰色的字只是填写格式提示,并没法实际使用。

我们将目标设置为最大值,修改目标与约束:

都设置好后点击下方<求解问题>,即可开始求解:

求解结果会显示在右侧:

同时工作区也会有求解结果:

可以通过solution.(变量名)进行获取变量数值:

solution.x

% ans =
%     1.5708

点击下箭头可以获取由整个过程自动生成的代码:

可以看到代码和注释写的还是不错的:

% 创建优化变量
x3 = optimvar("x");
y3 = optimvar("y");

% 设置求解器的初始起点
initialPoint.x = ones(size(x3));
initialPoint.y = zeros(size(y3));

% 创建问题
problem = optimproblem("ObjectiveSense","Maximize");

% 定义问题目标
problem.Objective = 5.*sin(x3)+6.*cos(y3).^2;

% 定义问题约束
problem.Constraints = x3^2+y3^2 <= 4;

% 显示问题信息
show(problem);

% 求解问题
[solution,objectiveValue,reasonSolverStopped] = solve(problem,initialPoint);

% 显示结果
solution
reasonSolverStopped
objectiveValue

% 清除变量
clearvars x3 y3 initialPoint reasonSolverStopped objectiveValue

含特殊函数优化

目标和约束都可以选择局部函数或者函数文件,选择函数文件的话就直接选已经编辑好的m文件,选择局部函数可以在实施编辑器末尾自定义个局部函数:


基于求解器

在一开始选择方法时选择基于求解器会变成这样:

这个选择用起来就麻烦很多,直接用官方给的例子讲一下叭,首先随便在一个地方运行代码定义初始值及参数值:

x0 = [2;1];
a = 100;

由于目标函数及约束这次只能函数文件,局部函数或者函数句柄,这里为了方便就在实时编辑器文末创建局部函数:

之后就是各种设置:

可以选中求解器点击<运行节>运行,或者点击求解器右上角三个点后点击<运行节>运行:

自动生成的代码:

% 将固定参数传递给 objfun
objfun = @(x)objectiveFcn(x,a);

% 设置非默认求解器选项
options = optimoptions("fmincon","PlotFcn","optimplotfvalconstr");

% 求解
[solution,objectiveValue] = fmincon(objfun,x0,[],[],[],[],[],[],...
    @constraintFcn,options);

% 清除变量
clearvars objfun options

运行过程绘图:


求解结果:

solution
% solution =
%    1.1413
%    1.3029

objectiveValue
% objectiveValue =
%    0.0200

[ccons,ceqcons] = constraintFcn(solution)
% ccons =
%   -2.0000   -0.0000
% ceqcons =
%     []

对比起来还是基于问题的方法用起来更方便点。


官方示例打开

警告界面点击左侧或者右侧的方法就可以跳出官方示例:

大概长这样:

猜你喜欢

转载自blog.csdn.net/slandarer/article/details/130164106