Syzygy bilgilerini nasıl saklar?


11

Şimdiye kadar bulduğum her şeyi okuduktan sonra, Syzygy'nin hem kazan / çiz / kayıp dosyalarını hem de sıfıra uzaklık dosyalarını kullandığını biliyorum, ancak bu dosyaların kullandığı dahili dosya formatı hakkında herhangi bir bilgi bulamadım. Düşük seviyeli nitrit cesur açıklama arıyorum.

Yanıtlar:


14

Tek bir kapsamlı yayın olmadığından bu, problama koduna , jeneratöre ve Ronald de Man'ın (jeneratörün yazarı) çeşitli açıklamalarına dayanmaktadır.


Hemen hemen tüm tablo tabanlarını incelerken (büyük sıkıştırılmış karma harita olarak da bilinir):

  1. Konum normalleştirildi ...
  2. ... bir tamsayı dizinine eşlendi.
  3. Dizin hangi "bloğa" ait olduğunu belirten bir tabloda aranır.
  4. İndeks bilgisi alınana kadar blok açılır.

Daha sonra, en azından enine yakalanan yakalamaları çözmek için genellikle problamanın "dışında" bir kod vardır.


WDL için dış kodla başlayarak. Syzygy tabloları, aşağıdaki gözlemi temel alan bir optimizasyon kullanır: Bir konumun belirli bir değere ulaşan bir yakalama varsa (örneğin, kazanıyorsa), o zaman konumun kendisi en az bu değere sahiptir (örneğin kazanır). Bu durumda tablo, sıkıştırma için en iyisi olan keyfi daha düşük bir değeri saklayabilir ve bu, alt tabloları yakalama olup olmadığını kontrol ederek kolayca düzeltilebilir.

Bir DTZ elde etmek için önce bir WDL probunun yapılması gerekir. Konum çizilirse, DTZ 0 olur ve tablo, sıkıştırma için en iyisi olan herhangi bir şeyi depolayabilir. En iyi hareket bir yakalama ise (WDL probundan hatırlayabileceğimiz), DTZ, WDL'ye bağlı olarak +/- 1 veya +/- 101'dir ve tablo, sıkıştırma için en iyisi hangisi olursa olsun her şeyi tekrar saklayabilir.

Piyon tabloları, "öncü piyon" un her dosyası için bir tane olmak üzere 4 alt tablo içerir (normalleştirmeden sonra).

WDL (alt) tabloları iki taraflıdır, yani temelde oyunun her iki tarafı için iki ayrı tablo içerirler (malzeme simetrik değilse).

DTZ tabloları hareket etmek için sadece bir tarafı saklar. Bu nedenle DTZ'nin diğer tarafını hesaplamak için 1 katlı kısa bir arama gerekebilir.


(1) Normalleştirme hakkında: Bunun yapılabileceği birden fazla yol vardır ve hangisinin en iyi sıkıştırmaya yol açacağını önceden söylemek kolay değildir. Jeneratör sadece farklı permütasyonlar deniyor. Parçaların son sırası tablo dosyasının başlığında saklanır.

(2) Bazı birleştiriciler. Zor olan, imkansız pozisyonlar için büyük boşluklara sahip olmamaktır. Oldukça zor olsa da, Syzygy'nin burada özel bir şey yaptığını sanmıyorum. Kavramsal olarak, parçalar veya parça grupları tahtada başlıkta belirtilen sırada yerleştirilir.

(3) Sıkıştırılmış değerler bloklar halinde saklanır. Blok boyutu tablo başlığında belirtilir. Tabloların dizinlerle bloklara eşlenmesi seyrektir, bu nedenle doğru bloğa çok yakın atlamaya izin verir ve ardından tam bloğu bulmak için kısa bir ileri veya geri tarama gerektirir. Bir blok en fazla 65536 konum için değer depolayabilir.

(4) Syzygy tabloları RE-PAIR'a dayalı özel sıkıştırma kullanır . Önemli bir özellik, aslında yukarıda tanımlanan rasgele değerleri saklama fırsatlarından yararlanmasına izin vermesidir. Dekompresyon çok hızlıdır ve istenen indeks değeri hazır olur olmaz durabilir.

İsteğe bağlı olarak, DTZ tabloları başka bir adım f (wdl, depolanmış değer) = gerçek değer gerektirebilir. Bu ekstra DTZ eşlemi tablo başlığında belirtilir ve kendisi 8 bit girişli bir tablodur. (İlginç bir şekilde, bu piyonlarda bile 7 parçalı son oyunlar için yetersiz olduğu için, şimdi 16 bit girişleri etkinleştiren başka bir bayrak var).

DTZ değerleri için, jeneratör bir tablonun tüm değerlerinin 100'den düşük olduğunu belirlediyse, mükemmel oynatmayı garanti etmek için hassas yarım hareket sayılarına gerek yoktur. Bunun yerine tablo başlığına bir bayrak koyar ve yerden tasarruf etmek için yarım hamleyi tam hamleye yuvarlar.

Ayrıca, işareti saklamak veya lanetli uç oyunları için +/- 100 ek bir ofset depolamaya gerek yoktur, çünkü bu WDL değerinden çıkarılabilir.

Dekompresyon çok hızlı olduğu için önbelleğe gerek yoktur. Bunun yerine motorlar (hala sıkıştırılmış) blokları depolamak için işletim sistemleri sayfa önbelleğine güvenebilir.


6 parçalı tablolar , 150 Gigabaytta 3.787.154.440.416 benzersiz konum için WDL ve DTZ bilgileri içerir , böylece konum başına ~ 0.3 bit.

Tüm Syzygy tablolarında, bu alanların en az 3'ünde önceki tablo tabanı formatlarında iyileştirildi ve bu da onu çok kompakt ve hızlı bir format haline getirdi. Şaşırtıcı bir şekilde jeneratör de oldukça hızlı.

Ve elbette DTZ50 kullanmak pragmatik bir seçimdir, çünkü bu güvenilir bir şekilde ilerleme sağlamak için yeterli bilgi ve 50 hareket kuralı olan ve olmayan mükemmel oyun (wrt. Sonuç) sağlar. Bununla birlikte, şimdiye kadar yayınlanan Cfish'teki değişikliklere dayanarak (RdM şimdi DTM tablolarında çalışmaktadır), tekniklerin çoğu DTM için de geçerli olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.