优化工具箱(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.3029objectiveValue
% objectiveValue =
% 0.0200[ccons,ceqcons] = constraintFcn(solution)
% ccons =
% -2.0000 -0.0000
% ceqcons =
% []
对比起来还是基于问题的方法用起来更方便点。
官方示例打开
警告界面点击左侧或者右侧的方法就可以跳出官方示例:
大概长这样: