Re: 3x4-ristikoiden määrä + ratkaisuohjelmasta

[vastaus aiempaan viestiin]

Kirjoittaja: Seppo Mustonen
Sähköposti:    -
Päiväys: 3.5.2006 13:35

Seurasin aluksi 3x4-ristikoiden määrän laskemisessa täsmälleen niitä
polkuja, jotka Reijo esitti viestissään "3x3-ristikoiden analyysia"
19.4.2006 ja muunsin laskentaa tässä tilanteessa (juuri samalla
tavalla kuin Reijo kuvaa edellisessä viestissään) kiinnittämällä
yhden luvun (12) ristikon viimeiseen paikkaan.
Näin lähtökohtana on fact(11)=39916800 erilaista ristikkoa ja
Reijon 19.4.2006 kuvaamalla tavalla suodattui näiden joukosta
94896 ehdokasta.

Laskennassa keskeinen vaihe on aggregointia edeltävä lajittelu,
jossa FILE SORT:in nopeuttamiseksi kannattaa varata riittävästi
tilaa keskusmuistissa tapahtuvaan työskentelyyn ja
myös oletusarvoa suurempi määrä väliaikaisia tiedostoja.
Käytin tuossa lajittelussa asetuksia WORKSPACE=10000000 FILEMAX=12.
Tällöin havaintojen järjestäminen sujui koneellani alle tunnissa.
Oletusarvoilla WORKSPACE=65535 FILEMAX=4 se kestää huomattavasti
pitempään.

Näiden ristikoiden joukossa jokainen olennaisesti erilainen esiintyy
12 kertaa, sillä (luvun 12 paikan kiinnittämisestä huolimatta)
pystyriveillä on vielä fact(3)=6 eri järjestystä ja vaakariveillä
fact(2)=2 eri järjestystä. Näin olennaisesti erilaisia 3x4-ristikoita
olisi korkeintaan 94896/6/2=7908.

Näistä vähemmistö antaa yksikäsitteisen ratkaisun.
Esim. eräs ehdokkaista on

  1   2   4   3  10
  5   6   8   7  26
  9  10  11  12  42
 15  18  23  22

mutta Survo-ristikolla

  *   *   *   *  10
  *   *   *   *  26
  *   *   *   *  42
 15  18  23  22

on toinenkin ratkaisu

  1   2   3   4  10
  5   6   8   7  26
  9  10  12  11  42
 15  18  23  22

jossa luku 12 ei ole enää viimeisessä paikassa vaan liukunut kolmanteen
sarakkeeseen ja liittyy nyt sarakesummaan 23 eikä summaan 22.
Näin jokainen em. seulotuista ristikoista tulee tarkastaa erikseen
ratkaisun yksikäsitteisyyden osalta.

Yksikäsitteisen ratkaisun antavien ristikoiden etsintään käytin
ratkaisuohjelmaani. Koska tuo ohjelma tarvitsee lähtötietonaan
ratkaistavan ristikon matriisitiedostona, laadin sukron, joka
käy läpi kaikki 12*7908=94896 ristikkoa poimien 94896 havainnon
datatiedostosta vuorollaan aina yhden ristikon ja muuntaen sen
matriisitiedostoksi sekä lopuksi tarkastaen ratkaisuohjelmalla,
määräytyykö tulos yksikäsitteisesti.

                        * * *

Ratkaisuohjelman yleisperiaate:

Ratkaisuohjelmani toimii hyvin alkeellisen "geneettisen" algoritmin
mukaisesti. Se aloittaa sijoittamalla puuttuvat luvut umpimähkään
taulukkoon (satunnaistettu ristikko) ja yrittää sitten systemaattisin
vaihdoin saada lasketut rivi- ja sarakesummat mahdollisimman lähelle
oikeita summia.
Menettely johtaa joko oikeaan ratkaisuun tai (kuten yleensä) se
päätyy pattitilanteeseen, jossa se ei enää pysty parantamaan
ratkaisuksi kelpaamatonta tulosta.
Jälkimmäisessä vaiheessa tapahtuu "mutaatio", jossa kaksi tai useampia
lukuja vaihtaa paikkojaan satunnaisesti.
Tämän jälkeen yritetään parantaa tulosta jälleen systemaattisesti,
kunnes joko päädytään ratkaisuun tai joudutaan turvautumaan uuteen
mutaatioon.
Ristikon vaikeutta kuvaavaksi tunnusluvuksi olen ottanut tarvittujen
mutaatiokertojen lukumäärän keskiarvon, kun ratkaisu toistetaan esim.
1000 kertaa lähtemällä joka kerran täysin satunnaistetusta ristikosta.

Mutaatioiden lukumäärä näyttää noudattavan (kuten sopii odottaa)
geometrista jakaumaa. Olen tarkkaillut joissain esimerkkiristikoissa,
mikä on kussakin mutaatiossa paras vaihtojen lukumäärä.
Kolme vaihtoa näyttää ainakin 5x5-ristikoilla antavan keskimäärin
nopeimmin ratkaisun ja ratkaisu on luokkaa kolme kertaa nopeampi
kuin lähdettäessä pattitilanteen jälkeen kokonaan uudelleen
satunnaistetusta ristikosta.

                        * * *

Olen sisällyttänyt ratkaisuohjelmaan myös option, jolla se tutkii
ratkaisun yksikäsitteisyyttä ratkaisemalla tehtävän korkeintaaan
k kertaa ja jos se havaitsee, että syntyy yksikin ensimmäisestä
ratkaisusta eroava tulos, tästä tulee ilmoitus.
Sukroni ja ratkaisuohjelmani avulla (arvolla k=5) annoin koneen
käydä läpi kaikki 94896 ristikkoa eli se joutui ratkomaan lähes
puoli miljoonaa kertaa 3x4-ristikkoja ja aikaa kului tähän
hieman yli 7 tuntia.

Tämä karsinta jätti jäljelle 94896 ristikosta vain 7609.
Se ei kuitenkaan ole lopullinen tulos, sillä olennaisesti
erilaisten ristikoiden määräksi tulisi 7609/12=634.08333333333
mikä ei ole kokonaisluku.
Päättelin, että jäljellä on vielä monikäsitteisiä ristikoita, joita
ratkaisuohjelma ei vain ole tunnistanut sellaiseksi eli joissakin
tapauksissa tällaisesta ristikosta on saatu sama ratkaisu
k=5 yrityskerrasta huolimatta.
Niinpä seuloin 7609 jäljelle jäänyttä ristikkoa vielä uudelleen
arvolla k=15, jolloin niistä karsiutui 613 ja jäljelle jäi siis
6996, mistä olennaisesti erilaisten ristikoiden määräksi tulee
6996/12=583.
Tämän kerroin eilisessä (2.5.2006) viestissäni ja se on mitä
ilmeisimmin lopullinen lukumäärä, sillä toistin seulonnan
vielä arvolla k=30 (melkein 2 tunnin ajo), mutta yhtään monikäsitteistä
ristikkoa ei enää löytynyt.

Periaatteessa ratkaisuun päästäisiin suoraan Reijon 3x3-ristikkojen
analysoinnin kaltaisesti (siis kiinnittämättä yhtä luvuista), mutta
seulottavia ristikkoja olisi silloin alunperin 12-kertainen määrä
fact(12)=479001600 ja käsiteltävät tiedostot tulisivat tällöin
valtavan suuriksi, jolloin aikaa ehkä kuluisi yhteensä enemmän
kuin mitä käytin kuvaamassani menettelyssä (noin 11 tuntia).

                        * * *

Kimmo ilmoitti ratkaisseensa Survo-ristikon 8.
Tässä on toinen ehkä hieman vaikeampi:

SURVO-ristikko 9:  (vaikeusaste noin 1800)

  *  *  *  * 35
  *  *  *  * 17
  *  *  *  * 26
 15 32 22  9

-Seppo

Vastaukset:

Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.