-1

我对 Java 和一般编程很陌生。我希望有人能解释我如何在 N 个对象上生成一系列权重。例如,假设您必须选择要投资于 IBM 股票与 AIG 股票的现金比例。在简单的 2 库存案例中,我使用了 for 循环

    for(int i = 0; i <101; i++){
        double creditWieght = i*allocationIncrement;
        double traditionalWeight = 1-creditWieght;
        actionSet.add(new Pair(creditWieght,traditionalWeight));

    }  

其中LinkHashSet actionSet给出了输出

[< 0.0 , 1.0 > , < 0.01 , 0.99 > , < 0.02 , 0.98 > , < 0.03 , 0.97 > , < 0.04 , 0.96 > , < 0.05 , 0.95 > , < 0.06 , 0.94 > , < 0.07 , 0.9299999999999999 > , < 0.08 , 0.92 > , < 0.09 , 0.91 > , < 0.1 , 0.9 > , < 0.11 , 0.89 > , < 0.12 , 0.88 > , < 0.13 , 0.87 > , < 0.14 , 0.86 > , < 0.15 , 0.85 > , < 0.16 , 0.84 > , < 0.17 , 0.83 > , < 0.18 , 0.8200000000000001 > , < 0.19 , 0.81 > , < 0.2 , 0.8 > , < 0.21 , 0.79 > , < 0.22 , 0.78 > , < 0.23 , 0.77 > , < 0.24 , 0.76 > , < 0.25 , 0.75 > , < 0.26 , 0.74 > , < 0.27 , 0.73 > , < 0.28 , 0.72 > , < 0.29 , 0.71 > , < 0.3 , 0.7 > , < 0.31 , 0.69 > , < 0.32 , 0.6799999999999999 > , < 0.33 , 0.6699999999999999 > , < 0.34 , 0.6599999999999999 > , < 0.35000000000000003 , 0.6499999999999999 > , < 0.36 , 0.64 > , < 0.37 , 0.63 > , < 0.38 , 0.62 > , < 0.39 , 0.61 > , < 0.4 , 0.6 > , < 0.41000000000000003 , 0.59 > , < 0.42 , 0.5800000000000001 > , < 0.43 , 0.5700000000000001 > , < 0.44 , 0.56 > , < 0.45 , 0.55 > , < 0.46 , 0.54 > , < 0.47000000000000003 , 0.53 > , < 0.48 , 0.52 > , < 0.49 , 0.51 > , < 0.5 , 0.5 > , < 0.51 , 0.49 > , < 0.52 , 0.48 > , < 0.53 , 0.47 > , < 0.54 , 0.45999999999999996 > , < 0.55 , 0.44999999999999996 > , < 0.56 , 0.43999999999999995 > , < 0.5700000000000001 , 0.42999999999999994 > , < 0.58 , 0.42000000000000004 > , < 0.59 , 0.41000000000000003 > , < 0.6 , 0.4 > , < 0.61 , 0.39 > , < 0.62 , 0.38 > , < 0.63 , 0.37 > , < 0.64 , 0.36 > , < 0.65 , 0.35 > , < 0.66 , 0.33999999999999997 > , < 0.67 , 0.32999999999999996 > , < 0.68 , 0.31999999999999995 > , < 0.6900000000000001 , 0.30999999999999994 > , < 0.7000000000000001 , 0.29999999999999993 > , < 0.71 , 0.29000000000000004 > , < 0.72 , 0.28 > , < 0.73 , 0.27 > , < 0.74 , 0.26 > , < 0.75 , 0.25 > , < 0.76 , 0.24 > , < 0.77 , 0.22999999999999998 > , < 0.78 , 0.21999999999999997 > , < 0.79 , 0.20999999999999996 > , < 0.8 , 0.19999999999999996 > , < 0.81 , 0.18999999999999995 > , < 0.8200000000000001 , 0.17999999999999994 > , < 0.8300000000000001 , 0.16999999999999993 > , < 0.84 , 0.16000000000000003 > , < 0.85 , 0.15000000000000002 > , < 0.86 , 0.14 > , < 0.87 , 0.13 > , < 0.88 , 0.12 > , < 0.89 , 0.10999999999999999 > , < 0.9 , 0.09999999999999998 > , < 0.91 , 0.08999999999999997 > , < 0.92 , 0.07999999999999996 > , < 0.93 , 0.06999999999999995 > , < 0.9400000000000001 , 0.05999999999999994 > , < 0.9500000000000001 , 0.04999999999999993 > , < 0.96 , 0.040000000000000036 > , < 0.97 , 0.030000000000000027 > , < 0.98 , 0.020000000000000018 > , < 0.99 , 0.010000000000000009 > , < 1.0 , 0.0 > ]

但是,我不确定如何将其扩展到N weights.

有人可以帮忙吗?

提前致谢

4

2 回答 2

0

在我发布问题几周后我想出了一些解决方案后,我完全忘记了这篇文章。今天早些时候在 R 上发帖后才再次注意到它。以下解决方案基于我在发布问题以寻求建议之前所做的尝试。

本质上,有多种方法可以构建一组 N>3 权重。效果最好的是:

方法 1:如果 N 很大,则耗时

1:定义一个长度为 N 的临时双精度数组 2:定义一个 LinkHashSet 或其他 HashMap 来收集临时数组 3:生成 0 到 1 之间的连续随机数并填充在步骤 1 中创建的临时数组并插入到数组的连续元素中确保每个连续的权重 (x) 满足条件 x(i) < (1-sum(x(0,....i-1)) 和 sum(x(0,....i)<1 4:其中数组元素总和为 1(即 sum(x(0,....i)=1) 将数组添加到步骤 2 中定义的 LinkHashSet/HashMap,并使用一些索引键 int 确保检查没有LinkHashSet 中已经存在其他数组,其元素中的值具有相同的排列 5:重复直到生成了足够多的权重集

方法 2:人口规模不太准确,但比方法 1 快

1:设置为可被 3 或 4 整除,并定义一个 LinkHashSet/HashMap 来存储权重和 ArrayList 以方便生成权重 2:定义 3 或 4 个资产的权重。对于普通人脑来说,绕过存储在 ArrayList 3 中是相当直接的:现在将 4 个计算权重中的每一个视为一类资产,其中在步骤 2 中计算权重 x 并生成另一组 3 或 4 个权重并相乘每个新权重按步骤 2 中的权重,并酌情添加或更新 ArrayList 4:使用上一轮步骤 3 中 ArrayList 中更新的权重,对 ArrayList 的每个元素重复步骤 3,直到 ArrayList 的大小为 N 5:将 ArrayList 存储在带有索引键的 LinkHashSet/HashMap 中,以便于调用

于 2015-06-05T00:23:53.003 回答
-1

我在这类事情上没有任何经验,但我认为如果你使用 enamurations 你可以克服这个问题。但我不确定:)

于 2013-02-13T06:33:54.833 回答