Python 如何设置依赖于临时最小化函数的约束?
我试图设置一个约束,它取决于最小化的函数值 我的问题有以下性质: fmin=最小化(d1x1+d2x2…+d5x5) 我希望使用以下约束条件选择tMize:Python 如何设置依赖于临时最小化函数的约束?,python,scipy,mathematical-optimization,cvxopt,cvxpy,Python,Scipy,Mathematical Optimization,Cvxopt,Cvxpy,我试图设置一个约束,它取决于最小化的函数值 我的问题有以下性质: fmin=最小化(d1x1+d2x2…+d5x5) 我希望使用以下约束条件选择tMize: x1+X2+x3+x4+x5 = 1 0.003 <x1 .. X5 < 0.05 d1x1/fmin = y1 (d2x2+d3x4)/fmin = y2 (d4x4+d5x5)/fmin = y3 因此,我需要定义: x1d1/fmin=y1作为约束条件之一 这里的最佳值向量为(d1..dn)。然而,作为示例,这也必
x1+X2+x3+x4+x5 = 1
0.003 <x1 .. X5 < 0.05
d1x1/fmin = y1
(d2x2+d3x4)/fmin = y2
(d4x4+d5x5)/fmin = y3
因此,我需要定义:
x1d1/fmin=y1作为约束条件之一
这里的最佳值向量为(d1..dn)。然而,作为示例,这也必须满足约束d1/minimized(d1..dn)=y1
我应该如何设置?我应该使用什么样的优化器
我可以使用excel解算器轻松地完成这项工作,但现在我想用python编写代码。我正在尝试使用scipy.linprog,但我不确定这是一个线性规划问题还是需要使用另一种方法。对于这个问题,我想不出在linprog中设置约束的方法。有人能帮我吗?假设
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
可以用作线性解算器的输入。我曾尝试使用scipy.linprog,在这里我可以设置前两个约束,但在设置后两个约束时遇到了困难。我甚至不确定是否需要为此使用linprog。不仅仅是基于代码-这是我真正想要的方法。@DrBug什么是
y1
,y2
和y3
?变量还是常量?如果它们是常数,那么您可以将约束重写为线性的d4x4+d5x5=y3*sumof(…)
,如果yi
s是变量,则约束不是线性的,因此您必须使用更强大的工具,如二次解算器。谢谢Bakuriu。y1。。y3是常数。然而,sumof项还包括我试图最小化的变量(d1..dn)。在这种情况下,我遇到的第一个约束实际上是(d1x1+d2x2)/(最小化函数)。@Bakuriu是对的,首先线性化约束,然后查看是否可以遵循示例。@pbreach:您的评论没有帮助。我不知道如何根据最小化函数的中间值设置约束。是的,我同意。我不知怎的在想A_eq和A_ub应该是一个二进制矩阵。我会尝试一下,如果成功,我会接受你的答案。
(d1-y1*d1)*x1 - y1*d2*x2 - y1*d3*x3 - ... - y1*dn*xn == 0