Je suis en train d'écrire une simulation et j'ai besoin de quelques conseils sur la conception. L'idée de base est que les données pour les processus stochastiques donnés sont générées et consommées plus tard pour divers calculs. Par exemple, pour une itération:Conception de simulation - flux de données, couplage
- Process 1 -> génère des données pour la source 1: x1
- Procédé 2 -> génère des données pour la source 1: x2
- et ainsi de suite
plus tard Je veux appliquer quelques transformations par exemple sur la sortie de la source 2, ce qui se traduit par x2a, x2b, x2c. Donc, à la fin, avec le vecteur suivant: [x1, x2a, x2b, x2c].
I ont un problème, en ce qui concerne les processus stochastiques N-multivariées (représentant par exemple plusieurs phénomènes corrélés) Je suis pour générer échantillon N dimensions à la fois:
- Process 1 -> génère des données pour la source 1. ..N: x1 ... xN
Je pense à l'architecture simple qui permettrait de structurer le code de simulation et fournir une flexibilité sans entraver les performances.
Je pensais à quelque chose le long de ces lignes (pseudocode):
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 */}
};
D'une certaine façon, je ne suis pas convaincu de cette conception. Par exemple, si je voudrais travailler avec des vecteurs d'échantillons au lieu d'une seule itération, alors la conception ci-dessus devrait être modifiée (je pourrais par exemple avoir les processus pour remplir les sous-matrices de la matrice proxy Je ne sais pas si c'est une bonne idée - si oui, cela correspondrait aussi bien au cas de l'itération unique). Tous les commentaires, suggestions et critiques sont les bienvenus.
EDIT:
Bref résumé du texte ci-dessus pour résumer les points clés et de clarifier la situation:
random_processes
contiennent la logique pour générer des données. Par exemple, il peut dessiner des échantillons à partir d'un gaussien aléatoire multivarié avec les moyennes données et la matrice de corrélation. Je peux utiliser par exemple la décomposition de Cholesky - et par conséquent je vais obtenir un ensemble d'échantillons [x1 x2 ... xN]- Je peux avoir plusieurs random_processes, avec des dimensions et des paramètres différents
- Je veux faire quelques transformations sur les éléments individuels générés par
random_processes
Voici le diagramme de flux de données
random_processes output x1 --------------------------> x1 ----> x2a p1 x2 ------------transform|----> x2b ----> x2c x3 --------------------------> x3 p2 y1 ------------transform|----> y1a ----> y1b
la sortie est utilisée pour faire des calculs.
C'est ce que j'avais à l'esprit, mais comme je le disais - je ne sais pas s'il n'y a pas de pièges cachés dans ce ... –