Ich kann nicht viel Dokumentation der Boost-Version von discrete_distribution finden. Nach viel Google-Suche kann ich noch nicht einmal eine Liste von Methoden finden, die diese Klasse hat, und ob einer von ihnen funktioniert, um die Wahrscheinlichkeiten neu zuzuordnen.Ist boost :: random :: discrete_distribution dynamisch resizierbar?
In meinem Fall schreibe ich einen evolutionären Dynamikalgorithmus. Bei jedem Zeitschritt können Mitglieder der Population zufällig ausgewählt werden, um entweder zu sterben oder sich zu vermehren. Aus diesem Grund wird die Gesamtzahl der Einträge in meiner diskreten Distribution fast jede Iteration ändern.
Ich möchte ein einzelnes Objekt haben, das ich vor dem Start der Simulation definiere, genannt gillespie_dist
(die diskrete Verteilung, die diesen Gillespie-Algorithmus steuert). Aber ich möchte am Ende jeder Iteration möglicherweise spezifische Werte ändern und/oder neue Werte zu gillespie_dist
hinzufügen und insbesondere keine neuen Instanzen der diskreten_Distribution bei jeder Iteration erstellen.
Was ist ein guter Ansatz dafür. Gibt es Methoden, um einen neuen Wert auf das Objekt discrete_distribution
zu schieben, Methoden, um den Wert einer Distribution an einem bestimmten Index zu ändern, oder noch besser, die gesamte Distribution "neu zu initialisieren", indem die Vektoriterator-Idee here verwendet wird?
'std :: discrete_distribution' kann mit der Memberfunktion [' param'] (http://en.cppreference.com/w/cpp/numeric/random/discrete_distribution/param) vollständig re-initialisiert werden wäre kaum günstiger als eine neue "diskrete Verteilung".Ich glaube nicht, dass diese Klassen kleine Updates effizient unterstützen sollen. – leftaroundabout
Wie aus dem vorherigen Kommentar hervorgeht, ist std :: discrete_distribution eine Standardfunktion von C++ seit dem letzten Jahr: http://en.cppreference.com/w/cpp/numeric/random/discrete_distribution –
Bekannt, aber wie in meinem Kommentar zu der Antwort unten, ich denke, das war ein Versions-Problem. Ich bekomme 'Fehler:' diskrete_verteilung 'ist kein Mitglied von' std ', wenn ich versuche, 'std :: diskret_distribution' zu verwenden. Ich werde in Kürze aktualisieren und die Dinge sollten dann glatter sein. – ely