Main Content

基于问题的优化算法

在内部,solve 函数通过调用以下求解器求解优化问题。有关该问题的默认求解器和支持的求解器,请参阅 solvers 函数。调用 solve 时,您可以使用 'solver' 名称-值对组参量来覆盖默认值。

问题必须由 solve 或者由其他一些相关联的函数或对象转换为求解器形式,solve 才能调用求解器。这种转换需要一些条件,例如具有矩阵表示而不是优化变量表达式的线性约束。

算法的第一步是将优化表达式放入问题中。OptimizationProblem 对象有一个在其表达式中使用的变量的内部列表。每个变量在表达式中都有一个线性索引,并具有大小。因此,问题变量具有隐含的矩阵形式。prob2struct 函数执行从问题形式到求解器形式的转换。有关示例,请参阅将问题转换为结构体

对于非线性优化问题,solve 使用自动微分计算目标函数和非线性约束函数的梯度。当目标函数和约束函数由 Supported Operations for Optimization Variables and Expressions 组成时,这些导数适用。当自动微分不适用时,求解器使用有限差分来估计导数。有关自动微分的详细信息,请参阅Automatic Differentiation Background。您可以使用 ObjectiveDerivative 名称-值参量控制 solve 如何使用自动微分。

有关 intlinprog 用于求解 MILP 问题的算法,请参阅intlinprog 算法。有关 linprog 用于求解线性规划问题的算法,请参阅线性规划算法。有关 quadprog 用于求解二次规划问题的算法,请参阅二次规划算法。有关线性或非线性最小二乘求解器算法,请参阅最小二乘(模型拟合)算法。有关非线性求解器算法,请参阅无约束非线性优化算法约束非线性优化算法。有关 Global Optimization Toolbox 求解器算法的信息,请参阅 Global Optimization Toolbox 文档。

对于非线性方程求解,solve 在内部将每个方程表示为左右两侧之差。然后 solve 会尝试最小化方程分量的平方和。有关求解非线性方程组的算法,请参阅方程求解算法。当问题还有边界时,solve 调用 lsqnonlin 以最小化方程分量的平方和。请参阅最小二乘(模型拟合)算法

注意

如果您的目标函数是一个平方和,并且您需要 solve 将其识别为平方和,请将其写为 norm(expr)^2sum(expr.^2),而不是 expr'*expr 或任何其他形式。内部解析器仅在平方和表示为范数的平方或显式平方和时才能识别平方和。有关详细信息,请参阅Write Objective Function for Problem-Based Least Squares。有关示例,请参阅Nonnegative Linear Least Squares, Problem-Based

另请参阅

| |

相关主题