Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Göra min egen AI

Postades av 2003-05-27 17:26:04 - Henke Larsson, i forum spel/grafik, Tråden har 5 Kommentarer och lästs av 1263 personer

Hej jag håller på att göra en liten spelar boot till ett schack spel jag gör. Boten är ingen mästare på scack men den ska inte vara helt hjärn död heller. Jag har alldrig gjort något liknande och undrar därför om någon kan hjälpa mig att förklara vilka metoder man använder för att göra en sådan AI allt bygger ju på regler men verkar lite drygt att sitta och köra if-sattser för alla möjliga kombinationer ;) Kan ni gen någon bra hänvisning till litteratur eller www adresser så skulle jag vara tacksam. Eller det kanske rent av finns någon som man direkt kan konsultera där ute.

MVH Henrik L


Svara

Sv: Göra min egen AI

Postades av 2003-05-27 19:51:40 - Per Hultqvist

Hej,

Kul uppgift! Har flera gånger själv börjat skriva schack-spelande program men aldrig riktigt slutfört det...hoppas du kommer längre.

Det finns hur mycket teori som helst för att skriva ett schackprogram och jag kan inte dra allt här (för jag vet inte allt :-). Men några fundamentala delar är :

* Spelets regler
* Skapa ett träd av giltiga drag
* Målfunktion, dvs hur bra är ett visst drag (eller snarare positionen efter att draget är utfört).
* Välj ut bästa draget
* Optimeringar

Låt oss gå igenom dom något mer detaljerat.

* Spelets regler

Skapa en funktion som genererar en lista med alla giltiga drag. Här måste du ta hänsyn till alla spelets regler, schack matt, schack, rockad, pjäsuppgradering, en passant m m. Denna lista används för att bygga upp sökträdet.

* Skapa ett träd av giltiga drag

Skapa en rotnod som representerar den nuvarande positionen på brädet. För varje giltigt drag, skapa en barnnod till rotnoden med positionen efter att respektive drag är genomfört. Detta är det som på engelska kallas för en "ply" (en term du kommer att stöta på säkert om du söker vidare på internet), dvs ett drag oavsett om det är svart eller vit som gjort draget. För varje nod på nivå ett så genererar du en lista av giltiga motdrag och lägger in dessa i trädet och så har du skapat ply 2, o s v. Hur många nivåer du ska studera beror på hur lång betänketid du har, processorhastighet m m. Se även under optimering nedan.

* Målfunktion

Målfunktionen ska utifrån en viss position, ett visst läge i spelet, räkna ut vem (svart eller vit) som "leder". Skapa en funktion som returnerar ett flyttal (t ex mellan -1000 och +1000) där positiva värden representerar en schackposition som är gynsam för dig och negativa värden tvärtom gynsamma för motspelaren. Om positionen innebär att en spelare står i schackmatt så ska -1000 eller +1000 returneras. Tal nära noll innebär förstås att spelet är jämnt för tillfället. Hur denna funktions ska skrivas är omöjligt att säga, det är här dina schackkunskaper kommer in. Ju bättre din funktion "räknar ut" ställningen på brädet, desto bättre kommer ditt program att kunna spela. Du måste ta hänsyn till båda material (pjäser) och position...

* Välj ut bästa draget

En annan lite knepig del av ditt program. En hyffsat enkel algoritm är minimaxalgoritmen eller alpha-beta-algoritmen som jag också tror den kallas. Sök på dessa namn på internet så hittar du bättre beskrivningar på den. Här handlar det iallafall om att MAXIMERA värdet på målfunktionen i nivå ett i trädet (du vill ju göra ett så bra drag som möjligt), men samtidigt måste du förutsätta att din motspelare gör sitt bästa motdrag så på nivå två måste du MINIMERA värdet. Om din målfunktion säger att du har ett drag som ger värdet +20 så kanske du tycker att du ska välja det, men om ett av motspelarens svar på ditt drag ger -30 så är det ju inte bra för dig. Förutsätt alltid att din motspelare spelar lika bra eller bättre än du.

När din tid är ute, eller när du grävt klart i trädet av möjliga spelmöjligheter så måste du bestämma dig för ett drag. Du måste nu leta upp den nod på lägsta nivån (alltså noder som inte har några andra barnnoder) som har det högsta värdet (vilket ju är bra för dig, negativa värden på målfunktionen är bra för motståndaren).

* Optimering

Om du har ett giltigt drag som direkt leder till ett stort negativt värde så ska du kanske överväga att inte gräva djupare i den noden eftersom det kan vara svårt att repa sig efter ett sådant nederlag. Bättre är kanske att gräva djupare i ett drag som verkar positivare. Att hela tiden gräva ett visst antal nivåer kommer aldrig leda till ett riktigt bra program. Förr eller senare måste du gallra och titta nogrannare på mer intressanta drag. Se upp för horisontproblemet...det kanske ser ut som om du förlorar ett torn, men om du hade analyserat ett drag eller två till hade du kanske vunnit en dam!! Kanonsvårt att bedöma var man ska söka vidare.


Jag har säkert glömt något väsentligt, men hur som helst...Det är ingen liten uppgift du har framför dig dock. Lycka till...


Svara

Sv: Göra min egen AI

Postades av 2003-05-27 20:22:52 - Per Hultqvist

En bra länk som beskriver minimax, negamax samt alphabeta-algoritmerna :

http://www.fierz.ch/strategy1.htm


Svara

Sv: Göra min egen AI

Postades av 2003-05-27 20:28:06 - Henke Larsson

Tackar för den fina beskrivningen. Vet du någon bra bok som behandlar det där med att skapa träd och sedan söka i dem. Gärna en bok på svenska men engelaska böcker funkar också.

MVH Henrik L


Svara

Sv: Göra min egen AI

Postades av 2003-05-27 20:51:17 - Per Hultqvist

Tyvärr inte...jag har själv några ganska tunga böcker om algoritmteori där algoritmerna finns beskrivna men de är knappast idealiska för att bara lösa ett enskilt problem. Jag skulle nog hellre kontakt en datorschackklubb eller en vanlig schackklubb och be om tips. Det finns garanterat med praktiska böcker än algoritmteoriböcker som är tunglästa...


Svara

Sv: Göra min egen AI

Postades av 2003-06-12 18:21:23 - Jens Jacobsson

det finns en jätte bra bok som tar upp hur man gör ai spelar i schack..
"spel programmering på 3 veckor med visual basic"
tror den går att köpa på pagina.se


Svara

Nyligen

  • 21:41 Automotive Services UK
  • 20:44 Erfarenhet av CBD-olja mot sömnpro
  • 12:13 Sex Dolls for Sale
  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 879
27 965
271 774
670
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies