在内部点求解器中,我们可以设置x1 + x2 + x3 + x4 = 1的单位约束,可以使用setcoefficient设置0.10 <= x1 + x3> = 0.80和0.20 <= x2 + x4> = 0.50的约束。 / p>
请提供示例以设置权重边界在扇区和安全性两个级别上的约束。
我们为Markowitz模型使用了InteriorPointSolver的代码,它已解决了最小化或最大化安全性的问题。 但是我们不能对所有证券的某些子集的总和设置设限。 我们尝试使用Setcoefficient设置约束,但是它不起作用。请提供样品
答案 0 :(得分:1)
这是一个看起来很奇怪的约束。
0.10 <= x1+x3 >= 0.80
可以重述为
x1+x3 >= 0.10
x1+x3 >= 0.80
或者只是
x1+x3 >= 0.80
不流汗!
如果发帖人的真实意思是:
0.10 <= x1+x3 <= 0.80
(它总是有助于重读您的问题!),我们可以这样写:
x1+x3 >= 0.10
x1+x3 <= 0.80
这很容易实现。
如果求和的长度很长:
0.10 <= x1+x2+x3+... <= 0.8
有一个更好的方法:
y in [0.1,0.8] (extra variable with lower and upper bounds)
y = x1+x2+x3+... (single equality constraint)
这防止了模型中两次长求和。基本上,我们创建了一个额外的变量,但保存了约束和相应的非零系数。
当然,Microsoft Solver Foundation不应在实际项目中使用:它已于2012年停产。