自定义绘图函数
关于自定义绘图函数
要使用 patternsearch
绘图函数而不是软件附带的那些绘图函数,您可以编写自己的自定义绘图函数,以在模式搜索的每次迭代中被调用来创建绘图。此示例显示如何创建一个绘图函数,显示从上一次迭代到当前迭代的最佳目标函数值的对数变化。更多绘图函数详细信息请参阅 绘图选项。
创建自定义绘图函数
要为此示例创建绘图函数,请将以下代码复制并粘贴到 MATLAB® 编辑器中的新函数文件中:
function stop = psplotchange(optimvalues, flag) % PSPLOTCHANGE Plots the change in the best objective function % value from the previous iteration. % Best objective function value in the previous iteration persistent last_best stop = false; if(strcmp(flag,'init')) set(gca,'Yscale','log'); %Set up the plot hold on; xlabel('Iteration'); ylabel('Log Change in Values'); title(['Change in Best Function Value']); end % Best objective function value in the current iteration best = min(optimvalues.fval); % Set last_best to best if optimvalues.iteration == 0 last_best = best; else %Change in objective function value change = last_best - best; plot(optimvalues.iteration, change, '.r'); end
将文件作为 psplotchange.m
保存到 MATLAB 路径上的某个文件夹中。代码解释在绘图函数的工作原理中。
设置问题
该问题与 使用 patternsearch 和 Optimize 实时编辑器任务进行约束最小化 相同。要设置问题:
在 MATLAB 命令行输入以下内容:
x0 = [2 1 0 9 1 0]'; Aineq = [-8 7 3 -4 9 0]; bineq = 7; Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3]; beq = [84 62 65 1]; H = [36 17 19 12 8 15; 17 33 18 11 7 14; 19 18 43 13 8 16; 12 11 13 18 6 11; 8 7 8 6 9 8; 15 14 16 11 8 29]; f = [ 20 15 21 18 29 24 ]'; F = @(x)0.5*x'*H*x + f'*x;
因为这是一个线性约束问题,所以将
PollMethod
选项设置为'GSSPositiveBasis2N'
。在选项中同时包含@psplotbestf
内置绘图函数和自定义绘图函数@psplotchange
。options = optimoptions('patternsearch',... 'PlotFcn',{@psplotbestf,@psplotchange},... 'PollMethod','GSSPositiveBasis2N');
使用自定义绘图函数运行优化
通过从 x0
开始调用 patternsearch
来运行示例。
[x,fval] = patternsearch(F,x0,...
Aineq,bineq,Aeq,beq,[],[],[],options);
由于下方自定义图中 y 轴的尺度是对数的,因此该图仅显示大于 0 的变化。
绘图函数的工作原理
绘图函数使用以下结构体中包含的信息。
optimvalues
-求解器的当前状态,一个结构体flag
- 算法的当前状态,一个字符向量
自定义绘图函数 psplotchange.m
的最重要的语句总结在下表中。
自定义绘图函数语句
语句 | 描述 |
---|---|
persistent last_best | 创建持久变量 |
set(gca,'Yscale','log') | 在算法开始之前设置情节。 |
best = min(optimvalues.fval) | 将 |
change = last_best - best | 将变量 |
plot(optimvalues.iteration, change, '.r') | 针对 |