Käyttöympäristö tekstin ja numeerisen tiedon luovaan käsittelyyn

SURVO MM
Etusivu  |  Keskustelu  |  Uutuudet  |  Download  |  Flash

Seppo Mustonen (9.7.2007):
Vaihtomenetelmästä

Survo-ristikoiden ratkaiseminen reunasummien tulojen avulla


Tähänastiset kokemukset osoittavat, että Survo-ristikoiden
ratkaisemisessa ilman varsinaista ratkaisuohjelmaa
saatetaan käyttää hyvinkin erilaisia keinoja.
Useimmin toimitaan puhtaasti loogisten päätelmien avulla, mutta joskus
myös esim. Survon antama laskennallinen tuki on hyödyksi.
Normaalissa manuaalisessa ratkaisutavassa ristikkoa pyritään täyttämään
avointen ruutujen osalta vaihe vaiheelta parhaimmillaan
tiukan päättelyketjun avulla siten, että joka tilanteessa tehty
valinta on ainoa mahdollinen. Varsinkin helppoja ristikkoja
monet kuitenkin ratkovat myös osittain arvaamalla.

Esitän tässä erilaisen menettelyn, joka perustuu muutaman jo aikaisemmin
käytetyn keinon yhdistelemiseen ja muuntaa tehtävän hieman
shakkitehtävän tapaiseksi.
Tällä menetelmällä useat vaikeiksi koetut tehtävät saattavat ratketa
yllättävän helposti. Se ei kuitenkaan anna kätevää ratkaisua kaikille
Survo-ristikoille eikä sen avulla voi ainakaan toistaiseksi todeta
ratkaisun yksikäsitteisyyttä.

Tämä ratkaisutapa on toisaalta sukua alkuperäisen ratkaisuohjelmani
pääidealle, jossa

  (satunnaisesti täytettyä) taulukkoa parannellaan vaihtamalla
  lukujen paikkoja niin, että saadaan lopulta annetut ja
  lasketut summat täsmäämään

ja toisaalta sille ilmeiselle piirteelle, että

  pienet luvut sijoittuvat pienten summien risteyksiin ja
  suuret suurten risteyksiin

sekä täsmällisemmin mm. Joonas Kauppisen ja Markku Verkasalon
esittämiin näkemyksiin siitä, että

    reunasummien tulot osoittavat karkeasti lukujen oikean järjestyksen.

Reunasummien tulojen käytölle löytyy tilastollinen perustelu.
Jos tulkitaan Survo-ristikko kahden muuttujan otoksesta lasketuksi
frekvenssitaulukoksi ja muuttujat oletetaan toisistaan riippumattomiksi,
taulukon kussakin ruudussa odotettu frekvenssi on vastaavien reuna-
summien tulo jaettuna otoskoolla. Siis nuo tulot sellaisinaan ovat
verrannollisia odotettuhin frekvensseihin.

Kun nämä periaatteet yhdistetään (ja mietitään hieman lisää), ainakin
avoimet Survo-ristikot (olen ehtinyt vasta tarkastella lähemmin
4x4-tapausta) saa ratkaistuksi useimmiten yllättävän helposti hiukan
shakkitehtävien tyyliin esim. "matti kahdella siirrolla".

Näytän, miten se tapahtuu viime vuoden kesäkuun ensimmäisessä
kirjoituksessani (sivuilla 17-21) esitetyssä ja ratkaistussa tehtävässä

 *   *   *   *  14
 *   *   *   *  28
 *   *   *   *  44
 *   *   *   *  50
16  33  40  47

Reunasummien tulojen taulukko on silloin

 224  462  560  658  14
 448  924 1120 1316  28
 704 1452 1760 2068  44
 800 1650 2000 2350  50
  16   33   40   47

ja kun luvut 1-16 pannaan taulukkoon näiden tulojen
suuruusjärjestyksessä, saadaan taulukko

      1   3   4   5  14
      2   8   9  10  28
      6  11  13  15  44
      7  12  14  16  50
     16  33  40  47

joka ei sellaisenaan kelpaa, koska esim. ensimmäinen
rivisumma on 1+3+4+5=13 eikä 14, mutta summat ovat
silti lähellä oikeita seuraavasti:

                    Sum  OK   D
      1   3   4   5  13  14  -1
      2   8   9  10  29  28   1
      6  11  13  15  45  44   1
      7  12  14  16  49  50  -1
Sum  16  34  40  46
OK   16  33  40  47
D     0   1   0  -1         W=6

Tässä Sum vastaa laskettua summaa, OK oikeaa summaa ja D niiden erotusta
(virhettä) D=Sum-OK. Virheiden itseisarvojen summa on W=6.
Tavoitteena on nyt pienentää virhettä vaihtamalla sopivasti kahden luvun
paikkoja. Hyvältä näyttää tällöin vaihto (5,6), mikä johtaa tilanteeseen

                    Sum  OK   D
      1   3   4   6  14  14   0
      2   8   9  10  29  28   1
      5  11  13  15  44  44   0
      7  12  14  16  49  50  -1
Sum  15  34  40  47
OK   16  33  40  47
D    -1   1   0   0         W=4

eli virhe on pudonnut arvoon W=4.
Tästä päästäänkin perille heti toisella siirrolla (7,8)

                    Sum  OK   D
      1   3   4   6  14  14   0
      2   7   9  10  28  28   0
      5  11  13  15  44  44   0
      8  12  14  16  50  50   0
Sum  16  33  40  47
OK   16  33  40  47
D     0   0   0   0         W=0

eli tehtävä ratkeaa todella helposti verrattuna vaikka alkuperäiseen
ratkaisuuni, jossa tosin pääteltiin samalla tuloksen yksikäsitteisyys.

Äskeisessä tehtävässä tarvittiin siis vain kaksi siirtoa.
Näin vähällä ei yleensä selvitä, mutta em. kirjoituksessani sivulla 24
esitetty ristikko, jolle nyt etsittiin mahdollisimman yksinkertaista
ratkaisua tehtävänä 65/2007

   A  B  C  D
1  *  *  *  * 51
2  *  *  *  * 36
3  *  *  *  * 32
4  *  *  *  * 17
  51 42 26 17

ratkeaa sekin tällä "vaihtomenetelmällä" yllättävän sukkelasti eli
viidellä siirrolla. Ratkaisun olen saattanut Flash-demon muotoon.

Selvittääkseni, miten tämä menettely toimii yleisesti avoimilla,
yksikäsitteisesti ratkeavilla 4x4-ristikoilla, joita on 5327,
olen etsinyt niistä jokaiselle lyhimmän ratkaisun.
Siirtoja tarvitaan seuraavan taulukon mukaisesti

Siirtoja      0     1     2     3     4     5     6     7     8     9
frekvenssi   85   262   522   977  1271  1222   696   255    36     1
kumul.       85   347   869  1846  3117  4339  5035  5290  5326  5327
%           1.6   6.5  16.3  34.7  58.5  81.5  94.5  99.3       100.0

Summien tulot antavat siis suoraan ratkaisun 85 tapauksessa 5327:stä
ja 81.5 % näistä ristikoista ratkeaa alle 6 siirrolla.

Olen pyrkinyt ratkaisemaan (menettelyn alkuasetelmasta ja siirtojen
kirjanpidosta huolehtivan) sukron /SP_SWAP tuella useita näistä
tehtävistä ja kokemukseni viittaavat siihen, että jos siirtojen määrä
on korkeintaan 5, tehtävän saa selvitettyä suhteellisen helposti.

Ryhtyessään ratkomaan tehtävää ei kuitenkaan voi tietää etukäteen
tarvittavien siirtojen määrää. Jonkinlaisen ennusteen saa tehtävän
summien tulojen avulla muodostetun alkuasetelman virhesumman W avulla.
W vaihtelee nollasta arvoon 22 ja se kertoo tarvittavien siirtojen
määrästä mm. seuraavaa:

 W     siirtoja<6   W-arvojen frekvenssit
0-4      100.0 %       467
 6        99.5 %       417
 8        99.0 %       609
10        93.6 %       879
12        85.8 %       896
14        70.6 %       929
16        56.6 %       681
18        49.6 %       312
20        46.8 %       126
22        54.5 %        11

kaikki    81.5 %      5327

Jos siis virheiden lähtösumma on 10 tai pienempi, 4x4-ristikko ratkeaa
alle 6 siirrolla "93.6-prosenttisesti".

Siirtojen määrän keskiarvo on noin 4 (ja hajonta 1.6). Jos
aloitettaisiin aivan umpimähkään täytetystä ristikosta, keskiarvo
olisi olennaisesti suurempi eli noin 12.6 (ja hajonta 1.3),
mikä näytetään seuraavasti.


Menetelmän toimivuus (ainakin tässä 4x4-tilanteessa) perustuu paljolti
myös siihen, että jos lasketaan kaikista 5327 ristikosta (kuvitellen
ne frekvenssitaulukoiksi) khi^2-arvot, ne sijoittuvat välille
(0.25,8.25) eli suurinkin niistä on alle vapauasteiden 9 lukumäärän,
joka on riippumattomilla muuttujilla odotusarvo. Keskiarvo on nyt 3.95
ja keskihajonta 1.76. Niinpä näissä taulukoissa tuo "muuttujien
riippumattomuus" on siis jopa ylikorostunutta ja siksi summien tulot
ennustavat hyvin oikeaa ratkaisua.

Useimmiten ratkaisun pääjuonena on tehdä vaihdot niin, että virhesumma W
alenee jokaisessa siirrossa, koska tällöin "hyvän pelisilmän omaava"
näkee kussakin tilanteessa, mitkä vaikuttavat järkeviltä valinnoilta.
Toisinaan tilanne on hankalampi mm. siten, että W on heti alkuun niin
alhainen, ettei edellinen strategia pure, vaan on tehtävä "uhrauksia"
(hiukan shakkiongelmien tyyliin) eli valittava siirtoja, joissa W
väliaikaisesti kasvaa. Tällöin joutuu käyttämään myös muunlaisia
päättelyjä seuraavan esimerkin tapaan.

                   * * *

Jotta tässä kuvattua tekniikkaa olisi käytännössä mahdollisimman helppo
soveltaa, olen siis laatinut sukron /SP_SWAP, joka "esitäyttää" ristikon
summien tulojen mukaisesti ja antaa sitten käyttäjälle tilaisuuden tehdä
peräkkäin hiiren ja X-, Y-nappien avulla haluamiaan vaihtoja (swap).
Sukro päivittää jokaisen vaihdon jälkeen pelipöytäkirjan ja näyttää
siirtohistorian. Sukrolla on mahdollista käsitellä myös ei-avoimia
ristikoita, sillä esitäyttöohjelma (uusi pieni Survo-moduli SPGUESS)
käyttää silloin hieman yleistettyä summientulo-tekniikkaa. Näissä
tapauksissa valmiiksi annetut luvut näytetään sinisellä taustalla, jotta
pelaaja tietää varoa siirtelemästä noita "kiintopisteitä".

Sukron /SP_SWAP käyttö edellyttää täyttä SURVO MM -versiota.

Erikseen olen myöhemmin (vuoden 2008 alussa) tehnyt verkossa toimivan
Java-sovelman,
joka luo arpoen lukuisia Survo-ristikoita ratkaistavaksi vaihtomenetelmällä.

                   * * *

Sukro /SP_SWAP edellyttää, että ratkaistava Survo-ristikko talletetaan
Survossa matriisina. Esim. tehtävä

 *   *   *   *  14
 *   *   *   *  28
 *   *   *   *  44
 *   *   *   *  50
16  33  40  47

talletetaan muodossa

MAT SAVE AS A
 0   0   0   0  14
 0   0   0   0  28
 0   0   0   0  44
 0   0   0   0  50
16  33  40  47   0

ja sukro käynnistetään komennolla
/SP_SWAP A

Tässä on muutamia tehtäviä, joita voi yrittää ratkaista vaihtomenetelmällä:

Tehtävä S0: (ratkeaa suoraan)
MAT SAVE AS A
 0   0   0   0  15
 0   0   0   0  32
 0   0   0   0  41
 0   0   0   0  48
14  33  38  51   0

Tehtävä S1: (ratkeaa kolmella siirrolla)
MAT SAVE AS A
 0   0   0   0  48
 0   0   0   0  43
 0   0   0   0  34
 0   0   0   0  11
47  41  30  18   0

Tehtävä S2: (4 siirtoa)
MAT SAVE AS A
 0   0   0   0  55
 0   0   0   0  44
 0   0   0   0  23
 0   0   0   0  14
45  39  29  23   0

Tehtävä S3:
MAT SAVE AS A
 0   0   0   0   0  27
 0   0   0   0   0  37
 0   0   0   0   0  56
 9  17  24  31  39   0

Tehtävä S4:
MAT SAVE AS A
 0   0   0   0  57
 0   0   0   0  41
 0   0   0   0  27
 0   0   0   0  11
44  36  31  25   0

Tehtävä S5:
MAT SAVE AS A
 0   0   0   0  56
 0   0   0   0  38
 0   0   0   0  31
 0   0   0   0  11
45  37  32  22   0

                           * * *


Vaihtojen lukumäärän jakauman laskeminen satunnaiselle permutaatiolle Vaihtojen lukumäärän jakaumaa ei yleisesti kannata lähteä laskemaan määräämällä tuo lukumäärä kullekin permutaatiolla erikseen, koska 4x4-ristikoiden tapauksessa niitä on fact(16)=20922789888000 kappaletta. Vaikka sekunnissa saisi laskettua miljoona tapausta, koko laskentaan kuluisi yli puoli vuotta. Näytän, miten Survon matriisi- ja "polynomi"-tulkin avulla jakauma saadaan selville tarkkaan numeerisesti hyvin nopeasti. On hyvä matemaattinen harjoitustehtävä osoittaa, miksi näin saadaan haluttu tulos. Tarkastellaan tuloa (x-1)*(x-2)*(x-3)*...*(x-15) ja kehitetään se polynomiksi s0+s1*x+s2*x^2+...+s15*x^15. Kertoimet s0,s1,s2,s3,...,s15 ovat tällöin ns. Stirlingin ensimmäisen lajin lukuja ja niiden itseisarvot jaettuna luvulla 16! ilmaisevat käänteisessä järjestyksessä vaihtojen lukumäärän jakauman pistetoden- näköisyydet. Laskenta tapahtuu tällöin Survolla esim. näin: Muodostetaan tarvittavien polynomien (binomien) kerroinvektorit: MAT SAVE AS P -1 1 MAT SAVE AS P2 -2 1 MAT SAVE AS P3 -3 1 sama arvoilla 4-15 eli siis viimeisenä MAT SAVE AS P15 -15 1 Lasketaan binomien tulo: POL P=P*P2 POL P=P*P3 POL P=P*P4 POL P=P*P5 POL P=P*P6 POL P=P*P7 POL P=P*P8 POL P=P*P9 POL P=P*P10 POL P=P*P11 POL P=P*P12 POL P=P*P13 POL P=P*P14 POL P=P*P15 MAT TRANSFORM P BY abs(X#) Tulostetaan kertoimien s0,s1,...,s15 itseisarvot, tarkistetaan (kosketuslaskennalla) niiden summa (joka on siis 16!) ja jakamalla sillä saadaan jakauman pistetodennäköisyydet: MAT LOAD P,12345678901245,CUR+1 MATRIX P Polynom /// real todennäköisyys vaihtojen lukumäärä 0 1307674368000 0.06250000000000 15 1 4339163001600 0.20738931207681 14 2 6165817614720 0.29469385525189 13 3 5056995703824 0.24169796336407 12 4 2706813345600 0.12937153028299 11 5 1009672107080 0.04825704948933 10 6 272803210680 0.01303856761648 9 7 54631129553 0.00261108245341 8 8 8207628000 0.00039228171979 7 9 928095740 0.00004435812552 6 10 78558480 0.00000375468474 5 11 4899622 0.00000023417632 4 12 218400 0.00000001043838 3 13 6580 0.00000000031449 2 14 120 0.00000000000574 1 15 1 0.00000000000005 0 20922789888000 Tästä saadaan (edelleen kosketuslaskennalla) jakauman odotusarvo ja hajonta: m=12.619271006771 (odotusarvo) S2=161.04238320212 (neliöiden painotettu summa) s=sqrt(S2-m^2) s=1.3402919308079 (hajonta) * * *

Esimerkki tehtävästä, joka edellyttää "uhrausta" * * * * 49 vaikeusaste=1700 * * * * 39 * * * * 33 * * * * 15 49 43 29 15 Vaihtomenettelyn alkuasetelma on tällöin C1 C2 C3 C4 Sum OK D R1 16 15 11 7 49 49 0 R2 14 13 9 4 40 39 1 R3 12 10 8 3 33 33 0 R4 6 5 2 1 14 15 -1 Sum 48 43 30 15 OK 49 43 29 15 W=4 D -1 0 1 0 eli W on ainoastaan 4, mutta ristikko ei ratkea tästä suoraan yhdellä tai parilla vaihdolla. Koska minimisummat ovat molemmat suuruudeltaan 15, kannattaa tarkastella niiden mahdollisia osituksia: COMB P,CUR+1 / P=PARTITIONS,15,4 DISTINCT=1 Partitions 4 of 15: N[P]=6 1 2 3 9 1 2 4 8 1 2 5 7 1 3 4 7 1 3 5 6 2 3 4 6 Ainoat yhteensopivat ositusvaihtoehdot ovat silloin 8 4 2 1 - 6 5 3 1 7 5 1 2 - 6 4 3 2 ja näistä ensimmäinen pari on lähempänä alkuasetelmaa. Kannattaa siis aloittaa vaihdoilla (2,3) ja (7,8), jolloin viimeinen rivi ja sarake saadaan summiltaan oikeiksi, mutta W kasvaa arvoon 6 (uhraus!) C1 C2 C3 C4 Sum OK D R1 16 15 11 8 50 49 1 R2 14 13 9 4 40 39 1 R3 12 10 7 2 31 33 -2 R4 6 5 3 1 15 15 0 Sum 48 43 30 15 OK 49 43 29 15 W=6 D -1 0 1 0 Nyt on helppo havaita, että vaihdot (12,13) ja (10,11) vievät lopputulokseen C1 C2 C3 C4 Sum OK D R1 16 15 10 8 49 49 0 R2 14 12 9 4 39 39 0 R3 13 11 7 2 33 33 0 R4 6 5 3 1 15 15 0 Sum 49 43 29 15 OK 49 43 29 15 W=0 D 0 0 0 0 eli tehtävä on ratkaistu 4 siirrolla.

Survo-ristikkojen pääsivulle

Etusivu  |  Keskustelu  |  Uutuudet  |  Download  |  Flash
Copyright © Survo Systems 2001-2006. All rights reserved.
Updated 2007-07-12 by webmaster'at'survo.fi.
Best viewed with any browser.