<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Importer:Error:WasEmpty]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>ich habe mal wieder eine Frage. Ich habe folgendes Minimalbeispiel: Ich möchte im Zuge eines stochastischen Modells nacheinander Ereignisse ausführen, die mit einer gewissen Wahrscheinlichkeit eintreten.<br />
In dem vorliegenden Minimalbeispiel habe ich z.B. in Zeile 11 drei Ereignisse mit den Wahrscheinlichkeiten 0.2, 0.5 und 0.3. Im weiteren Verlauf berechne ich die kumulative Wahrscheinlichkeit und frage in Zeile 24 zusammen mit einer Zufallszahl zwischen 0 und 1 das zufällige Ereignis ab [1]. Mit dem index gehe ich dann in die <code>switch</code> Abfrage.</p>
<p>So. Das Problem ist nun folgendes: Der Vektor in Zeile 11 wird zur Laufzeit dynamisch erzeugt, d.h. die Anzahl der möglichen Ereignisse mitsamt ihrer Wahrscheinlichkeit sind nicht fix. Das führt z.B. dazu, dass manche Ereignisse nicht eintreten können. Das ist im weiteren Verlauf bis Zeile 26 eigentlich kein Problem, allerdings scheitert es dann an der <code>switch</code> Abfrage, denn dabei sind die Nummern fix!</p>
<p>Ich müsste also den eintretenden Wahrscheinlichkeiten direkt die Nummer des Falls in der <code>switch</code> Abfrage mitgeben ... oder so ähnlich. Wie kriege ich das Problem denn gelöst? Ich schätze, dass es wieder ein Standarproblem ist und ich jetzt ein Schlagwort um die Ohren gehauen kriege. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;random&gt;
#include &lt;vector&gt;

int main()
{
	std::mt19937 generator;
	std::uniform_real_distribution&lt;double&gt; distribution(0.0,1.0);

	std::vector&lt;double&gt; probs = { 0.2, 0.5, 0.3 };
	std::vector&lt;double&gt; cum_probs;

	for(unsigned int i = 0; i &lt; probs.size(); ++i)
	{
		if(i == 0)
			cum_probs.push_back(probs);
		else
			cum_probs.push_back(probs[i] + cum_probs[i-1]);
	}

	double random_number = distribution(generator);

	auto low = lower_bound(cum_probs.begin(),cum_probs.end(),random_number);

	unsigned int index = low - cum_probs.begin();

	switch(index)
	{
		case 0: std::cout &lt;&lt; &quot;Event Nr. &quot; &lt;&lt; index &lt;&lt; std::endl; break;
		case 1: std::cout &lt;&lt; &quot;Event Nr. &quot; &lt;&lt; index &lt;&lt; std::endl; break;
		case 2: std::cout &lt;&lt; &quot;Event Nr. &quot; &lt;&lt; index &lt;&lt; std::endl; break;
	}

	return 0;
}
</code></pre>
<ul>
<li></li>
</ul>
<p>Gruß,<br />
-- Klaus.</p>
<p>[1] Ich bin so froh Sean Parents Vortrag über [i]No Raw Loops* gesehen zu haben, <code>algorithm</code> enthält so viel. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321324/importer-error-wasempty</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Jul 2026 13:58:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321324.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 Nov 2013 08:00:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 08 Nov 2013 10:41:16 GMT]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>ich habe mal wieder eine Frage. Ich habe folgendes Minimalbeispiel: Ich möchte im Zuge eines stochastischen Modells nacheinander Ereignisse ausführen, die mit einer gewissen Wahrscheinlichkeit eintreten.<br />
In dem vorliegenden Minimalbeispiel habe ich z.B. in Zeile 11 drei Ereignisse mit den Wahrscheinlichkeiten 0.2, 0.5 und 0.3. Im weiteren Verlauf berechne ich die kumulative Wahrscheinlichkeit und frage in Zeile 24 zusammen mit einer Zufallszahl zwischen 0 und 1 das zufällige Ereignis ab [1]. Mit dem index gehe ich dann in die <code>switch</code> Abfrage.</p>
<p>So. Das Problem ist nun folgendes: Der Vektor in Zeile 11 wird zur Laufzeit dynamisch erzeugt, d.h. die Anzahl der möglichen Ereignisse mitsamt ihrer Wahrscheinlichkeit sind nicht fix. Das führt z.B. dazu, dass manche Ereignisse nicht eintreten können. Das ist im weiteren Verlauf bis Zeile 26 eigentlich kein Problem, allerdings scheitert es dann an der <code>switch</code> Abfrage, denn dabei sind die Nummern fix!</p>
<p>Ich müsste also den eintretenden Wahrscheinlichkeiten direkt die Nummer des Falls in der <code>switch</code> Abfrage mitgeben ... oder so ähnlich. Wie kriege ich das Problem denn gelöst? Ich schätze, dass es wieder ein Standarproblem ist und ich jetzt ein Schlagwort um die Ohren gehauen kriege. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;random&gt;
#include &lt;vector&gt;

int main()
{
	std::mt19937 generator;
	std::uniform_real_distribution&lt;double&gt; distribution(0.0,1.0);

	std::vector&lt;double&gt; probs = { 0.2, 0.5, 0.3 };
	std::vector&lt;double&gt; cum_probs;

	for(unsigned int i = 0; i &lt; probs.size(); ++i)
	{
		if(i == 0)
			cum_probs.push_back(probs);
		else
			cum_probs.push_back(probs[i] + cum_probs[i-1]);
	}

	double random_number = distribution(generator);

	auto low = lower_bound(cum_probs.begin(),cum_probs.end(),random_number);

	unsigned int index = low - cum_probs.begin();

	switch(index)
	{
		case 0: std::cout &lt;&lt; &quot;Event Nr. &quot; &lt;&lt; index &lt;&lt; std::endl; break;
		case 1: std::cout &lt;&lt; &quot;Event Nr. &quot; &lt;&lt; index &lt;&lt; std::endl; break;
		case 2: std::cout &lt;&lt; &quot;Event Nr. &quot; &lt;&lt; index &lt;&lt; std::endl; break;
	}

	return 0;
}
</code></pre>
<ul>
<li></li>
</ul>
<p>Gruß,<br />
-- Klaus.</p>
<p>[1] Ich bin so froh Sean Parents Vortrag über [i]No Raw Loops* gesehen zu haben, <code>algorithm</code> enthält so viel. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364235</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Fri, 08 Nov 2013 10:41:16 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 08 Nov 2013 08:21:19 GMT]]></title><description><![CDATA[<p>Also egal was das wirkliche Problem ist.</p>
<p>Das switch am Ende deines Codes ist unnötig. Es macht vor allem nichts. In jedem Fall wird dasgleiche ausgegeben, jedoch abhängig von der Variablenbelegung.</p>
<p>Nimm nur das cout, das switch drumherum kann weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364242</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 08 Nov 2013 08:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 08 Nov 2013 08:38:23 GMT]]></title><description><![CDATA[<p>Hallo Klaus,</p>
<p>nur ein Hinweis: die Zeilen 14-20 kannst Du auch durch <a href="http://www.cplusplus.com/reference/numeric/partial_sum/?kw=partial_sum" rel="nofollow">std::partial_sum</a> ersetzen</p>
<p>Klaus82 schrieb:</p>
<blockquote>
<p><code>algorithm</code> enthält so viel. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>ja - und &lt;numeric&gt; gibt es auch noch.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364245</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 08 Nov 2013 08:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 08 Nov 2013 09:49:58 GMT]]></title><description><![CDATA[<p>Hallo Werner,</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>nur ein Hinweis: die Zeilen 14-20 kannst Du auch durch <a href="http://www.cplusplus.com/reference/numeric/partial_sum/?kw=partial_sum" rel="nofollow">std::partial_sum</a> ersetzen</p>
</blockquote>
<p>Das ist cool! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Damit werden daraus drei Zeilen, ja? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<pre><code class="language-cpp">std::vector&lt;double&gt; probs = { 0.2, 0.5, 0.3 };
	std::vector&lt;double&gt; cum_probs(probs.size(), 0.0);

	std::partial_sum(probs.begin(), probs.end() , cum_probs.data());
</code></pre>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364262</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Fri, 08 Nov 2013 09:49:58 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 08 Nov 2013 10:58:08 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Das switch am Ende deines Codes ist unnötig. Es macht vor allem nichts. In jedem Fall wird dasgleiche ausgegeben, jedoch abhängig von der Variablenbelegung.</p>
</blockquote>
<p>Ja, die <code>switch</code> Abfrage ist symbolisch für die Fallunterscheidung.</p>
<p>Vielleicht an einem Beispiel:<br />
Der Ursprüngliche Vektor mit den Wahrscheinlichkeiten könnte in einem anderen Schritt derart aussehen, dass das Ereignis für 0.5 nicht möglich ist. D.h. die neuen relativen Wahrscheinlichkeiten werden damit zu 0.2 / (0.2 + 0.3) = 0.4 und 0.3 / (0.2 + 0.3) = 0.6</p>
<p>Damit ergibt sich <code>vector&lt;double&gt; probs = { 0.4, 0.6 };</code> .</p>
<p>Jetzt kann es sein, dass der Algorithmus durch die erzeugte Zufallszahl den Index 1 zurückgibt, d.h. das zweite Ereignis anhand des aktuellen Vektors.</p>
<p>Dieses Ereignis hätte im vorangegangenen Schritt allerdings noch den Index 2, da der Vektor drei Elemente enthielt.</p>
<p>D.h. die Auswahl des Ereignisses kann nicht <em>starr</em> als Indexnummer abgefragt werden, sondern muss mit den tatsächlich möglichen Ereignissen variieren.</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364292</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Fri, 08 Nov 2013 10:58:08 GMT</pubDate></item></channel></rss>