<p>似乎您正在使用来自<a href="https://github.com/stephane-caron/qpsolvers" rel="nofollow noreferrer">qpsolvers</a>的<code>solve_qp</code>函数。从软件包自述文件的常见问题:</p>
<blockquote>
<p>I have a non-convex quadratic program. Is there a solver I can use?</p>
<ul>
<li>Unfortunately most available QP solvers are designed for convex problems.</li>
<li>If your cost matrix P is semi-definite rather than definite, try OSQP.</li>
</ul>
</blockquote>
<p>我用OSQP尝试了你的问题,解算器以“原始不可行”的状态退出。这意味着解算器能够解决您的问题,并找到一个证书,证明它没有解决方案。(我不知道<code>fmincon</code>返回了什么,但您需要检查它的结果是否满足所有约束<code>Aeq * x == beq</code>和<code>lb <= x <= ub</code>。)</p>
<p>其他建议/您可以尝试的事项:</p>
<ul>
<li><code>Aeq</code>和<code>beq</code>的最后一行是零。在这种情况下,最好不要将这些行添加到问题中。有些解算器不能很好地处理<code>0 * x == 0</code>行</李>
<li>使用启用/禁用约束来了解您的问题。例如,如果我们禁用^ {< CD8> },我们会看到解决方案向量中间的值命中30,并迫使其他值变为lt;500要么目标在那里,要么这是由<code>Aeq * x == beq</code>引起的(很可能是后者,因为<code>lb</code>的问题似乎不可行)</李>
<li>您可以通过目标函数中的<a href="https://scaron.info/robotics/conversion-from-least-squares-to-quadratic-programming.html" rel="nofollow noreferrer">converting it to a quadratic objective</a><code>weight * || Aeq * x - beq ||^2</code>来放松硬等式约束。这样,问题始终是可行的,您可以使用权重参数来理解此约束的效果</李>
</ul>
<p>祝你学习顺利</p>