Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何设置依赖于临时最小化函数的约束?_Python_Scipy_Mathematical Optimization_Cvxopt_Cvxpy - Fatal编程技术网

Python 如何设置依赖于临时最小化函数的约束?

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)。然而,作为示例,这也必

我试图设置一个约束,它取决于最小化的函数值

我的问题有以下性质:

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)。然而,作为示例,这也必须满足约束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