Feladványkészítés redukció segítségével

 

Ezen a lapon kétféle redukcióról lesz szó. Az elsőt már leírtam a Fogalmak című lapon. Az algoritmus végigmegy a feladvány összes beírt elemén, ideiglenesen törli, és megnézi, hogy megoldható feladványt kapott-e. Ha igen, akkor ezt megjegyzi. Nézzük, hogy ez hogyan néz ki a gyakorlatban. Válasszunk egy olyan adatbázist, amelyben még találhatók redukálható feladványok. (Én az archiváltakban már csak nem redukálható feladványokat tárolok.) Ilyen a D-25.gsf (200). Először csak BS segítségével próbálkozzunk redukálni. Ezt kapjuk:

 

 

A program 11 db redukálási lehetőséget talált. A 110-es, 112-es és a 166-os feladványban több elemre vonatkozóan is. Ezeket a cellákat kiürítve (csak egyet-egyet, így 24 eleműek lesznek), újra megoldható feladványokat kapunk. Nézzük van-e olyan, amely kétszeresen redukálható, azaz 23 elemű feladványokat hozhatunk létre belőlük:

 

 

Pontosan azok, amelyekben többször is lehetett elemet elhagyni, kétszeresen redukálhatók. Eddig csak a BS metódus alkalmazásával próbáltunk redukálni. Kapcsoljuk most be a HS-t. Ezt kapjuk:

 

 

Összesen 331 db redukálási lehetőség van, nyilván azért, mert egy feladványban több is lehet. Minél több metódust használunk, annál több lesz az ilyen eset (csak a futási idő megnő). Például:

 

 

Látható, hogy ez így is lett, 399 lehetőséget talált, de a futási idő 167 másodperc volt. Míg a feladványkezelőben csak ellenőrzés hajtódik végre, természetesen mód van a redukció tényleges végrehajtására is. Megválaszthatjuk milyen metódusok segítségével történjen a redukció és mi legyen a Célfájl:

 

 

A másik redukció, amire utaltam, az előzőtől lényegesen különbözik. Itt is szükség van egy forrásállományra, amelyből feladványokat vesz elő az algoritmus. Ebben az esetben véletlenül töröl egy elemet a kiválasztott feladványból, majd ezt tekinti az indirekt keresés véletlen választásának, és ezzel folytatja a keresést. Ennek az alapkoncepciója az, hogy egy helyes feladványból könnyebb egy eggyel kisebb elemszámú feladványt generálni, mint egy teljesen véletlen feltöltésből. Ezzel mintegy kibővítettük a genetikus algoritmust. Abban bízunk, hogy egy jó feladványból származhatnak olyan információk, melyek az eggyel kisebb elemű feladványok  keresésénél hasznosak lehetnek (természetesen mindezt mi nem tudjuk felfedezni, számunkra rejtve maradnak). Nem is csalódunk, működik a keresőprogram. Íme egy példa erre. A 19A.gsf (228) adatbázisból 7 perc alatt 10 darab 18-as feladványt tudtunk készíteni:

 

 

A képernyőről leolvasható, hogy 105-ször választott feladványt és átlagosan 1.635.487 elemi lépést kellet a keresések folyamán végrehajtani. Megfigyelhető még, hogy a keresés közben 75-ször fordult elő, hogy csak két hibára (két üres helyre) volt a teljes kitöltéshez az algoritmus.