Main Content

基于问题的非线性优化中的整数约束

要使用基于问题的方法求解具有整数约束的非线性优化问题,请执行以下过程之一:

  • 如果您有 Global Optimization Toolbox 许可证,请像往常一样,使用基于问题的方法来表示问题。ga (Global Optimization Toolbox) 是求解具有整数约束的非线性问题的默认求解器。您还可以在 solveSolver 参量中指定 surrogateopt (Global Optimization Toolbox) 作为求解器。

  • 使用基于求解器的方法并将 gasurrogateopt 作为求解器。基于求解器的方法要求您在这些求解器之间切换时修改目标函数和非线性约束函数。

  • 使用 prob2struct 将问题转换为结构体,然后使用外部求解器。

  • 有时,您可以使用 intlinprog 以迭代方式逼近非线性整数问题。有关这种方法的示例,请参阅混合整数二次规划投资组合优化:基于问题

当您使用外部求解器并调用 prob2struct 时,您可能需要指定 Solver 名称-值参量。

注意

对于具有整数约束的非线性问题,如果您没有 Global Optimization Toolbox 许可证,则必须包含 Solver 参量。

即使您有 Global Optimization Toolbox 许可证,您可能仍需要指定 Solver 名称-值参量。外部求解器可能会要求问题结构体采用与特定求解器对应的形式。例如,对于具有线性和整数约束以及二次目标函数的问题,外部求解器可能会要求将目标函数表示为表达式 ½xTHx + fTx 中的矩阵 H 和 f。要获得这些矩阵,请使用 Solver 名称-值参量指定 'quadprog' 求解器。

problem = prob2struct(prob,"Solver","quadprog");

如果不指定 quadprog 求解器,生成的问题结构体可能包含的是目标函数的函数句柄,而不是矩阵。无论是哪种情况,生成的问题结构体都包含 intcon 字段中的整数变量。

注意

对于具有整数约束的非线性问题,当您指定的求解器不处理整数约束时,prob2struct 会发出警告,指出该求解器无法求解生成的结构体。如果您随后尝试通过对问题结构体调用求解器来求解问题,该求解器将忽略整数约束。在这种情况下,解不是原始问题的解,而是没有整数约束的问题的解。

另请参阅

| | (Global Optimization Toolbox) | (Global Optimization Toolbox)