القواعد المخصصة والمتغيرات
يقدم هذا المقال قواعد الغو المختلفة المدعومة في KataGo، ومتغيرات حجم اللوحة، وكيفية تخصيص إعدادات القواعد.
يدعم KataGo مجموعات قواعد متعددة منها الصينية واليابانية والكورية وAGA والنيوزيلندية وTromp-Taylor، ويمكن تخصيص طريقة العدّ والكومي وأبعاد اللوحة في ملف config.cfg عبر معاملات مثل rules وkomi (الكومي) وboardXSize/boardYSize (حجم اللوحة).
نظرة عامة على مجموعات القواعد
مقارنة القواعد الرئيسية
| مجموعة القواعد | طريقة الحساب | Komi | الانتحار | إرجاع الكو |
|---|---|---|---|---|
| Chinese | عد الأحجار | 7.5 | محظور | محظور |
| Japanese | عد المنطقة | 6.5 | محظور | محظور |
| Korean | عد المنطقة | 6.5 | محظور | محظور |
| AGA | مختلط | 7.5 | محظور | محظور |
| New Zealand | عد الأحجار | 7 | مسموح | محظور |
| Tromp-Taylor | عد الأحجار | 7.5 | مسموح | محظور |
إعدادات KataGo
# config.cfg
rules = chinese # مجموعة القواعد
komi = 7.5 # Komi
boardXSize = 19 # عرض اللوحة
boardYSize = 19 # ارتفاع اللوحة
القواعد الصينية (Chinese)
الخصائص
طريقة الحساب: عد الأحجار (الأحجار والمنطقة معاً)
Komi: 7.5 نقطة
الانتحار: محظور
إرجاع الكو: محظور (قواعد مبسطة)
شرح عد الأحجار
النقاط النهائية = عدد أحجارنا + عدد نقاطنا الفارغة
مثال:
أحجار سوداء 120 + مساحة سوداء 65 = 185 نقطة
أحجار بيضاء 100 + مساحة بيضاء 75 + Komi 7.5 = 182.5 نقطة
الأسود يفوز بـ 2.5 نقطة
إعدادات KataGo
rules = chinese
komi = 7.5
القواعد اليابانية (Japanese)
الخصائص
طريقة الحساب: عد المنطقة (النقاط الفارغة فقط)
Komi: 6.5 نقطة
الانتحار: محظور
إرجاع الكو: محظور
يتطلب تحديد الأحجار الميتة
شرح عد المنطقة
النقاط النهائية = نقاطنا الفارغة + الأحجار المأسورة من الخصم
مثال:
مساحة سوداء 65 + أسر 10 = 75 نقطة
مساحة بيضاء 75 + أسر 5 + Komi 6.5 = 86.5 نقطة
الأبيض يفوز بـ 11.5 نقطة
تحديد الأحجار الميتة
القواعد اليابانية تتطلب اتفاق الطرفين على الأحجار الميتة:
def is_dead_by_japanese_rules(group, game_state):
"""تحديد الأحجار الميتة حسب القواعد اليابانية"""
# يتطلب إثبات أن السلسلة لا يمكنها عمل عينين
# هذا هو تعقيد القواعد اليابانية
pass
إعدادات KataGo
rules = japanese
komi = 6.5
قواعد AGA
الخصائص
قواعد جمعية الغو الأمريكية (AGA) تجمع بين مزايا القواعد الصينية واليابانية:
طريقة الحساب: مختلطة (عد الأحجار أو المنطقة، النتيجة متساوية)
Komi: 7.5 نقطة
الانتحار: محظور
الأبيض يجب أن يضع حجراً عند التمرير
قاعدة التمرير
الأسود يمرر: لا يحتاج لوضع حجر
الأبيض يمرر: يجب تسليم حجر للأسود
هذا يجعل نتيجة عد الأحجار وعد المنطقة متساوية
إعدادات KataGo
rules = aga
komi = 7.5
قواعد Tromp-Taylor
الخصائص
أبسط قواعد الغو، مناسبة للتنفيذ البرمجي:
طريقة الحساب: عد الأحجار
Komi: 7.5 نقطة
الانتحار: مسموح
إرجاع الكو: Super Ko (منع أي تكرار للوضع)
لا حاجة لتحديد الأحجار الميتة
Super Ko
def is_superko_violation(new_state, history):
"""التحقق من انتهاك Super Ko"""
for past_state in history:
if new_state == past_state:
return True
return False
تحديد نهاية اللعبة
لا حاجة لاتفاق الطرفين على الأحجار الميتة
اللعبة تستمر حتى:
1. كلا الطرفين يمرران متتاليين
2. ثم استخدام البحث أو اللعب الفعلي لتحديد المنطقة
إعدادات KataGo
rules = tromp-taylor
komi = 7.5
متغيرات حجم اللوحة
الأحجام المدعومة
يدعم KataGo أحجام لوحات متعددة:
| الحجم | الخصائص | الاستخدام المقترح |
|---|---|---|
| 9×9 | ~81 نقطة | للمبتدئين، اللعب السريع |
| 13×13 | ~169 نقطة | التعلم المتقدم |
| 19×19 | 361 نقطة | المباريات القياسية |
| مخصص | أي حجم | البحث، الاختبار |
طريقة الإعداد
# لوحة 9×9
boardXSize = 9
boardYSize = 9
komi = 5.5
# لوحة 13×13
boardXSize = 13
boardYSize = 13
komi = 6.5
# لوحة غير مربعة
boardXSize = 19
boardYSize = 9
اقتراحات Komi
| الحجم | القواعد الصينية | القواعد اليابانية |
|---|---|---|
| 9×9 | 5.5 | 5.5 |
| 13×13 | 6.5 | 6.5 |
| 19×19 | 7.5 | 6.5 |
إعدادات الهانديكاب
مباريات الهانديكاب
الهانديكاب هو طريقة لتعديل فرق قوة اللعب:
# هانديكاب 2 حجر
handicap = 2
# هانديكاب 9 أحجار
handicap = 9
مواقع الهانديكاب
HANDICAP_POSITIONS = {
2: [(3, 15), (15, 3)],
3: [(3, 15), (15, 3), (15, 15)],
4: [(3, 15), (15, 3), (3, 3), (15, 15)],
# 5-9 أحجار تستخدم نقاط النجمة + التينجن
}
Komi مع الهانديكاب
# تقليدي: بدون Komi أو نصف نقطة مع الهانديكاب
komi = 0.5
# حديث: ضبط حسب عدد أحجار الهانديكاب
# كل حجر يعادل ~10-15 نقطة
إعدادات القواعد في وضع التحليل
أوامر GTP
# إعداد القواعد
kata-set-rules chinese
# إعداد Komi
komi 7.5
# إعداد حجم اللوحة
boardsize 19
Analysis API
{
"id": "query1",
"moves": [["B", "Q4"], ["W", "D4"]],
"rules": "chinese",
"komi": 7.5,
"boardXSize": 19,
"boardYSize": 19,
"overrideSettings": {
"maxVisits": 1000
}
}
خيارات القواعد المتقدمة
إعداد الانتحار
# منع الانتحار (افتراضي)
allowSuicide = false
# السماح بالانتحار (نمط Tromp-Taylor)
allowSuicide = true
قواعد الكو
# Simple Ko (منع الإرجاع الفوري فقط)
koRule = SIMPLE
# Positional Super Ko (منع تكرار أي وضع، بغض النظر عمن يلعب)
koRule = POSITIONAL
# Situational Super Ko (منع تكرار وضع نفس الجانب)
koRule = SITUATIONAL
قواعد الحساب
# عد الأحجار (صيني، AGA)
scoringRule = AREA
# عد المنطقة (ياباني، كوري)
scoringRule = TERRITORY
قواعد الضرائب
بعض القواعد لها حساب خاص لمناطق السيكي:
# بدون ضرائب
taxRule = NONE
# السيكي بدون نقاط
taxRule = SEKI
# جميع العيون بدون نقاط
taxRule = ALL
التدريب متعدد القواعد
ميزة KataGo
يستخدم KataGo نموذج واحد يدعم قواعد متعددة:
def encode_rules(rules):
"""ترميز القواعد كمدخل للشبكة العصبية"""
features = np.zeros(RULE_FEATURE_SIZE)
# طريقة الحساب
features[0] = 1.0 if rules.scoring == 'area' else 0.0
# الانتحار
features[1] = 1.0 if rules.allow_suicide else 0.0
# قواعد الكو
features[2:5] = encode_ko_rule(rules.ko)
# Komi (مطبع)
features[5] = rules.komi / 15.0
return features
الإدخال الواعي بالقواعد
مدخل الشبكة العصبية يشمل:
- حالة اللوحة (19×19×N)
- متجه ميزات القواعد (K بُعد)
هذا يتيح لنفس النموذج فهم قواعد مختلفة
مثال تبديل القواعد
كود Python
from katago import KataGo
engine = KataGo(model_path="kata.bin.gz")
# تحليل بالقواعد الصينية
result_cn = engine.analyze(
moves=[("B", "Q4"), ("W", "D4")],
rules="chinese",
komi=7.5
)
# تحليل بالقواعد اليابانية (نفس الوضع)
result_jp = engine.analyze(
moves=[("B", "Q4"), ("W", "D4")],
rules="japanese",
komi=6.5
)
# مقارنة الفروقات
print(f"معدل فوز الأسود بالقواعد الصينية: {result_cn['winrate']:.1%}")
print(f"معدل فوز الأسود بالقواعد اليابانية: {result_jp['winrate']:.1%}")
تحليل تأثير القواعد
def compare_rules_impact(position, rules_list):
"""مقارنة تأثير القواعد المختلفة على تقييم الوضع"""
results = {}
for rules in rules_list:
analysis = engine.analyze(
moves=position,
rules=rules,
komi=get_default_komi(rules)
)
results[rules] = {
'winrate': analysis['winrate'],
'score': analysis['scoreLead'],
'best_move': analysis['moveInfos'][0]['move']
}
return results
الأسئلة الشائعة
اختلاف الفوز/الخسارة بسبب اختلاف القواعد
نفس المباراة، قواعد مختلفة قد تؤدي لنتائج مختلفة:
- فرق حساب عد الأحجار مقابل عد المنطقة
- معالجة مناطق السيكي
- تأثير التمرير (pass)
أي قواعد تختار؟
| السيناريو | القواعد المقترحة |
|---|---|
| المبتدئين | Chinese (بديهية، بدون نزاع) |
| المباريات عبر الإنترنت | الافتراضي للمنصة (عادة Chinese) |
| اتحاد الغو الياباني | Japanese |
| التنفيذ البرمجي | Tromp-Taylor (الأبسط) |
| المباريات الاحترافية الصينية | Chinese |
هل يحتاج النموذج للتدريب على قواعد محددة؟
نموذج KataGo متعدد القواعد قوي بالفعل. لكن إذا كنت تستخدم قواعد واحدة فقط، يمكنك التفكير في:
# تدريب بقواعد ثابتة (قد يحسن قليلاً قوة اللعب لقواعد محددة)
rules = chinese
قراءات إضافية
- تحليل آلية تدريب KataGo — تنفيذ التدريب متعدد القواعد
- التكامل مع مشروعك — أمثلة استخدام API
- التقييم والاختبار المعياري — اختبار قوة اللعب بقواعد مختلفة