在内点求解器中我们可以设置单位约束为x1 + x2 + x3 + x4 = 1我们可以设置约束,如0.10 <= x1 + x3> = 0.80和0.20 <= x2 + x4> = 0.50

问题描述 投票:-2回答:1

在内点求解器中,我们可以设置单位约束,如x1 + x2 + x3 + x4 = 1我们可以使用setcoefficient设置约束,如0.10 <= x1 + x3> = 0.80和0.20 <= x2 + x4> = 0.50。

请提供样本以设置行业和安全两个级别的权重边界约束。

https://csharp.hotexamples.com/examples/-/InteriorPointSolver/AddRow/php-interiorpointsolver-addrow-method-examples.html

我们使用了InsidePointSolver的代码用于Markowitz模型,它解决了最小化或最大化安全问题。但是我们不能在所有证券的某些子集的总和上设置setbound。我们尝试使用Setcoefficient设置约束但它不起作用。请提供样品

mathematical-optimization portfolio
1个回答
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年停止使用。


推荐问答