Სარჩევი:

Tic Tac Toe არდუინოზე AI (მინიმაქსის ალგორითმი): 3 ნაბიჯი
Tic Tac Toe არდუინოზე AI (მინიმაქსის ალგორითმი): 3 ნაბიჯი

ვიდეო: Tic Tac Toe არდუინოზე AI (მინიმაქსის ალგორითმი): 3 ნაბიჯი

ვიდეო: Tic Tac Toe არდუინოზე AI (მინიმაქსის ალგორითმი): 3 ნაბიჯი
ვიდეო: TIC TAC TOE - Warum? (Für Melanie) (Musikvideo) 2024, ნოემბერი
Anonim
Image
Image
აშენება და თამაში
აშენება და თამაში

ამ ინსტრუქციურად მე ვაპირებ გაჩვენოთ როგორ ავაშენოთ Tic Tac Toe თამაში AI– ით Arduino– ს გამოყენებით. თქვენ შეგიძლიათ ითამაშოთ არდუინოს წინააღმდეგ ან უყუროთ არდუინოს თამაშს საკუთარი თავის წინააღმდეგ.

მე ვიყენებ ალგორითმს სახელწოდებით "მინიმაქსის ალგორითმი", რომელიც შეიძლება გამოყენებულ იქნას არა მხოლოდ ხელოვნური ინტელექტის შესაქმნელად Tic Tac Toe– სთვის, არამედ სხვადასხვა სახის თამაშებისთვის, როგორიცაა Four in a Row, ქვები ან ჭადრაკიც კი. ჭადრაკის მსგავსი თამაშები ძალიან რთულია და მოითხოვს ალგორითმის ბევრად დახვეწილ ვერსიებს. ჩვენი Tic Tac Toe თამაშისთვის ჩვენ შეგვიძლია გამოვიყენოთ ალგორითმის უმარტივესი ვერსია, რომელიც მაინც საკმაოდ შთამბეჭდავია. სინამდვილეში, AI იმდენად კარგია, რომ შეუძლებელია არდუინოს დამარცხება!

თამაში ადვილი ასაშენებელია. თქვენ გჭირდებათ მხოლოდ რამდენიმე კომპონენტი და ესკიზი, რომელიც მე დავწერე. მე ასევე დავამატე ალგორითმის უფრო დეტალური ახსნა, თუ გსურთ გაიგოთ როგორ მუშაობს.

ნაბიჯი 1: შექმენით და ითამაშეთ

Tic Tac Toe თამაშის შესაქმნელად დაგჭირდებათ შემდეგი კომპონენტები:

  • არდუინო უნო
  • 9 WS2812 RGB ები
  • 9 ღილაკი
  • რამდენიმე მავთული და ჯუმბერის კაბელი

შეაერთეთ კომპონენტები, როგორც ეს ნაჩვენებია ფრიზინგის ესკიზში. შემდეგ ატვირთეთ კოდი თქვენს არდუინოში.

სტანდარტულად, Arduino იღებს პირველ რიგში. იმისათვის, რომ საქმე უფრო საინტერესო იყოს, პირველი ნაბიჯი შემთხვევით ირჩევა. პირველი ნაბიჯის შემდეგ, Arduino იყენებს მინიმაქსის ალგორითმს, რათა განსაზღვროს საუკეთესო შესაძლო ნაბიჯი. თქვენ იწყებთ ახალ თამაშს Arduino– ს გადატვირთვით.

თქვენ შეგიძლიათ ნახოთ არდუინოს "აზროვნება" სერიული მონიტორის გახსნით. ყოველი შესაძლო ნაბიჯისათვის, ალგორითმი ითვლის რეიტინგს, რომელიც მიუთითებს გამოიწვევს თუ არა ეს ნაბიჯი მოგებას (მნიშვნელობა 10) ან წაგებას (მნიშვნელობა -10) არდუინოსთვის თუ ფრეს (მნიშვნელობა 0).

თქვენ ასევე შეგიძლიათ უყუროთ არდუინოს თამაშს თავის წინააღმდეგ, ესკიზის დასაწყისში ხაზის "#განსაზღვრეთ DEMO_MODE" კომენტარის გარეშე. თუ თქვენ ატვირთავთ მოდიფიცირებულ ესკიზს, Arduino აკეთებს პირველ ნაბიჯს შემთხვევით და შემდეგ იყენებს მინიმაქსის ალგორითმს, რათა განსაზღვროს თითოეული მოთამაშისთვის საუკეთესო სვლა თითოეულ შემობრუნებაში.

გაითვალისწინეთ, რომ არდუინოს წინააღმდეგ ვერ გაიმარჯვებთ. შეცდომის დაშვების შემთხვევაში ყველა თამაში ან ფრედ დასრულდება, ან წააგებთ. ეს იმიტომ ხდება, რომ ალგორითმი ყოველთვის ირჩევს მაქსიმალურ შესაძლებლობას. როგორც მოგეხსენებათ, ტიკ ტაკის თამაში ყოველთვის ფრედ დასრულდება, თუ ორივე მოთამაშე არ დაუშვებს შეცდომას. დემო რეჟიმში, ყველა თამაში ფრედ მთავრდება, რადგან, როგორც ყველამ ვიცით, კომპიუტერები არასოდეს უშვებენ შეცდომებს;-)

ნაბიჯი 2: მინიმაქსის ალგორითმი

მინიმაქსის ალგორითმი
მინიმაქსის ალგორითმი

ალგორითმი ორი კომპონენტისგან შედგება: შეფასების ფუნქცია და ძიების სტრატეგია. შეფასების ფუნქცია არის ფუნქცია, რომელიც რიცხვით მნიშვნელობას ანიჭებს დაფის პოზიციებს. თუ პოზიცია არის საბოლოო პოზიცია (ანუ პოზიცია, სადაც ლურჯმა ან წითელმა მოთამაშემ გაიმარჯვა ან სადაც არცერთმა მოთამაშემ არ მოიგო), შეფასების ფუნქცია ძალიან მარტივია: ვთქვათ არდუინო თამაშობს ლურჯად და ადამიანი თამაშობს წითლად რა თუ პოზიცია არის ლურჯი ფერის მომგებიანი პოზიცია, ფუნქცია ანიჭებს მნიშვნელობას 10 ამ პოზიციას; თუ ეს არის წითელი ფერის მომგებიანი პოზიცია, ფუნქცია ანიჭებს მნიშვნელობას -10 პოზიციას; და თუ პოზიცია არის გათამაშება, ფუნქცია ანიჭებს მნიშვნელობას 0.

როდესაც დადგება არდუინოს ჯერი, მას სურს აირჩიოს ნაბიჯი, რომელიც მაქსიმალურად გაზრდის შეფასების ფუნქციას, რადგან ღირებულების მაქსიმუმი ნიშნავს იმას, რომ უპირატესობას ანიჭებს გამარჯვებას ფრეზე (10 აღემატება 0 -ს) და უპირატესობას ანიჭებს ფრეს წაგებაზე (0 მეტია -10 -ზე). ანალოგიური არგუმენტით, მოწინააღმდეგეს უნდა ითამაშოს ისე, რომ მან შეამციროს შეფასების ფუნქციის მნიშვნელობა.

არასამთავრობო საბოლოო პოზიციისთვის, ალგორითმი ითვლის შეფასების ფუნქციის მნიშვნელობას რეკურსიული ძებნის სტრატეგიით. მიმდინარე პოზიციიდან დაწყებული, ის მონაცვლეობით ახდენს ყველა იმ ნაბიჯის სიმულაციას, რისი გადადგმაც შეუძლია ლურჯ და წითელ მოთამაშეებს. ეს შეიძლება იყოს ვიზუალიზებული, როგორც ხე, როგორც დიაგრამაზე. როდესაც ის მიაღწევს საბოლოო პოზიციას, ის იწყებს უკან დახევას, ატარებს შეფასების ფუნქციის მნიშვნელობას ქვედა რეკურსიული დონიდან უფრო მაღალ რეკურსიულ დონეზე. იგი მინიჭებს მაქსიმალურ (თუ რეკურსიის შესაბამის საფეხურზე ცისფერი მოთამაშის ჯერია) ან მინიმალურ (თუ შესაბამის რეკურსიულ საფეხურზე ის წითელი მოთამაშის ჯერია) შეფასების ფუნქციის მნიშვნელობების ქვედა რეკურსიული დონიდან პოზიციამდე უმაღლესი რეკურსიის დონე. დაბოლოს, როდესაც ალგორითმი დაასრულებს უკან დახევას და კვლავ დაუბრუნდება ამჟამინდელ მდგომარეობას, ის იღებს იმ ნაბიჯს (ან ერთ – ერთ სვლას), რომელსაც აქვს შეფასების ფუნქციის მაქსიმალური მნიშვნელობა.

ეს შეიძლება ცოტა აბსტრაქტულად ჟღერდეს, მაგრამ სინამდვილეში არც ისე რთულია. განვიხილოთ დიაგრამის ზედა ნაწილში ნაჩვენები პოზიცია. პირველ რეკურსიულ საფეხურზე არის სამი განსხვავებული ნაბიჯის გადადგმა ლურჯზე. ლურჯი ცდილობს მაქსიმალურად გაზარდოს შეფასების ფუნქცია. თითოეული ნაბიჯის გადადგმისთვის ლურჯი შეუძლია მიიღოს ორი ნაბიჯი წითელი. წითელი ცდილობს შეამციროს შეფასების ფუნქციის მნიშვნელობა. განვიხილოთ ის ნაბიჯი, სადაც ლურჯი უკრავს ზედა მარჯვენა კუთხეში. თუ წითელი თამაშობს ცენტრალურ ყუთში, წითელმა გაიმარჯვა (-10). მეორეს მხრივ, თუ წითელი თამაშობს ცენტრალურ ქვედა ყუთში, ლურჯი გაიმარჯვებს შემდეგ სვლაში (10). ასე რომ, თუ ლურჯი თამაშობს ზედა მარჯვენა კუთხეში, წითელი ითამაშებს ცენტრალურ ყუთში, რადგან ეს ამცირებს შეფასების ფუნქციის მნიშვნელობას. ანალოგიურად, თუ ლურჯი თამაშობს ცენტრალურ ქვედა ყუთში, წითელი კვლავ ითამაშებს ცენტრალურ ყუთში, რადგან ეს ამცირებს შეფასების ფუნქციას. მეორეს მხრივ, თუ ლურჯი თამაშობს ცენტრალურ ყუთში, არ აქვს მნიშვნელობა რომელ ნაბიჯს დგამს წითელი, ლურჯი ყოველთვის გაიმარჯვებს (10). რადგან ლურჯს სურს შეფასების ფუნქციის მაქსიმალურად გაზრდა, ის ითამაშებს ცენტრალურ ყუთში, ვინაიდან ეს პოზიცია იწვევს შეფასების ფუნქციის უფრო დიდ მნიშვნელობას (10) ვიდრე სხვა ორ სვლას (-10).

ნაბიჯი 3: პრობლემების მოგვარება და შემდგომი ნაბიჯები

თუ დააჭერთ ღილაკს და ანათებს სხვა LED- ს, ვიდრე ის შეესაბამება ღილაკს, თქვენ ალბათ ან აირიეთ მავთულები A0-A2 ან 4-6 ქინძისთავებზე, ან LED- ები არასწორი თანმიმდევრობით დააკავშირეთ.

ასევე გაითვალისწინეთ, რომ ალგორითმი ყოველთვის არ ირჩევს სვლას, რომელიც არდუინოს შესაძლებლობას მისცემს რაც შეიძლება სწრაფად გაიმარჯვოს. სინამდვილეში, მე გარკვეული დრო გავატარე ალგორითმის გამართვაში, რადგან არდუინომ არ აირჩია ნაბიჯი, რომელიც იქნებოდა მომგებიანი ნაბიჯი. გარკვეული დრო დამჭირდა, სანამ მივხვდი, რომ მან აირჩია ნაბიჯი, რომელიც გარანტიას იძლეოდა, რომ მოგვიანებით მოიგებდა ერთ ნაბიჯს. თუ გსურთ, შეგიძლიათ სცადოთ ალგორითმის შეცვლა ისე, რომ ის ყოველთვის უპირატესობას ანიჭებს მომგებიან ნაბიჯს მოგვიანებით მოგებაზე.

ამ პროექტის შესაძლო გაგრძელება იქნება ალგორითმის გამოყენება 4x4 ან თუნდაც 5x5 Tic Tac Toe- სთვის AI- ს შესაქმნელად. ამასთან, გაითვალისწინეთ, რომ ალგორითმის შესამოწმებლად პოზიციების რაოდენობა ძალიან სწრაფად იზრდება. თქვენ უნდა მოძებნოთ გზები, რომ შეფასების ფუნქცია გახადოთ უფრო ინტელექტუალური, ფასეულობების დადგენით პოზიციებზე, რომლებიც არ არიან საბოლოო, იმის ალბათობის გათვალისწინებით, რომ მოთამაშისთვის პოზიცია კარგია ან ცუდი. თქვენ ასევე შეიძლება შეეცადოთ გახადოთ ძიება უფრო ინტელექტუალური, რეკურსიის ადრეული შეწყვეტით, თუკი ნაბიჯი აღმოჩნდება შემდგომი ძიების ნაკლებად ღირსი, ვიდრე ალტერნატიული ნაბიჯები.

Arduino ალბათ არ არის საუკეთესო პლატფორმა ასეთი გაფართოებისთვის მისი შეზღუდული მეხსიერების გამო. რეკურსია საშუალებას აძლევს დასტს გაიზარდოს პროგრამის შესრულების დროს და თუ დასტი ძალიან იზრდება, მას შეუძლია პროგრამის მეხსიერების გაფუჭება, რამაც შეიძლება გამოიწვიოს ავარია ან არასტაბილური ქცევა. მე შევარჩიე არდუინო ამ პროექტისთვის ძირითადად იმიტომ, რომ მინდოდა გამეგო თუ არა ამის გაკეთება და საგანმანათლებლო მიზნებისთვის და არა იმიტომ, რომ ეს საუკეთესო არჩევანია ამ სახის პრობლემისთვის.

გირჩევთ: