【问题标题】:How to setup a constraint that depends on interim minimized function?如何设置依赖于临时最小化函数的约束?
【发布时间】:2017-05-09 02:37:22
【问题描述】:

我正在尝试设置一个取决于最小化函数值的约束。

我遇到的问题具有以下性质:

fmin = 最小化 (d1x1 +d2x2 ... +d5x5)

我想在以下限制条件下进行优化:

x1+X2+x3+x4+x5 = 1

0.003 <x1 .. X5  < 0.05

d1x1/fmin = y1
(d2x2+d3x4)/fmin = y2
(d4x4+d5x5)/fmin = y3

在这种情况下,y1.. yn 是标量常数。

   The problem I am having is that I dont know how to setup the A_ub or A_eq 
   In linprog so that B_ub = y1*fmin for d1x1 for example. 

所以我需要以某种方式定义:

x1d1/fmin = y1 作为约束之一。

这里的最优值向量将是 (d1 .. dn)。但是,这也必须满足约束 d1/minimized(d1.. dn) = y1 作为示例。

我应该如何设置?我使用什么样的优化器?

我可以使用 excel 求解器轻松完成此操作 - 但现在我想在 python 中编写此代码。我正在尝试使用 scipy.linprog 但我不确定这是线性编程问题还是我需要使用另一种方法。我想不出一种方法来为这个问题在 linprog 中设置约束。谁能帮帮我?

【问题讨论】:

  • 我尝试使用 scipy.linprog 来设置前两个约束,但在设置后一个约束时遇到了困难。我什至不确定是否需要为此使用 linprog。不仅仅是基于代码 - 它是我真正追求的一种方法。
  • @DrBug y1y2y3 是什么?变量还是常量? 如果它们是常量,那么您可以将约束重写为线性的d4x4 + d5x5 = y3 * sumof(...),如果yis 是约束线性的变量,因此您必须使用更强大的东西,例如二次求解器。
  • 谢谢巴库留。 y1.. y3 是常数。但是,总和还包括我试图最小化的变量(d1.. dn)。在这种情况下,我正在努力解决的第一个约束实际上是 (d1x1+d2x2)/(minimized function)。
  • @Bakuriu 是对的,首先线性化您的约束,然后查看here,看看您是否可以按照示例进行操作。
  • @pbreach:您的评论没有帮助。我无法弄清楚如何设置取决于最小化函数的中间值的约束。

标签: python scipy mathematical-optimization cvxopt cvxpy


【解决方案1】:

假设d1, ..., dn 也是标量常量,那么例如约束

d1*x1/fmin==y1

可以改写为

d1*x1==y1*d1*x1+y1*d2*x2+...+y1*dn*xn

这可以归一化为

(d1-y1*d1)*x1 - y1*d2*x2 - y1*d3*x3 - ... - y1*dn*xn == 0

可用作线性求解器的输入。

【讨论】:

  • 是的,我同意。我不知何故认为 A_eq 和 A_ub 需要是一个二进制矩阵。我会尝试一下,如果有效,我会接受你的回答。
猜你喜欢
  • 2016-05-27
  • 2019-07-06
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
相关资源
最近更新 更多