问题描述
我已经成功地将 GEKKO 用于解决各种问题,但我无法确定的一件事是目标函数或约束中非线性项的限制。我发现可以容忍一些非线性项,例如
m.Obj(sum(x * values) / sum(x))
不过似乎工作正常
m.Obj(sum(x * values + x ** 2 * other_values) / sum(x))
似乎无法解决。是否有任何关于 GEKKO 处理某些非线性形式的限制的文档可以帮助我重新格式化我的问题?
解决方法
Model building functions 列在 Gekko 文档中,包括可以用连续的一阶和二阶导数数学表达的任何非线性函数。 Gekko 将问题交给求解器以尝试解决方案。有时,求解器 (IPOPT
,BPOPT
,APOPT
) 将问题识别为不可行或无法找到解决方案。这并不意味着 Gekko 不能使用这些函数,只是没有找到数值解。您可以尝试使用 m.options.SOLVER=1
切换求解器。您可能还需要使用更高效的函数版本,例如 Gekko m.sum()
而不是 Python sum()
函数。
m.Minimize(m.sum(x * values + x ** 2 * other_values) / m.sum(x))
某些求解器(例如 APOPT
)也允许混合整数问题。微分方程和代数方程也可以用 Gekko 求解。有关 switching solving modes with IMODE 的文档中有更多信息。使用 18 example applications 预览应用程序。