【发布时间】:2013-08-22 20:16:15
【问题描述】:
我有以下问题要解决:
设 H 是一组投资组合。对于H 中的每个投资组合i,让(ri,vi) 成为此解决方案的(return,risk) 值。
对于H 中的每个i,如果H 中存在j(j 与i 不同),则rj>=ri 和vj<=vi 然后从@987654 中删除@9876543333@ @。因为i 被j 支配(它有更好的回报,风险更低)。
最后H 将是一组不受支配的有效解决方案。
我尝试使用 linq 解决上述问题:
H.RemoveAll(x => H.Any(y => x.CalculateReturn() <= y.CalculateReturn() && x.CalculateRisk() >= y.CalculateRisk() && x != y));
但是我想知道是否存在更有效的方法,因为如果H.Count() 是一万数量级,那么移除占主导地位的投资组合需要很多时间。
提前感谢您的帮助!
克里斯托斯
【问题讨论】:
-
我在 j 和 vi 之间迷路了。你能发布一些没有缩写的代码来显示你的问题吗?
-
H 是 Portfolio 类的列表。每个投资组合由资产组成,每个资产都有一个权重 w,它是 [0,1] 中的一个数字。所有的权重总和为1。使用投资组合类的两种方法,我们可以估计它的风险和收益。所以每个投资组合都有一对(回报,风险)。我要解决的问题是找到一个投资组合列表中的所有投资组合,这些投资组合不被支配。为了理解支配投资组合的概念,我们需要引入上述缩写。
-
如果您需要对上述内容进行进一步解释,请告诉我。再次感谢米伦。
-
如果
H是 Portfolio 对象的列表,则将其命名为portfolios。其他名称也一样。