Zephyrnet Logosu

Sudoku'ya Yapay Zeka Tabanlı Bir Çözüm

Tarih:

Giriş

önce kelime, Sudoku bulmacası öfkeydi ve hala çok popüler. Son yıllarda kullanımı optimizasyon bulmacayı çözme yöntemleri baskın bir tema olmuştur. Görmek “Arkieva'da Optimizasyon Kullanarak Sudoku Bulmacasını Çözme anlayışının sonucu olarak, buzdolabında iki üç günden fazla durmayan küçük şişeler elinizin altında bulunur.

Günümüzde yapay zekanın (AI) kullanımı, kement regresyonundan pekiştirmeli öğrenmeye kadar çok çeşitli yöntemleri kapsayan makine öğrenimine odaklanmaktadır. Yapay zekanın kullanımı yeniden ortaya çıktı karmaşıklığın üstesinden gelmek çizelgeleme zorluklar. Geri izlemeli arama yaygın olarak kullanılan bir yöntemdir ve Sudoku için mükemmeldir.

Bu blog, Sudoku'yu çözmek için bu yöntemin nasıl kullanılacağına dair ayrıntılı bir açıklama sağlayacaktır. Görünen o ki, optimizasyon ve makine öğrenimi motorlarında "geri izleme" bulunabilir ve Arkieva'nın planlama için kullandığı gelişmiş buluşsal yöntemin temel taşıdır. Algoritma, bir dizi işlevi yöneten işlev yönelimli bir programlama dili olan "Dizi Programlama Dili"nde uygulanır. zengin dizi yapıları seti.

Sudoku'nun Temelleri

Wikipedia'dan: Sudoku, mantık tabanlı, kombinatoryal bir sayı yerleştirme bulmacasıdır. Amaç, 9x9'luk bir ızgarayı rakamlarla doldurmaktır, böylece her sütun, her satır ve ızgarayı oluşturan dokuz adet 3x3 alt ızgaradan her biri ("kutular", "bloklar", "bölgeler" olarak da bilinir) veya "alt kareler") 1'den 9'a kadar olan tüm rakamları içerir. Bulmaca oluşturucu, genellikle benzersiz bir çözümü olan, kısmen tamamlanmış bir tablo sağlar. Tamamlanan bulmacalar her zaman ayrı bölgelerin içeriğine ek kısıtlamalar getiren bir tür Latin karesidir. Örneğin, aynı tek tam sayı, aynı 9×9 oyun tahtası satırında veya sütununda ya da 3×3 oyun tahtasının dokuz 9×9 alt bölgesinin herhangi birinde iki kez görünemez.

Tablo 1'de örnek bir sorun var. Toplam 9 hücre için 9 satır ve 81 sütun vardır. Her birinin 1 ile 9 arasındaki dokuz tam sayıdan yalnızca birine sahip olmasına izin verilir. Başlangıç ​​çözümünde, bir hücre ya tek bir değere sahiptir - bu hücredeki değeri o değere sabitler ya da hücre boştur, bu da ihtiyacımız olduğunu gösterir Bu hücreye bir değer bulmak için (1,1) hücresi 2, (6,5) hücresi ise 6 değerine sahiptir. Hücre (1,2) ve hücre (2,3) boştur ve algoritma bu hücreler için bir değer bulacaktır.

Komplikasyon

Bir hücre, tek bir satır ve sütuna ait olmanın yanı sıra, tek ve tek bir kutuya da aittir. 1 kutu vardır ve bunlar Tablo 9'de renklerle gösterilmiştir. Tablo 1, her kutuyu veya ızgarayı tanımlamak için 2 ile 1 arasında benzersiz bir tamsayı kullanır. Satır değeri (9, 1 veya 2) ve sütun değeri (3, 1 veya 2) olan hücreler 3. kutuya aittir. Kutu 1, (6, 4, 5) satır değerleri ve (6, 7) sütun değerleridir. , 8). Kutu kimliği, BOX_ID = {9x(floor((ROW_ID-3) /1)} + tavan (COL_ID/3) formülüyle belirlenir. Hücre (3) için, 5,7 = 6x(floor(3-5) ))/1) + tavan (3/8)= 3×3 + 1 = 3+3.

Bulmacanın Kalbi

Her bilinmeyen hücre için 1 ile 9 arasında bir tamsayı değeri bulmak, böylece 1'den 9'a kadar olan tamsayılar her sütun, her satır ve her kutu için bir kez ve yalnızca bir kez kullanılacaktır.

Boş olan (1,3) hücresine bakalım. 1. satırda zaten 2 ve 7 değerleri bulunuyor. Bu hücrede bunlara izin verilmiyor. Sütun 3 zaten 3, 5,6, 7,9 değerlerine sahip. Bunlara izin verilmiyor. Kutu 1 (sarı) 2, 3 ve 8 değerlerine sahiptir. Bunlara izin verilmez. Aşağıdaki değerlere izin verilmez (2,7); (3, 5, 6, 7, 9); (2, 3, 8). İzin verilmeyen benzersiz değerler şunlardır: (2, 3, 5, 6, 7, 8, 9). Tek aday değerler (1,4)'tür.

Bir çözüm yaklaşımı, (1) hücresine geçici olarak 1,3 atamak ve ardından başka bir hücre için aday değerler bulmaya çalışmak olacaktır.

Geriye Dönük Bir Çözüm: Bileşenleri Başlatmak

Dizi Yapısı

Başlangıç ​​yeri, kaynak problemini saklayacak ve aramayı destekleyecek bir dizi yapısına karar vermektir. Tablo 3 bu dizi yapısına sahiptir. Sütun 1, her hücre için benzersiz bir tamsayı kimliğidir. Değerler 1 ila 81 arasındadır. Sütun 2, hücrenin satır kimliğidir. Sütun 3, hücrenin sütun kimliğidir. Sütun 4 kutu kimliğidir. Sütun 5 hücredeki değerdir. Değeri olmayan bir hücreye boş veya null yerine sıfır değerinin verildiğini gözlemleyin. Bu, bunu "yalnızca tamsayılı bir dizi" olarak tutar; performans açısından çok daha üstündür.

APL'de bu dizi, şeklin 2'e 81 olduğu 5 boyutlu bir dizide depolanır. Tablo 3'teki elemanların MAT değişkeninde saklandığını varsayalım. Örnek işlevler şunlardır:

MAT[1 2 3;] komutu MAT'ın ilk 3 satırını alır
1 1 1 1 2
2 1 2 1 0
3 1 3 1 0
MAT[1 2 3; 4 5] 1, 2, 3. satırları ve yalnızca 4 ve 5. sütunları korur
1 2
1 0
1 0
(MAT[;5]=0)/MAT[;1] değere ihtiyaç duyan tüm hücreleri bulur.

TABLO 3'Ü EKLEYİN

Sağlıklılık Kontrolü: Kopyalar

Aramaya başlamadan önce akıl sağlığı kontrolü çok önemlidir! Mümkün olan başlangıç ​​çözümü budur. Artık herhangi bir satır, sütun veya kutuda kopyaların olması Sudoku için mümkün. Mevcut başlangıç ​​çözümü örneğin 1 uygundur. Tablo 4'te başlangıç ​​çözümünün kopyalarının olduğu bir örnek bulunmaktadır. Satır 1'de iki değer 2 vardır. Alan 1'de iki değer 2 vardır. "SANITY_DUPE" işlevi bu mantığı yönetir.

Sağlıklılık Kontrolü: Değeri Olmayan Hücre Seçenekleri

Değeri olmayan bir hücrenin tüm olası değerleri çok yararlı bir bilgi olabilir. Aday yoksa bu bulmaca çözülemez. Bir hücre, komşusunun halihazırda talep ettiği bir değeri alamaz. Hücre için Tablo 1'i kullanarak (1,3,'1' – bu son 1 kutu kimliğidir), komşuları satır 1, sütun 3 ve kutu 1'dir. Satır 1, (2,7) değerlerine sahiptir; 3. sütunda (3,5,6,7,9) değerleri bulunur; kutu 1'de (2,3,8) değerleri vardır. (1,3.1) hücresi aşağıdaki değerleri (2,3,5,6,7,8,9) alamaz. (1,3,1) hücresi için tek seçenek (1,4)'tür. (4,1,2) hücresi için 1, 2, 3, 5, 6, 7, 9 değerleri satır 4, sütun 1 ve/veya kutu 4'te zaten kullanılmaktadır. Yalnızca aday değerler (4,8)'dir. . “SANITY_CAND” fonksiyonu bu mantığı yönetir.

Tablo 5, arama sürecinin başlangıcındaki adayları, örneğin 1'i göstermektedir. Başlangıç ​​koşullarında (Tablo 1) bir hücreye zaten bir değer atanmışsa bu değer tekrarlanır ve kırmızıyla gösterilir. Değere ihtiyaç duyan hücrenin yalnızca bir seçeneği varsa bu beyaz renkle gösterilir. (8,7,9) hücresi beyaz renkli tek değer 7'ye sahiptir. (2,5,8,4,3) komşu sütun 7 tarafından talep edildi. (1, 2, 9) satır 8 tarafından. (3,2,6) kutu 9 tarafından talep edildi. Yalnızca 7 değeri talep edilmedi.

Akıl Sağlığı Kontrolü: Çatışmaları Aramak

Bir değere ihtiyaç duyan hücreler için tüm seçenekleri tanımlayan bilgiler (Tablo 4'te verilmiştir), arama sürecine başlamadan önce bir çakışmayı tanımlamamızı sağlar. Bir değere ihtiyaç duyan iki hücrenin yalnızca bir adayı olduğunda, aday değeri aynı olduğunda ve iki hücre komşu olduğunda bir çatışma meydana gelir. Tablo 4'ten bir değere ihtiyaç duyan ve tek adayı olan tek hücrenin (8,7,9) hücresi olduğunu biliyoruz. Örnek 1'de çatışma yok.

Bir çatışma ne olurdu? (3,7,3) hücresi için olası tek değer 7 ise (1, 6, 7 yerine), o zaman bir çakışma vardır. Hücre (8,7) ve hücre (3,7) komşudur – aynı sütun. Ancak (4,9,2) hücresi için mümkün olan tek değer 7 olsaydı (1, 2, 7 yerine) bu bir çelişki olmazdı. Bu hücreler komşu değildir.

Sağlık Kontrolü Özeti

  1. Tekrarlar varsa başlangıç ​​çözümü mümkün değildir.
  2. Bir değere ihtiyaç duyan hücrenin herhangi bir adayı yoksa bu bulmacanın olası bir çözümü yoktur. Her hücre için aday değerlerin listesi, hem geri izleme hem de optimizasyon amacıyla arama alanını azaltmak için kullanılabilir.
  3. Çatışmaları bulma yeteneği, bulmacanın bir arama süreci olmadan mümkün olmadığını, çözümü olmadığını belirtir. Ayrıca “sorunlu hücreleri” de tanımlar.

Geriye Dönük Bir Çözüm: Arama Süreci

Temel veri yapıları ve akıl sağlığı denetimi uygulandığında dikkatimizi arama sürecine çeviriyoruz. Yinelenen tema yine aramayı destekleyecek veri yapılarının uygulamaya konulmasıdır.

Aramanın Takibi

dizi takipçi Yapılan görevleri takip eder

  1. Sütun 1 sayaçtır
  2. Sütun 2, bu hücreye atanabilecek seçeneklerin sayısıdır
    • 1, 1 seçeneğin mevcut olduğu anlamına gelir, 2, iki seçenek anlamına gelir, vb.
    • 0, seçeneğin mevcut olmadığı veya 0'a sıfırlama (atanan değer yok) ve geri izleme anlamına gelir
  3. Sütun 3, değer indeks numarasına (1'den 81'e kadar) atanan hücredir
  4. Sütun 4, izleme geçmişinde hücreye atanan değerdir
    • 9999 değeri, bu hücrenin çıkmaz noktanın bulunduğu sırada olduğu anlamına gelir
    • 1'den 9'a kadar olan bir tam sayının değeri, arama sürecinin bu noktasında bu hücreye atanan değerdir.
    • 0 değeri, bu hücrenin bir atamaya ihtiyacı olduğu anlamına gelir

İzleyici dizisi arama sürecini desteklemek için kullanılır. Dizi PARÇA HISTİSTİ İzleyiciyle aynı yapıya sahiptir ancak tüm arama sürecinin geçmişini tutar. Tablo 6'da örneğin 1 TRACKHIST'in bir kısmı bulunmaktadır. Daha sonraki bir bölümde daha ayrıntılı olarak açıklanacaktır.

Ek olarak dizi İNCİR (bir vektörün vektörü), bu hücreye Önceden Atanan Değerlerin kaydını tutar. Bu, TABU'da yapılana benzer şekilde başarısız bir çözümü tekrar gözden geçirmememizi sağlar.

Arama işleminin her adımı yazdığı isteğe bağlı bir günlük işlemi vardır.

Aramayı Başlatma

Defter tutma ve akıl sağlığı kontrolü tamamlandıktan sonra artık arama sürecine başlayabiliriz. Adımlar şunlardır:

  1. Değere ihtiyaç duyan hücre kaldı mı? – eğer hayırsa, o zaman işimiz bitti.
  2. Değere ihtiyaç duyan her hücre için, her hücreye ilişkin tüm aday seçenekleri bulun. Tablo 4'te çözüm sürecinin başlangıcında bu değerler yer almaktadır. Her yinelemede bu, hücrelere atanan değerleri karşılayacak şekilde güncellenir.
  3. Seçenekleri bu sıraya göre değerlendirin.
    • Bir hücrenin SIFIR seçeneği varsa, geri izlemeyi başlatın
    • Tek seçenekle tüm hücreleri bulun, bu hücrelerden birini seçin, bu atamayı yapın,
      1. ve izleme tablosunu, mevcut çözümü ve PAV'ı güncelleyin.
    • Tüm hücrelerde birden fazla seçenek varsa, bir hücre ve bir değer seçin ve güncelleyin
      1. izleme tablosunu, mevcut çözümü ve PAV'ı güncelleyin

Her adımı göstermek için çözüm sürecinin geçmişinin bir parçası olan (TRACKHIST adı verilen) Tablo 6'yı kullanacağız.

İlk yinelemede (TO=1), 70. hücre (8. satır, 7. sütun, 9. kutu) bir değer atanmak üzere seçilir. Yalnızca aday (7) vardır ve bu değer 70 hücresine atanır. Ayrıca 7 değeri, 70 hücresi için önceden atanan değerlerin (PAV) vektörüne eklenir.

İkinci yinelemede 30 hücresine 1 değeri atanır. Bu hücrenin iki aday değeri vardı. En küçük aday değer hücreye atanır (mantığı takip etmeyi kolaylaştıran keyfi bir kuraldır).

Değere ihtiyaç duyan bir hücreyi belirleme ve değer atama süreci yineleme (TO) 20'ye kadar sorunsuz çalışır. Hücre 9'un değere ihtiyacı vardır, ancak aday sayısı SIFIRdır. İki seçenek var:

  • Bu bulmacanın çözümü yok.
  • Bazı atamaları geri alıyoruz (geriye doğru izliyoruz) ve başka bir yol izliyoruz.

Birden fazla seçeneğin olduğu, buna en yakın hücre atamasını aradık. Bu örnekte bu durum, hücre 18'e 5 değerinin atandığı 3. yinelemede meydana geldi, ancak hücre 5 için iki aday değer vardı; değerler 3 ve 8.

Hücre 5 (TO = 18) ve hücre 9 (CTR = 20) arasında, hücre 8'e 4 değeri (CTR=19) atanır. 8. ve 5. hücreleri tekrar “değere ihtiyaç duyanlar” listesine koyuyoruz. Bu, değerin 20'a ayarlandığı ikinci ve üçüncü CTR=0 girişlerinde yakalanır. 3 değeri, 5 hücresi için PAV vektöründe tutulur. Yani arama motoru, 3 değerini hücre 5'e atayamaz.

Arama motoru, 5. hücre için bir değer tanımlamak üzere yeniden başlar (3 artık bir seçenek değildir) ve 8 değerini 5. hücreye atar (TO=21). Tüm hücreler bir değere sahip oluncaya veya seçeneği olmayan ve geri izleme yolu olmayan bir hücre oluncaya kadar devam eder. Çözüm Tablo 7'de yayınlanmıştır.

Bir hücre için birden fazla adayın olduğu yerde bunun paralel işleme için bir şans olduğunu gözlemleyin.

MILP Optimizasyon Çözümüyle Karşılaştırma

Yüzey seviyesinde Sudoku bulmacasının temsili çarpıcı biçimde farklıdır. Yapay zeka yaklaşımı tam sayıları kullanır ve her bakımdan daha sıkı ve daha sezgisel bir temsildir. Ek olarak, akıl sağlığı denetleyicileri daha güçlü bir formülasyon oluşturmak için yararlı bilgiler sağlar. MILP temsili sonsuzdur ikili (0/1). Ancak ikili dosyalar, modern MILP çözümleyicilerinin gücü göz önüne alındığında güçlü temsillerdir.

Bununla birlikte, MILP çözücü dahili olarak ikili dosyaları saklamaz ancak tüm sıfırların depolanmasını ortadan kaldırmak için seyrek dizi yöntemini kullanır. Ek olarak ikili dosyaları çözecek algoritmalar 1980'li ve 1990'lı yıllara kadar ortaya çıkmadı. 1983 tarihli makale Crowder, Johnson ve Padberg ikili dosyalar ile optimizasyonun ilk pratik çözümlerinden birini rapor ediyor. Başarılı bir çözüm için akıllı ön işlemenin ve dal ve sınır yöntemlerinin kritik öneme sahip olduğunu belirtiyorlar.

Kısıtlama programlama ve yazılımların kullanımında son zamanlarda yaşanan patlama, yerel çözücü Yapay zeka yöntemlerinin doğrusal programlama ve en küçük kareler gibi orijinal optimizasyon yöntemleriyle birlikte kullanılmasının önemini açıkça ortaya koydu.

spot_img

En Son İstihbarat

spot_img