<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Iti0210lab62</id>
	<title>Iti0210lab62 - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Iti0210lab62"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;action=history"/>
	<updated>2026-10-29T02:50:05Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15574&amp;oldid=prev</id>
		<title>PriitJ: /* Lisaülesanne */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15574&amp;oldid=prev"/>
		<updated>2019-03-02T08:28:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Lisaülesanne&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 2. märts 2019, kell 10:28&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l152&quot;&gt;152. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;152. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selle osa tegemine ei ole kohustuslik. Muuda &amp;lt;code&amp;gt;pig_game&amp;lt;/code&amp;gt; funktsiooni või tee ise sobiv lahendus nii, et &amp;lt;code&amp;gt;dummy_ai&amp;lt;/code&amp;gt; ja &amp;lt;code&amp;gt;minimax_ai&amp;lt;/code&amp;gt; saaks omavahel mängida. Lase neil mängida näiteks 100 või suurem arv mänge ning pea arvet võitude ja kaotuste üle.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selle osa tegemine ei ole kohustuslik. Muuda &amp;lt;code&amp;gt;pig_game&amp;lt;/code&amp;gt; funktsiooni või tee ise sobiv lahendus nii, et &amp;lt;code&amp;gt;dummy_ai&amp;lt;/code&amp;gt; ja &amp;lt;code&amp;gt;minimax_ai&amp;lt;/code&amp;gt; saaks omavahel mängida. Lase neil mängida näiteks 100 või suurem arv mänge ning pea arvet võitude ja kaotuste üle.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Kui oled &#039;&#039;expectiminimax&#039;&#039;-i õigesti teinud, võiks see &quot;dummy&quot; strateegia vastu rohkem võite saada kui kaotusi. Õppejõu katsetus: 10000 mängu, võiduprotsent 54%.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Kui oled &#039;&#039;expectiminimax&#039;&#039;-i õigesti teinud, võiks see &quot;dummy&quot; strateegia vastu rohkem võite saada kui kaotusi. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!--&lt;/ins&gt;Õppejõu katsetus: 10000 mängu, võiduprotsent 54%.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key lambdadb:diff:1.41:old-15568:rev-15574:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>PriitJ</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15568&amp;oldid=prev</id>
		<title>PriitJ: /* Sissejuhatus */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15568&amp;oldid=prev"/>
		<updated>2019-02-28T17:34:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Sissejuhatus&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 28. veebruar 2019, kell 19:34&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot;&gt;13. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;13. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Seega on tegu mänguga, kus tuleb otsustada, kui palju riskida. Minimax algoritmi mõttes on siin mõlemal poolel kaks võimalikku käiku - &amp;quot;veereta veel&amp;quot; või &amp;quot;anna käik vastasele&amp;quot;. Lisaks, kuna üks mängija võib veeretada mitu korda järjest, siis puus ei ole selgeid MIN ja MAX tasandeid - üks mängija võib teha mitu otsust järjest. Kuna meil on tegemist ka juhuslikkusega, siis kasutame &amp;#039;&amp;#039;expectiminimax&amp;#039;&amp;#039; algoritmi (õpik [&amp;#039;&amp;#039;AIMA&amp;#039;&amp;#039;] 5.5). See lisab otsingupuusse ka juhuslikkuse sõlmed (&amp;#039;&amp;#039;chance nodes&amp;#039;&amp;#039;).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Seega on tegu mänguga, kus tuleb otsustada, kui palju riskida. Minimax algoritmi mõttes on siin mõlemal poolel kaks võimalikku käiku - &amp;quot;veereta veel&amp;quot; või &amp;quot;anna käik vastasele&amp;quot;. Lisaks, kuna üks mängija võib veeretada mitu korda järjest, siis puus ei ole selgeid MIN ja MAX tasandeid - üks mängija võib teha mitu otsust järjest. Kuna meil on tegemist ka juhuslikkusega, siis kasutame &amp;#039;&amp;#039;expectiminimax&amp;#039;&amp;#039; algoritmi (õpik [&amp;#039;&amp;#039;AIMA&amp;#039;&amp;#039;] 5.5). See lisab otsingupuusse ka juhuslikkuse sõlmed (&amp;#039;&amp;#039;chance nodes&amp;#039;&amp;#039;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Kasutajaliidesele jne pole vaja rõhku panna. Oluline osa tööst on kasutada käigu (otsus, kas veeretada või anda kord vastasele) leidmiseks &#039;&#039;expectiminimax&#039;&#039; algoritmi. Ülesande lahendamise eelduseks on, et saad juba enam-vähem aru, kuidas töötab minimax: [&#039;&#039;AIMA&#039;&#039;] õpikust osad 5.1, 5.2 ja 5.4. Suhteliselt asjaliku kirjelduse, kuidas &#039;&#039;minimax&#039;&#039; otsingupuud läbib, [https://www.cs.cornell.edu/courses/cs312/2002sp/lectures/rec21.htm leiad ka siit].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Kasutajaliidesele jne pole vaja rõhku panna. Oluline osa tööst on kasutada käigu (otsus, kas veeretada või anda kord vastasele) leidmiseks &#039;&#039;expectiminimax&#039;&#039; algoritmi. Ülesande lahendamise eelduseks on, et saad juba enam-vähem aru, kuidas töötab minimax: [&#039;&#039;AIMA&#039;&#039;] õpikust osad 5.1, 5.2 ja 5.4. Suhteliselt asjaliku kirjelduse, kuidas &#039;&#039;minimax&#039;&#039; otsingupuud läbib, [https://www.cs.cornell.edu/courses/cs312/2002sp/lectures/rec21.htm leiad ka siit&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;], võid vaadata ka harjutustunnis tehtud [[Media:Iti0120lab62_ttt.txt|minimax demo]&lt;/ins&gt;].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Ettevalmistus ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Ettevalmistus ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PriitJ</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15550&amp;oldid=prev</id>
		<title>PriitJ: /* Sissejuhatus */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15550&amp;oldid=prev"/>
		<updated>2019-02-27T11:11:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Sissejuhatus&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 27. veebruar 2019, kell 13:11&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot;&gt;13. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;13. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Seega on tegu mänguga, kus tuleb otsustada, kui palju riskida. Minimax algoritmi mõttes on siin mõlemal poolel kaks võimalikku käiku - &amp;quot;veereta veel&amp;quot; või &amp;quot;anna käik vastasele&amp;quot;. Lisaks, kuna üks mängija võib veeretada mitu korda järjest, siis puus ei ole selgeid MIN ja MAX tasandeid - üks mängija võib teha mitu otsust järjest. Kuna meil on tegemist ka juhuslikkusega, siis kasutame &amp;#039;&amp;#039;expectiminimax&amp;#039;&amp;#039; algoritmi (õpik [&amp;#039;&amp;#039;AIMA&amp;#039;&amp;#039;] 5.5). See lisab otsingupuusse ka juhuslikkuse sõlmed (&amp;#039;&amp;#039;chance nodes&amp;#039;&amp;#039;).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Seega on tegu mänguga, kus tuleb otsustada, kui palju riskida. Minimax algoritmi mõttes on siin mõlemal poolel kaks võimalikku käiku - &amp;quot;veereta veel&amp;quot; või &amp;quot;anna käik vastasele&amp;quot;. Lisaks, kuna üks mängija võib veeretada mitu korda järjest, siis puus ei ole selgeid MIN ja MAX tasandeid - üks mängija võib teha mitu otsust järjest. Kuna meil on tegemist ka juhuslikkusega, siis kasutame &amp;#039;&amp;#039;expectiminimax&amp;#039;&amp;#039; algoritmi (õpik [&amp;#039;&amp;#039;AIMA&amp;#039;&amp;#039;] 5.5). See lisab otsingupuusse ka juhuslikkuse sõlmed (&amp;#039;&amp;#039;chance nodes&amp;#039;&amp;#039;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Kasutajaliidesele jne pole vaja rõhku panna. Oluline osa tööst on kasutada käigu (otsus, kas veeretada või anda kord vastasele) leidmiseks &#039;&#039;expectiminimax&#039;&#039; algoritmi. Ülesande lahendamise eelduseks on, et saad juba aru, kuidas töötab minimax: [&#039;&#039;AIMA&#039;&#039;] õpikust osad 5.1, 5.2 ja 5.4. Suhteliselt asjaliku kirjelduse, kuidas &#039;&#039;minimax&#039;&#039; otsingupuud läbib, [https://www.cs.cornell.edu/courses/cs312/2002sp/lectures/rec21.htm leiad ka siit].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Kasutajaliidesele jne pole vaja rõhku panna. Oluline osa tööst on kasutada käigu (otsus, kas veeretada või anda kord vastasele) leidmiseks &#039;&#039;expectiminimax&#039;&#039; algoritmi. Ülesande lahendamise eelduseks on, et saad juba &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;enam-vähem &lt;/ins&gt;aru, kuidas töötab minimax: [&#039;&#039;AIMA&#039;&#039;] õpikust osad 5.1, 5.2 ja 5.4. Suhteliselt asjaliku kirjelduse, kuidas &#039;&#039;minimax&#039;&#039; otsingupuud läbib, [https://www.cs.cornell.edu/courses/cs312/2002sp/lectures/rec21.htm leiad ka siit].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Ettevalmistus ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Ettevalmistus ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PriitJ</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15548&amp;oldid=prev</id>
		<title>PriitJ: /* Sissejuhatus */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15548&amp;oldid=prev"/>
		<updated>2019-02-27T11:07:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Sissejuhatus&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 27. veebruar 2019, kell 13:07&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot;&gt;9. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;9. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* kui mängija veeretab 1, siis läheb kord vastasele ja mängija kaotab kõik selle korra jooksul veeretatud punktid.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* kui mängija veeretab 1, siis läheb kord vastasele ja mängija kaotab kõik selle korra jooksul veeretatud punktid.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Image:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ifi0120lab62_eminimax&lt;/del&gt;.png|right|expectiminimax puu]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Image:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ifi0120lab62_chance&lt;/ins&gt;.png|right|expectiminimax puu]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Seega on tegu mänguga, kus tuleb otsustada, kui palju riskida. Minimax algoritmi mõttes on siin mõlemal poolel kaks võimalikku käiku - &amp;quot;veereta veel&amp;quot; või &amp;quot;anna käik vastasele&amp;quot;. Lisaks, kuna üks mängija võib veeretada mitu korda järjest, siis puus ei ole selgeid MIN ja MAX tasandeid - üks mängija võib teha mitu otsust järjest. Kuna meil on tegemist ka juhuslikkusega, siis kasutame &amp;#039;&amp;#039;expectiminimax&amp;#039;&amp;#039; algoritmi (õpik [&amp;#039;&amp;#039;AIMA&amp;#039;&amp;#039;] 5.5). See lisab otsingupuusse ka juhuslikkuse sõlmed (&amp;#039;&amp;#039;chance nodes&amp;#039;&amp;#039;).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Seega on tegu mänguga, kus tuleb otsustada, kui palju riskida. Minimax algoritmi mõttes on siin mõlemal poolel kaks võimalikku käiku - &amp;quot;veereta veel&amp;quot; või &amp;quot;anna käik vastasele&amp;quot;. Lisaks, kuna üks mängija võib veeretada mitu korda järjest, siis puus ei ole selgeid MIN ja MAX tasandeid - üks mängija võib teha mitu otsust järjest. Kuna meil on tegemist ka juhuslikkusega, siis kasutame &amp;#039;&amp;#039;expectiminimax&amp;#039;&amp;#039; algoritmi (õpik [&amp;#039;&amp;#039;AIMA&amp;#039;&amp;#039;] 5.5). See lisab otsingupuusse ka juhuslikkuse sõlmed (&amp;#039;&amp;#039;chance nodes&amp;#039;&amp;#039;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PriitJ</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15547&amp;oldid=prev</id>
		<title>PriitJ: /* Expectiminimax */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15547&amp;oldid=prev"/>
		<updated>2019-02-27T11:06:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Expectiminimax&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 27. veebruar 2019, kell 13:06&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l104&quot;&gt;104. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;104. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nüüd teeme lisaks &amp;lt;code&amp;gt;dummy_ai&amp;lt;/code&amp;gt;-le ka otsingupõhise &amp;quot;AI&amp;quot;. Õpikus on algoritm antud rekursiivse funktsioonina:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nüüd teeme lisaks &amp;lt;code&amp;gt;dummy_ai&amp;lt;/code&amp;gt;-le ka otsingupõhise &amp;quot;AI&amp;quot;. Õpikus on algoritm antud rekursiivse funktsioonina:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Image:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ifi0120lab62_chance&lt;/del&gt;.png|ekraanitõmmis õpikust lk 178]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Image:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ifi0120lab62_eminimax&lt;/ins&gt;.png|ekraanitõmmis õpikust lk 178]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Ka meil on mõistlik see rekursiivsena teha. Algoritmis on 4 osa:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Ka meil on mõistlik see rekursiivsena teha. Algoritmis on 4 osa:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PriitJ</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15545&amp;oldid=prev</id>
		<title>PriitJ: /* Lisaülesanne */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15545&amp;oldid=prev"/>
		<updated>2019-02-27T11:01:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Lisaülesanne&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 27. veebruar 2019, kell 13:01&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l152&quot;&gt;152. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;152. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selle osa tegemine ei ole kohustuslik. Muuda &amp;lt;code&amp;gt;pig_game&amp;lt;/code&amp;gt; funktsiooni või tee ise sobiv lahendus nii, et &amp;lt;code&amp;gt;dummy_ai&amp;lt;/code&amp;gt; ja &amp;lt;code&amp;gt;minimax_ai&amp;lt;/code&amp;gt; saaks omavahel mängida. Lase neil mängida näiteks 100 või suurem arv mänge ning pea arvet võitude ja kaotuste üle.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selle osa tegemine ei ole kohustuslik. Muuda &amp;lt;code&amp;gt;pig_game&amp;lt;/code&amp;gt; funktsiooni või tee ise sobiv lahendus nii, et &amp;lt;code&amp;gt;dummy_ai&amp;lt;/code&amp;gt; ja &amp;lt;code&amp;gt;minimax_ai&amp;lt;/code&amp;gt; saaks omavahel mängida. Lase neil mängida näiteks 100 või suurem arv mänge ning pea arvet võitude ja kaotuste üle.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Kui oled &#039;&#039;expectiminimax&#039;&#039;-i õigesti teinud, võiks see &quot;dummy&quot; strateegia vastu rohkem võite &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;saama &lt;/del&gt;kui kaotusi. Õppejõu katsetus: 10000 mängu, võiduprotsent 54%.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Kui oled &#039;&#039;expectiminimax&#039;&#039;-i õigesti teinud, võiks see &quot;dummy&quot; strateegia vastu rohkem võite &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;saada &lt;/ins&gt;kui kaotusi. Õppejõu katsetus: 10000 mängu, võiduprotsent 54%.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PriitJ</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15544&amp;oldid=prev</id>
		<title>PriitJ: Uus lehekülg: &#039;= Otsingu kasutamine mängu mängimiseks =  == Sissejuhatus ==  Strateegiamängudes, nagu male, &#039;&#039;go&#039;&#039; jne on võimalik hea käigu leidmiseks kasutada sügavutiotsingu varianti n...&#039;</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab62&amp;diff=15544&amp;oldid=prev"/>
		<updated>2019-02-27T11:00:30Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;= Otsingu kasutamine mängu mängimiseks =  == Sissejuhatus ==  Strateegiamängudes, nagu male, &amp;#039;&amp;#039;go&amp;#039;&amp;#039; jne on võimalik hea käigu leidmiseks kasutada sügavutiotsingu varianti n...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Otsingu kasutamine mängu mängimiseks =&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
&lt;br /&gt;
Strateegiamängudes, nagu male, &amp;#039;&amp;#039;go&amp;#039;&amp;#039; jne on võimalik hea käigu leidmiseks kasutada sügavutiotsingu varianti nimega minimax. Meie proovime mängida mängu, kus on ka juhuslik element: [https://en.wikipedia.org/wiki/Pig_(dice_game) seamäng]. Lühidalt:&lt;br /&gt;
* mängitakse selleni, kes saab enne 100 punkti. Alguses on mõlemal mängijal 0 punkti.&lt;br /&gt;
* mängija võib veeretada ühte täringut mitu korda järjest, senikaua kuni ta ei veereta 1. Tulemused liidetakse kokku.&lt;br /&gt;
* kui mängija otsustab, et soovib veeretatud punktid alles hoida, liidetakse need tema kogusummale ja kord läheb vastasele.&lt;br /&gt;
* kui mängija veeretab 1, siis läheb kord vastasele ja mängija kaotab kõik selle korra jooksul veeretatud punktid.&lt;br /&gt;
&lt;br /&gt;
[[Image:Ifi0120lab62_eminimax.png|right|expectiminimax puu]]&lt;br /&gt;
&lt;br /&gt;
Seega on tegu mänguga, kus tuleb otsustada, kui palju riskida. Minimax algoritmi mõttes on siin mõlemal poolel kaks võimalikku käiku - &amp;quot;veereta veel&amp;quot; või &amp;quot;anna käik vastasele&amp;quot;. Lisaks, kuna üks mängija võib veeretada mitu korda järjest, siis puus ei ole selgeid MIN ja MAX tasandeid - üks mängija võib teha mitu otsust järjest. Kuna meil on tegemist ka juhuslikkusega, siis kasutame &amp;#039;&amp;#039;expectiminimax&amp;#039;&amp;#039; algoritmi (õpik [&amp;#039;&amp;#039;AIMA&amp;#039;&amp;#039;] 5.5). See lisab otsingupuusse ka juhuslikkuse sõlmed (&amp;#039;&amp;#039;chance nodes&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
Kasutajaliidesele jne pole vaja rõhku panna. Oluline osa tööst on kasutada käigu (otsus, kas veeretada või anda kord vastasele) leidmiseks &amp;#039;&amp;#039;expectiminimax&amp;#039;&amp;#039; algoritmi. Ülesande lahendamise eelduseks on, et saad juba aru, kuidas töötab minimax: [&amp;#039;&amp;#039;AIMA&amp;#039;&amp;#039;] õpikust osad 5.1, 5.2 ja 5.4. Suhteliselt asjaliku kirjelduse, kuidas &amp;#039;&amp;#039;minimax&amp;#039;&amp;#039; otsingupuud läbib, [https://www.cs.cornell.edu/courses/cs312/2002sp/lectures/rec21.htm leiad ka siit].&lt;br /&gt;
&lt;br /&gt;
== Ettevalmistus ==&lt;br /&gt;
&lt;br /&gt;
Proovime kõigepealt mängu niisama mängida. Siin on lihtne Pythoni implementatsioon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
AI = 0&lt;br /&gt;
PLAYER = 1&lt;br /&gt;
&lt;br /&gt;
ROLL = 0&lt;br /&gt;
PASS = 1&lt;br /&gt;
&lt;br /&gt;
def pig_game(ai_func):&lt;br /&gt;
    rolled = 0&lt;br /&gt;
    turn = PLAYER&lt;br /&gt;
    player_points = ai_points = 0&lt;br /&gt;
&lt;br /&gt;
    while player_points &amp;lt; 100 and ai_points &amp;lt; 100:&lt;br /&gt;
        print(&amp;quot;Your points&amp;quot;, player_points,&lt;br /&gt;
            &amp;quot;AI points&amp;quot;, ai_points,&lt;br /&gt;
            &amp;quot;holding&amp;quot;, rolled)&lt;br /&gt;
&lt;br /&gt;
        if turn == PLAYER:&lt;br /&gt;
            decision = ROLL&lt;br /&gt;
            if rolled &amp;gt; 0:&lt;br /&gt;
                s = input(&amp;quot;Do you want to keep rolling (Y/n)? &amp;quot;)&lt;br /&gt;
                if len(s) &amp;gt; 0 and s[0].lower() == &amp;quot;n&amp;quot;:&lt;br /&gt;
                    decision = PASS&lt;br /&gt;
&lt;br /&gt;
            if decision == PASS:&lt;br /&gt;
                rolled = 0&lt;br /&gt;
                turn = AI&lt;br /&gt;
            else:&lt;br /&gt;
                dieroll = random.randint(1, 6)&lt;br /&gt;
                print(&amp;quot;You rolled...&amp;quot;, dieroll)&lt;br /&gt;
                if dieroll == 1:&lt;br /&gt;
                    player_points -= rolled # lose all points again&lt;br /&gt;
                    rolled = 0&lt;br /&gt;
                    turn = AI&lt;br /&gt;
                else:&lt;br /&gt;
                    rolled += dieroll&lt;br /&gt;
                    player_points += dieroll&lt;br /&gt;
&lt;br /&gt;
        else:&lt;br /&gt;
            decision = ai_func(turn, rolled, ai_points, player_points)&lt;br /&gt;
            if decision == PASS:&lt;br /&gt;
                print(&amp;quot;-- AI decides to pass.&amp;quot;)&lt;br /&gt;
                rolled = 0&lt;br /&gt;
                turn = PLAYER&lt;br /&gt;
            else:&lt;br /&gt;
                dieroll = random.randint(1, 6)&lt;br /&gt;
                print(&amp;quot;-- AI rolled...&amp;quot;, dieroll)&lt;br /&gt;
                if dieroll == 1:&lt;br /&gt;
                    ai_points -= rolled # lose all points again&lt;br /&gt;
                    rolled = 0&lt;br /&gt;
                    turn = PLAYER&lt;br /&gt;
                else:&lt;br /&gt;
                    rolled += dieroll&lt;br /&gt;
                    ai_points += dieroll&lt;br /&gt;
&lt;br /&gt;
    if player_points &amp;gt;= 100:&lt;br /&gt;
        print(&amp;quot;You won!&amp;quot;)&lt;br /&gt;
    elif ai_points &amp;gt;= 100:&lt;br /&gt;
        print(&amp;quot;AI won.&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vaja on ka mingit &amp;quot;tehisintellekti&amp;quot;, mis vastase osa mängiks. Üks variant võiks olla selline: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def dummy_ai(turn, rolled, my_points, opp_points):&lt;br /&gt;
    if rolled &amp;lt; 21:&lt;br /&gt;
        return ROLL&lt;br /&gt;
    else:&lt;br /&gt;
        return PASS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dummy_ai&amp;lt;/code&amp;gt; implementeerib suhteliselt agressiivse strateegia, mis mänguseisule tähelepanu ei pööra, aga üritab iga kord vähemalt 21 punkti veeretada. &amp;quot;AI&amp;quot; funktsioonile on antud mõned parameetrid, mida edaspidi vaja läheb: mängu seis punktide kujul, lisaks kelle kord on (&amp;lt;code&amp;gt;turn&amp;lt;/code&amp;gt;) ning kui palju mängija on praeguse korra jooksul punkte kogunud (&amp;lt;code&amp;gt;rolled&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Mängu saad käima panna nii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pig_game(dummy_ai)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expectiminimax ==&lt;br /&gt;
&lt;br /&gt;
Nüüd teeme lisaks &amp;lt;code&amp;gt;dummy_ai&amp;lt;/code&amp;gt;-le ka otsingupõhise &amp;quot;AI&amp;quot;. Õpikus on algoritm antud rekursiivse funktsioonina:&lt;br /&gt;
&lt;br /&gt;
[[Image:Ifi0120lab62_chance.png|ekraanitõmmis õpikust lk 178]]&lt;br /&gt;
&lt;br /&gt;
Ka meil on mõistlik see rekursiivsena teha. Algoritmis on 4 osa:&lt;br /&gt;
# rekursiooni lõpetamise tingimus: kui keegi on võitnud, või me ei taha otsinguga sügavamale minna, tuleks tagastada seisu numbriline väärtus (&amp;lt;code&amp;gt;Utility&amp;lt;/code&amp;gt;), mida suurem seda parem &amp;quot;AI&amp;quot; jaoks.&lt;br /&gt;
# MAX-sõlm: kui on parajasti &amp;quot;AI&amp;quot; käik, peaks ta leidma, kumb käik annab kõrgema skoori - veeretamine või lõpetamine, s.t. kutsuma välja rekursiivse otsingu mõlema juhtumi jaoks.&lt;br /&gt;
# MIN-sõlm: vastase käigu korral tuleb leida madalaim võimalik skoor, kuna peame eeldama (kartma), et vastane mängib nii hästi kui suudab.&lt;br /&gt;
# Juhuslik sõlm: iga kord, kui keegi otsustab veeretada, tuleb siin käsitleda kõik 6 võimalikku tulemust - muuta seisu nii nagu täringuveere seda teeks ning hinnata iga juhtumit rekursiivse otsinguga. Tulemustest võtta keskmine.&lt;br /&gt;
&lt;br /&gt;
Algoritmi jaoks võid kasutada seda toorikut. Arvesta, et otsingu esimesel tasemel (otsingupuu juur) tuleb leida ja tagastada, milline käik on parem. Edaspidi tuleb arvutada ja tagastada ainult skoori. Tavaliselt on mänge mängivates programmides esimene ja järgmised tasemed ka eraldi funktsioonidena tehtud.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def minimax_ai(turn, rolled, my_points, opp_points):&lt;br /&gt;
    # this is the top level of search&lt;br /&gt;
    # we search all possible moves&lt;br /&gt;
    # (PASS and ROLL in case of the Pig game)&lt;br /&gt;
    # and pick the one that returns the highest minimax estimate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ning rekursiivne osa:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def exp_minimax(turn, chance, rolled, my_points, opp_points, depth):&lt;br /&gt;
    # update remaining depth as we go deeper in the search tree&lt;br /&gt;
    depth = depth - 1&lt;br /&gt;
&lt;br /&gt;
    # case 1a: somebody won, stop searching&lt;br /&gt;
    # return a high value if AI wins, low if it loses.&lt;br /&gt;
&lt;br /&gt;
    # case 1b: out of depth, stop searching&lt;br /&gt;
    # return game state eval (should be between win and loss)&lt;br /&gt;
&lt;br /&gt;
    # case 2: AI&amp;#039;s turn (and NOT a chance node):&lt;br /&gt;
    # return max value of possible moves (recursively)&lt;br /&gt;
&lt;br /&gt;
    # case 3: player&amp;#039;s turn:&lt;br /&gt;
    # return min value (assume optimal action from player)&lt;br /&gt;
&lt;br /&gt;
    # case 4: chance node:&lt;br /&gt;
    # return average of all dice rolls&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisatud on parameetrid &amp;lt;code&amp;gt;chance&amp;lt;/code&amp;gt; - kas tegu on juhuslikkuse sõlmega ja &amp;lt;code&amp;gt;depth&amp;lt;/code&amp;gt;, mis piirab otsingu sügavust - kui see muutub 0-ks, peaks otsingu lõpetama. Miks on vaja eraldi arvet pidada, kelle käik ja kas tegu &amp;#039;&amp;#039;chance node&amp;#039;&amp;#039;-ga? Põhjus selles, et peale täringu veeretamist ei lähe mänguõigus tingimata vastasele üle, seega tuleb meeles pidada, kes parajasti veeretab.&lt;br /&gt;
&lt;br /&gt;
Seamängus on mänguseis väga lihtne ning seda võib edasi anda kolme numbrilise väärtusega: &amp;quot;AI&amp;quot; punktid, vastase punktid ning kui palju hetkel veeretav mängija on kogunud. Kui soovid, võid edasi anda ka viimase täringuveeretuse tulemuse, kui arvad, et see võiks seisu hinnangut mõjutada.&lt;br /&gt;
&lt;br /&gt;
== Lisaülesanne ==&lt;br /&gt;
&lt;br /&gt;
Selle osa tegemine ei ole kohustuslik. Muuda &amp;lt;code&amp;gt;pig_game&amp;lt;/code&amp;gt; funktsiooni või tee ise sobiv lahendus nii, et &amp;lt;code&amp;gt;dummy_ai&amp;lt;/code&amp;gt; ja &amp;lt;code&amp;gt;minimax_ai&amp;lt;/code&amp;gt; saaks omavahel mängida. Lase neil mängida näiteks 100 või suurem arv mänge ning pea arvet võitude ja kaotuste üle.&lt;br /&gt;
&lt;br /&gt;
Kui oled &amp;#039;&amp;#039;expectiminimax&amp;#039;&amp;#039;-i õigesti teinud, võiks see &amp;quot;dummy&amp;quot; strateegia vastu rohkem võite saama kui kaotusi. Õppejõu katsetus: 10000 mängu, võiduprotsent 54%.&lt;/div&gt;</summary>
		<author><name>PriitJ</name></author>
	</entry>
</feed>