2013-02-13 120 views
-1

我對Java和編程一般都很新。我希望有人能夠解釋我如何能夠在N個對象上生成一系列的權重。例如,假設您必須選擇您想投資IBM股票和AIG股票的現金比例。在簡單的2股情況下,我使用的for循環Java中的重量生成

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

任何人都可以幫忙嗎?

在此先感謝

+2

首先爲您的任務記下一個算法,然後嘗試實現該算法 – Abubakkar 2013-02-13 06:31:58

回答

-1

我沒有在這種東西的任何經驗,但我認爲,如果你使用enamurations你可以用這個問題。但林不知道:)

+0

scofield好的建議,但它本來是太使用枚舉複雜化。我確實找出瞭解決方案,我會隱約描述以防其他人有相同的問題。 – user2035799 2015-06-04 23:48:08

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) 4:其中數組元素總和爲1 i)= 1)將數組添加到s中定義的LinkHashSet/HashMap第2步帶有一些索引鍵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中,以便於召回