![Tic Tac Toe uz Arduino ar AI (Minimax algoritms): 3 soļi Tic Tac Toe uz Arduino ar AI (Minimax algoritms): 3 soļi](https://i.howwhatproduce.com/images/001/image-2790-33-j.webp)
Satura rādītājs:
2025 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2025-01-23 14:59
![Image Image](https://i.howwhatproduce.com/images/001/image-2790-35-j.webp)
![](https://i.ytimg.com/vi/6541tJaSBNQ/hqdefault.jpg)
![Veidot un spēlēt Veidot un spēlēt](https://i.howwhatproduce.com/images/001/image-2790-36-j.webp)
Šajā pamācībā es jums parādīšu, kā izveidot Tic Tac Toe spēli ar AI, izmantojot Arduino. Jūs varat spēlēt pret Arduino vai skatīties, kā Arduino spēlē pret sevi.
Es izmantoju algoritmu ar nosaukumu "minimax algoritms", ko var izmantot ne tikai, lai izveidotu mākslīgā intelekta Tic Tac Toe, bet arī daudzām citām spēlēm, piemēram, Četri rindā, dambrete vai pat šahs. Spēles, piemēram, šahs, ir ļoti sarežģītas, un tām ir vajadzīgas daudz izsmalcinātākas algoritma versijas. Mūsu Tic Tac Toe spēlei mēs varam izmantot vienkāršāko algoritma versiju, kas tomēr ir diezgan iespaidīga. Patiesībā AI ir tik labs, ka nav iespējams pārspēt Arduino!
Spēli ir viegli veidot. Jums ir vajadzīgas tikai dažas sastāvdaļas un mana uzrakstītā skice. Es arī pievienoju detalizētāku algoritma skaidrojumu, ja vēlaties saprast, kā tas darbojas.
1. darbība. Veidojiet un spēlējiet
Lai izveidotu spēli Tic Tac Toe, jums būs nepieciešami šādi komponenti:
- Arduino Uno
- 9 WS2812 RGB gaismas diodes
- 9 spiedpogas
- daži vadi un savienojuma kabeļi
Pievienojiet komponentus vadiem, kā parādīts Fritzing skicē. Pēc tam augšupielādējiet kodu savā Arduino.
Pēc noklusējuma Arduino uzņem pirmo pagriezienu. Lai padarītu lietas mazliet interesantākas, pirmais gājiens tiek izvēlēts nejauši. Pēc pirmā gājiena Arduino izmanto minimuma algoritmu, lai noteiktu labāko iespējamo gājienu. Jūs sākat jaunu spēli, atiestatot Arduino.
Jūs varat skatīties, kā Arduino "domā", atverot sērijas monitoru. Katram iespējamajam gājienam algoritms aprēķina vērtējumu, kas norāda, vai šī kustība novedīs pie Arduino uzvaras (vērtība 10) vai zaudējuma (vērtība -10) vai neizšķirta (vērtība 0).
Varat arī skatīties, kā Arduino spēlē pret sevi, pašā skices sākumā nekomentējot rindiņu "#define DEMO_MODE". Ja augšupielādējat modificēto skici, Arduino pirmo gājienu veic nejauši un pēc tam izmanto minimuma algoritmu, lai noteiktu labāko gājienu katram spēlētājam katrā gājienā.
Ņemiet vērā, ka jūs nevarat uzvarēt pret Arduino. Katra spēle vai nu beigsies neizšķirti, vai arī jūs zaudēsit, ja pieļausit kļūdu. Tas ir tāpēc, ka algoritms vienmēr izvēlas labāko iespējamo gājienu. Kā jūs zināt, Tic Tac Toe spēle vienmēr beigsies neizšķirti, ja abi spēlētāji nekļūdās. Demo režīmā katra spēle beidzas ar neizšķirtu, jo, kā mēs visi zinām, datori nekad nekļūdās;-)
2. solis: Minimax algoritms
![Minimax algoritms Minimax algoritms](https://i.howwhatproduce.com/images/001/image-2790-37-j.webp)
Algoritms sastāv no divām sastāvdaļām: novērtēšanas funkcijas un meklēšanas stratēģijas. Novērtēšanas funkcija ir funkcija, kas piešķir skaitlisku vērtību valdes pozīcijām. Ja pozīcija ir galīgā pozīcija (ti, pozīcija, kurā uzvarējis zilais vai sarkanais spēlētājs vai neviens no spēlētājiem), novērtēšanas funkcija ir ļoti vienkārša: pieņemsim, ka Arduino spēlē zilu, bet cilvēks - sarkanu.. Ja pozīcija ir zilā uzvara, funkcija šai pozīcijai piešķir vērtību 10; ja tā ir uzvarētāja pozīcija sarkanā krāsā, funkcija piešķir pozīcijai vērtību -10; un, ja pozīcija ir neizšķirts, funkcija piešķir vērtību 0.
Kad pienāk Arduino kārta, tas vēlas izvēlēties gājienu, kas maksimāli palielina vērtēšanas funkcijas vērtību, jo vērtības palielināšana nozīmē, ka tā dod priekšroku uzvarai, nevis neizšķirtam (10 ir lielāka par 0), bet dod priekšroku neizšķirtam, nevis zaudējumam (0 ir lielāks par -10). Ar līdzīgu argumentu pretiniece vēlas spēlēt tā, lai viņa samazinātu novērtēšanas funkcijas vērtību.
Attiecībā uz pozīciju, kas nav galīga, algoritms aprēķina novērtēšanas funkcijas vērtību, izmantojot rekursīvu meklēšanas stratēģiju. Sākot no pašreizējās pozīcijas, tas pārmaiņus simulē visas kustības, ko var veikt zilais un sarkanais spēlētājs. To var vizualizēt kā koku, piemēram, diagrammā. Kad tas nonāk galīgajā pozīcijā, tas sāk atkāpties, pārnesot novērtēšanas funkcijas vērtību no zemākā rekursijas līmeņa uz augstāko rekursijas līmeni. Tas piešķir maksimālo (ja attiecīgajā rekursijas posmā ir zilā spēlētāja kārta) vai minimālo (ja attiecīgajā rekursijas solī ir sarkanā spēlētāja kārta) vērtēšanas funkcijas vērtības no zemākā rekursijas līmeņa uz pozīciju augstāks rekursijas līmenis. Visbeidzot, kad algoritms ir pabeidzis atkāpšanos un atkal sasniedzis pašreizējo pozīciju, tas aizņem šo gājienu (vai vienu no gājieniem), kuram ir maksimālā novērtēšanas funkcijas vērtība.
Tas var likties nedaudz abstrakti, bet patiesībā tas nav tik grūti. Apsveriet pozīciju, kas parādīta diagrammas augšpusē. Pirmajā rekursijas solī ir trīs dažādas zilās kustības. Zils mēģina palielināt novērtēšanas funkcijas vērtību. Katrai zilajai kustībai ir divas sarkanas. Sarkans mēģina samazināt novērtēšanas funkcijas vērtību. Apsveriet gājienu, kur zilais spēlē augšējā labajā stūrī. Ja centra lodziņā spēlē sarkanā krāsa, sarkanā krāsa ir uzvarējusi (-10). Savukārt, ja centrā apakšējā lodziņā spēlē sarkanā krāsa, nākamajā gājienā uzvarēs zilā krāsa (10). Tātad, ja augšējā labajā stūrī tiek atskaņots zils, centrālajā lodziņā tiks atskaņots sarkans, jo tas samazina novērtēšanas funkcijas vērtību. Līdzīgi, ja apakšējā apakšējā lodziņā spēlē zils, tad centrālajā lodziņā atkal tiks atskaņots sarkans, jo tas samazina novērtēšanas funkciju. Savukārt, ja centra lodziņā spēlē zils, nav nozīmes tam, kurš gājiens ir sarkans, zils vienmēr uzvarēs (10). Tā kā zilā krāsa vēlas palielināt novērtēšanas funkciju, tā tiks atskaņota centrālajā lodziņā, jo šī pozīcija rada lielāku novērtēšanas funkcijas vērtību (10) nekā pārējās divas kustības (-10).
3. darbība: problēmu novēršana un turpmākās darbības
Ja nospiežat pogu un iedegas cita gaismas diode, nevis tā, kas atbilst pogai, iespējams, ka esat sajaukuši vadus uz tapām A0-A2 vai 4-6, vai arī pievienojāt gaismas diodes nepareizā secībā.
Ņemiet vērā arī to, ka algoritms ne vienmēr izvēlas gājienu, kas ļaus Arduino uzvarēt pēc iespējas ātrāk. Patiesībā es kādu laiku pavadīju algoritma atkļūdošanā, jo Arduino neizvēlējās gājienu, kas būtu uzvarējis. Pagāja kāds laiks, līdz es sapratu, ka tā vietā ir izvēlēts gājiens, kas garantēja, ka tas uzvarēs vienu gājienu vēlāk. Ja vēlaties, varat mēģināt modificēt algoritmu tā, lai tas vienmēr dotu priekšroku uzvarošam solim, nevis vēlākam laimējumam.
Iespējamais šī projekta paplašinājums būtu izmantot algoritmu, lai izveidotu AI 4x4 vai pat 5x5 Tic Tac Toe. Tomēr ņemiet vērā, ka algoritmam pārbaudāmo pozīciju skaits pieaug ļoti strauji. Jums būs jāatrod veidi, kā padarīt novērtēšanas funkciju saprātīgāku, nosakot vērtības pozīcijām, kas nav galīgas, pamatojoties uz varbūtību, ka attiecīgā spēlētāja pozīcija ir laba vai slikta. Varat arī mēģināt padarīt meklēšanu saprātīgāku, pārtraucot rekursiju agri, ja gājiens izrādās mazāk cienīgs tālākai izpētei nekā alternatīvi gājieni.
Arduino, iespējams, nav labākā platforma šādiem paplašinājumiem, jo tai ir ierobežota atmiņa. Rekursija ļauj kaudzei augt programmas izpildes laikā, un, ja kaudze aug pārāk daudz, tā var sabojāt programmas atmiņu, izraisot avārijas vai nepareizu darbību. Es izvēlējos Arduino šim projektam galvenokārt tāpēc, ka vēlējos noskaidrot, vai to var izdarīt, un izglītības nolūkos, nevis tāpēc, ka tā ir labākā izvēle šāda veida problēmām.
Ieteicams:
Pašbalansējošs robots - PID kontroles algoritms: 3 soļi
![Pašbalansējošs robots - PID kontroles algoritms: 3 soļi Pašbalansējošs robots - PID kontroles algoritms: 3 soļi](https://i.howwhatproduce.com/images/001/image-2620-j.webp)
Pašbalansējošs robots - PID kontroles algoritms: Šis projekts tika izstrādāts, jo man bija interese uzzināt vairāk par vadības algoritmiem un to, kā efektīvi ieviest funkcionālās PID cilpas. Projekts vēl ir izstrādes stadijā, jo vēl nav pievienots Bluetooth modulis, kas
Arduino Touch Tic Tac Toe spēle: 6 soļi (ar attēliem)
![Arduino Touch Tic Tac Toe spēle: 6 soļi (ar attēliem) Arduino Touch Tic Tac Toe spēle: 6 soļi (ar attēliem)](https://i.howwhatproduce.com/images/002/image-4304-6-j.webp)
Arduino Touch Tic Tac Toe spēle: Dārgie draugi, laipni lūdzam citā Arduino apmācībā! Šajā detalizētajā apmācībā mēs izveidosim spēli Arduino Tic Tac Toe. Kā redzat, mēs izmantojam skārienekrānu un spēlējam pret datoru. Vienkārša spēle, piemēram, Tic Tac Toe, ir
Kordiskais algoritms, izmantojot VHDL: 4 soļi
![Kordiskais algoritms, izmantojot VHDL: 4 soļi Kordiskais algoritms, izmantojot VHDL: 4 soļi](https://i.howwhatproduce.com/images/004/image-10004-j.webp)
Kordiskais algoritms, izmantojot VHDL: ## Šī ir visvairāk noklikšķinātā, populārākā saite Google tīklā CORDIC ALGORITHM VHDL ieviešanai, lai radītu sinusa un kosinusa vilni. ## Pašlaik pastāv daudzi aparatūrai efektīvi algoritmi, taču tie nav labi zināmi mīksto karu pārsvars
Galda spēle Mākslīgais intelekts: minimumax algoritms: 8 soļi
![Galda spēle Mākslīgais intelekts: minimumax algoritms: 8 soļi Galda spēle Mākslīgais intelekts: minimumax algoritms: 8 soļi](https://i.howwhatproduce.com/images/001/image-2247-14-j.webp)
Galda spēle Mākslīgais intelekts: Minimax algoritms: Vai esat kādreiz domājuši, kā tiek izgatavoti datori, pret kuriem spēlējat šahā vai dambretē? Neskatieties tālāk par šo pamācību, jo tā parādīs, kā izveidot vienkāršu, bet efektīvu mākslīgo intelektu (AI), izmantojot Minimax algoritmu! Izmantojot šo
Interaktīva Tic-Tac Toe spēle, ko kontrolē ar Arduino: 6 soļi
![Interaktīva Tic-Tac Toe spēle, ko kontrolē ar Arduino: 6 soļi Interaktīva Tic-Tac Toe spēle, ko kontrolē ar Arduino: 6 soļi](https://i.howwhatproduce.com/images/001/image-2812-43-j.webp)
Interaktīva spēle Tic-Tac Toe kontrolēta ar Arduino: Fiziskā Tic-Tac-Toe projekta mērķis ir pārvietot labi pazīstamu spēli fiziskajā jomā. Sākotnēji spēli spēlē divi spēlētāji uz papīra lapas - pēc kārtas ievietojot “X” un “O” simbolus. Mūsu ideja bija pārbaudīt spēlētāju uzvedību