Sunfish هو محرك شطرنج بسيط ولكنه قوي ، مكتوب في ثعبان. من خلال واجهة UCI البسيطة ، وإزالة التعليقات والمساحة البيضاء ، فإنه يستغرق 131 سطرًا من التعليمات البرمجية فقط! ( build/clean.sh sunfish.py | wc -l ). ومع ذلك ، فإنه يلعب في التصنيفات فوق 2000 في Lichess.
نظرًا لأن سمكة الشمس صغيرة وتسعى جاهدة لتكون بسيطة ، فإن الكود يوفر منصة رائعة للتجربة. لقد استخدمه الأشخاص لاختبار خوارزميات البحث المتوازية ، وتجربة وظائف التقييم ، وتطوير برامج الشطرنج التعليمية العميقة. مفترقه اليوم وشاهد ما يمكنك فعله!
أبسط طريقة لتشغيل Sufish هي من خلال واجهة الطرفية "الهوى":
أدوات $/fancy.py -cmd ./sunfish.py
اللعب ضد Sunfish 2023.
هل تريد أن تكون أبيض أم أسود؟ أسود
1 ♖ ♘ ♗ ♔ ♕ ♗ ♘ ♖
2 ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
3
4
5
6
7 ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
8 ♜ ♞ ♝ ♚ ♛ ♝ ♞ ♜
HGFEDCBA
النتيجة: 23 ، العقد: 11752 ، NPS: 13812 ، الوقت: 0.9
حركتي: D4
1 ♖ ♘ ♗ ♔ ♕ ♗ ♘ ♖
2 ♙ ♙ ♙ ♙ ♙ ♙
3
4 ♙
5
6
7 ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
8 ♜ ♞ ♝ ♚ ♛ ♝ ♞ ♜
HGFEDCBA
حركتك (مثل C6 أو G8H6): NF6
تستخدم الواجهة الطرفية التدوين الجبري لتحركات الإدخال. فيما يلي نظرة عامة موجزة على كيفية عملها: من منظور وايت ، يتم تصنيف الأعمدة AH من اليسار إلى اليمين ويتم تصنيف الصفوف 1-8 من الأسفل إلى الأعلى. تم تسمية كل مربع بحرف كل منهما من الرقم (على سبيل المثال. A2 ، C3 ، H8). يتم توصيل هذه الخطوة من خلال الحرف الأول من القطعة المتحركة متبوعة بمربع الوجهة (يتم حذف P لتحركات البيدق ويتم استخدام n في الفرسان). إذا كان بإمكان أكثر من قطعة واحدة من نفس القطعة الانتقال إلى مربع ، فحدد ملف القطعة المتحركة. إذا كان هذا لا يزال غامضاً ، فحدد العمود.
من أجل استخدام الواجهة الطرفية ، يجب أن يكون التدوين المستخدم بتنسيق محدد ، وإلا فلن تتم قراءة الخطوة التي تم إدخالها بشكل صحيح. يتم استخدام "X" في بعض الأحيان للدلالة على التقاط ، ولكن يجب حذفه (على سبيل المثال. BD4 NOT BXD4). لا تستخدم "+" للدلالة على الشيك (على سبيل المثال. BF7 وليس BF7+). لا تستخدم "=" للإشارة إلى ترويج البيدق (على سبيل المثال يجب الإشارة إلى القلعة مع أحرف صغيرة (على سبيل المثال. OO و OOO). يجب أن يكون تحديد ملف أو Columm بعد ذكر القطعة (على سبيل المثال ، RAE1 ليس ARE1). عند ملاحظة en passant ، يجب أن يكون مربع الوجهة هو المربع الذي ينتهي به البيدق ، وليس في البيدق الذي تم التقاطه (على سبيل المثال ، EF6 وليس EF5).
تدعم الواجهة الطرفية أيضًا تدوينًا صريحًا. هذا هو المكان الذي يتم فيه ذكر مربع المصدر يليه مربع الوجهة (على سبيل المثال. E2E4).
لاحظ أن هذا يتطلب حزمة Python-Chess. للحصول على تجربة الحد الأدنى الحقيقية ، يمكننا أولاً "حزم" سمكة الشمس إلى قابلة للتنفيذ مضغوط (أقل من 3 كيلو بايت!) وتشغيلها مباشرة:
$ build/pack.sh sunfish.py packed.sh الطول الإجمالي: 2953 $ ./packed.sh GO WTIME 1000 BTIME 1000 WINC 1000 BINC 1000 عمق المعلومات 1 SCORE CP 0 PV D2D4 BOSTMOVE D2D4
(انظر مواصفات UCI لمجموعة الكاملة من الأوامر.)
من الممكن أيضًا تشغيل سمكة الشمس مع واجهة رسومية ، مثل Pychess أو Arena.
أخيرًا ، يمكنك لعب Sunfish الآن على Lichess أو اللعب ضد ميناء Resursing's Rust ، أيضًا على Lichess ، وهو حوالي 100 Elo أقوى.
هناك إصدار تجريبي باستخدام شبكة عصبية قابلة للتحديث بكفاءة. يمكنك اختباره باستخدام واجهة الطرفية الفاخرة على النحو الوارد أعلاه:
أدوات $/fancy.py -cmd "./sunfish_nnue.py nnue/models/tanh.pickle" ...
على النقيض من nnue الكبير في القول ، أسماك البورصة ، هذه الشبكة ليست سوى 1207 بايت! وهذا يتأكد من أنه لا يزال من الممكن تعبئة NNUE Sunfish في أقل من 4 كيلو بايت. باستخدام NNUE ، ستلعب Sunfish بشكل أفضل بشكل موقع ، ولكن أسوأ من الناحية التكتيكية ، لأن التنفيذ لا يزال غير سريع بما فيه الكفاية.
يدعم Sunfish جميع قواعد الشطرنج ، باستثناء الحركات 50 Draw Rule.
هناك العديد من الطرق التي قد تحاول فيها جعل سمكة الشمس أقوى. أولاً ، يمكنك التغيير من تمثيل اللوحة إلى صفيف قابل للتغيير وإضافة طريقة سريعة لتعداد القطع. بعد ذلك ، يمكنك تنفيذ توليد التقاط مخصص ، والتحقق من الكشف والتحقق من التناغم. يمكنك أيضًا نقل كل شيء إلى Bitoards ، وتطبيق أجزاء من الكود في C أو تجربة البحث المتوازي!
الطريقة الأخرى لجعل سمكة الشمس أقوى هي إعطائها المزيد من المعرفة بالشطرنج. تستخدم وظيفة التقييم الحالية فقط الجداول المربعة للقطعة - لا تميز حتى بين Midgame و Endgame. يمكنك أيضًا تجربة المزيد من التقليم - حاليًا فقط يتم إجراء تحرك فارغ - والملحقات - لا يتم استخدام أي منها حاليًا. أخيرًا ، قد تستفيد Sunfish من ترتيب خطوة أكثر تقدماً ، MVV/LVA وشاهد ربما؟
هناك طريقة سهلة للحصول على سمكة الشمس القوية وهي الركض مع intepreter فقط في الوقت المناسب. على وجه الخصوص ، يعطي إصدار Python2.7 من Pypy دفعة 250 ELO مقارنةً بـ CPYthon (2 أو 3) في الضوابط السريعة للوقت:
Rank Name Elo +/- Games Score Draws
1 pypy2.7 (7.1) 166 38 300 72.2% 19.7%
2 pypy3.6 (7.1) 47 35 300 56.7% 21.3%
3 python3.7 -97 36 300 36.3% 20.7%
4 python2.7 -109 35 300 34.8% 24.3%
يشير اسم Sunfish فعليًا إلى سمكة الشمس القوية ، وهو من بين الأسماك القليلة جدًا التي تبدأ بأحرف "PY". استخدام سمكة في روح المحركات العظيمة مثل سمكة البورصة والزابا وريبكا.
من حيث التراث ، يستعير سمكة الشمس أكثر من ذلك بكثير من Micro-Max بواسطة Geert Muller و Pychess.
GNU GPL V3