微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在优化变量中使用“加到 1”约束进行优化

如何解决在优化变量中使用“加到 1”约束进行优化

我正在尝试使用 scipy minimize 函数制定优化问题。但是,我遇到了以下无法解决的问题:

我想要使成本函数 F(X) 最小化的 X = [x1,x2,x3,x4,x5]。然而,这个 X 向量是必须加到 1 的百分比值,即 np.sum(X) = 1

问题是:例如,如果我使用具有一些初始值(例如 X0 = [0.2,0.2,0.2])的“SLSQP”方法,它将尝试增加每个值以找到某个收敛方向。例如,该算法将使 X0 -> [0.21,0.2]。但这不可能发生,因为 np.sum(X) = 1 是我计算目标函数的要求。

使用约束也无济于事!我可以用 np.sum(X) = 1一个约束。然而,最小化算法只会在计算目标函数后检查约束。

有人知道如何处理这样的问题吗?

非常感谢!

解决方法

当 X 超出其边界时,我通常使用的 NLP 求解器不会要求进行函数和梯度评估。这意味着我们可以通过添加适当的下限来保护 sqrt(x)log(x) 之类的东西。

当我们评估函数和梯度时,不能假设约束成立。

如果您的函数假定 sum(X)=1,您可以调用 F(X/sum(X))。唯一的复杂之处在于 X=0 时。在这种情况下,为 F 返回一个较大的值,以便求解器远离它。

,

must sum to 1 约束有效地减少了您需要优化的变量数量。如果您知道除一个变量之外的所有变量的值,则其余值由约束隐含。它必须正好是 1 - sum(other_vars)

您可以优化四个变量并计算第五个变量,而不是优化五个变量 X = [x1,x2,x3,x4,x5]

优化问题的这种表述避免了在所有 X 都非常低时可能出现的不精确性。

如果变量是百分比,您需要分别指定 0 和 1 的下限和上限。 此外,您需要约束 X = [x1,1 - (x1 + x2 + x3 + x4)] 以避免负 x1+x2+x3+x4 <= 1。 (这个不等式约束对于优化器来说比原来的等式约束要容易得多。)

x5

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。