在yalmip中,不可避免地我们会遇到求解出问题的情况,理解和处理错误信息是至关重要的环节。在这里我们查看yalmip的所有错误类型(详细见 yalmiperror
.m 函数)
函数概述
yalmiperror
函数的主要作用是根据YALMIP产生的错误代码,创建对应的文本描述。通过这种方式,用户能够更加直观地了解在使用SOLVESDP
等函数时出现问题的原因。
函数调用格式
s = YALMIPERROR(ID)
:输入错误代码ID
,函数返回对应的文本描述,这是获取单个错误信息的常见方式。yalmiperror()
:如果不输入任何参数,函数会循环展示从-12
到24
所有错误代码及其对应的描述,方便用户全面了解可能出现的错误类型。
输入参数详解
errorcode
:必需参数,代表YALMIP生成的错误代码,不同的代码对应不同类型的错误。solver
:可选参数,用于指定相关的求解器。如果未输入或输入格式不正确,函数会进行相应处理。若未输入,该参数将被设置为空字符串;若输入了,函数会对其中的+
符号进行替换处理。flag
:可选参数,默认值为0。它主要影响错误信息中是否包含超链接,超链接指向的页面有助于用户学习如何调试相应的错误。当flag
为非零值时,错误信息中不会包含这些超链接。
错误代码与对应信息解析
求解器许可证相关错误
-12
:Solver license cannot be located (求解器名称)
,表示求解器许可证无法定位,可能是许可证路径设置错误或许可证文件丢失。-11
:Solver license expired (求解器名称)
,明确指出求解器许可证已过期,需要更新许可证。
模型数据错误
-10
:当flag
为0时,NaN in model data (<a href="yalmip.github.io/naninmodel">learn to debug</a>) (求解器名称)
,提示模型数据中存在NaN
值,并提供了调试指南链接;当flag
为非0时,NaN in model data (求解器名称)
,仅告知模型数据中有NaN
值。
求解器相关错误
-9
:Specified solver not recognized (求解器名称)
,说明指定的求解器未被识别,可能是求解器名称拼写错误或该求解器未正确安装配置。-8
:Problem does not satisfy geometric programming rules
,表明问题不满足几何规划规则,需要检查模型的构建是否符合几何规划的要求。-7
:Solver does not return error codes (求解器名称)
,意味着求解器无法返回错误代码,这给调试带来了一定困难,需要进一步排查求解器的运行状态。-6
:Search space not bounded (求解器名称)
,提示搜索空间无界,可能导致求解过程无法收敛,需要调整模型的约束条件来界定搜索空间。-5
:License problems in solver (求解器名称)
,表示求解器存在许可证问题,与许可证无法定位或过期不同,这里可能涉及许可证的其他问题,如许可证不兼容等。-4
:Solver not applicable (求解器名称)
,说明该求解器不适用于当前问题,需要更换合适的求解器。-3
:Solver not found (求解器名称)
,表示找不到指定的求解器,可能是求解器未安装或安装路径未正确设置。-2
:No suitable solver
,即没有找到合适的求解器,可能需要检查模型的类型以及已安装求解器的适用范围,以确定合适的求解器。
求解状态相关错误
0
:Successfully solved (求解器名称)
,这是最理想的状态,表示问题已成功求解。1
:当flag
为0时,Infeasible problem (<a href="yalmip.github.io/debugginginfeasible">learn to debug</a>) (求解器名称)
,表明问题不可行,并提供调试不可行问题的链接;当flag
为非0时,Infeasible problem (求解器名称)
,仅告知问题不可行。2
:类似地,当flag
为0时,Unbounded objective function (<a href="yalmip.github.io/debuggingunbounded">learn to debug</a>) (求解器名称)
,表示目标函数无界并提供调试链接;当flag
为非0时,Unbounded objective function (求解器名称)
。3
:Maximum iterations or time limit exceeded (求解器名称)
,说明求解过程达到了最大迭代次数或时间限制,可能需要调整迭代参数或优化算法。4
:当flag
为0时,Numerical problems (<a href="yalmip.github.io/inside/debuggingnumerics">learn to debug</a>) (求解器名称)
,提示存在数值问题并提供调试数值问题的链接;当flag
为非0时,Numerical problems (求解器名称)
。5
:当flag
为0时,Lack of progress (<a href="yalmip.github.io/inside/debuggingnumerics">learn to debug</a>) (求解器名称)
,表示求解过程缺乏进展并提供调试链接;当flag
为非0时,Lack of progress (求解器名称)
。6
:Initial solution infeasible (求解器名称)
,说明初始解不可行,需要重新选择初始解或调整模型。7
:YALMIP called solver with incorrect input (求解器名称)
,意味着YALMIP向求解器传递了不正确的输入,需要检查输入参数的设置。8
:Feasibility cannot be determined (求解器名称)
,表示无法确定问题的可行性,可能需要进一步分析模型和约束条件。9
:Unknown problem (<a href="yalmip.github.io/inside/debug">learn to debug</a>) (求解器名称)
,对于未知问题,提供了通用的调试链接。10
:bigM failed, increase sp.Mfactor (求解器名称)
,提示bigM
方法失败,需要增加sp.Mfactor
参数值。11
:Other identified error (求解器名称)
,表示识别出了其他类型的错误,但具体信息未明确,需要进一步排查。12
:当flag
为0时,Either infeasible or unbounded (<a href="yalmip.github.io/infeasibleorunbounded">learn to debug</a>) (求解器名称)
,说明问题可能不可行或无界并提供调试链接;当flag
为非0时,Either infeasible or unbounded (求解器名称)
。13
:YALMIP cannot determine status in solver (求解器名称)
,表明YALMIP无法确定求解器的状态,需要检查求解器与YALMIP的交互情况。14
:Model creation failed (<a href="yalmip.github.io/inside/debuggingcreationfailed">learn to debug</a>) (求解器名称)
,提示模型创建失败并提供相关调试链接。15
:当flag
为0时,Infeasible or unbounded problem (<a href="yalmip.github.io/infeasibleorunbounded">learn to debug</a>) (求解器名称)
;当flag
为非0时,Infeasible or unbounded problem (求解器名称)
,与12
类似,再次强调问题可能不可行或无界。16
:User terminated (求解器名称)
,表示用户手动终止了求解过程。17
:Presolve recovery failed (求解器名称)
,说明预求解恢复失败,可能需要调整预求解的参数或方法。18
:Missing non - negativity bounds in GP formulation (求解器名称)
,在几何规划公式中缺少非负性边界,需要检查和补充相关边界条件。19
:Convexity requirements not met (求解器名称)
,表示模型不满足凸性要求,需要重新构建模型以满足凸优化的条件。20
:Solver complains about bad data (<a href="yalmip.github.io/inside/debuggingnumerics">learn to debug</a>) (求解器名称)
,求解器抱怨数据质量不佳并提供调试链接。21
:Failed to initialize bisection space (probably infeasible) (求解器名称)
,初始化二分空间失败,很可能是问题本身不可行。22
:Ill - posed problem according to solver (求解器名称)
,求解器认为问题不适定,需要重新审视问题的定义和模型的构建。23
:Unsupported mixed cone (求解器名称)
,表示不支持混合锥,需要调整模型中涉及的锥类型。24
:Infeasible in presolve (求解器名称)
,在预求解阶段就发现问题不可行,需要对模型进行全面检查。
通过对yalmiperror
函数的深入了解,我们在使用YALMIP进行优化建模时,能够更高效地诊断和解决遇到的各种问题,从而提升优化算法的开发和应用效率。无论是许可证问题、模型数据错误还是求解过程中的各种异常情况,都可以借助这个函数提供的详细信息找到解决问题的方向。