约束极小化使用patternsearch
和优化
住编辑任务
这个例子展示了如何使用的解决约束的最小化问题优化住编辑任务,提供了一个可视化的方法和命令行。
问题描述
问题涉及到使用线性和非线性约束最小化一个非线性函数时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 6 7 8 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
。
线性约束
在哪里
一个= [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];说真的= (84 62 65 1)';
进入前面的代码部分问题变量进入工作区之前。
解决使用patternsearch
在优化住编辑任务
创建一个新的脚本通过单击生活新的生活的脚本按钮文件上节家选项卡。
插入一个优化住编辑任务。单击插入选项卡,然后在代码部分中,选择任务>优化。
指定的问题类型
在指定的问题类型部分的任务,点击目标>非线性按钮。
单击>线性不等式约束和线性平等按钮。
选择解算器> patternsearch -模式搜索。
选择问题数据
输入变量的问题选择问题数据部分的任务。指定目标函数,选择目标函数>函数处理并选择F。
将不等式约束
一个
和b
。将等式约束Aeq
和说真的
。设置起始点,您首先需要创建一个新的节以上的任务。为此,单击节休息按钮插入选项卡。在上面的新部分任务,输入以下代码初始点。
x0 = (2 1 0 9 1 0) ';
运行部分
x0
进入工作区。运行部分,将光标放在部分和新闻按Ctrl + Enter或单击蓝色条纹栏左边的行号。在选择问题数据部分的任务,集
x0
作为初始点。指定解决方案
因为这个问题是线性约束,指定一个额外的解算器的选择。扩大指定解决方案部分的任务,然后单击添加按钮。设置轮询设置>轮询方法来
GSSPositiveBasis2N
。更多信息的效率GSS调查方法线性约束问题,明白了比较效率的调查选项。设置显示选项
在显示进度部分的任务,选择最好的价值和筛孔尺寸图功能。
你的设置是这样的:
解算器运行并检查结果
解算器,单击选项按钮⁝在任务的右上角的窗口,并选择运行部分。
故事情节出现在一个单独的图窗口并在任务输出区域。
获得解决方案和目标函数值指向解决方案,看任务的顶部。
的
优化
住编辑任务返回的解决方案在一个变量命名解决方案
并返回目标函数值在一个变量命名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
许多功能评估。在指定解决方案部分,单击右侧的加号当前选项来显示其他选项。然后增加最大函数评估限制5 e4。再次运行这个任务重新运行优化。
查看解决方案和目标函数值。
disp(解决方案)
7.2083 -1.3873 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,选项)
优化终止:网格大小小于options.MeshTolerance。x = 8.5165 -6.1094 4.0989 1.2877 -4.2348 2.1812 fval = 1.9195 e + 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和约束违反小于options.ConstraintTolerance。x = 7.2083 -1.3873 4.9579 -3.1393 -3.1843 4.7457 fval = 2.4018 e + 03
patternsearch
还生成第二条情节所示优化住编辑任务的例子。
这两个优化生活任务和命令行编辑器允许您制定和解决问题,他们给相同的结果。命令行更精简,但提供了更少的帮助选择解算器,设置问题,选择选项,例如图功能。你也可以开始使用问题优化命令行中使用,然后生成代码,如解决一个约束非线性问题,Solver-Based。