要使用软件附带的绘图函数以外的绘图函数,可以编写自己的自定义绘图函数,该函数在模式搜索的每次迭代中调用以创建绘图。这个例子展示了如何创建一个plot函数,显示从上一次迭代到当前迭代的最佳目标函数值的对数变化。中提供了更多绘图功能详细信息图解选项.
要为本例创建plot函数,请将以下代码复制并粘贴到MATLAB中的新函数文件中®编辑:
功能停止= psplotchange(optimvalues,标志)%PSPLOTCHANGE绘制最佳目标函数的变化%上次迭代的值。%上一次迭代中的最佳目标函数值持久的last_best stop=错误;如果(strcmp(标志,'在里面'))组(GCA,'Yscale','日志');%设置绘图持有上;X标签('迭代');伊拉贝尔('记录值更改');职务([“变化的最佳功能价值”]);结束%当前迭代中的最佳目标函数值最好=分钟(optimvalues.fval);%把最后一个最好的设置为最好的如果optimvalues.iteration==0最后一次最佳=最佳;其他的在目标函数值的%变化变化= last_best - 最好;图(optimvalues.iteration,变更,'.r');结束
然后将文件另存为psplotchange.m
在MATLAB路径上的文件夹中。
问题是一样的线性约束问题.要设置问题:
在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 9;1-1 2-2 3-3];beq=[84 62 65 1];
进入最佳工具
打开优化应用程序。
选择patternsearch
求解器。
设置问题以匹配下图。
由于这是一个线性约束问题,请设置投票方法到GSS正基2N
.
要使用自定义绘图功能,选择自定义函数在里面绘图函数窗格中,输入@psplotchange公司
在右边的田野里。要将自定义图与最佳功能值图进行比较,还可以选择最佳功能值.
现在,运行示例时,pattern search将显示下图所示的图。
注意,因为是的-下自定义绘图中的轴是对数的,绘图仅显示大于0的更改。
要使用命令行功能运行这个问题:
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 9;1-1 2-2 3-3];beq=[84 62 65 1];options=optimoptions('模式搜索',...'绘图Fcn',{@psplotbestf,@psplotchange},...'PollMethod','GSSPositiveBasis2N');[x,fval]=模式搜索(@lincontent7,x0,...Aineq,bineq,AEQ,BEQ,[],[],[],选项);
plot函数使用以下结构中包含的信息,优化应用程序将这些信息作为输入参数传递给函数:
最优值
-解算器的当前状态,结构
旗帜
-算法的现状,一个字符向量
自定义绘图函数最重要的语句,psplotchange.m
,总结如下表所示。
自定义绘图函数语句
声明 | 说明 |
---|---|
持久的最后一秒 |
创建持久变量 |
集(GCA, 'Yscale', '日志') |
在算法开始之前设置绘图。 |
最好=分钟(optimvalues.fval) |
套 |
变化= last_best - 最好 |
设置变量 |
绘图(optimvalues.iteration,change,'.r') |
地块变量 |