patternsearch
和优化
住编辑任务这个例子展示了如何使用优化Live Editor任务,它提供了一种可视化的方法,以及命令行。
这个问题涉及到使用线性和非线性约束来最小化非线性函数patternsearch
.目标函数为
在哪里
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;
这个目标函数也包含在文件中的软件中lincontest7.m
.
线性约束为
在哪里
A = [-8 7 3 -4 9 0];b = 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]';
在继续之前,请输入前面的代码部分以将问题变量放入工作区。
patternsearch
在优化住编辑任务单击。创建一个新的活动脚本新的生活的脚本按钮文件上节首页选项卡。
插入一个优化住编辑任务。单击插入然后,在代码部分中,选择任务>优化.
指定的问题类型
在指定的问题类型部分,单击目标>非线性按钮。
单击>线性不等式和线性平等按钮。
选择Solver > patternsearch -模式搜索.
选择问题数据
将问题变量输入选择问题数据任务的一部分。要指定目标函数,请选择目标函数>函数句柄并选择F.
设置不等式约束为一个
和b
.设置相等约束为Aeq
和说真的
.
要设置初始点,首先需要在任务上面创建一个新的部分。要这样做,请单击节休息按钮插入选项卡。在任务上面的新部分中,为初始点输入以下代码。
X0 = [2 1 0 9 1 0]';
运行该部分的位置x0
进入工作区。要运行该节,将光标放在该节中并按下按Ctrl + Enter或者单击行号左侧的蓝色条纹条。
在选择问题数据部分的任务,设定x0
作为起始点。
指定解决方案
因为这个问题是线性约束的,指定一个额外的解算器选项。扩大指定解决方案部分,然后单击添加按钮。设置问卷调查设置>问卷调查方式来GSSPositiveBasis2N
.有关线性约束问题的GSS轮询方法的效率的更多信息,请参见比较Poll选项的效率.
设置显示选项
在显示进度部分,选择最好的价值和筛孔尺寸图功能。
你的设置看起来像这样:
运行求解器并检查结果
要运行求解器,请单击选项按钮⁝在任务窗口的右上方,然后选择运行部分.
绘图显示在单独的图形窗口和任务输出区域中。
要获得解的解点和目标函数值,请查看任务的顶部。
的优化
活动编辑器任务返回名为的变量中的解决方案解决方案
并将目标函数值返回到名为objectiveValue
.在任务下面的部分中输入以下代码,然后运行该部分,或者在MATLAB中输入代码,查看这些值®命令行。
disp(解决方案)
8.5165 -6.1094 4.0989 1.2877 -4.2348 2.1812
disp (objectiveValue)
1.9195 e + 03
包括非线性约束
将下列非线性约束添加到问题中。
要包含这些约束,首先单击>非线性约束按钮。
在选择问题数据节,在约束中,选择非线性>局部函数然后点击新按钮。该函数出现在任务下面的新部分中。编辑生成的代码以包含以下行。
函数测查[c] = double_ineq c (x) = (-1.5 + x (1) * (2) + x (1) - (2);x - x (1) * (2) - 10);测查= [];结束
在非线性限制部分,选择double_ineq.
非线性约束算法导致patternsearch
进行许多函数计算。在指定解决方案节中,单击当前选项右侧的加号以显示其他选项。然后将最大函数求值极限增加到5e4。
再次运行任务以重新运行优化。
查看解决方案和目标函数值。
disp(解决方案)
4.9579 -3.1393 -3.1843 4.7457
disp (objectiveValue)
2.4018 e + 03
目标函数值高于无非线性约束时的目标函数值。前面的解对于非线性约束是不可行的。
由于非线性约束算法的改变,图的迭代次数比以前少了很多patternsearch
算法,包括另一个外部循环,以解决修改的问题。外部循环减少了在每次主要迭代时对问题的修改。在这种情况下,算法只进行四次外部迭代。具体算法请参见非线性约束求解算法.
patternsearch
在命令行要在命令行上解决原始问题(仅限线性约束),请执行以下代码。
X0 = [2 1 0 9 1 0]';选择= optimoptions (“patternsearch”,...“PollMethod”,“GSSPositiveBasis2N”,...“PlotFcn”, {“psplotbestf”,“psplotmeshsize”});磅= [];乌兰巴托= [];nonlcon = [];[x, fval] = patternsearch (F, x0, A、b Aeq,说真的,磅,乌兰巴托,nonlcon,选项)
优化终止:网格尺寸小于选项。网格公差。X = 8.5165 -6.1094 4.0989 1.2877 -4.2348 2.1812 fval = 1.9195e+03
patternsearch
中所示的第一对图优化实时编辑器任务示例。
要包含非线性约束,请将以下代码保存到一个名为double_ineq.m
在MATLAB路径上。
函数测查[c] = double_ineq c (x) = (-1.5 + x (1) * (2) + x (1) - (2);x - x (1) * (2) - 10);测查= [];结束
为了允许求解器在非线性约束条件下运行完成,请增加允许的函数求值次数。
选项。MaxFunctionEvaluations = 5 e4;
解决包含非线性约束的问题。
nonlcon = @double_ineq;[x, fval] = patternsearch (F, x0, A、b Aeq,说真的,磅,乌兰巴托,nonlcon,选项)
优化终止:网格尺寸小于选项。MeshTolerance和constraint violation小于options. constraintolerance。X = 7.2083 -1.3873 4.9579 -3.1393 -3.1843 4.7457 fval = 2.4018e+03
patternsearch
也生成第二对图,如图所示优化实时编辑器任务示例。
这两个优化Live Editor任务和命令行允许您制定和解决问题,它们给出相同的结果。命令行更加精简,但在选择求解器、设置问题和选择绘图函数等选项方面提供的帮助较少。你也可以开始使用一个问题优化,然后生成命令行使用的代码,如求解一个约束非线性问题,基于求解器.