<?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[Logikfrage -&amp;gt; Minimax bei 4 Gewinnt]]></title><description><![CDATA[<p>Hallo.<br />
Zurzeit programmiere ich ein 4Gewinnt und bin so weit eigentlich auch schon fertig, nur will ich nun eine vernünftige KI einbauen.<br />
Also habe ich mir einiges zum Minimax-Algorithmus durchgelesen und dachte mir, dass dieser die Lösung ist (Anfangs will ich es noch ohne Alpha / Beta - Pruning machen, also das hier auch bitte nicht vorschlagen)<br />
Nun Habe ich in der bewerten Funktion auch nur den Fall des Gewinnens / Verlierens, was für ein einigermaßen schweres Spiel bei höher Rekursionstiefe sorgen sollte (Tiefe = <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /><br />
Jedoch spielt die KI sehr schlecht und ich bin mir sehr sicher, dass es einfach nicht an der bewertungsfunktion liegen kann.<br />
Nunja komme ich mal zum relevanten Sourcecode:</p>
<pre><code class="language-cpp">int game::AI(int depth, bool player){	
	/*printf(&quot;-------------------------------------\n&quot;);
	printf(&quot;depth: %i\n&quot;, depth);
	printf(&quot;player: %i\n&quot;, player);
	printf(&quot;Spielfeld:\n&quot;);
	for(int j=0; j&lt;6; j++){
		for(int i=0; i&lt;7; i++)
		{
			printf(&quot; %i &quot;, m_iGameTable[i][j]);
		}
		printf(&quot;\n&quot;);	
	}
	printf(&quot;-------------------------------------\n\n&quot;);*/
	if (depth == 0)
        return value(player);
    int score=-9999;
    for(int i=0; i&lt;7; i++)
    {
		if(m_iGameTable[i][0]==0)
		{
			for(int j=5; j&gt;=0; j--)
			{
				if(m_iGameTable[i][j]==0)
				{
					if(player)
						m_iGameTable[i][j]=1;
					else
						m_iGameTable[i][j]=2;
					int temp = -AI(depth-1,!player);
					if(temp&gt;score)
					{
						score=temp;
						AI_row=i;
					}
					m_iGameTable[i][j]=0;
					break;
				}	
			}
		}
	}
//	printf(&quot;Score: %i\n&quot;, score);
	if(depth&lt;difficulty)
	{
		return score;
	}
	else
	{
		for(int j=5; j&gt;=0; j--)
		{
			if(m_iGameTable[AI_row][j]==0)
			{
				if(player)
					m_iGameTable[AI_row][j]=1;
				else
					m_iGameTable[AI_row][j]=2;
				break;
			}
		}
	}
}
</code></pre>
<p>m_iGameTable entspricht meinem Spielfeld und ist ein Array[7][6].<br />
value ist die Bewertungsfunktion und player gibt an, wer gerade am Zug ist (Spieler oder Computer)</p>
<p>Ich hoffe ihr könnt mir weiterhelfen.</p>
<p>Mit freundlichen grüßen<br />
Artus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233377/logikfrage-gt-minimax-bei-4-gewinnt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 11:27:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233377.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Feb 2009 23:02:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Tue, 03 Feb 2009 23:02:58 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Zurzeit programmiere ich ein 4Gewinnt und bin so weit eigentlich auch schon fertig, nur will ich nun eine vernünftige KI einbauen.<br />
Also habe ich mir einiges zum Minimax-Algorithmus durchgelesen und dachte mir, dass dieser die Lösung ist (Anfangs will ich es noch ohne Alpha / Beta - Pruning machen, also das hier auch bitte nicht vorschlagen)<br />
Nun Habe ich in der bewerten Funktion auch nur den Fall des Gewinnens / Verlierens, was für ein einigermaßen schweres Spiel bei höher Rekursionstiefe sorgen sollte (Tiefe = <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /><br />
Jedoch spielt die KI sehr schlecht und ich bin mir sehr sicher, dass es einfach nicht an der bewertungsfunktion liegen kann.<br />
Nunja komme ich mal zum relevanten Sourcecode:</p>
<pre><code class="language-cpp">int game::AI(int depth, bool player){	
	/*printf(&quot;-------------------------------------\n&quot;);
	printf(&quot;depth: %i\n&quot;, depth);
	printf(&quot;player: %i\n&quot;, player);
	printf(&quot;Spielfeld:\n&quot;);
	for(int j=0; j&lt;6; j++){
		for(int i=0; i&lt;7; i++)
		{
			printf(&quot; %i &quot;, m_iGameTable[i][j]);
		}
		printf(&quot;\n&quot;);	
	}
	printf(&quot;-------------------------------------\n\n&quot;);*/
	if (depth == 0)
        return value(player);
    int score=-9999;
    for(int i=0; i&lt;7; i++)
    {
		if(m_iGameTable[i][0]==0)
		{
			for(int j=5; j&gt;=0; j--)
			{
				if(m_iGameTable[i][j]==0)
				{
					if(player)
						m_iGameTable[i][j]=1;
					else
						m_iGameTable[i][j]=2;
					int temp = -AI(depth-1,!player);
					if(temp&gt;score)
					{
						score=temp;
						AI_row=i;
					}
					m_iGameTable[i][j]=0;
					break;
				}	
			}
		}
	}
//	printf(&quot;Score: %i\n&quot;, score);
	if(depth&lt;difficulty)
	{
		return score;
	}
	else
	{
		for(int j=5; j&gt;=0; j--)
		{
			if(m_iGameTable[AI_row][j]==0)
			{
				if(player)
					m_iGameTable[AI_row][j]=1;
				else
					m_iGameTable[AI_row][j]=2;
				break;
			}
		}
	}
}
</code></pre>
<p>m_iGameTable entspricht meinem Spielfeld und ist ein Array[7][6].<br />
value ist die Bewertungsfunktion und player gibt an, wer gerade am Zug ist (Spieler oder Computer)</p>
<p>Ich hoffe ihr könnt mir weiterhelfen.</p>
<p>Mit freundlichen grüßen<br />
Artus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1657612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1657612</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Tue, 03 Feb 2009 23:02:58 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Wed, 04 Feb 2009 10:29:42 GMT]]></title><description><![CDATA[<p>MiniMax ist eher ungeeignet fuer 4Gewinnt, weil der Suchraum exponentiell gross ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1657728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1657728</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 04 Feb 2009 10:29:42 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Wed, 04 Feb 2009 12:43:54 GMT]]></title><description><![CDATA[<p>Mit Alpha-/Beta-Pruning dann ja nicht mehr....<br />
Minimax ist eigentlich sogar sehr gut für 4 Gewinnt.<br />
Außerdem hat deine Antwort auch nicht miene Frage beantwortet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1657793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1657793</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Wed, 04 Feb 2009 12:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Wed, 04 Feb 2009 14:20:45 GMT]]></title><description><![CDATA[<p>Du hast keine Frage gestellt. Nur dargelegt, dass deine KI schlecht ist.</p>
<p>Wie bewertest du denn offene Positionen? Was bedeutet Recursionstiefe 8? Und wieviel Rechenzeit benoetigt er dafuer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1657866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1657866</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 04 Feb 2009 14:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Thu, 05 Feb 2009 18:07:05 GMT]]></title><description><![CDATA[<p>Rekursionstiefe ist eben die Tiefe, wie oft die Funktion sich selber aufruft.<br />
Also denkt die KI 8 Züge im Vorraus.<br />
Ich habe im Moment nur eine Bewertung fürs Gewinnen drinne, was vollkommen ausreichen sollte, wenn der Minimax richtig programmiert wäre.<br />
(KI gewinnt +9999, Gegner gewinnt -9999).<br />
Rechenzeit ist bei Rekursionstiefe 8 ziemlich lang(bei den ersten Zügen so um die 10 Sekunden, die Zeit geht aber schnell runter [weil das Spielfeld gefüllter ist])</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658656</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Thu, 05 Feb 2009 18:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Sat, 07 Feb 2009 21:56:40 GMT]]></title><description><![CDATA[<p>Und was passiert, wenn nach 8 Zuegen noch keine eindeutige Gewinnposition erreicht wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659768</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 07 Feb 2009 21:56:40 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Sat, 07 Feb 2009 22:31:38 GMT]]></title><description><![CDATA[<p>Deine KI spielt optimal, sobald sie einen Sieg sieht und sie tappt nicht in einfach Fallen, die sich mit etwas voraussicht vermeiden lassen. Jedenfalls wenn Dein minimax korrekt implementiert ist.</p>
<p>Aber abseits dieser beiden Fälle spielt die KI mehr oder weniger zufällig. Sie hat keine Idee welcher Aufbau vielleicht in 10 Zügen gut sein könnte. Und genau das mußte ihr so noch mitgeben. Benachbarte Steine, die sich zumindest theoretisch noch zu einem 4er ergänzen lassen sind gut und ähnliches.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659773</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sat, 07 Feb 2009 22:31:38 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Mon, 09 Feb 2009 17:54:08 GMT]]></title><description><![CDATA[<p>Naja das Problem ist, dass sie auf sehr einfache Fallen reinfällt...<br />
Hier ein Beispiel: (X==KI;O==Spieler)</p>
<pre><code>-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- O  -- -- --

-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- X  -- -- --
-- -- -- O  -- -- --

-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- X  -- -- --
-- -- 0  O  -- -- --

-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- X  -- -- --
-- -- -- X  -- -- --
-- -- 0  O  -- -- --

-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- X  -- -- --
-- -- -- X  -- -- --
-- O  0  O  -- -- --

-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- X  -- -- --
-- -- -- X  -- -- --
X  O  0  O  -- -- --

-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- X  -- -- --
-- -- -- X  -- -- --
X  O  0  O  0  -- --
</code></pre>
<p>Und das kann ja nicht Sinn und Zweck sein, denn das ist wohl der einfachste &quot;Trick&quot; überhaupt bei dem Spiel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1660656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1660656</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Mon, 09 Feb 2009 17:54:08 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Fri, 13 Feb 2009 17:36:45 GMT]]></title><description><![CDATA[<p>Tust du denn in jedem Knoten abfragen, ob eine Gewinnstellung vorhanden ist??? Denn nur am Suchhorizint eine die Stellungsbewertung aufzurufen bringt da nicht viel?? Tu vllt. mal den Code ein wenig kommentieren, damit man nachvollziehen kann, was die einzelnen Teile bezwecken sollen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663357</guid><dc:creator><![CDATA[Frutzl]]></dc:creator><pubDate>Fri, 13 Feb 2009 17:36:45 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Fri, 13 Feb 2009 17:40:35 GMT]]></title><description><![CDATA[<p>Naja, bei der Tiefe 8 wird er sowieso nicht besonders stark spielen. Normalerweise dürfte es doch nicht so schwer sein das Spiel komplett durchzurechnen, das ist doch schließlich ein ziemlich triviales Spiel. Such doch mal Alpha-Beta-Algorithmus, Zugsortierung, Hashing. Damit kann man locker ein starkes Programm schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663359</guid><dc:creator><![CDATA[Hmn]]></dc:creator><pubDate>Fri, 13 Feb 2009 17:40:35 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfrage -&amp;gt; Minimax bei 4 Gewinnt on Mon, 16 Feb 2009 09:50:58 GMT]]></title><description><![CDATA[<p><a href="http://www.connectfour.net/Files/connect4.pdf" rel="nofollow">http://www.connectfour.net/Files/connect4.pdf</a></p>
<p>Masterthesis fuer geloestes Connect 4.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1664566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1664566</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 16 Feb 2009 09:50:58 GMT</pubDate></item></channel></rss>