Utveckling av artificiell intelligens i schackprogram. Artificiell intelligens har blivit smartare än mänsklig intelligens

kultur. Avhandling. Cand. Ped.Sc. Rostov-on-Don. 2003.

2. Azarova E.A. Destruktiva former av familjeundervisning, vår tids aktuella problem, senaste tidens brott: andliga, moraliska och kriminologiska aspekter. - Rostov-on-Don: Förlag vid Russian State Pedagogical University, 2005.

3. Gabdreva GSh. Huvudaspekter av problemet med ångest i psykologi // Skolpsykolog. - 2004. - N° 8. - P. 9.

4. Eniklopov S.N. Problem med familjevåld // Problems of psychology. -2002. -Nr 5-6.

5. Tseluiko V.M. Psychology of dysfunctional familys: En bok för lärare och föräldrar. - M.: Förlaget VLADOS-PRESS, 2003.

6.Shapar V.B. Praktisk psykologi. Psykodiagnostik av relationer mellan föräldrar och barn. -Rostov n/d: Phoenix, 2006.

© Azarova E.A., Zhulina G.N., 2016

A.I. Alifirov

Ph.D. ped. Vetenskaper, docent RGSU, Moskva, Ryssland

I.V. Mikhailova Ph.D. ped. Vetenskaper, docent RGSU, Moskva, Ryssland

"ARTIFICIAL INTELLIGENS" I SCHACK

anteckning

Artikeln undersöker uppkomsten av användningen av mjukvara och hårdvara som kan utföra intellektuell aktivitet jämförbar med mänsklig intellektuell aktivitet.

Nyckelord

Datorteknik i schack, schackprogram, schack.

Idag hänvisar termen "artificiell intelligens" (AI) till teorin om att skapa mjukvara och hårdvara som kan utföra intellektuell aktivitet jämförbar med mänsklig intellektuell aktivitet. När de löser praktiska problem använder de oftast en uppgift från listan, och tror att om ett datorsystem kan lösa dessa problem så är det ett AI-system. Ofta inkluderar denna lista att spela schack, bevisa teorem, lösa diagnostiska problem med hjälp av en initial ofullständig datauppsättning, förstå naturligt språk, förmågan att lära och självlära, förmågan att klassificera objekt, såväl som förmågan att utveckla ny kunskapsbaserad om generering av nya regler och regulariseringsmodeller kunskap

Ett av den nya vetenskapens viktigaste problem - cybernetik - var problemet med hur man förbättrar ledningen, hur man förbättrar beslutsfattandet. En av grundarna av cybernetik, C. Shannon, föreslog att formalisera och programmera schack för att använda en schackdator som modell för att lösa liknande kontrollproblem. K. Shannons auktoritet var så stor att hans idéer omedelbart lade grunden för en ny vetenskaplig riktning. Idéerna av K. Shannon användes i verk av A. Turing, K. Zuse, D. Prinz.

Författare till informationsteori. K. Shannon, skrev: "En schackmaskin är idealisk att börja med eftersom (1) problemet är tydligt definierat av de tillåtna operationerna (dragen) och det slutliga målet (schackmatt); (2) det är inte för enkelt att vara trivialt , och inte alltför svårt att få en tillfredsställande lösning, (3) tror att schack kräver "tänkande" för att spela skickligt, att lösa detta problem kommer att leda oss att antingen beundra förmågan hos mekaniserat tänkande, eller att begränsa vårt koncept av "tänkande"; (4) Schackets diskreta struktur stämmer väl överens med moderna datorers digitala natur."

Därefter blev schack föremål för konkurrens mellan naturlig och artificiell intelligens och ett antal matcher spelades mellan världens ledande schackspelare mot datorer. 1995, i en intervju med den populära tidningen Wired, gjorde G.K. Kasparov beskrev sin syn på schackspelet: "Schack är inte matematik. Det är fantasi och fantasi, det är mänsklig logik, och inte ett spel med ett förutsägbart resultat. Jag tror inte att schackspelet teoretiskt kan rymmas i en uppsättning formler eller algoritmer." Två år senare fick superdatorn DEEP BLUE, efter att ha besegrat den 13:e världsmästaren G.K. Kasparova tog, i en revanschmatch på sex matcher, bort frågan om artificiell intelligens i schack från dagordningen. DEEP BLUE lagrade en komplett databas över alla spel i minnet och analyserade strategin uteslutande genom beräkning. Efter matchen har G.K. Kasparov ändrade sin åsikt och erkände att: "Schack är det enda fältet där du kan jämföra mänsklig intuition och kreativitet med kraften och maskinerna." Matchen förändrade utvecklingen av både klassiskt schack och datorschack. Artificiell intelligens hjälp har blivit mycket använd i utbildningssystemet. DI. Bronstein skrev i sin bok "David vs. Goliath" (2003): "Botvinnik trodde att schack är analysens konst, och tiden för ensamma improvisatörer som Andersen, Morphy, Zukertort är borta för alltid. Om vi ​​tittar på modernt schack, måste erkänna att Botvinnik visade sig ha rätt. "Datorpojkarna" tog hans idé om behovet av hemanalys till det absurda. De döljer inte ens att de putsar öppningsvariationerna till ett tydligt resultat. Kl. turneringen i Linares (2000) erkände ungraren Leko utan en skugga av förlägenhet att hela spelet med Anand var på hans dator!

Lista över använd litteratur:

1. Alifirov A.I. Karriärvägledningsarbete i gymnasieskolor med schack / Alifirov A.I. // Problem med utveckling av vetenskap och utbildning: teori och praktik. Samling av vetenskapliga artiklar baserade på material från International Scientific and Practical Conference den 31 augusti 2015: i 3 delar. Del II. M.: "AR-Consult", 2015 - s. 13-14.

2. Mikhailova I.V., Alifirov A.I. Schackspelares taktiska handlingar / Mikhailova I.V., Alifirov A.I. // Resultat av vetenskaplig forskning Samling av artiklar från International Scientific and Practical Conference. Verkställande redaktör: Sukiasyan Asatur Albertovich (15 februari 2016) kl. 16.00 Del 3 - Ufa: AETERNA. -2016.S. 119-121.

3. Mikhailova I.V., Alifirov A.I. Teoretiska och metodologiska grunder för metoden att tänka med schackspelarscheman / Mikhailova I.V., Alifirov A.I. // Resultat av vetenskaplig forskning Samling av artiklar från International Scientific and Practical Conference. Verkställande redaktör: Sukiasyan Asatur Albertovich (15 februari 2016) kl. 16.00 Del 3 - Ufa: AETERNA. - 2016. s. 123-125.

4. Mikhailova I.V. Träning av unga högt kvalificerade schackspelare med hjälp av datorschackprogram och Internet: författarens sammanfattning. dis. ...cand. ped. Vetenskaper: 13.00.04 / Mikhailova Irina Vitalievna; RGUFK. - M., 2005. - 24 sid.

© Alifirov A.I., Mikhailova I.V., 2016

UDC 378.046.2

A.I. Alifirov

Kandidat för pedagogiska vetenskaper, docent RGSU, Moskva, Ryska federationen V.V. Fedchuk, Ph.D.

Blagopoluchie LLC, senior instruktörsmetodolog, Moskva, RF STUDIE AV FYSISK HÄLSONIVÅ FÖR UNGDOMAR

anteckning

Artikeln diskuterar problemet med ungdomars fysiska hälsa och påverkan av olika faktorer

Foton från öppna källor

Den nya artificiella intelligensen blev den bästa schackspelaren på jorden på bara 4 timmars träning! (hemsida)

Kommer du ihåg vilken sensation schacksuperdatorn "Deep Blue" orsakade 1996, då han vann det första spelet mot den ryske mästaren Garry Kasparov? Trots att vår landsman fortfarande vann detta spel, blev det klart redan då att artificiell intelligens utvecklades snabbt och en dag skulle bli charmig den bästa schackspelaren, varefter det kommer att vara värdelöst för folk att spela med programmet. Den enda frågan som återstod var när detta skulle ske.

Representanter för det berömda Google-företaget sa att den här tiden äntligen har kommit. Enligt experter förvandlades AlphaZero neurala nätverk som de utvecklade på bara 4 timmars självträning till den mest virtuosa och oklanderliga schackspelaren i hela detta spels historia. En supermäktig artificiell intelligens lärde sig att spela schack och bara kände till dess regler. Efter att ha spelat med sig själv i 4 timmar lärde sig roboten att spela perfekt och besegrade enkelt schackprogrammet Stockfish, som tidigare ansågs vara det mest perfekta. Datorer spelade 100 spel – AlphaZero lyckades vinna 28 av dem och dra de återstående 72. Ett avancerat neuralt nätverk som imiterar den mänskliga hjärnans arbete kan ta risker och till och med använda en slags intuition.

Det finns inte längre något behov av att drömma om seger över artificiell intelligens.

Tidigare AlphaZero-modeller lärde sig spelet genom att titta på schackspelare live. Utvecklarna antog att detta skulle hjälpa artificiell intelligens bättre att förstå spelstrategier. Faktum är att det visade sig att övervakning av människor bara bromsar utvecklingen av programmet. När det neurala nätverket lämnades åt sig själv sköt dess förmågor i höjden. Nu funderar Googles ingenjörer på hur man tillämpar sådan teknik för verklig nytta för mänskligheten, sedan schackspel, även den mest virtuosa, har inget praktiskt syfte.

1968 gjorde den berömde David Levy en satsning på att inget program skulle slå honom inom det kommande decenniet. Under hela denna tid tävlade stormästaren ständigt med olika schackdatorer och vann mot dem varje gång. 1978 besegrade han det starkaste programmet på den tiden, Chess 4.7, och vann ett vad. Tyvärr kommer det inte längre att vara så intressanta slagsmål i dessa dagar - vi kommer nu bara behöva lära oss om hur ett fantastiskt neuralt nätverk besegrade ett annat. Levande schackspelare kan inte längre drömma om att besegra sådana monster. Och detta är bara början på sådana segrar av AI över människor...

Grishanin E.A. Durin S.V. Innehåll 1. Vad är artificiell intelligens? 2. Om kunskapsbaser. 3. Testuppgifter. Artificiell intelligens. På 60-talet av 1900-talet dök en ny sektion av datavetenskap upp, som kallades "Artificiell intelligens". Den encyklopediska ordboken säger: "Intelligens (från latin intellectus - kunskap, förståelse, förnuft) - förmågan att tänka, rationell kunskap." Denna förmåga är helt karakteristisk endast för människor. Ämnet för studier av vetenskapen "Artificiell intelligens" är mänskligt tänkande. Forskare letar efter ett svar på frågan: hur tänker en person? Målet med denna forskning är att skapa en modell av mänsklig intelligens och implementera den på en dator. Något förenklat låter ovanstående mål så här: - Att lära en maskin att tänka. När man börjar lösa ett problem har en person ofta inte ett tydligt handlingsprogram. Han bygger det här programmet själv medan han arbetar. Till exempel, när han spelar schack känner en schackspelare till spelets regler och har som mål att vinna spelet. Hans handlingar är inte förprogrammerade. De beror på motståndarens handlingar, på den utvecklande positionen på brädet, på schackspelarens intelligens och personliga erfarenhet. Det finns många andra mänskliga aktiviteter som inte kan programmeras i förväg. Till exempel att komponera musik och poesi, bevisa ett teorem, litterär översättning från ett främmande språk, diagnostisera och behandla sjukdomar och mycket mer. Du är väl medveten om att en dator utför allt arbete enligt ett program. Program skrivs av människor och datorn kör dem formellt. Utvecklare av system för artificiell intelligens försöker just lära en maskin, som en person, att självständigt bygga ett program för dess handlingar baserat på villkoren för uppgiften. Du kan också säga så här: målet är att förvandla datorn från en formell artist till en intellektuell artist. Formella utföraredataprogram Utförande av programresultaten Intelligenta utföraredata Konstruktion av programmet Utförande av programresultaten Funktionsmodell för den formella och intellektuella utföraren Varje artificiell intelligenssystem verkar inom ett specifikt ämnesområde (medicinsk diagnostik, lagstiftning, matematik, ekonomi, etc.) .). Liksom en specialist måste en dator ha kunskap inom ett givet område. Kunskap inom ett specifikt ämnesområde, formaliserad på ett visst sätt och lagrad i datorns minne, kallas en datorkunskapsbas. Till exempel vill du använda en dator för att lösa geometriproblem. Om det finns 500 problem i problemboken olika innehåll , då med traditionell datoranvändning måste du skriva 500 program. Om en specialist på artificiell intelligens tar på sig detta problem, kommer han att närma sig det helt annorlunda. Han kommer att lägga kunskap om geometri i datorn (precis som lärare lägger kunskap i dig). Baserat på denna kunskap och med hjälp av en speciell logisk resonemangsalgoritm kommer datorn att lösa vilket som helst av 500 problem. För att göra detta kommer det att vara tillräckligt att bara berätta för honom om problemets tillstånd. Artificiell intelligens fungerar baserat på de kunskapsbaser som är inbäddade i dem. Varje skolbarn vet att för att lösa alla problem är det inte tillräckligt att komma ihåg reglerna, lagarna, formlerna, utan du måste också kunna tänka, resonera och tillämpa denna kunskap. Mänskligt tänkande bygger på två komponenter: kunskapsbeståndet och förmågan till logiskt resonemang Detta leder till två huvuduppgifter när man skapar intelligenta system på en dator: - kunskapsmodellering (utveckling av metoder för att formalisera kunskap för att föra in den i datorns minne som en kunskapsbas); - modellering av resonemang (skapande av datorprogram som imiterar logiken i mänskligt tänkande när man löser olika problem). En typ av artificiell intelligens är expertsystem. Vanligtvis syftar ordet "expert" på en person som har omfattande kunskap och erfarenhet inom ett visst område. Dataexpertsystem innehåller kunskap om denna nivå. Syftet med expertsystem är att ge användarkonsultationer och hjälp vid beslutsfattande. Sådan assistans blir särskilt viktig i extrema situationer, till exempel vid en teknisk olycka, nödoperation eller vid körning. Datorn utsätts inte för stress. Han kommer snabbt att hitta den optimala, säkra lösningen och erbjuda den till personen. Det slutgiltiga beslutet fattas dock av den enskilde. Kort om huvudsaken Artificiell intelligens (AI) är en gren av datavetenskap. Ämnet för AI-studier är mänskligt tänkande; Målet är att skapa intelligenta system på en dator. Exempel på områden där artificiell intelligens skapas: schack och andra spel, skriva poesi och musik, översätta texter från ett språk till ett annat, robotik, kriminalteknik (fingeravtrycksidentifiering etc.), medicinsk diagnostik. Artificiell intelligenssystem arbetar utifrån den kunskap som finns inbäddad i dem inom ett visst område. Kunskapsmodellen inbäddad i datorns minne kallas en datorkunskapsbas. Människans tänkande bygger på två komponenter: kunskapsbeståndet och förmågan att resonera logiskt. AI-system implementerar en modell för resonemang (mänsklig logik). Baserat på kunskapsbasen och resonemangsmodellen programmerar AI-systemet självt sitt arbete när man löser eventuella problem. Ett expertsystem är ett AI-system som innehåller en experts kunskap och erfarenhet inom ett givet ämnesområde. Här är sammansättningen av kunskapsbasen "Släktingar": Fakta: Leo är Andreis far; Leo är Peters far; Andrey - Alexeys far; Peter - Michaels far; Peter är Dmitrys far. Regler: var och en är sin fars son; farfar - fars far; bröder - söner till samma far; farbror - fars bror; brorson - brors son; sonson - son till en son. Utifrån dessa fakta och regler är det möjligt att genom logiska resonemang etablera alla typer av familjeband mellan männen i denna familj. Var uppmärksam på två egenskaper hos kunskapsbasen: - fakta är privata och reglerna är allmänna (rättvisa för alla familjer); - Kunskapsbasen innehåller endast grundläggande fakta. Det räcker faktiskt att veta vem som är far till vem för att, med hjälp av reglerna, fastställa andra familjeband. Utifrån en sådan kunskapsbas är det möjligt att bygga ett expertsystem inom området släktskapsrelationer mellan män. För att använda det i förhållande till en annan familj räcker det att ersätta listan med fakta, och reglerna kommer naturligtvis att förbli desamma. Genom att jämföra databasen med kunskapsbasen kommer vi till slutsatsen: databasen innehåller bara fakta, kunskapsbasen innehåller fakta och regler. Hem Om kunskapsbaser. Du är redan bekant med begreppet "databas". En databas (DB) är en informationsmodell av något verkligt system i datorns minne. Det sades ovan att en kunskapsbas (KB) är en modell av en persons kunskap inom ett visst ämnesområde. Låt oss visa skillnaden mellan en databas och en kunskapsbas med hjälp av ett specifikt exempel. Låt oss överväga denna fråga med hjälp av exemplet med familjeband mellan män i samma familj. Så här ser de ut i den grafiska formen av ett släktträd: Lev Peter Andrey Mikhail Dmitry Alexey Family Tree Här representerar linjerna förhållandet mellan far (på översta nivån) och son (på bottennivå). Familjeband Man Leo Söner Far Farfar Bröder Farbröder Systerbarn Jag vet inte Jag vet inte Barnbarn Andrey, Peter Jag vet inte Jag vet inte Jag vet inte Andrey Alexey Lev Jag vet inte Peter Jag vet jag vet inte Mikhail Dmitry nej Peter Mikhail, Dmitry Lev Jag vet inte Andrey Jag vet inte Alexey nej Alexey Nej Andrey Lev nej nej Mikhail Nej Peter Lev Dmitry Andrey nej nej Dmitry Nej Peter Lev Mikhail nej nej Peter Andrey Alexey Mikhail Dmitry Tabell 9.1 innehåller information om familjeband mellan samma män presenteras i utökad form. Med hjälp av ett relations-DBMS är det enkelt att skapa en relationsdatabas utifrån denna tabell. Genom att vända dig till henne med förfrågningar kan du avgöra vem som är vems far, farfar eller bror. Den här tabellen representerar en informationsmodell av "familjeobjektet". Låt oss nu gå vidare till att bygga en kunskapsbas. Ämnesområdet här är familjeband mellan män i samma familj. Inom artificiell intelligens finns det olika sorter kunskapsmodeller. Vi kommer bara att överväga en av dem, som kallas den logiska kunskapsmodellen. Detta tillvägagångssätt används i programmeringssystemet PROLOG (Prolog diskuteras i bokens andra del). Enligt den logiska modellen består kunskapsbasen av fakta och regler. Låt oss nu ge en allmän definition av begreppen "faktum" och "regel". Ett faktum är ett meddelande (information) om en specifik händelse, om egenskapen hos ett specifikt objekt, om dess koppling till andra objekt. Till exempel är följande påståenden fakta: - tall - barrträd; - Columbus upptäckte Amerika 1492; - vattnets densitet är 1 g/cm; - Kung Salomo - son till kung David; – Leo Tolstoj är en rysk författare. En regel är ett uttalande som är mer allmänt än ett faktum. Regler definierar vissa begrepp genom andra, etablerar relationer mellan olika egenskaper hos objekt och formulerar natur- eller samhällslagarna. En kunskapsbas är en samling grundläggande fakta och regler inom ett visst ämnesområde. Nyligen har en ny specialitet ”kunskapsingenjör” dykt upp, vars uppgift är att formalisera kunskap, utveckla kunskapsbaser och skapa artificiella intelligenssystem utifrån dem. Exemplet vi tittade på är väldigt enkelt. Här är det inte svårt att gissa vilka fakta som är grundläggande och formulera ett komplett regelverk. Inom mer komplexa ämnesområden är denna uppgift mycket svårare. Ofta kan bara en stor specialist (expert) eller ett team av specialister med omfattande kunskap inom detta område lösa det. Kort om huvudsaken. Den logiska kunskapsmodellen inom ett visst ämnesområde representeras av en kunskapsbas sammansatt av fakta och regler. Ett faktum är information om en specifik händelse, om egenskapen hos ett specifikt objekt, om dess samband med andra objekt. Regler definierar vissa begrepp genom andra, etablerar relationer mellan olika egenskaper hos objekt och formulerar natur- eller samhällslagarna. Kunskapsbasen innehåller endast grundläggande fakta för ett givet ämnesområde Hem Testuppgifter 1. 2. 3. 4. Uppgift nr 1 Uppgift nr 2 Uppgift nr 3 Uppgift nr 4 Slut När kom riktningen som heter ”Artificiell intelligens” uppstå inom datavetenskap? A. På 50-talet F. På 60-talet C. På 70-talet D. På 80-talet Rätt Nästa Tänk vidare Vad är en kunskapsbas A. En kunskapsbas är information om en specifik händelse, om egendom av ett visst objekt, dess samband med andra objekt. B. En kunskapsbas är en uppsättning grundläggande fakta och regler inom ett visst ämnesområde C. En kunskapsbas är D. En kunskapsbas är utvecklingen av ett påstående som är mer allmänt än ett faktum. metoder för att formalisera kunskap för att lägga in den i datorns minne som en kunskapsbas Vad är resonemangsmodellering? A. Skapande av datorprogram, B. Utveckling av metoder som imiterar det mänskliga tänkandets logik vid lösning av olika problem. formalisering av kunskap för att lägga in den i ett datorlod som en kunskapsbas. C. Detta är en modell av mänsklig kunskap i D. Detta är en algoritm för ett specifikt ämnesområde. inspelad på artistens språk. Vad är FAKTA? A. Vilket objekt som helst som består av B. Denna information om kompositionen och C. Ett meddelande om en specifik D. Detta är en viss ordning av många sammankopplade delar och systemets struktur, presenterad grafiskt existerande som en enda helhet. form. händelse och egenskap hos ett specifikt objekt, dess samband med andra objekt. kombinera de element som utgör systemet.

Matchen är förlorad: dator mot människa.

Kreativt tänkande, logik, erfarenhet - egenskaper som gjorde det möjligt för en person att leda i striden "man-maskin". Det verkade som om dessa fördelar alltid skulle finnas där hemligt vapen en person, och datorn kommer att spela rollen som att "komma ikapp".

Men det tog väldigt kort tid för artificiell intelligens att komma ikapp och för alltid överträffa människor på många områden, inklusive inom området intellektuell underhållning.

Artificiell intelligens slår människor: var och hur

Rubiks kub
Detta pussel är känt över hela världen. Miljontals människor försöker slutföra uppgiften och sätta ihop kuben korrekt, och vissa tävlar till och med i monteringshastigheten. Det mänskliga rekordet sattes av 14-årige Lucas Etter från USA, som löste pusslet på 4,904 sekunder. Otroligt, eller hur? Men detta resultat överträffades av roboten, som skapades av två entusiaster Jay Flatland och Paul Rose: robotens resultat var 1,047 sekunder.


Tack vare de inbyggda kamerorna, som det finns fyra av, utvärderar datorn positionen och väljer den bästa actionalgoritmen. Systemet är baserat på Kotzebue-formeln (sammansättning i 20 drag). Knappast några människor kan lösa en Rubiks kub på mindre än 1 sekund.
0:1 till fördel artificiell intelligens.

"Othello"
Toppen av popularitet för detta spel inträffade i början av 70-talet av förra seklet. Kärnan i spelet är att placera marker på spelplanen (8x8 celler): du måste använda marker av din egen färg för att blockera raderna med din motståndares marker på båda sidor, sedan ändrar markerna färg och går till din motståndare. Segern går till den som ockuperade det största området.


Världsmästaren i Othello 1980 var Hiroshi Inoue, som enkelt besegrade Moor-programmet med 5-1.
Senare lärde sig programmen att räkna ut motståndarens drag (med cirka 25 drag), och när den nuvarande världsmästaren Takeshi Murakami mötte Logistello-systemet i en revansch 1997 blev ställningen förkrossande 0:6 till förmån för mjukvaran.

Backgammon
Artificiell intelligens har sin fördel i backgammon framför människor att tacka världsmästaren i korrespondensschack (och det finns andra) Hans Berliner, som skrev BKG 9.8-programmet. Och 1979 visade sig programmet vara starkare än världsmästaren i backgammon Luigi Villa.


Man tror att datorn hade tur i det spelet (bra tärningar föll flera gånger), men ingen annan ville slåss i en repetitionsmatch, speciellt eftersom mjukvaran har förbättrats flera gånger sedan dess.

Schack
Schacksystem började utvecklas i mitten av 1900-talet, utvecklingen tillhörde IBM. Men på grund av att programmet krävde seriösa och långa beräkningar fick detta åtagande skjutas upp i 30 år. 1996 ställdes "schackhjärnan" - datorn Deep Blue - mot Garry Kasparov.


Matchen slutade till mannens fördel: 3 vinster, 2 oavgjorda, 1 förlust. Ett år senare upprepades matchen, och denna gång var Deep Blue mer förberedda. Naturligtvis utvärderade systemet 200 miljoner positioner per sekund. Och även om Harry ville bli ännu senare, vägrade IBM, eftersom det ansåg att det var meningslöst.

Pjäser (en typ av pjäser)
Marion Tinsley var en mästarpjäser under hela sin karriär. Och när han 1992 mötte det system som utvecklats vid University of Alberta (Kanada), var segern hans. Av 39 matcher - 4 vinster, 2 förluster och 33 oavgjorda.


Två år senare ägde en revansch rum, men Tinsley drog sig ur tävlingen på grund av hälsoproblem (vid tidpunkten för hans vägran fanns det 6 oavgjorda matcher), och segern gick till systemet. Sedan dess har artificiell intelligens blivit mycket starkare: 2007 tillkännagav kanadensare skapandet av ett idealiskt system, och ingen försöker slå det på pjäser.

Scrabble
Datorns triumf i det här spelet var lätt i den första omgången: världsmästaren David Boyce blev slagen 2006 av sin robotrival Quackle.


Förresten, det här programmet är tillgängligt på Internet, och du kan tävla med det, och kanske kommer du att ge seger till "Man"-laget.


Det här spelet dök upp i det antika Kina för mer än två tusen år sedan, men trots en så lång erfarenhet av spelet förlorade folk fortfarande. På banan (19x19) placerar två spelare sina stenar (svart/vit), den som får fler poäng (marker ordnade i en rad räknas) vinner. Å ena sidan är allt enkelt, men intresset ligger i mängden möjliga alternativ och drag.


Det var också intressant för utvecklarna av AlphaGo (skapat i Googles regi) att skapa ett system som kan beräkna tusentals alternativ. Först försökte den artificiella intelligensen sig med annan mjukvara, och när 499 av 500 spel var för AlphaGo tog den sig an den trefaldige europamästaren Fan Hui. Mästaren hade ingen chans: 5:0.

TV
Gillar du att svara på frågor om tv-frågesporter? Utvecklarna av Watson-roboten från IBM kunde inte heller motstå, och 2011 dök Watson upp som en deltagare i den intellektuella tv-spelshowen "Jeopardy!" Trots att hans motståndare var showens rekordhållare - Brad Rutter och Ken Jennings - vann han, och miljonen dollar han vann donerades till välgörenhet.


Och även om datorn redan har visat sin intellektuella och logiska överlägsenhet gentemot människor, fortsätter den att utvecklas. Således introducerade Alibaba Group och Microsoft (utvecklingen genomfördes parallellt) artificiell intelligens, som visade sig vara starkare än en person i att förstå informationen som lästes.
Stanford University-testet består av mer än 100 tusen frågor, som är baserade på femhundra artiklar från Wikipedia-biblioteket.

Den bästa poängen för en person är 82.304 poäng, resultatet för Alibaba är 82.44, Microsofts neurala nätverk är 82.605. Resultaten indikerar att artificiell intelligens kan svara på alla frågor med hög noggrannhet, vilket innebär att teknologier kan användas för att betjäna kunder, patienter, museibesökare etc.

Även dataspel hänfördes av programmet. Programmet slog programmet: vem skulle ha trott att denna framtid var så nära? Populärt spel Quake III, där spelarna är gladiatorer, är väldigt populärt inom e-sport. Men de bästa här var inte människor, utan ett team av DeepMind-bots skapade av en division av Google. Och även om striden genomfördes i en reducerad version, enligt beräkningar med 73 % variation, skulle boten ha vunnit vilken tävling som helst.


Är sådan överlägsenhet av artificiell intelligens farlig eller inte? Ingen kan svara säkert. Och i slutändan kommer det här svaret inte att vara nyckeln, eftersom det viktigaste är inte det faktum att en person är underlägsen en dator, utan om vi kan använda denna potential för vår egen fördel. Som vi ser slår artificiell intelligens människor och lämnar ingen chans att vinna.

Skicka ditt goda arbete i kunskapsbasen är enkelt. Använd formuläret nedan

Studenter, doktorander, unga forskare som använder kunskapsbasen i sina studier och arbete kommer att vara er mycket tacksamma.

Postat på http://www.allbest.ru/

UtvecklingprogramvaramodulartificiellintelligensFörspelVschack

algoritm för schackdatorintelligens

  • Introduktion

Begreppet "datorschack" stämmer överens med vetenskapen om cybernetik och dess avsnitt "artificiell intelligens". Schack är en idealisk modell för att studera komplexa problem, särskilt de som kräver uppräkning. Utvecklingen av ett schackprogram anses vara ett problem i utvecklingen av artificiell intelligens av följande skäl:

* det finns en allmän uppfattning att problemet är relaterat till problemet med artificiell intelligens, eftersom schack anses vara det mest intellektuella spelet

* det finns ett objektivt kriterium för utfört arbete - styrkan i schackprogrammet

* den större differentieringen av detta kriterium representerar möjligheten till en gradvis förbättring av programmet.

En av grundarna av cybernetik och informationsteori, Claude Shannon, var den första som formulerade reglerna för att välja ett drag på schackbrädet redan på 50-talet. I den analyserade positionen sorteras alla möjliga alternativ till ett visst djup, och de resulterande positionerna tilldelas en numerisk poäng med hjälp av objektiva funktioner. Sedan rullar minimaxproceduren tillbaka till ursprungspositionen, utvärderar den och indikerar det bästa draget, enligt maskinens uppfattning.

En persons roll är att genom att bedöma positionen sätta målfunktionerna så exakt som möjligt. Dessa funktioner har två komponenter - material och positionell. Med den första är allt klart - materiell överlägsenhet (i pjäser och bönder) är som regel ett mycket allvarligt argument för att bedöma en position som den bästa. Dessutom, ju mindre material på brädan båda sidor har, desto mer exakt är uppskattningen.

Men med den positionella komponenten är allt mycket mer komplicerat: många faktorer tas i beaktande här, till exempel placeringen av enskilda pjäser och bönder, utrymme på brädet, tid för omgruppering av styrkor etc. Förmågan att korrekt bedöma rollen av alla faktorer i en viss position har alltid ansetts vara ett av tecknen på schackspelares skicklighet hos människor.

Svagheten med datorspelande låg just i missbruket av material och oförmågan att utföra en "absolut sökning" av alternativ. I 70- och 80-talens schackböcker kan man hitta ett stort antal exemplariska exempel på personer som leker med maskiner, när en mästare eller stormästare vann spelet med hjälp av vackra pjäser och bönder. Hemligheten är redan klar: för mänsklig intelligens, i motsats till artificiell intelligens, var dominansen av positionsfaktorer över materiella uppenbar just i de ögonblick då uppoffringar av material gjordes.

Allt eftersom åren gick, med ökningen av datorhastigheten, ökade djupet i beräkningarna, och samtidigt förbättrades algoritmer som förbättrade sammanställningen av positionsutvärderingsfunktioner. Och under andra hälften av 90-talet började datorer redan framgångsrikt konkurrera med stormästare i toppklass. En epokgörande händelse för "schackcybernetik" inträffade i maj 1997. Datorn Deep Blue, skapad av IBM, besegrade Garry Kasparov själv i en match på 6 spel. Datorn var utrustad med ett speciellt schackchip, och maskinen tittade igenom cirka 200 miljoner positioner per sekund. IBM Corporation lockade många stormästare för sitt projekt; de senaste landvinningarna inom schackteorin användes för att skapa de mest avancerade algoritmerna som möjligt. Och så, som redan nämnts, på 90-talet började schackprogram för stationära datorer tränga ut specialiserade datorer.

Varje månad ökar kraften hos schackprogram och datorernas kraft obevekligt, och överträffar även optimisternas vildaste antaganden. Till och med för 12-15 år sedan, diskussioner om ämnet "När kommer en maskin att kunna slå en stormästare?" i grund och botten kokas ner till frågan "Är hon kapabel att göra detta i princip?" Och om svaret "Kan" fortfarande erhölls, uppskattades tiden i intervallet 15-25 år.

Verkligheten har också motbevisat dessa förutsägelser. Allt hände mycket snabbare! Redan i mitten av 90-talet upptäcktes det att syntesen av "spelprogram + dator" kunde konkurrera med en stormästare.

Målet med arbetet är att utveckla och implementera en mjukvarumodul för artificiell intelligens för schackspel, som inkluderar:

1. forskning av befintliga spelalgoritmer som är tillämpliga på schackspel

2. utveckling av en algoritm för beteendet hos en datormotståndare

3. bestämma parametrarna för algoritmen för beteendet hos datormotståndaren

4. genomförande programvara, som inkluderar implementeringen av spelalgoritmen och utvecklingen av ett grafiskt gränssnitt

5. jämförelse av den utvecklade mjukvaran med befintliga analoger.

1 . Berättelseutvecklingschackprogram

1951 skrev Alan Turing en algoritm som skulle tillåta en maskin att spela schack. Först på den tiden fungerade uppfinnaren själv som en maskin. Också 1951 skrev matematikern Claude Shannon sin första artikel om schackprogrammering. Han beskrev två strategier för att hitta det bästa draget, båda baserade på en heuristisk slutpunktsutvärderingsfunktion:

* typ A - uppräkning av alla möjliga drag till ett fast djup, med ett anrop i slutet av utvärderingsfunktionen (eftersom det är omöjligt att räkna upp till slutet)

* typ B - utför endast selektiv expansion av vissa linjer, använder ackumulerad schackkunskap för att trimma ointressanta grenar

Den första datorn designades av von Neumann för att utföra komplexa beräkningar för att skapa kärnvapen. 1950 dök det första provet upp, som kunde utföra 10 000 operationer per sekund. Ett av de första experimenten med enheten var att skriva ett schackprogram, men schacket var icke-standardiserat - på ett 6 * 6 bräde utan biskopar.

Några år senare spelade den här datorn ("MANIAC") med människor: en stark schackspelare vann en jordskredsseger och en nybörjare förlorade i 23 drag.

1957, på IBM704 (42 kHz, 7 KB minne), implementerades ett typ B-program på helpension, med alla bitar som deltog. Maskinen räknade 4 halvdrag på 8 minuter. Nivån på spelet är amatör.

1962 upptäckte Newell, Simon och Shaw en algoritm som heter alfa-beta, som inte gav resultat sämre än en uttömmande sökning utan att utforska alla alternativ. Det krävde inga speciella schackkunskaper och kunde användas för att lösa alla sökproblem. Kärnan i algoritmen är att i varje rad i spelet, för vitt och svart, deras maximala resultat, och om svart vid något tillfälle redan har fått ett resultat som är lika med vits maximala uppnådda tidigare, så är det ingen idé att manipulera ytterligare. När sökningen återgår till den punkt där Whites maximum nåddes kommer resultatet fortfarande att avvisas Alla moderna schackprogram är baserade på en av de förbättrade versionerna av denna algoritm.

Fram till omkring 1973 var alla schackprogram typ B. De var huvudsakligen baserade på generatorer av rimliga rörelser, som skar bort osannolika med en statisk utvärdering. Med tillkomsten av mer kraftfulla processorer började programmerare byta till typ A. De första var Teach och Chess4, dessa var "brute force"-program, så snart de nådde ett djup på 5 halvdrag i mitten av spelet , började de vinna tävlingar med typ B-program.

1975 började Robert Hyatt utveckla CrayBlitz, som under lång tid var det snabbaste schackprogrammet och från 1983 till 1989. - världsmästare bland schackprogram. Han sökte cirka 40-50 tusen positioner per sekund (1983), vilket var en stor prestation för sin tid.

1977 skapade Thompson och Condon från Bell Labs den första dedikerade schackdatorn. Huvudtanken var att implementera vissa delar av schackprogrammet (flyttgenerator, positionsuppskattningsfunktion, kontrolldetektor etc.) på hårdvarunivå, vilket eliminerade mjukvarufördröjningar i varje position utan att vänta på en ökning av processorkraften. De bästa datorerna Vid den tiden kunde de undersöka upp till 5 tusen positioner per sekund, och Ken Thompsons maskin, kallad Belle, behandlade 180 tusen linjer per sekund. Belle kunde tänka igenom positionerna 8-9 halva drag framåt, vilket placerade honom på en mästarenivå. Han vann många datorspel schackturneringar. Men trots att specialiserad hårdvara är en storleksordning snabbare än en vanlig maskin, spelade CrayBlitz-programmet fortfarande bättre på den då ultramoderna maskinen.

På 90-talet gjorde Richard Lang, skriva uteslutande på assemblerspråk, mycket starkt program selektiv sökning Genius. Fram till nu har detta program konsekvent haft 5:e-6:e plats i världsmästerskapen i datorschack. Också på 90-talet började schackalgoritmer utvecklas avsevärt; heuristiken med ett tomt drag (NullMove) och selektiv skärning av sökträdets gränsgrenar dök upp.

Vi bör också överväga det mest kända schackprogrammet, schacksuperdatorn - Deep Blue. 1987 började Deep Blue som en studentutveckling - det var intressant för en grupp duktiga studenter att prova sig fram, och ämnet för ett diplom var utmärkt. Teknikens framsteg gjorde det möjligt att göra den allra första versionen av processorer (kallade ChipTest) mycket snabbt. En ytterligare förbättrad version följde, kallad Deep Thought. I det ögonblicket uppmärksammades gruppen av IBMs marknadsavdelning och kontaktade den med ett erbjudande som inte kunde avvisas. Resultatet blev Deep Blue och Deep Blue II. Således är Deep Blue II resultatet av mer än 10 års arbete av en mycket kapabel grupp, som inkluderade både programmerare/hårdvarumänniskor och starka stormästare. Allt arbete finansierades av IBM, så gruppen hade resurser som akademiska organisationer aldrig hade drömt om. Deep Blue II är baserad på den kraftfulla RS/6000-servern från IBM. Servern har 31 konventionella processorer; en förklaras hövding, 30 andra är underställda honom. Det finns 16 specialiserade schackprocessorer kopplade till varje "fungerande" processor, så det finns 480 schackprocessorer totalt. Hela komplexet behandlade mer än en miljard positioner per sekund.

Den 11 maj 1997 besegrade Deep Blue II schackvärldsmästaren Garry Kasparov i en match med sex spel. Efter matchen med mästaren demonterades Deep Blue.

Som du kan se, från de allra första till de mest moderna programmen byggdes schackprogram på basis av uppräkning av möjliga drag, men det fanns också försök att bygga mer "intelligenta" algoritmer, annorlunda än uppräkning. Många kända schackspelare försökte utveckla sådana algoritmer, men resultaten uppfyllde inte kraven. Till exempel, Botvinnik M.M., som är världsmästare och författare till ett flertal verk om schackteori, tillbringade mer än 20 år på att skapa ett schackprogram, men programmet spelade aldrig.

Alla sökalgoritmer för att hitta det bästa draget bygger ett spelträd och söker efter det bästa draget med det.

2. Är vanligabegreppteorierspel

2.1 Trädmöjligpositioner

Låt ett ändligt orienterat träd G ges, mängden B av dess hörn sammansatt av två disjunkta delmängder B0 och B1, och varje vertex p B som inte är början på någon länk i detta träd associeras med ett reellt tal Oe(p) . Detta definierar ett spel mellan två motståndare med fullständig information. Topparna av det orienterade trädet G som tillhör delmängden B0 kallas positioner med vit att flytta, och de som tillhör delmängden B1 - positioner med svart att flytta; Länkarna i detta träd kallas vita eller svarta drag beroende på vilken av delmängderna B0 eller B1 deras början tillhör. Om position p B är associerad med talet Oe(p), kallas det final, och Oe(p) kallas den statiska uppskattningen av denna position.

Ett riktat träd G kallas ett spelträd.

Enligt definitionen finns det för vilken position p B som helst en unik väg L(p0 > p1, p1 > p2, ..., pk > p) med en början vid roten p0 av det orienterade trädet Г och ett slut vid positionen i fråga kallas en sådan väg för en batch som leder till positionen p.

Roten p0 i spelträdet G är en vald position. Detta är en position som föreslås till programmet, och uppgiften är att hitta det bästa draget i det. För att göra detta räcker det att bestämma Oep0 och Oepi för alla positioner som erhålls från p0 i ett drag. Definitioner av utvärdering start position p0 utförs av ett uttömmande sökschema, och i spelteorin kallas denna algoritm för negamax-algoritmen.

Spelträdets komplexitet beräknas med formeln: w^d, där w är det genomsnittliga antalet möjliga drag och d är trädets djup.

Figur 1 - Träd över möjliga positioner

2.2 Principminimax

Denna algoritm utförs med hjälp av djup-först-sökning. Det vill säga, för varje icke-traverserad vertex är det nödvändigt att hitta alla untraversed intilliggande vertex och upprepa sökningen efter dem. Vi rullar tillbaka till toppen av det sista djupet och beräknar vinstpoängen i förhållande till den första spelaren. Sedan flyttar vi från dess föräldernod till nästa underordnade nod (om det finns en) och räknar ut vinstpoängen där. Om antalet underordnade noder har upphört, letar vi efter minsta möjliga vinstpoäng (om nivån på föräldernoden är udda) eller maximum (om jämn). Den överordnade noden äger den resulterande vinstpoängen. Vi gör en liknande sökning, men med hänsyn till att föräldranoden redan är ett barn.

I trädets löv räknas poäng i förhållande till den första spelaren, d.v.s. Det antas att den första spelaren försöker maximera sin utdelning, och den andra spelaren försöker minimera utdelningen för den första spelaren. Den första spelaren vinner om antalet poäng i toppen av nivåträdet är större än noll.

Figur 2 - Sök i ett träd med minimaxalgoritmen

Som ett resultat motsvarar den process som används av programmet alternerande beslut (dator/människa), med datorn som väljer maximal poäng för varje tur. Lösningen som återvänder till trädets rot visar sig utan tvekan vara bästa valet, under antagandet att motståndaren också gör de starkaste dragen i varje fall. Statisk utvärdering utförs endast på noderna på sista nivån (trädblad) för datorpositionen.

Denna algoritm utför en fullständig sökning av alla alternativ. Antalet positioner som beaktas kommer att uppskattas som W i potensen av D, där W är det ungefärliga antalet drag i en position, D är beräkningsdjupet. För schack är W ungefär lika med 40, vilket betyder att om vi räknar för ett djup på 4 måste vi gå igenom 40^4 = 2560 tusen positioner och för ett djup på 5 - 10240 tusen positioner.

Sökträdet växer exponentiellt. Idag, på de mest kraftfulla processorerna med den mest optimala koden, är det möjligt att räkna till ett djup av 6 under en realistiskt beräknad tidsperiod. Detta är huvudproblemet vid utveckling av schackspelsalgoritmer, och all utveckling syftar till att minska antalet kombinationer som övervägs.

Figur 3 visar ett blockschema över minimaxalgoritmen för att välja det bästa draget, den presenterade algoritmen returnerar det bästa draget enligt uppskattningen som erhållits från en mer djupgående analys. Blockschemat för algoritmen för att söka efter djup-första uppskattningar presenteras i figur 4.

Figur 3 - Flödesschema för att välja det bästa draget

Figur 4 - Flödesschema för sökning av djup-först uppskattningar

När vi anropar algoritmen för att söka efter en djup-först uppskattning med ett mycket stort erforderligt djup, kommer vi att få en uppskattning efter en fullständig sökning av alla möjliga drag.

2.3 Metodnegativmaximal(NegaMax)

I denna algoritm är den statiska bedömningen av positionen för en av parterna lika med den statiska bedömningen av den andra parten med motsatt tecken.

Figur 5 - Negativ maxmetod

2.4 StatiskkvalitetpositionerOchgrundläggandekravTillbedömningfunktioner

En statisk bedömning av en position är ett sätt att objektivt, kvantitativt uttrycka den subjektiva känsla som en person har när man tittar på en position, utan att analysera möjliga sätt att utveckla spelet. I spelprogrammering kallas en statisk positionsuppskattning positionskvalitetsfunktionen.

Om att hitta det bästa draget med hjälp av ett spelträd kan användas med lika framgång för alla spel, är statisk positionsbedömning en del specialiserad för ett specifikt spel. Dess specialisering avgör spelstilen för den konstgjorda spelaren; faktorerna som ingår i utvärderingsfunktionen avgör syftet med sökningen.

Att jämföra siffran med positionen gör det möjligt för maskinen att skilja på bra och dåliga kombinationer. Förmågan att skilja bra kombinationer från dåliga avgör styrkan hos en virtuell spelare. I tvåmannaspel görs bedömningen av en av spelarna. Om poängfunktionen ger en bra poäng för en spelare bör den ge en dålig poäng för hans motståndare. Denna regel är ett kriterium för tillämpligheten av alla utvärderingsfunktioner i algoritmer som implementerar artificiell intelligens.

Huvudkravet för utvärderingsfunktionen är dess symmetri med avseende på spelarna, d.v.s. ett villkor måste vara uppfyllt - det som är bra för en spelare är dåligt för en annan. En bra poängfunktion bör ta hänsyn till de grundläggande principerna för spelstrategi och uppfylla följande egenskaper:

* material - beräknas direkt som skillnaden i antalet spelarfigurer, det är möjligt att lägga till viktningskoefficienter för varje specifik siffra

* positionell - visar kvaliteten på placeringen av spelarens pjäser

* positionsutveckling - visar antalet möjliga spelardrag. Ju bättre utvecklad positionen är, desto fler möjliga strategier har spelaren. Av denna anledning är det nödvändigt att kontrollera och minska dess tillstånd i fienden

* spåra slutet av spelet - i fall av vinst (fånga motståndarens kung), bör det ge maximal poäng, vanligtvis + oändlighet, i fall av förlust (förlust av kungen), bör det returnera minsta poäng, vanligtvis - oändlighet

För spelet schack är det nödvändigt att ta hänsyn till förändringen i positionsbedömningen, beroende på spelets skede.

Den klassiska utvärderingsfunktionen är en funktion av några av ovanstående egenskaper hos spelpositionen, det vill säga utvärderingsfunktionen är det totala resultatet av att utvärdera positionen ur olika synvinklar.

Utvärderingsfunktionen är olika för alla spel, eftersom den återspeglar spelets särdrag. Utvärderingsfunktionens egenskaper väljs experimentellt.

Vikten av den valda egenskapen är avgörande. Betydelsen bestäms genom att multiplicera den valda egenskapen med motsvarande koefficient. Denna koefficient måste ha en statistisk grund.

Därför kan utvärderingsfunktionen representeras enligt följande:

F(p) - utvärderingsfunktion för position p,

Viktighetskoefficient för den i:te egenskapen,

I:e egenskapen för position sid.

2.5 Iscensättninguppgifter

Under loppet av att slutföra avhandlingen är det nödvändigt att undersöka befintliga metoder och algoritmer för datorimplementering av schackspelet, bestämma deras huvudsakliga fördelar och nackdelar för att, baserat på den inhämtade kunskapen, välja en algoritm som säkerställer bästa funktion av detta system.

Baserat på resultaten av avhandlingen är det nödvändigt att:

ь implementera de studerade algoritmerna i programmeringsspråket C#

b implementera sina olika modifieringar med hjälp av ytterligare moduler

b utföra numeriska experiment för att utvärdera kvaliteten på de utvecklade modellerna, jämföra de genomförda ändringarna för att välja den bästa

b utveckla ett bekvämt och intuitivt gränssnitt

3. ForskatalgoritmerOchtillägg

3.1 Alfa Betaklippning

Alfabetabeskärning är en sökalgoritm som försöker minska antalet noder som utvärderas i ett sökträd med minimaxalgoritmen. Huvudtanken är denna: om din motståndare har ett ogynnsamt svar på ett av dina drag, är det meningslöst att analysera hans andra möjliga svar på detta drag, för även om det bland dem finns mer gynnsamma för dig, kommer motståndaren inte att välj dem. Alfabetabeskärning är en optimering eftersom resultaten av algoritmen som optimeras inte förändras.

Figur 6 - Alpha-beta clipping algoritm

Fördelen med alfa-beta-beskärning är faktiskt att några av grenarna i sökträdets undernivåer kan elimineras efter att minst en av nivåns grenar har övervägts helt. Eftersom klippning sker på varje häckningsnivå (förutom den sista), kan effekten vara ganska betydande. Metodens effektivitet påverkas avsevärt av den preliminära sorteringen av alternativ (utan uppräkning eller med uppräkning till ett grundare djup) - vid sortering, ju fler "bra" alternativ som beaktas i början, desto fler "dåliga" grenar kan skäras av utan en uttömmande analys. minimax-sökning är djupet först, så vid varje given tidpunkt räcker det att överväga noder längs en enda bana i trädet.

Nyckelidén bakom alfa-beta-klippning är att hitta ett drag som inte nödvändigtvis är det bästa, men "tillräckligt bra" för att fatta rätt beslut.

Parametrarna alfa och beta matas till ingången av denna algoritm, de kallas sökfönstret. Dessa parametrar är ansvariga för klippningsgränserna på den första nivån; när du går djupare in i spelträdet ändras dessa parametrar. Alfa-beta-algoritmen med parametrarna alfa = + oändlighet och beta = - oändlighet (brute force-sökning med fullt fönster) ger resultatet exakt samma som negamax-algoritmen, dvs full sökning. Figur 7 visar ett blockschema över alfa-beta-algoritmen för beräkning av djup-första positionsuppskattningen.

Figur 7 - Alpha-beta-flödesschema för sökning av djup-första uppskattning

3.1.1 Exempelstandardskära av

Figur 8 - Exempel på standardklippning

Låt oss titta på ett exempel på en standard alfabeta cutoff. I position A väljer vi flytten, därför kommer vi att välja det största värdet från positionerna B och C. Värdet på B har redan beräknats - det är 10. Vid beräkning av position C visade det sig att en av noderna har en värde på 5. I position C kommer vår motståndare att göra draget, vilket innebär att han väljer det minsta värdet. Det följer av detta att värdet på position C kommer att vara från 5 och lägre, därför kommer vi alltid att välja B-alternativet. Därför beräknar vi inte de återstående noderna C.

3 .1.2 Exempelpå djupetskära av

Figur 9 - Exempel på djupskärning

Låt oss titta på ett exempel på djupklippning. I position A kommer vi att välja mellan drag i position B och C. Värde B=15. Vi börjar beräkningen C. I position E gav en av noderna värdet 5. I position E tillhör valet av drag motståndaren, vilket innebär att slutvärdet på E kommer att vara från 5 och lägre. Om värdet på C är lika med E, kommer vi att välja alternativ B, eftersom det är mer attraktivt. Därför behöver vi inte veta det exakta värdet av position E, så alla andra grenar som kommer ut ur den skärs av.

3 .2 Iterativdyka(ItereradeFördjupning)

Meningen med en sökfläkt eller iterativ fördjupning är att upprepade gånger kalla sökproceduren till ett fast djup med ökande djup tills den inställda tidsgränsen överskrids eller det maximala sökdjupet uppnås. Fördelen med denna metod är att du inte behöver välja sökdjup i förväg; Dessutom kan du alltid använda resultatet av den senast genomförda sökningen. Värdena som returneras från varje sökning kan användas för att justera aspirationsfönstret för nästa sökning.

I allmänhet kallas alfa-beta-beskärning från toppen av trädet på intervallet (-?;+?). Men med iterativ nedsänkning kan vi ändra det.

Låt oss anta att X är värdet av det optimala draget som hittades vid föregående iteration, och talet Epsilon anger den förväntade skillnaden i resultaten mellan sökningen till djup D-1 och djup D. Därefter kallar vi helt enkelt alfa-beta beskärning från toppen av trädet med det förväntade intervallet: alphabeta(D, x-epsilon, x+epsilon).

1. Värdet kommer att returneras i intervallet (x-epsilon, x+epsilon) - detta är rätt värde, vi kan använda det.

2. Värdet kommer tillbaka utanför intervallet (x-epsilon, x+epsilon), det är nödvändigt att upprepa beräkningen med det ändrade intervallet.

Även om vi antar att alfa-beta cutoff-metoden inte ger någon fördel, blir den totala ökningen av analystid faktiskt relativt liten. Faktum är att om vi antar att det genomsnittliga antalet alternativ på varje nivå är D, och antalet analyserade nivåer är p, då iterativ sökning till den första nivån, sedan till den andra, etc. till nivå p, är likvärdigt (utan alfa-beta cutoffs) med att visa D + + ...+ positioner.

Detta belopp är lika, medan antalet positioner som visas i en konventionell analys är lika. Förhållandet mellan dessa två tal för stort p är ungefär lika och därför nära 1 i de fall D är tillräckligt stort

När du använder iterativ sökning kan du också införa tidskontroll, vilket gör att datorn kan erbjuda en tillfredsställande lösning när som helst. Således, om tanketiden är begränsad till 5 sekunder, kommer den att överväga alla positioner upp till nivå 2, till exempel på 0,001 sekunder, upp till nivå 3 på 0,01 sekunder, upp till nivå 4 på 1 sekund, och sedan, efter start analys på nivå 5 kommer att tvingas avbryta på grund av tidsbrist. Dock kommer datorn redan att ha en ganska bra lösning som hittats på nivå 4.

Som ett resultat kan datorn ge ett svar inom en angiven tid (till exempel gör 50 drag på 2 timmar). Det är också uppenbart att programmet stödjer liknande metod, kommer att spela med olika styrkor på olika datorer.

Trots att vissa grenar av trädet måste kontrolleras flera gånger, ger denna metod ett tillräckligt antal snitt.

3.3 Sorteringrör sig

Resultaten av alfa-beta-beskärning påverkas i hög grad av i vilken ordning dragen kontrolleras. Låt oss titta på detta med exempel:

I det första fallet kommer vi att utföra beräkningen genom att sortera dragen "från sämst till bäst"

Figur 10 - Alfabeta cutoff med drag "från sämst till bäst"

Som framgår av exemplet skars inte en enda gren av trädet av.

Låt oss nu sortera rörelserna "från bäst till sämst"

Figur 11 - alfa-betaklippning med rörelser "från bäst till sämst"

Under optimala omständigheter bör en sökning med alfa-beta-beskärning titta på W^((D+1)/2) + W^(D/2) - 1 position. Detta är mycket mindre än minimax.

För att förbättra effektiviteten av alfa-beta-beskärning måste du tänka på vilka rörelser som bör utforskas först. För dessa ändamål används den så kallade mördarheuristiken.

Tanken är att om en flytt var bra i en del av trädet, om det är möjligt, är det värt att försöka kontrollera det i andra (på samma djup). För att göra detta läggs en array in där flera bästa drag för varje djup anges, om det finns drag från denna tabell i positionen för det aktuella djupet, kontrolleras de först.

För andra drag ger algoritmen företräde åt drag med kontroller och fångar.

3 .4 Nega Scout(NegaScout)

NegaScout är ett tillägg för alfabeta. Detta är en riktad sökalgoritm för att beräkna minimaxvärdet för en nod.

NegaScout är den mest populära brute force-algoritmen som finns tillgänglig idag. Det är extremt enkelt och ger en viss (upp till 50%) acceleration utan att införa ytterligare fel i beräkningen. Det passar väldigt bra med schackprogrammens moderna attribut - hashtabeller.

Denna algoritm har fördelen att den aldrig kommer att utforska noder som kan beskäras av alfa-beta, men vissa grenar kan undersökas flera gånger.

NegaScout-algoritmen kontrollerar den första noden med ett fullt fönster (alfa, beta), och anser att detta alternativ är det bästa. Den försöker skära av nästa noder med brute force med ett nollfönster, d.v.s. fönster (Alfa, Alpha+1). Om resultatet av beräkningen förbättrar alfa, betyder det att 1 nod inte var den bästa, och denna nod måste kontrolleras med hela fönstret, men istället för Alpha kan vi ta det resulterande värdet (Value,Beta). Koden för denna metod ges nedan:

public int NegaScout(Cell[,] Copyboard, int Depth, int FinalDepth, int Alpha, int Beta, int PossibleMoves, bool IsMy)

int Value = 0, MaxValue = -1000, ljus = 0;

Cell[,] Board = ny cell;

Point[,] Flyttar = ny punkt;

Point Move = ny punkt;

FindMoves(Moves, ref leight, Board, true, true);

PossibleMoves = lätt;

FindMoves(Moves, ref Leight, Board, false, true);

PossibleMoves += lätt;

if ((Djup == FinalDepth) || GameIsOver(Board, IsMy))

return Eval(Board, PossibleMoves);

return -1 * Eval(Board, PossibleMoves);

FindMoves(Moves, ref leight, Board, HaveRequiredMove(Board, IsMy), IsMy);

int a = Alfa, b = Beta;

för (int i = 0; i< leight; i++)

CopyMove(Move, Moves, i);

DoMove(Bord, Flytta);

Värde = -1 * NegaScout(Board, Depth + 1, FinalDepth, -1*b, -1 * a, PossibleMoves, !IsMy);

if (Värde>a && Värde 0 && (Djup

a = -1 * NegaScout(Board, Depth + 1, FinalDepth, -1 * Beta, -1 * Value, PossibleMoves, !IsMy);

if (Värde > a)

CopyPosition(Board, CopyBoard);

Som framgår av beskrivningen ovan är för Nega Scout att förflytta sig genom drag en viktig funktion. Om du ordnar alla drag "från sämst till bäst", kan sökningen ta ännu längre tid än minimax.

3 .5 Hash tabeller

3 .5 .1 Teori

I schack, under uppräkning, är det inte ett spelträd som erhålls, utan en graf - mycket ofta, efter att ha omarrangerat drag, får vi samma position. Metoden att använda hashtabeller är att lagra uppskattningar av redan övervägda positioner. För varje position måste du lagra dess poäng (mer exakt, poängen för underträdet under denna position), sökdjupet och det bästa draget. Nu, efter att ha börjat analysera positionen, måste vi ta en titt - har vi inte redan träffat den? Har vi inte träffat dig så gör vi som tidigare. Om vi ​​har stött på det, så tittar vi på det djup som vi analyserade det till tidigare. Om det är samma som vi behöver nu, eller djupare, kan vi använda den gamla uppskattningen och spara tid. Om det är mindre kan vi fortfarande använda en del av informationen, nämligen det bästa draget.

Det bästa draget för djup N kan också vara det bästa draget för djup N+1. Det vill säga, förutom sitt ursprungliga syfte är hashtabellen också användbar för att beställa drag. Iterativ fördjupning hjälper också oväntat här - när vi startar nästa iteration fylls hashtabellen med information från den föregående, och fram till någon punkt (upp till djup 1) är alla positioner helt enkelt där, med den bästa flytten till djup N -1.

Ett program som använder iterativ fördjupning och hashtabeller kommer ofta att slutföra alla iterationer från 1 till N flera gånger snabbare än om det startade iteration N direkt, eftersom med en sannolikhet på 75 % väljer hon alltid det bästa draget först, och med en sannolikhet på ~90 % är det bästa draget bland de tre första.

3 . 5 .2 Genomförande

Hashing är ett av de mest kraftfulla sätten att förbättra datorns prestanda. Användningen av hashtabeller är huvudverktyget vid programmering av schackspel.

Hashtabell är en stor indexerad tabell, vars celler lagrar följande information:

· 2 hashindex

· beräkningsdjup för denna flytt

· utvärdering av denna åtgärd

Valet av algoritm för att beräkna hashindex för flytten är det viktigaste ögonblicket, när du använder hashalgoritmer. När du väljer en algoritm för att beräkna ett hashindex måste två viktiga punkter beaktas:

Indexet bör bäst återspegla unik framstegsinformation för att minimera antalet kollisioner

Hashindex ska vara lätt att beräkna

En komplex algoritm ger de bästa indikatorerna på antalet kollisioner, men de är svåra att beräkna och tar därför upp mycket CPU-tid. Det är nödvändigt att bygga en algoritm som är enkel att beräkna, men som har ett minimum antal kollisioner.

För att beräkna indexet valdes operationer med några slumpmässigt genererade masker.

Inledningsvis är maskens hash fylld med slumpmässiga siffror. För varje position beräknas 2 hashindex, det första används för att söka efter positionen i hashtabellen, det andra används för att kontrollera kollisioner.

Innan information från hashtabellen används kontrolleras matchningen av de andra hashindexen, om de inte matchar har en kollision inträffat och informationen ignoreras.

Positionsinformation bör endast uppdateras om det aktuella renderingsdjupet är större än vad som redan finns lagrat i hashtabellen.

Information från en hash kan endast litas på om djupet i hashen är större än det aktuella beräkningsdjupet.

3.6 Användandebibliotekdebuterar

Algoritmen för att använda öppningsbibliotek är att använda förberäknade databaser med spelöppningar, eftersom det i början av spelet finns det största antalet möjliga drag med samma poäng.

3 .7 Kvalitetpositioner

Vid utveckling av en algoritm för statisk positionsuppskattning (kvalitetsfunktion) finns en osäkerhet i valet mellan kvalitet och hastighet. Kvalitativa utvärderingsfunktioner baserade på statistisk grund fungerar långsamt, men ger mycket exakta uppskattningar, vissa även utan användning av brutalt våld, som visar intelligensens böjelser.

Enkla funktioner som tar hänsyn till spelets enklaste principer fungerar mycket snabbare, de ger inte en korrekt bedömning, men tillåter en djup sökning. Således kan en korrekt men långsam bedömning vara sämre än en dum men snabb.

Kvaliteten på uppskattningen bestäms av mängden kunskap om spelet på basis av vilken positionen jämförs med antalet. Kvaliteten på bedömningen är direkt proportionell mot arbetshastigheten och mängden kunskap. Som 40 års praktik i att skapa artificiell intelligens-program visar, är mängden kunskap om en utvärderingsfunktion omvänt proportionell mot dess hastighet.

Grafiskt avbildas detta beroende i figuren som en familj av hyperboler.

Figur 12 - Exempel på djupskärning

När man utvecklar en utvärderingsfunktion för schack bör man ta hänsyn till att i schack beror uppskattningarna av alla parametrar på spelets skede.

Schack är vanligtvis indelat i stadier: debut - öppningen av spelet, mellanspel - mitten av spelet, slutspel - slutskedet. För algoritmen beslöts att dela upp spelen i 3 steg efter antalet pjäser som återstår på brädet för datorspelaren. Inledningsvis har spelarna 16 pjäser på brädet. Tabellen visar spelstadiets beroende av antalet återstående pjäser:

Tabell 1 - Stadier av spelet

3 . 7 .1 Materialkvalitet

Den materiella fördelen för en av spelarna anses vara den viktigaste parametern i schackteori, därför har materialbedömningen störst inflytande på den totala bedömningen av positionen. Materialpoängen beräknas som summan av viktningskoefficienterna för alla pjäser på brädan. Kungen ingår inte i materialpoängen, eftersom om kungen förloras förlorar spelaren automatiskt. Att uppskatta vikten av siffror är huvuduppgiften när man konstruerar en utvärderingsfunktion. För att bestämma siffrornas vikter beslutades att använda en självlärande algoritm baserad på en genetisk algoritm. Vikten på pjäserna beror inte på spelets skede. En genetisk algoritm är en heuristisk sökalgoritm som används för att lösa optimerings- och modelleringsproblem genom att slumpmässigt välja, kombinera och variera önskade parametrar med hjälp av mekanismer som påminner om biologisk evolution, först föreslog av Holland (1975).

3 . 7 . 2 Beskrivningarbetegenetiskalgoritm

Det ursprungliga problemet är kodat på ett sådant sätt att dess lösning kan representeras som en vektor ("kromosom"). Ett visst antal initiala vektorer ("initial population") skapas slumpmässigt. De utvärderas med hjälp av en "fitness-funktion", varvid varje vektor tilldelas ett specifikt värde ("fitness"), som bestämmer sannolikheten för överlevnad för den organism som representeras av den vektorn.

Efter detta, med hjälp av de erhållna konditionsvärdena, väljs vektorerna (selektion) som är tillåtna för "korsning". "Genetiska operatorer" (vanligtvis "korsning" och "mutation") appliceras på dessa vektorer, vilket skapar nästa "generation". Individer av nästa generation utvärderas också, sedan görs selektion, genetiska operatorer tillämpas osv.

Detta simulerar en "evolutionär process" som fortsätter under flera livscykler (generationer) tills algoritmens stoppkriterium är uppfyllt. Ett sådant kriterium kan vara:

Att hitta den optimala lösningen;

Utmattning av antalet generationer som tilldelats för evolution;

Utmattning av tid som tilldelats för evolution.

Genetiska algoritmer tjänar främst till att hitta lösningar i mycket stora, komplexa sökutrymmen.

Således kan arbetet med den genetiska algoritmen representeras i följande diagram:

Figur 13 - Exempel på djupskärning

3 . 7 . 3 Etapperarbetegenetiskalgoritm

Skapa en initial population - en initial population skapas slumpmässigt; även om den visar sig vara helt okonkurrenskraftig kommer den genetiska algoritmen ändå snabbt att omvandla den till en livskraftig population. I det första steget behöver man alltså inte anstränga sig för mycket för att göra individer som är för anpassade, det räcker att de motsvarar formatet på individerna i populationen.

Urval (uppfödning) - en viss andel väljs från hela befolkningen som kommer att förbli "levande" i detta skede av evolutionen. Korsning (reproduktion) - för att få fram en ättling behövs flera föräldrar; Vanligtvis behövs det förstås exakt två. Reproduktion definieras olika i olika algoritmer - det beror naturligtvis på presentationen av data. Huvudkravet för reproduktion är att ättlingen eller ättlingarna ska kunna ärva båda föräldrarnas egenskaper genom att "blanda" dem på något någorlunda intelligent sätt.

Mutationer är stokastiska förändringar hos en del av individer (kromosomer).

3 . 7 . 4 DefinitionvågarsiffrorMedmed hjälpgenetiskalgoritm

Kromosomen för den genetiska algoritmen inkluderar vikter schackpjäser, med undantag för kungl.

För att ställa in den initiala populationen ställs kromosomvärdena in slumpmässigt i intervallet, förutom vikten av bonden och drottningen, värdena för deras vikter är fasta, bonde - 100, dam - 1000.

Turneringsurval används för urval. Slumpmässiga 2 kromosomer spelar sinsemellan, upp till fyra vinster, går först i tur och ordning. Vinnaren av duellen står kvar, förloraren tas bort från befolkningen.

Vid korsning används enpunktskorsningsmetoden.

2 föräldrar tas slumpmässigt, antalet som kromosomen ska delas med väljs slumpmässigt, diagrammet visas i figur nr 14. Som ett resultat kommer varje avkomma att ha egenskaper från både den första och andra föräldern.

Figur 14 - Exempel på djupskärning

Mutationer utförs enligt följande: kromosomer väljs med en viss sannolikhet, och varje "gen" ändras till ett slumpmässigt tal i intervallet [-50; 50], förutom värdet av de statiska uppskattningarna av drottningen och bonden.

För slutvärdena divideras de resulterande vikterna med 100.

3 . 7 . 5 Totalkvalitet

Vid bedömning av en position ägnas uppmärksamhet åt 8 komponenter:

1. Rivalernas materiella krafter

2. Antal fält under strid

3. Upptar nyckelfält

4. Passerade bönder

5. Dubblade bönder

6. Slottning

7. Pantavancemang

8. Pantkedjor [*1]

Antalet fält under strid beräknas på träddjup 2, på grund av höga produktionskostnader. För varje ruta som träffas av en datorpjäs läggs 1 poäng till positionspoängen; för fält som träffas av spelarens pjäser dras en poäng av. Det resulterande värdet skickas till botten av trädet som en parameter. Även på djup 2 beräknas poäng för bondkedjor, godkända och dubbla bonde. För närvaron av bönder som rör till vänster eller höger, får sidan 1 poäng. En bonde anses godkänd om det inte finns några motståndares bönder på dess fil, såväl som på de som ligger intill den, som kan hindra den från att passera till slutet. Dubbla bönder - 2 bönder av samma färg som står på samma fil. För närvaron av dubbla bönder från sidan dras 4 poäng av, för närvaron av varje passerad bonde läggs 5 poäng till. Det finns nyckelrutor i schack:

Figur 15 - Nyckelfält

För att genomföra var och en av dem ges ytterligare 4 poäng.

Därför att Efter kastning är kungen i en mycket stabil position, för en perfekt kastning får sidan 3 poäng.

Ju närmare en bonde är sin sista rang, desto närmare befordran är den. För varje ruta som flyttas framåt läggs 1 till värdet på bonden.

Efter att ha beräknat antalet poäng för båda sidor, erhålls en slutlig positionspoäng genom att subtrahera spelarens poäng från datormotståndarens poäng.

4 . Utvecklingprograms

4 .1 KravTillschackalgoritm

När du utvecklar en modell av en mjukvarumodul för att spela schack, bör följande parametrar beaktas:

* schackalgoritmer kräver mycket prestanda, och styrkan i programmets spel beror direkt på programmets prestanda

* Programvarumoduler ska vara lätta att utveckla och testa

* Användargränssnittet ska vara lätt, lätt anpassningsbart och skalbart

4 .2 Typerschackalgoritmer

De flesta moderna program kan delas in i tre kategorier:

* Den första kategorin är Snabbsökare - tanken är att genom att förenkla utvärderingsfunktionen till det yttersta, och noggrant optimera hela programmet som helhet (vilket vanligtvis uppnås genom att skriva ett program i assembler), kan du öka antalet positioner anses av programmet (nps - noder per sekund) till ett astronomiskt tal, till exempel upp till 150-200k nps vid P/200. Det vill säga, programmet spenderar ungefär ett till två tusen maskinkommandon för varje position. Detta inkluderar att göra ett drag från en tidigare position till denna, utvärdera positionen, generera drag från en given position, kontrolllogik, etc. Det finns bara smulor kvar för själva utvärderingsfunktionen - ett hundratal kommandon. Programmen visar sig vara vansinnigt snabba och presterar utmärkt i komplexa taktiska positioner, och löser även kombinationsproblem perfekt, men har svagt positionsspel

* Den andra kategorin är kunskapsbaserade program. Här ägnas alla krafter åt att skriva en komplex utvärderingsfunktion. Samspelet mellan bitarna med varandra, kåpan för kungen, kontrollen av positioner och nästan månens fas tas med i beräkningen. I nps termer går programmet 10-100 gånger långsammare än snabba sökningar, men spelar bra positionsschack. Mer exakt, detta schack är bra bara när det inte finns någon djup taktik på brädet, eller tidskontrollen är sådan att programmet har tillräckligt med tid för att beräkna dessa taktik.

4 .3 KontrolleratidVschackalgoritmer

Den viktigaste parametern för att konstruera en artificiell intelligensalgoritm för en schackmotståndare är kontroll över rörelsetiden. Styrkan i spelet i ett schackprogram beror på tidskontroll. Innan datorn börjar "tänka" på en flytt måste den tid som finns tillgänglig för datorn beräknas.

När man beräknar den tillgängliga tiden för ett drag måste man utgå från två parametrar:

* Algoritmen för att hitta det bästa draget är baserad på att söka igenom alla möjliga drag till ett visst djup, och beror därför direkt på hur lång tid det går åt att söka. Ju mer tid vi använder, desto starkare spelar datorn

* Väntetiden på svar från en datormotståndare bör inte vara för lång. Som grund kan du ta de internationella schackreglerna, där det finns flera typer av spel: blitz - 15 minuter per spel, snabbt - 60 minuter per spel, klassiskt - mer än 60 minuter per spel.

Baserat på de erforderliga parametrarna, beslutades det att beräkna den tid som är tillgänglig för drag före starten av varje datordrag med hjälp av följande formel: där: tid - tid per drag; full_game_time - total speltid; avg_moves - det genomsnittliga antalet spelarrörelser i ett spel; collect_time - ytterligare ackumulerad tid; D - en liten minskning av den tid som krävs för ytterligare beräkningar. Parametrarna för den totala tiden för spelet och det genomsnittliga antalet spelarrörelser i spelet är två huvudsakliga externa parametrar, genom att ändra vilka kan du ändra spelets styrka. Enligt statistik från schackportalen TheChess.ru är det genomsnittliga antalet spelardrag per spel 30, så det beslutades att ta det genomsnittliga antalet spelardrag i ett parti till 30. Således är den totala tiden för spelet inställd utifrån. När man utvecklade en algoritm för beteendet hos en datormotståndare (artificiell intelligens), användes följande algoritmer:

* Iterativ sökalgoritm, med tidskontroll

* alfa-beta urklippsalgoritm och Nega-Scout

* öppna bibliotek

* hashtabeller

* mördar- och historieheuristik användes för att sortera drag.

4 .4 Tagit framprogram

Alla ovanstående algoritmer och tillägg implementerades i programmet i programmeringsspråket C#.

Skärmdumpar av programmet visas nedan:

Figur 16 - Färgval

Figur 17 - Skärmdump av programmet

Figur 18 - Skärmdump av programmet

När du för musen över en figur i sin egen färg markeras den i vitt. När du väljer en pjäs att flytta blir färgen på dess fält orange och alla celler som pjäsen kan flytta till är markerade i vitt. När du för musen över en sådan cell blir dess färg också orange.

Under spelets gång visas de genomförda dragen i tabellen till vänster, och spelaren kan även spara historiken i en separat fil.

4 .5 BascykelSökDet bästaframsteg

Huvuduppgiften för den grundläggande cykeln att söka efter det bästa draget är att hitta och utföra det bästa draget från datormotståndaren. Slingan använder debutbibliotek och iterativ sökning med tidskontroll. Figur 12 visar processen för att hitta det bästa draget:

Figur 19 - Grundläggande cykel för att söka efter det bästa draget

4 .6 SökDet bästaframstegförstnivå

Algoritmens huvuduppgift för att hitta det bästa draget på den första nivån (motståndarens svar) är att hitta motståndarens bästa drag på den första nivån. Algoritmen är baserad på NegaScout-algoritmen, som använder djup-först-uppskattning för att bestämma uppskattningen av det aktuella draget. Figur 13 visar processen för algoritmen:

Figur 20 - Sök efter det bästa draget på den första nivån

4 .7 Fynddjupbedömningarframsteg

Huvuduppgiften för att hitta en djup uppskattning är att hitta en uppskattning av det aktuella draget med hjälp av NegaScout-algoritmen, nollrörelseheuristiken, data från hashtabellen och en statisk uppskattning av positionen. Figur 14 visar processen för att beräkna djupslagsuppskattningen:

Figur 21 - Hitta en djup uppskattning av flytten

4.8 AndramodellerOchdiagram

Den matematiska modellen för programmet ser ut så här:

Figur 22 - Matematisk modell

Från den abstrakta klassen Figur skapas 7 ättlingklasser som beskriver figurers handlingar och egenskaper. Det finns också en klass Tom, som indikerar att cellen är tom. Tavlan är en uppsättning av 64 figurelement, som vart och ett kan bli vilken som helst av de efterkommande klasserna. Ett drag representeras i datorn som 4 siffror - koordinaterna (från 1 till 8) för rörelsens startpunkt och koordinaterna för dragets slutpunkt. Nedan är tillståndsdiagrammet för programmet:

Figur 23 - Tillståndsdiagram

5 . ExperimentellkvalitetkvalitetRinsikterdataalgoritmer

De implementerade algoritmerna utsattes för jämförande analys för att identifiera den optimala konfigurationen när det gäller hastighet och utförandekvalitet. Experimentet involverade en serie turneringar mellan varje par av olika implementeringar.

5 .1 KvalitetarbeteAlfa Betaskära av

Med hjälp av detta experiment var det nödvändigt att ta reda på om det var möjligt att uppnå en minskning av förgreningsfaktorn, och som ett resultat, en förbättring av algoritmens hastighet utan att förlora kvaliteten på beslutsfattandet om flytten skapas.

För att bedöma kvaliteten på den slutliga algoritmen jämfördes denna sökalgoritm experimentellt med en sökning med minimaxprincipen.

Tabellerna visar koefficienter som visar förhållandet mellan antalet positioner som söks efter algoritmerna, såväl som förhållandet mellan den tid som tilldelats för att utföra en given skanning.

Tabell 1 - Jämförelse av prestandan för alfa-beta cutoff-algoritmen med minimaxalgoritmen.

Experimentella resultat visar att alfa-beta-beskärning är mycket bättre än enkel minimax-sökning.

5 .2 KvalitetarbeteiterativdykOchsorteringrör sig

För att bedöma kvaliteten på algoritmen jämfördes denna sökalgoritm experimentellt med Alpha-Beta-beskärning och bara Alpha-Beta-beskärning.

Liknande dokument

    Beskrivning av spelets regler " Sjöstrid". Funktioner hos moderna datorer och artificiell intelligens. Skapande av ett allmänt blockschema över programmet, dess utseende. Nödvändiga variabler, procedurer och funktioner. Egenskaper för objekt som används i applikationen.

    kursarbete, tillagt 2012-11-05

    Utveckling, baserat på spelet "Points", av ett tillvägagångssätt för programmering av "artificiell intelligens" i positionsspel och möjligheten att använda detta tillvägagångssätt för att lösa problem inom ekonomi, management och andra vetenskapsområden. Spelsituationsmodell.

    avhandling, tillagd 2013-07-21

    Strukturdiagram av en mjukvarumodul. Utveckling av ett programvarumoduldiagram och användargränssnitt. Implementering av en mjukvarumodul: programkod; beskrivning av de operatörer och funktioner som används. Vy över ett användarformulär med en ifylld matris.

    kursarbete, tillagt 2010-01-09

    Studie av de allmänna reglerna för spelet av pjäser, användar- och programmeringsinstruktioner. Egenskaper för de viktigaste algoritmerna som utför uppgifter i klassen Life Widget. Utvärdera dator och mänskliga rörelser. Konstruktion av ett sökträd för bästa drag baserat på funktionsutvärdering.

    test, tillagt 2012-12-20

    De viktigaste stadierna av utveckling, testprinciper och felsökning av "VFS" mjukvarumodulen. Funktioner av design i UML-språket. "Brute force"-metoder och deras tillämpning vid programfelsökning. Skadliga faktorer som finns på programmerarens arbetsplats.

    avhandling, tillagd 2012-07-03

    Analys av modeller och metoder för att implementera intellektuella spel i ett människa-robotsystem. Utvecklingsmiljö för koreograf. Algoritmer för igenkänningsmodul, databehandling, funktioner i spelmodulen. Testa mjukvarupaketet, korrigera och redigera fel.

    avhandling, tillagd 2017-08-12

    Kärnan och problemen med att definiera artificiell intelligens, dess huvudsakliga uppgifter och funktioner. Filosofiska problem med att skapa artificiell intelligens och säkerställa mänsklig säkerhet vid arbete med en robot. Att välja en väg för att skapa artificiell intelligens.

    test, tillagt 2009-12-07

    Spelprogram"pjäser" för ett spel mellan en person och en dator. Utveckling av algoritmer, historisk linje för utveckling av problem. Olika tillvägagångssätt för att bygga system. Förkortad lista över programmet och beskrivning av algoritmen. Artificiell intelligenskomponenter.

    kursarbete, tillagt 2009-03-26

    Konstruktion och analys av en matematisk modell av spelet. Bestämma sannolikheten för att upptäcka fartyg för alla möjliga platser och olika söksystem. Utveckling av algoritmer för artificiell intelligens. Programstruktur och dess komponenter.

    kursarbete, tillagd 2012-12-22

    Konceptet med artificiell intelligens som förmågan hos automatiska system att ta på sig individuella funktioner av mänsklig intelligens. Expertsystem inom medicinområdet. Olika tillvägagångssätt för att bygga system för artificiell intelligens. Skapande av neurala nätverk.

Publikationer om ämnet

  • Den mest lönsamma tanken i World of Tanks Den mest lönsamma tanken i World of Tanks

    Genom att delta i striderna i stridsvagnsvärlden ger varje stridsvagn en viss kredit (silverodling), som kan användas...

  • The Elder Scrolls V: Skyrim The Elder Scrolls V: Skyrim

    Hus och gods i Skyrim Du kan inte bara rusa runt i Skyrims territorium med vapen och skära ut, med eller utan instruktioner, allt som rör sig. Här...