دو حصے: تلاش اور تشخیص
شطرنج انجن دراصل دو پروگرام ہیں جو مل کر کام کرتے ہیں۔ تلاش آگے دیکھتی ہے: ”اگر میں یہ کھیلوں تو وہ یہ جواب دے سکتے ہیں، پھر میں یہ کھیلوں گا…“۔ تشخیص کچھ بھی ہلائے بغیر ایک ہی پوزیشن کو دیکھتی ہے اور اسے ایک عدد دیتی ہے: کون بہتر ہے، اور کتنا۔
دونوں کو ایک دوسرے کی ضرورت ہے۔ تلاش جتنی گہری ہو، کمزور تشخیص کا اثر اتنا ہی کم ہوتا ہے؛ تشخیص جتنی بہتر ہو، اتنی ہی کم گہرائی درکار ہوتی ہے۔ چونکہ تشخیص ہر لائن کے ہر سرے پر چلتی ہے — ایک سیکنڈ میں لاکھوں بار — اس لیے اسے اچھا بھی ہونا چاہیے اور بہت تیز بھی۔
تلاش
انجن ہر بار ایک درجہ زیادہ گہرائی میں سوچتا ہے (iterative deepening)، اس لیے گھڑی ختم ہونے پر اس کے پاس ہمیشہ ایک چال تیار ہوتی ہے۔ ہر چال کو ہر گہرائی تک دیکھنے میں بے انتہا وقت لگتا، اس لیے زیادہ تر محنت ایسی چالوں کو نہ دیکھنے میں صرف ہوتی ہے جن سے کوئی فرق نہیں پڑ سکتا:
- الفا بیٹا۔ جیسے ہی کوئی ایک جواب کسی چال کو رد کر دے، انجن اس چال کی مزید جانچ چھوڑ دیتا ہے۔ چالوں کی اچھی ترتیب کے ساتھ یہ نتیجہ بدلے بغیر درخت کا بیشتر حصہ چھوڑ دیتا ہے۔
- بہترین چالیں پہلے۔ وہ چال جو پچھلی بار اس پوزیشن میں بہترین تھی، قیمتی مہروں کو مارنے والی چالیں، اور ملتی جلتی پوزیشنوں میں کارگر رہنے والی خاموش چالیں (killer moves اور ایک history table) سب سے پہلے آزمائی جاتی ہیں۔
- یادداشت۔ ٹرانسپوزیشن ٹیبل پہلے سے تلاش کی گئی پوزیشنیں یاد رکھتی ہے، کیونکہ ایک ہی پوزیشن اکثر چالوں کی مختلف ترتیب سے بن جاتی ہے۔
- سوچے سمجھے شارٹ کٹ۔ کم امید والی بعد کی چالیں کم گہرائی تک تلاش کی جاتی ہیں (late move reductions)؛ ایسی اچھی پوزیشن، جس میں ایک چال چھوڑ دینے پر بھی برتری برقرار رہے، جلد کاٹ دی جاتی ہے (null move pruning)؛ شہ والی چالیں ایک چال زیادہ گہرائی تک تلاش کی جاتی ہیں۔
- صرف پرسکون پوزیشنیں۔ تلاش کبھی کسی تبادلے کے بیچ میں نہیں رکتی: ہر لائن کے آخر میں وہ مارنے والی چالوں کا پیچھا کرتی رہتی ہے جب تک پوزیشن ٹھہر نہ جائے (quiescence search)، اس لیے تشخیص کبھی ایسا وزیر نہیں دیکھتی جو اگلی ہی چال میں جواباً مارا جانے والا ہو۔
- کئی کور۔ انجن ایک ساتھ کئی تھریڈز سے تلاش کر سکتا ہے، اور وہ سب ایک ہی ٹرانسپوزیشن ٹیبل میں شریک ہوتے ہیں (Lazy SMP)۔
بورڈ
انجن کے اندر بورڈ 64 بٹ اعداد کا ایک مجموعہ ہے، ہر خانے کے لیے ایک بٹ (bitboards): ایک عدد سفید گھوڑوں کے لیے، ایک سیاہ رخوں کے لیے، وغیرہ۔ چالیں اور حملے چند بٹ آپریشنز بن جاتے ہیں، اور لمبی چال والے مہرے اپنے حملے پہلے سے حساب شدہ جدولوں میں دیکھ لیتے ہیں (magic bitboards)۔ اس قسم کے مرکب مہرے — مہاراجہ، آرچ بشپ اور چانسلر — اپنے اجزا کی چالوں کو ملا کر چلتے ہیں، اس لیے وہ بھی انہی جدولوں سے کام لیتے ہیں۔
ہاتھ سے پوزیشن کی تشخیص
انجن کی اصل تشخیص شطرنج کے تجرباتی اصولوں کی ایک فہرست ہے، ہر ایک کا اپنا وزن: مہروں کی مجموعی قیمت، کون سا مہرہ کہاں کھڑا ہے، وہ کتنے خانوں پر قابو رکھتا ہے، آزاد اور الگ تھلگ پیادے، اونٹوں کی جوڑی، کھلی فائلوں پر رخ، بادشاہ کے سامنے پیادوں کی ڈھال۔ وزن اوپننگ سے اینڈ گیم تک بتدریج بدلتے رہتے ہیں۔
یہ کام کرتی ہے، اور آج ایپ میں یہی کھیلتی ہے، مگر یہ صرف وہی جانتی ہے جو کسی نے لکھنے کا سوچا۔ باقی سب کچھ اس کی نظر سے اوجھل ہے۔
نیورل نیٹ ورک
نیورل نیٹ ورک صرف تشخیص کی جگہ لیتا ہے۔ تلاش بالکل ویسی ہی رہتی ہے — نیٹ ورک چالیں نہیں چنتا، وہ ایک سیکنڈ میں کئی بار ایک ہی سوال کا جواب دیتا ہے: یہ پوزیشن کتنی اچھی ہے؟
- اِن پٹ خود بورڈ ہے۔ مہروں کی 18 قسمیں ہیں — پیادہ، گھوڑا، اونٹ، رخ، وزیر، بادشاہ اور تین مرکب مہرے، دو رنگوں میں — اور 64 خانے: 18 × 64 = 1152 ہاں یا نہیں والے سوال، جیسے ”کیا f3 پر سفید گھوڑا ہے؟“۔ ایک عام پوزیشن میں ان میں سے تقریباً 32 کا جواب ”ہاں“ ہوتا ہے۔ مرکب مہرے اپنے الگ اِن پٹ ہیں، دوسرے مہروں کا ملغوبہ نہیں، اس لیے نیٹ ورک خود سیکھتا ہے کہ مہاراجہ اپنی ذات میں کتنے کا ہے۔
- دونوں نقطۂ نظر۔ بورڈ دو بار اندر جاتا ہے: جیسے جس کی چال ہے وہ اسے دیکھتا ہے، اور الٹا کر کے، جیسے حریف اسے دیکھتا ہے۔ نیٹ ورک کو کبھی شطرنج دو بار نہیں سیکھنی پڑتی، ایک بار سفید کے لیے اور ایک بار سیاہ کے لیے۔
- نیورونز پروگرام نہیں کیے جاتے۔ کوئی کسی نیورون کو نہیں بتاتا کہ اسے کیا ڈھونڈنا ہے۔ تربیت کے دوران وہ خود ہی اپنی طرز کے نشان گر بن جاتے ہیں — کچھ ایسا جیسے ”پیادوں کی آڑ کے بغیر بادشاہ“ یا ”ساتویں قطار تک پہنچ چکا رخ“۔
یہ تیز کیوں ہے
نیٹ ورک کا نام NNUE، Efficiently Updatable Neural Network کا مخفف ہے — یعنی ایسا نیورل نیٹ ورک جسے مؤثر طریقے سے اپ ڈیٹ کیا جا سکے۔ پہلی تہہ ایک جدول ہے جس میں ہر اِن پٹ کے لیے اعداد کا ایک کالم ہے، اور نیورون محض اُن اِن پٹس کے کالموں کا مجموعہ ہیں جن کا جواب ”ہاں“ ہے۔ ایک چال صرف دو سے چار اِن پٹس بدلتی ہے، اس لیے مجموعہ کبھی نئے سرے سے نہیں نکالا جاتا — اسے اپ ڈیٹ کیا جاتا ہے:
سب کچھ چھوٹے صحیح اعداد میں حساب ہوتا ہے، پروسیسر کی ویکٹر ہدایات کے ذریعے ایک وقت میں کئی کئی۔ ہماری پیمائش میں نیٹ ورک والا انجن ہاتھ سے لکھی تشخیص کے مقابلے میں تلاش کی اسی گہرائی تک تقریباً دو گنا تیزی سے پہنچتا ہے (ہماری بینچ مارک پوزیشنوں پر 0.95 بمقابلہ 2.0 سیکنڈ، ہماری ٹیسٹ مشین کے ایک کور پر)۔
یہ کیسے سیکھتا ہے
تربیت کی ہر مثال ایک پوزیشن ہے جس پر دو لیبل ہوتے ہیں: چند چالوں کی گہرائی تک کی گئی تلاش نے اسے جو اسکور دیا، اور کھیل آخرکار کیسے ختم ہوا۔ نیٹ ورک ایک ہی نظر میں دونوں کا اندازہ لگانا سیکھتا ہے۔ سارا کمال یہی ہے: جب تلاش نیٹ ورک سے کسی پوزیشن کے بارے میں پوچھتی ہے، تو جواب میں پہلے ہی وہ شامل ہوتا ہے جو زیادہ گہرائی سے دیکھنے پر ملتا، گویا تلاش مفت میں مزید آگے چلی گئی ہو۔
انجن صرف اپنے ہی کھیلوں سے سیکھتا ہے، مرکب مہروں اور اپنی بنائی فوجوں سمیت — کسی دوسرے انجن کا تجزیہ اس میں شامل نہیں ہوتا۔ نیا نیٹ ورک صرف تب رکھا جاتا ہے جب وہ سیکڑوں کھیلوں کے میچ میں پچھلے کو ہرا دے۔ اب تک ہر دور پچھلے سے واضح طور پر زیادہ مضبوط رہا ہے:
| نیٹ ورک | تربیتی پوزیشنیں | خود سے کھیل میں نتیجہ |
|---|---|---|
| پہلا | 3 ملین | ہاتھ سے لکھی تشخیص پر +44 ایلو |
| دوسرا | 10 ملین | پہلے پر +168 ایلو |
| تیسرا | 30 ملین | دوسرے پر +157 ایلو |
| چوتھا | 68 ملین | تیسرے پر +102 ایلو |
یہ اعداد ہمارے اپنے انجن کے مختلف ورژنز کے درمیان کلاسیکی اوپننگز سے کھیلے گئے کھیلوں سے لیے گئے ہیں، ہر میچ میں 600 کھیل۔ خود سے کھیل عموماً بہتری کو بڑھا چڑھا کر دکھاتا ہے؛ کسی بیرونی انجن کے خلاف پیمائش انجن کی طاقت والے صفحے پر ہے۔
ہم اب کہاں ہیں
- چوتھا نیٹ ورک انجن میں شامل کر دیا گیا ہے۔ 2500 کی طاقت پر رکھے گئے Fairy-Stockfish کے خلاف یہ 55% اسکور کرتا ہے، یعنی اس پیمانے پر تقریباً 2535؛ اسی ٹیسٹ میں ہاتھ سے لکھی تشخیص تقریباً 2210 تک پہنچتی ہے۔
- نیٹ ورک قسم کو کلاسیکی شطرنج جتنا اچھی طرح نہیں جانتا۔ جن اپنی بنائی فوجوں پر اس نے سیکھا، وہ سب ہمارے جنریٹر سے آئیں، کسی کھلاڑی سے نہیں، اس لیے یہ ابتدائی پوزیشنیں کچھ مصنوعی ہیں۔ اصل کھلاڑی کیسی فوجیں سجاتے، یہ ہم ابھی نہیں جانتے۔ اس پر یہ کہ قسم کھیلنا ہی زیادہ مشکل ہے: مہروں کی زیادہ اقسام، اور تقریباً ہر کھیل میں نئی ابتدائی پوزیشن۔
- کھلاڑیوں کے کھیل ابھی جمع نہیں کیے جاتے۔ منصوبہ یہ ہے کہ سرور وہ کھیل محفوظ کرے جن میں کھلاڑی نے لیول 5 چنا اور اپنی بنائی فوج سے انجن کو ہرا دیا۔ یہ ابھی ممکن نہیں۔ نیٹ ورک کو سیکھنے کے لیے کروڑوں پوزیشنیں درکار ہیں — چوتھے نے 6.8 کروڑ سے سیکھا — اور کھلاڑیوں نے ابھی قسم والے اتنے کھیل نہیں کھیلے کہ اتنی پوزیشنیں مل سکیں۔