总共有100种不同的股票可供选择每只股票都有一个价格,我想创建一个随机的投资组合来模拟投资组合的总价值需要为1000000美元(给予或接受100美元),投资组合中的不同股票数量也可以是随机的(例如,投资组合可能是20支股票中的长股票)。我正在努力创建一个“好”的算法来实现这一点。
这并不是一个背包问题,因为没有什么需要优化的这有点像随机抽样,但不完全是。所以我想知道我可以用什么算法来解决这个问题有什么想法吗?

最佳答案

从总库存中选择库存数量
生成0到1之间的N随机浮点数,N,…,X_1
设T=数字之和=X_N如果X_1 + ... + X_N等于0,则重复步骤1。
规范化数字:T,…X_1 = X_1 / T。注意,现在和X_N = X_N / T等于1。
X_1 + ... + X_N=总投资组合的价值(例如W
把美元投资在股票上
因此,第W = 1000000支股票的购买股数为X_i * W
在Python中,

import numpy as np
import pandas as pd
pd.options.display.float_format = '{:.2f}'.format

N = 100
W = 10**6
portfolio_size = np.random.randint(1, N+1)
df = pd.DataFrame({'price': np.random.uniform(1, 100, size=(N,))})
df = df.iloc[np.random.choice(N, portfolio_size, replace=False)]
while True:
    df['value'] = np.random.random(portfolio_size)
    T = df['value'].sum()
    if T != 0: break
df['value'] *= W/T
df['shares'] = df['value']/df['price']
df.index.name='stock num'
print(df)
print('Total value of portfolio: {}'.format(df['value'].sum()))

产生类似于
           price     value  shares
stock num
0          34.52  65296.14 1891.72
24          6.82  13008.12 1906.35
83         15.56 100550.05 6463.14
12         60.35  30366.58  503.17
77         76.75 100814.58 1313.49
36         96.50  85649.01  887.53
51         26.28  96860.06 3685.21
9          43.22  31757.96  734.87
56         67.33  19889.57  295.40
66         79.99  30343.49  379.34
21          1.45   1718.19 1187.56
30         34.48  33604.31  974.65
52         80.15  64579.28  805.71
55         41.02  10226.60  249.29
40          8.49  25755.19 3032.82
20         89.46 102164.38 1142.06
5          45.94  42620.16  927.71
73         96.17   6021.88   62.62
58         60.00  24133.96  402.21
45         40.59 114640.49 2824.31
Total value of portfolio: 1000000.0

10-08 18:44