主要内容

创建问题结构

关于问题的结构

使用GlobalSearchMultiStart求解者,首先必须创建一个问题结构。创建问题结构的推荐方法是使用createOptimProblem函数.您可以手动创建结构,但是这样做很容易出错。

使用createOptimProblem函数

方法创建问题结构,请遵循以下步骤createOptimProblem函数。

  1. 将目标函数定义为文件函数或匿名函数。有关详细信息,请参见计算目标函数.如果你的求解器是lsqcurvefitlsqnonlin,确保目标函数返回一个向量,而不是标量。

  2. 如果相关的话,创建约束,比如边界和非线性约束函数。有关详细信息,请参见写约束

  3. 创建一个起点。例如,创建一个三维随机起点xstart

    xstart = randn (3,1);
  4. (可选)使用optimoptions.例如,

    选择= optimoptions (@fmincon、“算法”、“内点”);
  5. 输入

    问题= createOptimProblem (解算器

    在哪里解算器是本地解算器的名称:

    • GlobalSearch“fmincon”

    • MultiStart的选择是:

      • “fmincon”

      • “fminunc”

      • “lsqcurvefit”

      • “lsqnonlin”

      关于选择的帮助,请看优化决策表

  6. 方法设置初始点“x0”参数。如果你的起始点是xstart,求解器为fmincon,你的入口是现在

    问题= createOptimProblem (fmincon, x0, xstart,
  7. 包含目标函数的函数句柄客观的

    问题= createOptimProblem('fmincon','x0',xstart,…“客观”,@objfun
  8. 设置边界和其他适用的约束条件。

    约束 的名字
    下界 “磅”
    上界 乌兰巴托的
    矩阵Aineq对于线性不等式Aineq xbineq “Aineq”
    向量bineq对于线性不等式Aineq xbineq “bineq”
    矩阵Aeq线性等式Aeq x说真的 “Aeq”
    向量说真的线性等式Aeq x说真的 “说真的”
    非线性约束函数 “nonlcon”
  9. 如果使用lsqcurvefit局部求解器,包括输入数据和响应数据的向量,命名为“xdata”而且“ydata”分别。

  10. 最佳实践:通过在结构上运行求解器来验证问题结构。例如,如果您的本地求解器是fmincon

    [x, fval exitflag、输出]= fmincon(问题);

示例:创建一个问题结构createOptimProblem

这个例子最小化了函数运行解算器,受限于约束条件x1+ 2x2≥4.我们的目标是

sixmin = 4x2- 2.1x4+x6/ 3 +xy- 4y2+ 4y4 (1)

使用内点算法的fmincon,并将起始点设置为(2、3)

  1. 为目标函数写一个函数句柄。

    sixmin = @ (x) (4 * x (1) ^ 2 - 2.1 * (1) ^ 4 + x(1) ^ 6/3……+ x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4;
  2. 写出线性约束矩阵。将约束更改为“小于”形式:

    一个= [1,2];b = 4;
  3. 创建本地选项以使用内点算法:

    选择= optimoptions (@fmincon、“算法”、“内点”);
  4. 创建问题结构createOptimProblem

    问题= createOptimProblem('fmincon',…x0,(2, 3),“客观”,sixmin,……‘Aineq’,‘bineq’,b,“选项”,选择)
  5. 由此产生的结构:

    问题= struct with fields: objective: @(x)(4*x(1)^2-2.1*x(1)^4+x(1)^6/3+x(1)*x(2)-4*x(2)^2+4*x(2)^4) x0: [2x1 double] Aineq: [-1 -2] bineq: -4 Aeq: [] beq: [] lb: [] ub: [] nonlcon: [] solver: 'fmincon' options: [1x1 optimal .options. fmincon]
  6. 最佳实践:通过在结构上运行求解器来验证问题结构:

    [x, fval exitflag、输出]= fmincon(问题);

相关的话题

Baidu
map