当 Z 是要最小化的数量时,如何处理将 Z 的函数之和作为约束的优化问题?

计算科学 优化 Python 约束优化
2021-12-05 05:45:39

我有一个问题,我必须根据以下限制最小化某个数量Z

  1. w1+w2+w3=1
  2. f1(w1Z)+f2(w2Z)+f3(w3Z)Z>=k

其中是一个已知常数。是我们有经验曲线的非线性函数。(如果对解决方案有帮助,这些曲线近似为对数)。是要达到其最佳值的权重。我知道基本的线性编程技术。但是,我无法将约束 #2 减少为线性约束。kf1f2f3w1w2w3

欢迎任何帮助。如果需要任何进一步的细节,请告诉我。

PS:- 使用 Python 的解决方案将是理想的。但是,我对方法而不是使用的语言/包更感兴趣。

更新(回应评论): -

  1. Z不依赖于w1,w2,w3
1个回答

这只是一个 NLP(非线性编程)模型。您可以将其重写为:

minZiwi=1ifi(wiZ)kZwi[0,1]

摆脱分裂总是一个好主意。如果我们可以假设,那么稍微不同的公式可能看起来像:Z>0

minZiwi=Zifi(wi)kZwi0

您可以通过(使用的最佳值)。wiwi:=wi/ZwiZ

选择合适的求解器很大程度上取决于细节(例如,您是在寻找全局解决方案还是本地解决方案)。我经常尝试使用几个不同的求解器来求解,因为预测最好的求解器并不容易。如果您可以在 AMPL 或 GAMS 中表达模型,您可以在NEOS尝试不同的求解器