<?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=Iti0210lab7</id>
	<title>Iti0210lab7 - 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=Iti0210lab7"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab7&amp;action=history"/>
	<updated>2026-10-28T12:21:09Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Iti0210lab7&amp;diff=14510&amp;oldid=prev</id>
		<title>PriitJ: /* Solver */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab7&amp;diff=14510&amp;oldid=prev"/>
		<updated>2018-03-20T16:11:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Solver&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: 20. märts 2018, kell 18: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-l27&quot;&gt;27. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;27. 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;# mõtle välja, kuidas esitada teadmusbaasi. See peaks olema kogumik loogikalauseid;&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;# mõtle välja, kuidas esitada teadmusbaasi. See peaks olema kogumik loogikalauseid;&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;div&gt;# mõtle välja, mis kujul on loogikalause. Põhimõtteliselt koosneb see kahest osast, eeldused ja järeldus (õpikus ja slaididel vastavalt &amp;#039;&amp;#039;body&amp;#039;&amp;#039; ja &amp;#039;&amp;#039;head&amp;#039;&amp;#039; ning teisal &amp;#039;&amp;#039;premise&amp;#039;&amp;#039; ja &amp;#039;&amp;#039;conclusion&amp;#039;&amp;#039;). Faktide puhul on ainult järeldus. Üks sobiv formaat oleks sümbolite list, kus ühes otsas järeldus, näit. &amp;lt;code&amp;gt;[ &amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;b&amp;quot; ]&amp;lt;/code&amp;gt;;&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;# mõtle välja, mis kujul on loogikalause. Põhimõtteliselt koosneb see kahest osast, eeldused ja järeldus (õpikus ja slaididel vastavalt &amp;#039;&amp;#039;body&amp;#039;&amp;#039; ja &amp;#039;&amp;#039;head&amp;#039;&amp;#039; ning teisal &amp;#039;&amp;#039;premise&amp;#039;&amp;#039; ja &amp;#039;&amp;#039;conclusion&amp;#039;&amp;#039;). Faktide puhul on ainult järeldus. Üks sobiv formaat oleks sümbolite list, kus ühes otsas järeldus, näit. &amp;lt;code&amp;gt;[ &amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;b&amp;quot; ]&amp;lt;/code&amp;gt;;&lt;/div&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;# funktsiooni alguses ehita abitabelid &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;inferred&amp;lt;/code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;&amp;lt;code&amp;gt;agenda&amp;lt;/code&amp;gt;. Lisaks oleks hea mõte teha neljas abitabel, kus iga sümboli kohta kirjas, mis lausete eelduseks ta on. See võimaldab algoritmil skaleeruda ka suurematele teadmusbaasidele;&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;# funktsiooni alguses ehita abitabelid &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;inferred&amp;lt;/code&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ja initsialiseeri &lt;/ins&gt;&amp;lt;code&amp;gt;agenda&amp;lt;/code&amp;gt;. Lisaks oleks hea mõte teha neljas abitabel, kus iga sümboli kohta kirjas, mis lausete eelduseks ta on. See võimaldab algoritmil skaleeruda ka suurematele teadmusbaasidele;&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;div&gt;# kirjuta algoritm ise, nii nagu slaididel või õpikus.&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;# kirjuta algoritm ise, nii nagu slaididel või õpikus.&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;!-- diff cache key lambdadb:diff:1.41:old-14509:rev-14510:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>PriitJ</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Iti0210lab7&amp;diff=14509&amp;oldid=prev</id>
		<title>PriitJ: Uus lehekülg: &#039;= Lausearvutuse solver ja teadmusbaas =  == Sissejuhatus ==  Teeme hästi lihtsa solveri, mis võimaldab teadmusbaasist järeldusi teha. Kasutame &#039;&#039;forward chaining&#039;&#039; algoritmi (...&#039;</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Iti0210lab7&amp;diff=14509&amp;oldid=prev"/>
		<updated>2018-03-20T16:08:33Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;= Lausearvutuse solver ja teadmusbaas =  == Sissejuhatus ==  Teeme hästi lihtsa solveri, mis võimaldab teadmusbaasist järeldusi teha. Kasutame &amp;#039;&amp;#039;forward chaining&amp;#039;&amp;#039; algoritmi (...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Lausearvutuse solver ja teadmusbaas =&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
&lt;br /&gt;
Teeme hästi lihtsa solveri, mis võimaldab teadmusbaasist järeldusi teha. Kasutame &amp;#039;&amp;#039;forward chaining&amp;#039;&amp;#039; algoritmi ([&amp;#039;&amp;#039;AIMA&amp;#039;&amp;#039;] 7.5.3-7.5.4). See algoritm eeldab, et teadmusbaas koosneb teatud kujul lausetest:&lt;br /&gt;
&lt;br /&gt;
  a1 &amp;amp; a2 &amp;amp; ... &amp;amp; an -&amp;gt; b      (mingi reegel)&lt;br /&gt;
  a1 &amp;amp; ... &amp;amp; an -&amp;gt; false       (tõestatav lause, seda pole meil vaja)&lt;br /&gt;
  a2                           (mingi fakt)&lt;br /&gt;
  a3                           (mingi teine fakt)&lt;br /&gt;
&lt;br /&gt;
Need on Horni normaalkujul laused. Tasub tähele panna, et seal ei ole ühtegi eitust! Seda &amp;#039;&amp;#039;forward chaining&amp;#039;&amp;#039; ei toeta.&lt;br /&gt;
&lt;br /&gt;
Kui solver töötab, siis lahendame lihtsa tekstiülesande nii, et genereerime solverile söödavas formaadis teadmusbaasi ning rakendame solverit vastuste saamiseks.&lt;br /&gt;
&lt;br /&gt;
== Solver ==&lt;br /&gt;
&lt;br /&gt;
Vaata slaididelt &amp;#039;&amp;#039;Pl-Fc-Entails&amp;#039;&amp;#039; algoritmi või õpikust &amp;#039;&amp;#039;Figure 7.15&amp;#039;&amp;#039;. Implementeeri see algoritm (näited on Pythonis, keele võid valida oma suva järgi).&lt;br /&gt;
&lt;br /&gt;
  def fc_entails(kb, q):&lt;br /&gt;
     # kb - teadmusbaas mingil kujul&lt;br /&gt;
     # q - loogikamuutuja e. sümbol, mille kohta tahame teada, kas see järeldub kb-st&lt;br /&gt;
     &lt;br /&gt;
Loogikalausete teksti kujul parseerimist me siin ülesandes ei tee, esitame teadmusbaasi kohe mingi valmis andmestruktuurina.&lt;br /&gt;
&lt;br /&gt;
Vajalikud sammud:&lt;br /&gt;
# mõtle välja, kuidas esitada teadmusbaasi. See peaks olema kogumik loogikalauseid;&lt;br /&gt;
# mõtle välja, mis kujul on loogikalause. Põhimõtteliselt koosneb see kahest osast, eeldused ja järeldus (õpikus ja slaididel vastavalt &amp;#039;&amp;#039;body&amp;#039;&amp;#039; ja &amp;#039;&amp;#039;head&amp;#039;&amp;#039; ning teisal &amp;#039;&amp;#039;premise&amp;#039;&amp;#039; ja &amp;#039;&amp;#039;conclusion&amp;#039;&amp;#039;). Faktide puhul on ainult järeldus. Üks sobiv formaat oleks sümbolite list, kus ühes otsas järeldus, näit. &amp;lt;code&amp;gt;[ &amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;b&amp;quot; ]&amp;lt;/code&amp;gt;;&lt;br /&gt;
# funktsiooni alguses ehita abitabelid &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;inferred&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;agenda&amp;lt;/code&amp;gt;. Lisaks oleks hea mõte teha neljas abitabel, kus iga sümboli kohta kirjas, mis lausete eelduseks ta on. See võimaldab algoritmil skaleeruda ka suurematele teadmusbaasidele;&lt;br /&gt;
# kirjuta algoritm ise, nii nagu slaididel või õpikus.&lt;br /&gt;
&lt;br /&gt;
== Solveri test ==&lt;br /&gt;
&lt;br /&gt;
Pane need loogikalaused oma solverile sobivasse formaati:&lt;br /&gt;
&lt;br /&gt;
  P -&amp;gt; Q&lt;br /&gt;
  L &amp;amp; M -&amp;gt; P&lt;br /&gt;
  B &amp;amp; L -&amp;gt; M&lt;br /&gt;
  A &amp;amp; P -&amp;gt; L&lt;br /&gt;
  A &amp;amp; B -&amp;gt; L&lt;br /&gt;
  A&lt;br /&gt;
  B&lt;br /&gt;
&lt;br /&gt;
Tee kindlaks, et neist järeldub &amp;quot;Q&amp;quot;. Kui &amp;lt;code&amp;gt;A &amp;amp; B -&amp;gt; L&amp;lt;/code&amp;gt; reegel ära võtta, siis ei tohiks enam järelduda. Sama, kui eemaldada üks faktidest &amp;quot;A&amp;quot; või &amp;quot;B&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tekstülesanne ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Intelligentne robot soovib mängida &amp;quot;kivi-käärid-paber&amp;quot; mängu. Robotil on hüpotees, et inimesed mängivad kahte strateegiat kasutades: a.) kui inimene teeb kahes mängus sama valiku, siis ta teeb ka kolmandas mängus samamoodi (näit. eelmises ja üle-eelmises mängus kivi, siis ka järgmises mängus kivi ) ning b.) kui kahes eelmises mängus on olnud erinev valik, siis järgmises mängus ei kasutata kumbagi neist (näiteks kui eelmises mängus oli kivi ja üle-eelmises paber, siis on oodata et inimene valib käärid)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Tee teadmusbaas, mille järgi saab robot käiku valida. Idee peaks olema selles, et ennustada, mis&lt;br /&gt;
on inimese järgmine valik kas strateegia a.) või b.) järgi ning roboti käik siis loomulikult selline, mis ennustatud valikut võidab.&lt;br /&gt;
&lt;br /&gt;
Pane tähele, et ülesande tekstis on üldised reeglid, lausearvutusloogikas tuleb meil aga kasutada konkreetseid fakte. Inimese eelmine valik oli kivi - see on kas tõene või väär, jne. Seega kirjuta abiskript või funktsioon, mis programmiliselt genereeriks reeglid igasuguste kivi, käärid ja paber kombinatsioonide jaoks.&lt;br /&gt;
&lt;br /&gt;
Teiseks kirjuta funktsioon, mis:&lt;br /&gt;
# võtab parameetriteks vastase kahe eelmise mängu valikud&lt;br /&gt;
# genereerib reeglibaasi ja lisab sinna faktidena valikud, mis parameetritena saadi&lt;br /&gt;
# küsib iga roboti valiku (&amp;quot;kivi&amp;quot;, &amp;quot;käärid&amp;quot;, &amp;quot;paber&amp;quot;) kohta, kas see valik teadmusbaasist järeldub. Üks neist peaks järelduma ning see tuleb ka väljastada.&lt;br /&gt;
&lt;br /&gt;
Näide:&lt;br /&gt;
&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; kkp(&amp;quot;Kivi&amp;quot;, &amp;quot;Kivi&amp;quot;)&lt;br /&gt;
  roboti käik: Paber&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; kkp(&amp;quot;Paber&amp;quot;, &amp;quot;Käärid&amp;quot;)&lt;br /&gt;
  roboti käik: Paber&lt;/div&gt;</summary>
		<author><name>PriitJ</name></author>
	</entry>
</feed>