سوڈوکو کا مصنوعی ذہانت پر مبنی حل

سوڈوکو کا مصنوعی ذہانت پر مبنی حل

ماخذ نوڈ: 3091242

29 جنوری قومی پہیلی کا دن ہے، اور جشن کے طور پر، ہم نے ایک تفریحی بلاگ بنایا ہے جس میں بتایا گیا ہے کہ مصنوعی ذہانت (AI) کا استعمال کرتے ہوئے Sudoku کو کیسے حل کیا جائے۔

تعارف

اس سے پہلے کہ ورڈیل، سوڈوکو پہیلی غصہ تھا اور یہ اب بھی بہت مقبول ہے۔ حالیہ برسوں میں، کا استعمال اصلاح کے پہیلی کو حل کرنے کے طریقے ایک غالب موضوع رہا ہے۔ دیکھیں آرکیوا میں اصلاح کا استعمال کرتے ہوئے سوڈوکو پہیلی کو حل کرنا".

موجودہ زمانے میں، AI کا استعمال مشین لرننگ پر مرکوز ہے جس میں lasso regression سے reinforcement Learning تک کے طریقوں کی ایک وسیع رینج شامل ہے۔ AI کا استعمال ہے۔ دوبارہ ابھرا پیچیدہ سے نمٹنے کے لئے شیڈولنگ چیلنجز ایک طریقہ، بیک ٹریکنگ کے ساتھ تلاش، عام طور پر استعمال کیا جاتا ہے اور سوڈوکو کے لیے بہترین ہے۔

یہ بلاگ سوڈوکو کو حل کرنے کے لیے اس طریقہ کو استعمال کرنے کے بارے میں تفصیلی وضاحت فراہم کرے گا۔ جیسا کہ یہ پتہ چلتا ہے، "بیک ٹریکنگ" کو آپٹیمائزیشن اور مشین لرننگ انجنوں کے اندر پایا جا سکتا ہے اور یہ جدید ہیورسٹکس کا سنگ بنیاد ہے جو Arkieva شیڈولنگ کے لیے استعمال کرتی ہے۔ الگورتھم کو "Array Programming Language" میں لاگو کیا جاتا ہے، ایک فنکشن پر مبنی پروگرامنگ زبان جو کہ ایک کو ہینڈل کرتی ہے۔ سرنی ڈھانچے کا بھرپور سیٹ.

سوڈوکو کی بنیادی باتیں

وکیپیڈیا سے: سوڈوکو ایک منطق پر مبنی، کمبینیٹریل نمبر پلیسمنٹ پہیلی ہے۔ مقصد 9×9 گرڈ کو ہندسوں کے ساتھ بھرنا ہے تاکہ ہر کالم، ہر قطار، اور ہر نو 3×3 ذیلی گرڈ جو گرڈ کو تشکیل دیتے ہیں (جسے "خانے"، "بلاک"، "علاقے" بھی کہا جاتا ہے، یا "sub-squares") میں 1 سے 9 تک کے تمام ہندسے ہوتے ہیں۔ پزل سیٹٹر جزوی طور پر مکمل شدہ گرڈ فراہم کرتا ہے، جس کا عام طور پر ایک منفرد حل ہوتا ہے۔ مکمل شدہ پہیلیاں ہمیشہ لاطینی مربع کی ایک قسم ہوتی ہیں جس میں انفرادی خطوں کے مواد پر اضافی پابندی ہوتی ہے۔ مثال کے طور پر، ایک ہی واحد عدد ایک ہی 9×9 پلےنگ بورڈ کی قطار یا کالم میں یا 3×3 پلےنگ بورڈ کے نو 9×9 ذیلی علاقوں میں سے کسی میں دو بار ظاہر نہیں ہو سکتا۔

جدول 1 میں ایک مثال کا مسئلہ ہے۔ کل 9 سیلز کے لیے 9 قطاریں اور 81 کالم ہیں۔ ہر ایک کو 1 اور 9 کے درمیان نو عدد میں سے ایک اور صرف ایک رکھنے کی اجازت ہے۔ ابتدائی حل میں، ایک سیل کی یا تو ایک ویلیو ہوتی ہے – جو اس سیل میں موجود ویلیو کو اس ویلیو پر فکس کرتی ہے، یا سیل خالی ہے، جس سے یہ ظاہر ہوتا ہے کہ ہمیں ضرورت ہے۔ اس سیل کے لیے ایک قدر تلاش کرنے کے لیے۔ سیل (1,1) کی قدر 2 ہے اور سیل (6,5) کی قدر 6 ہے۔ سیل (1,2) اور سیل (2,3) خالی ہیں، اور الگورتھم ان خلیوں کے لیے ایک قدر تلاش کرے گا۔

پیچیدگی

ایک اور صرف ایک قطار اور کالم سے تعلق رکھنے کے علاوہ، ایک سیل ایک اور صرف 1 باکس سے تعلق رکھتا ہے۔ 9 خانے ہیں، اور ان کی نشاندہی ٹیبل 1 میں رنگ کے ذریعے کی گئی ہے۔ جدول 2 ہر باکس یا گرڈ کی شناخت کے لیے 1 اور 9 کے درمیان ایک منفرد عدد کا استعمال کرتا ہے۔ (1، 2 یا 3) کی قطار کی قدر اور (1، 2 یا 3) کے کالم کی قدر والے خلیات کا تعلق باکس 1 سے ہے۔ باکس 6 (4، 5، 6) اور کالم کی قدروں (7، 8) کی قطار کی قدریں ہیں۔ ، 9)۔ باکس کی شناخت کا تعین فارمولہ BOX_ID = {3x(floor((ROW_ID-1) /3)} + چھت (COL_ID/3) سے کیا جاتا ہے۔ سیل (5,7), 6 = 3x(floor(5-1) کے لیے ))/3) + چھت (8/3) = 3×1 + 3 = 3+3۔

پہیلی کا دل

ہر ایک نامعلوم سیل کے لیے 1 اور 9 کے درمیان ایک عدد عدد کی قدر تلاش کرنے کے لیے جیسے کہ 1 سے 9 کے عدد ہر کالم، ہر قطار اور ہر خانے کے لیے ایک بار اور صرف ایک بار استعمال کیے جائیں۔

آئیے سیل (1,3) کو دیکھتے ہیں جو خالی ہے۔ قطار 1 میں پہلے سے ہی اقدار 2 اور 7 ہیں۔ اس سیل میں ان کی اجازت نہیں ہے۔ کالم 3 میں پہلے سے ہی اقدار 3، 5,6،7,9، 1،2 ہیں۔ ان کی اجازت نہیں ہے۔ باکس 3 (پیلا) کی اقدار 8، 2,7 اور 3 ہیں۔ ان کی اجازت نہیں ہے۔ درج ذیل اقدار کی اجازت نہیں ہے (5)؛ (6، 7، 9، 2، 3)؛ (8، 2، 3)۔ منفرد اقدار جن کی اجازت نہیں ہے وہ ہیں (5، 6، 7، 8، 9، 1,4، XNUMX)۔ صرف امیدوار کی قدریں (XNUMX) ہیں۔

ایک حل کا طریقہ یہ ہوگا کہ عارضی طور پر سیل (1) کو 1,3 تفویض کیا جائے اور پھر کسی دوسرے سیل کے لیے امیدوار کی قدریں تلاش کرنے کی کوشش کی جائے۔

بیک ٹریکنگ حل: شروع کرنے والے اجزاء

صف کا ڈھانچہ

ابتدائی جگہ سورس کے مسئلے کو ذخیرہ کرنے اور تلاش کی حمایت کرنے کے لیے ایک صف کے ڈھانچے کا فیصلہ کرنا ہے۔ جدول 3 میں یہ صف کا ڈھانچہ ہے۔ کالم 1 ہر سیل کے لیے ایک منفرد عددی id ہے۔ قدریں 1 سے 81 تک ہوتی ہیں۔ کالم 2 سیل کی قطار ID ہے۔ کالم 3 سیل کا کالم ID ہے۔ کالم 4 باکس آئی ڈی ہے۔ کالم 5 سیل میں قدر ہے۔ ایک سیل کا مشاہدہ کریں جس میں ویلیو کے بغیر خالی یا null کی بجائے صفر کی قدر دی جاتی ہے۔ یہ اسے ایک "صرف عددی صف" رکھتا ہے - کارکردگی کے لحاظ سے بہت بہتر۔

اے پی ایل میں، یہ صف ایک 2 جہتی صف میں محفوظ کی جائے گی جہاں شکل 81 بائی 5 ہے۔ فرض کریں کہ ٹیبل 3 کے عناصر متغیر MAT میں محفوظ ہیں۔ مثال کے افعال ہیں:

کمانڈ MAT[1 2 3;] MAT کی پہلی 3 قطاروں کو پکڑتی ہے۔
1 1 1 1 2
2 1 2 1 0
3 1 3 1 0
MAT[1 2 3; 4 5] قطاریں 1، 2، 3 اور صرف کالم 4 اور 5 کو محفوظ کرتا ہے
1،2
1،0
1،0
(MAT[;5]=0)/MAT[;1] وہ تمام خلیات تلاش کرتا ہے جن کی قدر کی ضرورت ہوتی ہے۔

ٹیبل 3 داخل کریں۔

سنٹی چیک: ڈپلیکیٹس

تلاش شروع کرنے سے پہلے، سنجیدگی کی جانچ کرنا ضروری ہے! یہی ابتدائی حل ممکن ہے۔ سوڈوکو کے لیے ممکن ہے، کیا اب کسی بھی قطار، کالم یا خانے میں نقلیں موجود ہیں۔ موجودہ ابتدائی حل، مثال کے طور پر، 1 قابل عمل ہے۔ جدول 4 میں ایک مثال ہے جہاں ابتدائی حل میں نقلیں ہیں۔ قطار 1 کی دو ویلیو ہے 2۔ ایریا 1 کی دو ویلیو ہے 2۔ فنکشن "SANITY_DUPE" اس منطق کو سنبھالتا ہے۔

سنٹی چیک: قدروں کے بغیر سیلز کے لیے اختیارات

معلومات کا ایک بہت مددگار ٹکڑا بغیر کسی قدر کے سیل کے لیے تمام ممکنہ اقدار ہوں گے۔ اگر کوئی امیدوار نہ ہوں تو یہ معمہ حل نہیں ہوتا۔ سیل ایسی قدر نہیں لے سکتا جس کا دعویٰ اس کے پڑوسی نے پہلے ہی کر رکھا ہے۔ سیل کے لیے جدول 1 کا استعمال (1,3,'1' - یہ آخری 1 باکسڈ ہے)، اس کے پڑوسی قطار 1، کالم 3، اور باکس 1 ہیں۔ قطار 1 کی قدریں ہیں (2,7)؛ کالم 3 کی قدریں ہیں (3,5,6,7,9)؛ باکس 1 کی قدریں (2,3,8) ہیں۔ سیل (1,3.1) درج ذیل اقدار (2,3,5,6,7,8,9) نہیں لے سکتا۔ سیل (1,3,1) کے صرف اختیارات (1,4) ہیں۔ سیل (4,1,2) کے لیے اقدار 1, 2, 3, 5, 6, 7, 9 پہلے ہی قطار 4، کالم 1، اور/یا باکس 4 میں استعمال ہو چکی ہیں۔ صرف امیدوار کی قدریں ہیں (4,8) . اتحاد "SANITY_CAND" اس منطق کو سنبھالتا ہے۔

جدول 5 امیدواروں کو دکھاتا ہے، مثال کے طور پر، تلاش کے عمل کے آغاز میں 1۔ اگر کسی سیل کو پہلے ہی ابتدائی حالات (ٹیبل 1) میں ایک قدر تفویض کی گئی ہے، تو اس قدر کو دہرایا جاتا ہے اور سرخ رنگ میں دکھایا جاتا ہے۔ اگر ایک سیل جس کو قدر کی ضرورت ہے اس کے پاس صرف ایک اختیار ہے، تو یہ سفید رنگ میں دکھایا گیا ہے۔ سیل (8,7,9) کی واحد قدر سفید میں 7 ہے۔ (2,5,8,4,3) کا دعوی پڑوسی کالم 7 کے ذریعہ کیا گیا ہے۔ (1, 2, 9) قطار 8 کے ذریعہ۔ (3,2,6) بذریعہ باکس 9۔ صرف قدر 7 کا دعوی نہیں کیا گیا ہے۔

سنٹی چیک: تنازعات کی تلاش

سیلز کے لیے تمام اختیارات کی نشاندہی کرنے والی معلومات جن کو قدر کی ضرورت ہے (ٹیبل 4 میں پوسٹ کیا گیا ہے)، ہمیں تلاش کا عمل شروع کرنے سے پہلے تنازعات کی نشاندہی کرنے کے قابل بناتا ہے۔ ایک تنازعہ اس وقت ہوتا ہے جب دو خلیات جن کو قدر کی ضرورت ہوتی ہے ان میں صرف ایک امیدوار ہوتا ہے، امیدوار کی قدر ایک ہوتی ہے، اور دو خلیات پڑوسی ہوتے ہیں۔ جدول 4 سے ہم صرف ایک سیل کو جانتے ہیں جس کی قدر کی ضرورت ہے اور اس کا صرف ایک امیدوار سیل (8,7,9) ہے۔ مثال کے طور پر 1، کوئی تنازعہ نہیں ہے۔

تنازعہ کیا ہوگا؟ اگر سیل (3,7,3) کی واحد ممکنہ قدر 7 تھی (1, 6, 7 کی بجائے)، تو ایک تنازعہ ہے۔ سیل (8,7) اور سیل (3,7) پڑوسی ہیں – ایک ہی کالم۔ تاہم، اگر سیل (4,9,2) کی واحد ممکنہ قدر 7 تھی (1, 2, 7 کی بجائے) تو یہ تنازعہ نہیں ہوگا۔ یہ خلیے پڑوسی نہیں ہیں۔

سنٹی چیک کا خلاصہ

  1. اگر نقلیں ہیں تو، ابتدائی حل ممکن نہیں ہے۔
  2. اگر ایک سیل جس کو قدر کی ضرورت ہے، اس میں کوئی امیدوار نہیں ہے، تو اس پہیلی کا کوئی ممکنہ حل نہیں ہے۔ ہر سیل کے لیے امیدوار کی قدروں کی فہرست کو تلاش کی جگہ کو کم کرنے کے لیے استعمال کیا جا سکتا ہے – دونوں بیک ٹریکنگ اور اصلاح کے لیے۔
  3. تنازعات کو تلاش کرنے کی صلاحیت اس پہیلی کی نشاندہی کرتی ہے کہ تلاش کے عمل کے بغیر - اس کا کوئی حل نہیں ہے۔ مزید برآں، یہ "پرابلم سیلز" کی شناخت کرتا ہے۔

بیک ٹریکنگ حل: تلاش کا عمل

بنیادی اعداد و شمار کے ڈھانچے اور سنجیدگی کی جانچ کے ساتھ، ہم اپنی توجہ تلاش کے عمل کی طرف مبذول کرتے ہیں۔ بار بار چلنے والی تھیم ایک بار پھر ہے، تلاش کو سپورٹ کرنے کے لیے ڈیٹا ڈھانچے کو جگہ پر لانا۔

تلاش کا سراغ لگانا

صف ٹریکر کی گئی اسائنمنٹس پر نظر رکھتا ہے۔

  1. کرنل 1 کاؤنٹر ہے۔
  2. Col 2 اس سیل کو تفویض کرنے کے لیے دستیاب اختیارات کی تعداد ہے۔
    • 1 کا مطلب ہے 1 آپشن دستیاب، 2 کا مطلب ہے دو آپشنز وغیرہ۔
    • 0 کا مطلب ہے - کوئی آپشن دستیاب نہیں ہے یا 0 پر ری سیٹ کرنا (کوئی تفویض کردہ قدر نہیں) اور بیک ٹریکنگ
  3. کرنل 3 وہ سیل ہے جسے ایک ویلیو انڈیکس نمبر (1 سے 81) تفویض کیا گیا ہے۔
  4. کرنل 4 ٹریک ہسٹری میں سیل کو تفویض کردہ قدر ہے۔
    • 9999 کی قدر کا مطلب ہے کہ یہ سیل اس وقت تھا جب ڈیڈ اینڈ پایا گیا تھا۔
    • 1 اور 9 کے درمیان ایک عدد کی قدر شامل ہے، تلاش کے عمل میں اس مقام پر اس سیل کو تفویض کردہ قدر ہے۔
    • 0 کی قدر کا مطلب ہے کہ اس سیل کو اسائنمنٹ کی ضرورت ہے۔

ٹریکر سرنی تلاش کے عمل کو سپورٹ کرنے کے لیے استعمال کیا جاتا ہے۔ صف ٹریکسٹ ٹریکر جیسا ہی ڈھانچہ ہے لیکن تلاش کے پورے عمل کی تاریخ رکھتا ہے۔ جدول 6 میں TRACKHIST کا حصہ ہے مثال کے طور پر 1۔ اس کی مزید تفصیل بعد کے حصے میں بیان کی گئی ہے۔

اس کے علاوہ، صف پی اے وی (ایک ویکٹر کا ایک ویکٹر)، اس سیل کو پہلے سے تفویض کردہ اقدار کا ٹریک رکھتا ہے۔ یہ اس بات کو یقینی بناتا ہے کہ ہم کسی ناکام حل پر نظر ثانی نہیں کریں گے – جیسا کہ TABU میں کیا جاتا ہے۔

ایک اختیاری لاگ عمل ہے جہاں تلاش کا عمل ہر قدم کو لکھتا ہے۔

تلاش شروع کر رہا ہے۔

بک کیپنگ اور سنٹی چیکنگ کے ساتھ، اب ہم تلاش کا عمل شروع کر سکتے ہیں۔ اقدامات یہ ہیں:

  1. کیا کوئی سیل باقی ہے جس کی قدر کی ضرورت ہے؟ - اگر نہیں، تو ہم ہو چکے ہیں۔
  2. ہر ایک سیل کے لیے جسے قدر کی ضرورت ہے، ہر سیل کے لیے امیدوار کے تمام اختیارات تلاش کریں۔ جدول 4 میں حل کے عمل کے آغاز میں یہ اقدار ہیں۔ ہر تکرار پر، اسے سیلز کو تفویض کردہ اقدار کو ایڈجسٹ کرنے کے لیے اپ ڈیٹ کیا جاتا ہے۔
  3. اس ترتیب میں اختیارات کا جائزہ لیں۔
    • اگر کسی سیل میں صفر کے اختیارات ہیں، تو بیک ٹریکنگ انسٹی ٹیوٹ کریں۔
    • ایک آپشن کے ساتھ تمام سیلز تلاش کریں، ان سیلز میں سے ایک کو منتخب کریں، اس اسائنمنٹ کو بنائیں،
      1. اور ٹریکنگ ٹیبل، موجودہ حل، اور PAV کو اپ ڈیٹ کریں۔
    • اگر تمام سیلز میں ایک سے زیادہ آپشن ہیں، تو ایک سیل اور ایک ویلیو منتخب کریں اور اپ ڈیٹ کریں۔
      1. اور ٹریکنگ ٹیبل، موجودہ حل، اور PAV کو اپ ڈیٹ کریں۔

ہم جدول 6 کا استعمال کریں گے جو ہر قدم کی وضاحت کے لیے حل کے عمل کی تاریخ کا حصہ ہے (جسے TRACKHIST کہا جاتا ہے)۔

پہلی تکرار (CTR=1) میں، سیل 70 (قطار 8، کال 7، باکس 9) کو ایک قدر تفویض کرنے کے لیے منتخب کیا گیا ہے۔ صرف امیدوار (7) ہے، اور یہ قدر سیل 70 کو تفویض کی گئی ہے۔ مزید برآں، سیل 7 کے لیے پہلے سے تفویض کردہ اقدار (PAV) کے ویکٹر میں ویلیو 70 شامل کی جاتی ہے۔

دوسرے iteration سیل میں 30 کو ویلیو 1 تفویض کیا گیا ہے۔ اس سیل میں امیدوار کی دو قدریں تھیں۔ امیدوار کی سب سے چھوٹی قدر سیل کو تفویض کی جاتی ہے (منطق کو آسان بنانے کے لیے صرف ایک صوابدیدی اصول)۔

سیل کی شناخت کرنے کا عمل جس کو ایک قدر کی ضرورت ہے اور ایک قدر تفویض کرنے کا عمل اعادہ (CTR) 20 تک ٹھیک کام کرتا ہے۔ سیل 9 کو قدر کی ضرورت ہے، لیکن امیدواروں کی تعداد صفر ہے۔ دو اختیارات ہیں:

  • اس معمے کا کوئی حل نہیں ہے۔
  • ہم کچھ اسائنمنٹس کو کالعدم کرتے ہیں اور دوسرا راستہ اختیار کرتے ہیں۔

ہم نے اس کے قریب ترین سیل اسائنمنٹ کی تلاش کی، جہاں ایک سے زیادہ آپشن موجود تھے۔ اس مثال میں، یہ تکرار 18 پر ہوا، جہاں سیل 5 کو ویلیو 3 تفویض کی گئی ہے، لیکن سیل 5 کے لیے امیدوار کی دو قدریں تھیں - اقدار 3 اور 8۔

سیل 5 (CTR = 18) اور سیل 9 (CTR = 20) کے درمیان، سیل 8 کو قیمت 4 (CTR = 19) تفویض کی گئی ہے۔ ہم سیل 8 اور 5 کو واپس "قدر کی ضرورت" کی فہرست میں ڈالتے ہیں۔ یہ دوسری اور تیسری CTR=20 اندراجات میں کیپچر ہوتا ہے، جہاں ویلیو 0 پر سیٹ ہوتی ہے۔ ویلیو 3 سیل 5 کے PAV ویکٹر میں رکھی جاتی ہے۔ یعنی سرچ انجن سیل 3 کو ویلیو 5 تفویض نہیں کر سکتا۔

سرچ انجن سیل 5 کی قدر کی نشاندہی کرنے کے لیے دوبارہ شروع ہوتا ہے (3 کے ساتھ اب کوئی آپشن نہیں ہے) اور سیل 8 (CTR=5) کو ویلیو 21 تفویض کرتا ہے۔ یہ اس وقت تک جاری رہتا ہے جب تک کہ تمام سیلز کی کوئی قدر نہ ہو یا کوئی آپشن والا سیل نہ ہو اور کوئی پیچھے ہٹنے کا راستہ نہ ہو۔ حل ٹیبل 7 میں پوسٹ کیا گیا ہے۔

مشاہدہ کریں، جہاں ایک سیل کے لیے ایک سے زیادہ امیدوار ہیں، یہ متوازی پروسیسنگ کا موقع ہے۔

MILP اصلاح کے حل کے ساتھ موازنہ

سطحی سطح پر، سوڈوکو پہیلی کی نمائندگی ڈرامائی طور پر مختلف ہے۔ AI نقطہ نظر عددی اعداد کا استعمال کرتا ہے اور کسی بھی پیمائش سے ایک سخت اور زیادہ بدیہی نمائندگی ہے۔ مزید برآں، سنٹی چیکرز ایک مضبوط فارمولیشن بنانے کے لیے مددگار معلومات فراہم کرتے ہیں۔ MILP کی نمائندگی لامتناہی ہے۔ بائنریز (0/1)۔ تاہم، جدید MILP حل کرنے والوں کی طاقت کے پیش نظر بائنریز طاقتور نمائندگی ہیں۔

تاہم، اندرونی طور پر، MILP حل کرنے والا بائنریز کو نہیں رکھتا ہے لیکن تمام زیرو کو ذخیرہ کرنے کے لیے ایک ویرل سرنی کا طریقہ استعمال کرتا ہے۔ مزید برآں، بائنریز کو حل کرنے کے الگورتھم 1980 اور 1990 کی دہائی تک سامنے نہیں آئے۔ 1983 کا پیپر بذریعہ کروڈر، جانسن، اور پیڈبرگ بائنریز کے ساتھ اصلاح کے پہلے عملی حل میں سے ایک پر رپورٹ۔ وہ کامیاب حل کے لیے ہوشیار پری پروسیسنگ اور برانچ اور پابند طریقوں کی اہمیت کو نوٹ کرتے ہیں۔

رکاوٹ پروگرامنگ اور سافٹ ویئر کے استعمال کا حالیہ دھماکہ جیسے مقامی حل کرنے والا نے اصل اصلاحی طریقوں جیسے لکیری پروگرامنگ اور کم از کم مربعوں کے ساتھ AI طریقوں کے استعمال کی اہمیت کو واضح کر دیا ہے۔

ٹائم اسٹیمپ:

سے زیادہ آرکیوا