主要内容

代码生成fmincon背景

什么是代码生成?

代码生成是MATLAB的转换®代码转换为C代码使用MATLAB编码器™.代码生成需要一个MATLAB编码器许可证。

通常,您使用代码生成在没有运行MATLAB的硬件上部署代码。例如,您可以使用fmincon用于优化运动或计划。

有关示例,请参见为fmincon生成代码.有关其他优化求解器中的代码生成,请参见为fsolve生成代码为quadprog生成代码,或生成lsqcurvefit或lsqnonlin的代码

代码生成要求

  • fmincon方法支持代码生成codegen(MATLAB编码器)函数或MATLAB编码器你必须有一个MATLAB编码器生成代码的许可。

  • 目标硬件必须支持标准的双精度浮点计算。不能为单精度或定点计算生成代码。

  • 代码生成目标不使用与MATLAB求解器相同的数学内核库。因此,代码生成解决方案可能与求解器解决方案不同,特别是对于条件较差的问题。

  • 所有用于生成的代码必须为MATLAB代码。特别是,不能使用自定义黑盒函数作为目标函数fmincon.你可以使用coder.ceval计算用C或c++编写的自定义函数。然而,自定义函数必须在MATLAB函数中调用。

  • fmincon不支持问题用于代码生成的参数。

    [x,fval] = fmincon(问题)%不支持
  • 必须使用函数句柄(而不是字符串或字符名)指定目标函数和任何非线性约束函数。

    x = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon)%的支持%不支持:fmincon(‘有趣的’,…)或fmincon(“有趣”,…)
  • 所有fmincon输入矩阵,例如一个Aeq,乌兰巴托一定要满,不能疏。方法可以将稀疏矩阵转换为完整矩阵完整的函数。

  • 而且乌兰巴托参数的项数必须与x0参数或必须为空[]

  • 如果您的目标硬件不支持无限边界,请使用optim.coder.infbound

  • 对于涉及嵌入式处理器的高级代码优化,还需要一个嵌入式编码器®许可证。

  • 您必须包含的选项fmincon并使用optimoptions.选项必须包括算法选项,设置为“sqp”“sqp-legacy”

    选项= optimoptions(“fmincon”“算法”“sqp”);[x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
  • 代码生成支持以下选项:

    • 算法-肯定是“sqp”“sqp-legacy”

    • ConstraintTolerance

    • FiniteDifferenceStepSize

    • FiniteDifferenceType

    • MaxFunctionEvaluations

    • MaxIterations

    • ObjectiveLimit

    • OptimalityTolerance

    • ScaleProblem

    • SpecifyConstraintGradient

    • SpecifyObjectiveGradient

    • StepTolerance

    • TypicalX

  • 生成的代码具有有限的选项错误检查。更新选项的推荐方法是使用optimoptions,不是点表示法。

    Opts = optimoptions(“fmincon”“算法”“sqp”);Opts = optimoptions(Opts,“MaxIterations”1 e4);%推荐选择。MaxIterations = 1e4;%不推荐
  • 不要从文件中加载选项。这样做会导致代码生成失败。相反,在代码中创建选项。

  • 通常,如果您指定了一个不受支持的选项,那么在代码生成期间,该选项将被无声地忽略。但是,如果使用点表示法指定绘图函数或输出函数,则代码生成可能会产生错误。为了可靠性,请只指定支持的选项。

  • 由于不支持输出函数和绘图函数,fmincon不返回退出标志-1。

  • 生成的代码fmincon不包含bestfeasible返回的字段输出结构。

生成的代码不是多线程的

默认情况下,在MATLAB环境之外使用的生成代码使用非多线程的线性代数库。因此,此代码的运行速度比MATLAB环境中的代码慢得多。

如果您的目标硬件有多个核,您可以通过使用自定义多线程LAPACK和BLAS库来获得更好的性能。若要在生成的代码中合并这些库,请参见通过使用LAPACK调用加速生成的独立代码中的线性代数(MATLAB编码器)

另请参阅

|(MATLAB编码器)||

相关的话题

Baidu
map