A ló haladásának feladata, a PC világa, a "nyílt rendszerek"

ARUBA INSTANT WI-FI: EGYSZERŰ, KIADHATÓ, ELÉRHETŐ

A cikkben a lovag fejlődésének klasszikus problémáját veszik figyelembe, amelynek megoldását az iteratív, rekurzív és automatikus programok fejlesztik, valamint a vizsgálat eredményeit is. A beépített automatikus program ugyanazokat az eredményeket hozza létre, mint az iteratív, de nyilvánvalóbb.

Optimalizálási módszerek

A programozás egyik legérdekesebb szakasza a mesterséges intelligencia területén tapasztalható problémák, amelyekben a megoldást kísérlet és hiba keresi [1,2]. Ebben az esetben keresést keres a megoldáskeresés során, és időtartamát bizonyos heurisztikus szabályok (optimalizálási módszerek) alkalmazásával lerövidítheti.

Az olyan algoritmusok osztályát, amelyek hasonló problémák megoldását teszik lehetővé az angol nyelvű irodalomban, "visszalépés" algoritmusoknak nevezik ("visszatérési algoritmusok"). Az ilyen algoritmusokat akkor használjuk, ha több "irányított" módszer nem illeszkedik [3].

Vizsgáljuk meg az osztály egyik leghíresebb feladatait - a ló haladását [3-5]. Ez egy fedélzetet talál egy NxM lovag méretével, a sakkjáték szabályai szerint mozog. Ha ilyen áthidaló létezik, akkor minden mezőt egyszer csak meglátogatnak (NxM-1 lépéseket hajtanak végre). Itt elemezzük az optimalizálási módszereket (a keresés csökkentése), és megvizsgáljuk az iteratív, rekurzív és automatikus programok munkáját. Először megvizsgáljuk az iteratív programban a keresés csökkentésére használt optimalizálási módszereket:

  • azon sejtek azonosítása, amelyeket nem lehet elkerülni (optimalizálás 1);
  • blokkolt sejtek kimutatása (optimalizálás 2);
  • a Warnsdorf-szabály alkalmazása (optimalizálás 3);
  • Különböző tömbök használata a ló mozgatásához (optimalizálás 4).

Azon cellák azonosítása, amelyeket nem lehet megkerülni

Ha a kártya cellaszáma páratlan (a fehér és fekete cellák száma egyenként különbözik), akkor a bypass csak a nagyobb színű cellákból áll. Nem nehéz észrevenni, hogy a ló útja a színen váltakozó cellákon halad keresztül. Ha a táblaszámok teljes száma páratlan, akkor a lovag által megtett út első és utolsó cellái azonos színűek lesznek. Ennélfogva a bypass csak abban az esetben létezhet, amikor egy olyan cellával kezdődik, amely a legnagyobb számú cellával rendelkezik.

A következő funkció ellenőrzi ezt a feltételt:

A fenti szabály azonban nem vonatkozik minden olyan cellára, amelyhez nincs megoldás. Tehát egy 3x7 cellás tábla mellett azok, amelyekre a fenti szabály teljesül, a cella (2,4) is lehetetlen.

A blokkolt sejtek kimutatása

Ha a következő lépés alatt egy ketrec alakul ki, ahol be tud lépni, de ahol nem tudsz elhagyni, akkor ez a lépés elfogadhatatlan, kivéve az előtti utolsó előtti lépést. Amint az alábbiakban bemutatjuk, ez az optimalizálási módszer lehetővé teszi számukra a visszatérések számának jelentős csökkentését, beleértve a Warnsdorff szabálysal együtt történő felhasználást is.

A fejlődés meghatározása volt csoportok blokkolt sejthez kapcsolódó egymással, de vágva a többi tábla. A figyelembe vett alkalmazása meghatározott csoportok két blokkolt sejtek, ami nagyban csökkenti a hozamot kis táblák, és amikor együtt használják szabály Varnsdorf - és a nagy (például cella mérete 100x100).

A Warnsdorff-szabály alkalmazása

A zsarolás csökkentésére használt sok heurisztikus módszer [5] közül a Warnsdorff-szabály a legegyszerűbb. Elmondása szerint, amikor mászik tábla sakk lovag kell minden alkalommal, hogy a pályán, ahonnan lehet, hogy a lehető legkevesebb agyvérzés a földeken még nem telt el. Ha több ilyen mező van, akkor kiválaszthatja bármelyik közülük, amely azonban egy lóhoz vezető utat vezethet, és követelést kérhet. Megjegyezzük, hogy a Warnsdorff-szabály a legjobban a szögletes mezők számára működik.

Különböző tömbök használata a ló mozgatásához

A ló mozogat például tömbként lehet megadni:

Minden egyes eleme meghatározza a ló egy lehetséges mozgását, és a fordulás során a koordinátákban változásokat tartalmaz a táblán. Ha különböző tömböket használ a ló mozgatásához, a visszatérések száma változhat. A program öt tömböt használ, amelyek a ló esetleges mozdulatait más sorrendben tartalmazzák. Megadja a visszatérések maximális számát (GOOD_RET), és ha elérte, az útkeresés újra elkezdődik egy másik tömb használatával. Ha az utolsó tömb használatával keresztezi a keresztezést, a visszatérések száma MAX_RET értékre korlátozódik. Ha a megosztási valamennyi javasolt optimalizálási módszerek GOOD_RET az értéket eggyel egyenlő, akkor a táblák közel a tér, meg lehet építeni kört anélkül, hogy egyetlen cserébe az összes sejt, ahonnan van egy kis kitérőt. Áthidalása nélkül visszatérő egyes sejtekből nem szerezhető a „kiterjesztett” táblák (pl, 14x3 sejtek) és a nagy (például 100x100 sejtek).

Iteratív program

Teljes mellszobor

Az iteratív program algoritmusának ötlete a következő:

  • minden lépésben az útvonal egy töredékét keressük meg, az aktuális cellából kiindulva, és nem beleértve a már megkerülést;
  • amikor a lehetséges mozgások tömbéből való elmozdulást hajtja végre, a következő elemet kivonjuk, ami a fedélzeten belül elhelyezkedő üres cellához vezet;
  • ha a mozgás lehetetlen, akkor visszatér az előző cellához (a lépés törlése);
  • az elérési út sikeresnek tekinthető, ha az aktuális mozgásszám megegyezik a táblán lévő cellák számával. Ha minden lehetséges mozog átkerül a kezdeti cellából, akkor az elérési út nem létezik.

A brute force funkció szerkezete a 2. listán látható.

Az egyes mozdulatokhoz használt változat számát tömbben tároljuk, amelynek mérete a kártya mérete szerint történik. A leírt algoritmus a variánsok keresését végzi, és megoldást talál. A megoldás hiánya az összes lehetőség teljes körű kereséséhez vezet. A táblázatban. A megtérülések végrehajtásának illusztrálására szolgáló 1. ábra a 3x4 sejtek méretének a cellából történő megkerülését szolgáló protokoll (2,4).

1. táblázat: Protokoll megkerülésének táblája 3x4 sejtek cellából (2,4)

Egyes cellák esetében a program nagyon lassan fut, már kis méretű lemezekkel. Tehát egy 6x6-os cellatábla esetén a cella elején (5.2) az útvonalkeresés 291.077.505 visszatérítést igényel.

A program eredményeinek optimalizálása

Ismertük [5], hogy az NxM és MxN méretű táblák esetében:

  • nincs egyetlen áthidaló N, M 7 esetén; N> 4, M> 5.

A kapott eredmények bemutatásával kapcsolatban megjegyezzük, hogy ezek a fenti optimalizálási módszerek és a heurisztikusan kiválasztott lánc-választási lehetőségek kapcsolódnak. Ha más optimalizálási módszereket [5] és más tömböket használunk, a kapott eredmények eltérőek lehetnek.

Például, fontolja meg az egyes táblák átvonulási eredményeit. A mérete 5x5 sejtek board tábla, amely meghatározza a visszatérések számának, képződik, amikor a bejárását a megfelelő sejtek (táblázat. 2). Hiányában bypass egy sejtben van elhelyezve az N jelölés, és ha az összeg meghaladja a visszatérő által adott program értékét (MAX_RET = 400 000), a keresési útvonalat lezárja, és a megfelelő doboz jelenik LIM csökkentése. A táblázatokban épített optimalizálási módszer, ahol a különböző tömbök használnak egyet ló fut, a sejt továbbá megadja a kijelölését a tömb (A-tól E), amelynek alkalmazása volt elérni anélkül, megkerülve visszatér (GOOD_RET = 1). És ha az eredményt az első tömbre kaptuk, akkor a megfelelő A karakter nem jelenik meg.

2. táblázat: A program eredményei egy 5 x 5 cellás lemezre

A klasszikus 8x8-as cellákat tartalmazó sakktáblán a következő eredmények érhetők el:

  • Az 1. és a 2. optimalizáláshoz a legtöbb találatban a visszatérítések számának határértéke meghaladja a számokat. A sejtek minimális száma a cellában (5.5) - 2502;
  • optimalizáció 1 és 3 az összes sejtben fordult visszatér nullára, kivéve a sejtek (4,1) és (6,4), ahol voltak a 9. és 79., illetve visszatér;
  • a cellában (6.4) végzett 1-3. optimalizáláshoz három hozam volt, a többi - nulla visszatérítés;
  • az 1-4. optimalizálásnál minden cellában visszaadott nulla hozam, és a cellában (6.4.) használtunk egy lehetséges második lépést.

A 100 x 100 sejt méretű táblán a következő eredményeket kaptuk:

  • az 1-3. optimalizáláshoz a legtöbb sejtben nulla visszatérítés érhető el, és a maradék cellákban a visszatérések száma egytől a megadott határértéket meghaladó értékig változik;
  • az 1-4 cellák összesített optimalizálásához, kivéve a sejteket (94,24) és (94,79), nulla hozam jelent meg.

Rekurzív program

A leghíresebb megoldás a lovag megkerülésének problémájára rekurzív [2]. Ebben az esetben a keresést végző függvény struktúrája a következő:

A fentiekben ismertetett mindenféle optimalizálás használható ebben a programban.

Automatizált program

Ha a probléma megoldásának két első programja meglehetősen hagyományos [2], akkor az automaták nem vonatkoznak ilyen problémákra. Felhívjuk a figyelmet arra, hogy az automaton program formálisan a fent leírt iteratívból épülhet fel a [7] -ben leírt módszer alkalmazásával. Egy automata program formálisan is felépíthető a rekurzív program szerint [8] javasolt módszer alkalmazásával.

Ábra. 1. Az automata csatlakozások áramköre

Ezenkívül automata program létrehozása is lehetséges, ha egy automatát közvetlenül a probléma körülményei szerint alakítunk ki. Az 1. ábrán. Az 1. és 2. ábrán a Mile automaton megfelelő kapcsolási sémája és átmenet diagramja látható.

Ábra. 2. Az automata átmenet grafikonja

Ez a készülék a függvények és változók meghatározott iteratív programot, így alkalmazza a fenti optimalizálási módszer, és segítségével kapott eredmények egybeesnek az eredményeket az iteratív programot.

Az automatát végrehajtó funkció egyszerűsített szövegét a 4. listában láthatjuk.

Mi a jobb?

Amint fentebb megjegyeztük, az iteratív és az automatikus programok ugyanazokat az eredményeket produkálják, de az automatizált program, amelyet az államok kifejezett kiválasztása különböztet meg, sokkal érthetőbb.

Az egyéb kísérletek eredményeit és a program teljes szövegét, amelynek segítségével megvalósultak, az "Automatikus gépek" részben található az is.ifmo.ru és a www.softcraft.ru oldalon.

irodalom

Kapcsolódó cikkek