【发布时间】:2009-02-23 23:11:29
【问题描述】:
我正在编写一个模拟,需要一些关于设计的提示。基本思想是生成给定随机过程的数据,然后用于各种计算。例如 1 次迭代:
- 进程 1 -> 为源 1 生成数据:x1
- 进程 2 -> 为源 1 生成数据:x2
- 等等
稍后我想对源 2 的输出应用一些转换,这会导致 x2a、x2b、x2c。所以最终得到以下向量:[x1, x2a, x2b, x2c]。
我有一个问题,至于 N 多元随机过程(例如代表多个相关现象)我必须一次生成 N 维样本:
- 进程 1 -> 为源 1...N 生成数据:x1...xN
我正在考虑一种简单的架构,它允许对模拟代码进行结构化并提供灵活性而不影响性能。
我在想一些类似的东西(伪代码):
class random_process
{
// concrete processes would generate and store last data
virtual data_ptr operator()() const = 0;
};
class source_proxy
{
container_type<process> processes;
container_type<data_ptr> data; // pointers to the process data storage
data operator[](size_type number) const { return *(data[number]);}
void next() const {/* update the processes */}
};
不知何故,我不相信这种设计。例如,如果我想使用样本向量而不是单次迭代,那么应该更改上述设计(例如,我可以让进程用数据填充传递给它们的代理矩阵的子矩阵,但又一次不确定这是否是一个好主意-如果是,那么它也很适合单次迭代情况)。欢迎大家提出意见、建议和批评。
编辑:
以上文字的简短总结,总结重点,澄清情况:
-
random_processes包含生成一些数据的逻辑。例如,它可以从具有给定均值和相关矩阵的多元随机高斯中抽取样本。例如,我可以使用 Cholesky 分解 - 因此我将获得一组样本 [x1 x2 ... xN] - 我可以有多个具有不同维度和参数的 random_processes
- 我想对
random_processes生成的单个元素进行一些转换
这是数据流程图
random_processes 输出 x1 --------------> x1 ----> x2a p1 x2 ------------变换|----> x2b ----> x2c x3 --------------> x3 p2 y1 ------------变换|----> y1a ----> y1b输出被用来做一些计算。
【问题讨论】:
标签: c++ simulation