主要内容

约束极小化使用patternsearch优化住编辑任务

这个例子展示了如何使用的解决约束的最小化问题优化住编辑任务,提供了一个可视化的方法和命令行。

问题描述

问题涉及到使用线性和非线性约束最小化一个非线性函数时patternsearch。目标函数是

F ( x ) = 1 2 x T H x + f T x ,

在哪里

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

线性约束

一个 x b , 一个 e x = b e ,

在哪里

一个= [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优化住编辑任务

  1. 创建一个新的脚本通过单击生活新的生活的脚本按钮文件上节选项卡。

    新的生活脚本按钮

  2. 插入一个优化住编辑任务。单击插入选项卡,然后在代码部分中,选择任务>优化

    插入优化生活编辑任务。

    优化现场编辑任务初始屏幕

  3. 指定的问题类型

    指定的问题类型部分的任务,点击目标>非线性按钮。

  4. 单击>线性不等式约束线性平等按钮。

  5. 选择解算器> patternsearch -模式搜索

  6. 选择问题数据

    输入变量的问题选择问题数据部分的任务。指定目标函数,选择目标函数>函数处理并选择F

  7. 将不等式约束一个b。将等式约束Aeq说真的

  8. 设置起始点,您首先需要创建一个新的节以上的任务。为此,单击节休息按钮插入选项卡。在上面的新部分任务,输入以下代码初始点。

    x0 = (2 1 0 9 1 0) ';
  9. 运行部分x0进入工作区。运行部分,将光标放在部分和新闻按Ctrl + Enter或单击蓝色条纹栏左边的行号。

  10. 选择问题数据部分的任务,集x0作为初始点。

  11. 指定解决方案

    因为这个问题是线性约束,指定一个额外的解算器的选择。扩大指定解决方案部分的任务,然后单击添加按钮。设置轮询设置>轮询方法GSSPositiveBasis2N。更多信息的效率GSS调查方法线性约束问题,明白了比较效率的调查选项

  12. 设置显示选项

    显示进度部分的任务,选择最好的价值筛孔尺寸图功能。

    你的设置是这样的:

    patternsearch解算器,处理函数F,初始点x0,线性约束,b, Aeq,说真的,投票算法GSSPositiveBasis2N,情节最佳值和网格大小

  13. 解算器运行并检查结果

    解算器,单击选项按钮在任务的右上角的窗口,并选择运行部分

    运行解决者;键盘是按Ctrl + Enter。

    故事情节出现在一个单独的图窗口并在任务输出区域。

    情节显示迭代的目标函数值下降1919和下面的网格大小最终减少1 e-6。

  14. 获得解决方案和目标函数值指向解决方案,看任务的顶部。

    优化返回“解决方案”和“objectiveValue”变量

    优化住编辑任务返回的解决方案在一个变量命名解决方案并返回目标函数值在一个变量命名objectiveValue。查看这些值通过输入下面的代码在下面部分的任务,然后运行部分,或通过输入MATLAB代码®命令行。

    disp(解决方案)
    8.5165 -6.1094 4.0989 1.2877 -4.2348 2.1812
    disp (objectiveValue)
    1.9195 e + 03
  15. 包括非线性约束

    添加以下非线性约束问题。

    1.5 + x 1 x 2 + x 1 x 2 0 x 1 x 2 10 0。

    包括这些限制,第一次点击>非线性约束按钮。

    包含一个非线性约束。

  16. 选择问题数据节,在约束中,选择非线性>本地函数然后单击按钮。下面的函数出现在一个新的部分任务。编辑生成的代码包含以下行。

    函数测查[c] = double_ineq c (x) = (-1.5 + x (1) * (2) + x (1) - (2);x - x (1) * (2) - 10);测查= [];结束
  17. 非线性限制部分,选择double_ineq

  18. 非线性约束算法的原因patternsearch许多功能评估。在指定解决方案部分,单击右侧的加号当前选项来显示其他选项。然后增加最大函数评估限制5 e4。

    Max函数评价= 5 e4

  19. 再次运行这个任务重新运行优化。

    上面显示了四个图迭代最好的函数值为2401.77。底部图显示了网格大小减少1 e-9。

  20. 查看解决方案和目标函数值。

    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

另请参阅

相关的话题