প্রকাশিত: 2026-02-09
রৈখিক অপ্টিমাইজেশন হিসেবে সুদোকু: গ্রিডের গণিত
প্রথম চোখে সাধারণ ৯x৯ সুডোকু গ্রিডটি অজ্ঞাতসারে কাটানোর একটি সহজ কাজ মনে হতে পারে—এটি ধৈর্য এবং যুক্তির এক সাধারণ অনুশীলন। আমরা সংখ্যাগুলো এভাবে পূরণ করি যাতে স্থানীয় বা প্রাথমিক নির্দিষ্ট নিয়মগুলো পূরণ হয়, এবং কোনো জটিল গাণিতিক প্রক্রিয়া নিয়ে চিন্তা না করেই পাজলটি সমাপ্ত করার তৃপ্তি উপভোগ করি। তবে এই বিনোদনমূলক সরলতার আস্তরণের নিচে অপারেশনাল রিসার্চ বা ক্রিয়াকলাপ গবেষণার এক শক্তিশালী সরঞ্জাম: লিনিয়ার অপটিমাইজেশনের সাথে একটি গভীর সংযোগ লুকিয়ে আছে।
যদিও সুডোকু প্রযুক্তিগতভাবে ঐতিহ্যবাহী অপটিমাইজেশন সমস্যার চেয়ে কনস্ট্রেইন্ট স্যাটিসফ্যাকশন (নিয়ম পূরণের) সমস্যা, কেননা এখানে কোনো "অবজেক্টিভ ফাংশন" বা লক্ষ্যকে সর্বোচ্চ বা সর্বনিম্ন করা নেই, তবুও গাণিতিক মডেলিংয়ের জগতে এটি একটি সুন্দর এবং নিরাপদ প্রবেশপথ হিসেবে কাজ করে। লিনিয়ার অ্যালজেব্রা এবং বাইনারি ভেরিয়েবল (দ্বিমাত্রিক চলক) ব্যবহার করে কীভাবে সুডোকুকে গাণিতিকভাবে সংজ্ঞায়িত করা যায়, তা বুঝতে পেরে আমরা কেবল পাজল ডিজাইন নয়, কম্পিউটাররা সরবরাহ শৃঙ্খল, সময়সূচী এবং সম্পদ বরাদ্দ-এ জটিল চ্যালেঞ্জগুলো কীভাবে সমাধান করে, তার ওপরও দৃষ্টিভঙ্গি পাই।
গাণিতিক রূপান্তর: গ্রিড থেকে ভেরিয়েবলে
একটি কাগজের পাজল এবং অপটিমাইজেশন মডেল-এর মাঝখানের ব্যবধান কমানোর জন্য, আমাদের প্রথমে শারীরিক গ্রিডটিকে গাণিতিক উপাদানে রূপান্তর করতে হবে। লিনিয়ার প্রোগ্রামিংয়ে, আমরা সিদ্ধান্তগুলোর প্রতিনিধিত্বকারী ভেরিয়েবল বা চলকের সাথে কাজ করি—এক্ষেত্রে সিদ্ধান্ত হলো কোন কোষে কোন সংখ্যা বসবে।
আসুন একটি ৯x৯ সুডোকু পাজলের প্রতিটি সম্ভাব্য অবস্থার জন্য বাইনারি ভেরিয়েবল $x_{ijk}$ সংজ্ঞায়িত করি। সূচকগুলো নির্দেশ করে:
- i: সারি (১ থেকে ৯)
- j: কলাম (১ থেকে ৯)
- k: সংখ্যা মান (১ থেকে ৯)
ভেরিয়েবল $x_{ijk}$ সমান ১ হয় যদি i-তম সারি এবং j-তম কলামের কোষে সংখ্যাটি k থাকে, অন্যথায় এটি শূন্য। এই বাইনারি উপস্থাপনা গুরুত্বপূর্ণ কারণ লিনিয়ার সলভাররা বীজগাণিতিকভাবে পরিচালনাযোগ্য ধারাবাহিক বা পূর্ণসংখ্যার মানগুলোর সাথে সবচেয়ে ভালো কাজ করে।
যখন আপনি একটি পূর্ণ গ্রিড দেখেন, আপনি মূলত একটি ঘনত্বহীন ম্যাট্রিক্স দেখছেন যেখানে প্রতিটি কোষের জন্য কেবল একটি ভেরিয়েবল সক্রিয় (১-এর সমান) থাকে, এবং বাকিগুলো শূন্য। সুডোকু মডেলিংয়ের কৌশল হলো গেমটির নিয়মগুলোকে সেই কাঠামোটি জোর করে রাখার জন্য লিনিয়ার সমীকরণে রূপান্তর করা।
লিনিয়ার সমীকরণ হিসেবে কনস্ট্রেইন্ট এনকোডিং
সুডোকুকে লিনিয়ার অপটিমাইজেশনের সাথে যুক্ত করার মূল চ্যালেঞ্জ হলো কনস্ট্রেইন্ট বা নিয়ম সংজ্ঞায়িত করা। একটি সাধারণ সুডোকু গেম-এ, চারটি প্রধান নিয়ম রয়েছে, যা আমাদের বাইনারি ভেরিয়েবলসহ লিনিয়ার সমীকরণগুলোর সেটে সম্পূর্ণভাবে ম্যাপ করে।
- প্রতি কোষে একটি সংখ্যা: প্রতিটি কোষ $(i,j)$-এর জন্য, ঠিক একটি মান $k$ নির্বাচন করতে হবে। গাণিতিকভাবে, এটি প্রকাশ করা হয়: $\sum_{k=1}^{9} x_{ijk} = 1$ সব $i,j$-এর জন্য।
- অনন্য সারি: প্রতিটি সারি i এবং প্রতিটি সংখ্যা k-এর জন্য, সেই সংখ্যাটি ওই সারিতে ঠিক একবার উপস্থিত হতে পারে। সমীকরণ: $\sum_{j=1}^{9} x_{ijk} = 1$ সব $i,k$-এর জন্য।
- অনন্য কলাম: একইভাবে, প্রতিটি কলাম j এবং সংখ্যা k-এর জন্য, সংখ্যাটি ঠিক একবার উপস্থিত হয়। সমীকরণ: $\sum_{i=1}^{9} x_{ijk} = 1$ সব $j,k$-এর জন্য।
- অনন্য ৩x৩ বক্স: প্রতিটি ৩x৩ সাবগ্রিড (ব্লক সূচক $b$ দ্বারা নির্দেশিত) এবং সংখ্যা k-এর জন্য, সংখ্যাটি ওই ব্লকের মধ্যে ঠিক একবার উপস্থিত হয়। এর জন্য বিশ্বব্যাপী $(i,j)$ স্থানাঙ্কগুলোকে স্থানীয় ব্লক সূচকে ম্যাপ করতে হয়, তবে রূপটি হতে থাকে ১-এর সমান যোগফল।
এই ফর্মুলেশন সরাসরি এক্সেক্ট কভার সমস্যায় (Exact Cover Problem) ম্যাপ করে, যা কনস্ট্রেইন্ট স্যাটিসফ্যাকশন সমস্যার একটি নির্দিষ্ট প্রকার। যদিও মানুষ ডাকশন বা যুক্তি ব্যবহার করে (যেমন "নেকড সিঙ্গেল" বা "পয়েন্টিং পেয়ার") এটি সমাধান করে, কিন্তু অপটিমাইজেশন সলভার লিনিয়ার যোগফলের সাথে বিরোধিতা করে এমন শাখাগুলো বাদ দিয়ে ধাপে ধাপে সমাধানের জগৎ অন্বেষণ করার মাধ্যমে এটির সাথে সাযুক্ত হয়।
সুডোকুর জন্য অপটিমাইজেশন কেন ব্যবহার করবেন?
মানুষ যদি কম্পিউটার ছাড়া সুডোকু সমাধান করতে পারে, তবে কীভাবে একে লিনিয়ার প্রোগ্রামিং সমস্যার হিসাবে ফরমালাইজ করা লাগবে? উত্তরটি সাধারণীকরণ বা জেনারালাইজেশনে রয়েছে। যখন আপনি এই গাণিতিক কাঠামো প্রতিষ্ঠিত করেন, তখন আপনার আর শুধুমাত্র সাধারণ ৯x৯ গ্রিড-এ সীমাবদ্ধ থাকতে হয় না।
যেমন ক্যালকুডোকু, এর মতো ভেরিয়েন্টগুলি বিবেচনা করুন যেখানে গাণিতিক অপারেশন引入 করা হয়। ক্যালকুডুকুতে (কেনকেন নামেও পরিচিত), কোষের অঞ্চলগুলোতে একটি নির্দিষ্ট যোগফল বা গুণফল থাকে। এই নিয়মগুলি সাধারণ সুডোকু-এর ব্যবহৃত সাধারণ "অনন্য ডিজিট" বাইনারি মডেলের মধ্যে ঠিক বসে না। তবে, কোষের মান এবং খাঁচার মধ্যে গাণিতিক অপারেশনের জন্য অতিরিক্ত কনস্ট্রেইন্ট সহ ইন্টিজার ভেরিয়েবলগুলোকে আমাদের লিনিয়ার ফর্মুলেশনে প্রসারিত করে, আমরা একই মূল অপটিমাইজেশন নীতি ব্যবহার করে এই কঠিন ভেরিয়েন্টগুলিকে মডেল করতে পারি।
এই নমনীয়তা পাজল তৈরিকারীদেরকে তাদের কনস্ট্রেইন্ট ম্যাট্রিক্সে সহগগুলো সামঞ্জস্য করে কার্যত অনন্য হাজার হাজার ভিন্ন পাজল প্রোগ্রামের মাধ্যমে তৈরি করার অনুমতি দেয়, নিশ্চিত করে যে ফলাফলপত্রটিতে একটি একক সমাধান রয়েছে—যা ম্যানুয়ালি গ্যারান্টি দেওয়া কঠিন একটি বৈশিষ্ট্য।
জটিলতা ফ্যাক্টর: এনপি-সম্পূর্ণ
সুডোকু এবং লিনিয়ার অপটিমাইজেশনের মধ্যে সম্পর্কের একটি গুরুত্বপূর্ণ দিক হলো কম্পিউটেশনাল জটিলতা। সাধারণ ৯x৯ সুডোকু আধুনিক কম্পিউটারের জন্য পরিচালনাযোগ্য, কিন্তু যখন আমরা এটি বড় করি? যদি আমরা সুডোকুকে একটি $N \times N$ গ্রিড (যেখানে $N$ একটি পূর্ণবর্গ সংখ্যা) সাধারণীকরণ করি, সমস্যাটি এনপি-সম্পূর্ণ হয়ে ওঠে।
এর অর্থ হলো, গ্রিডের আকার বাড়ার সাথে সাথে একটি সাধারণ ব্রুট-ফোর্স পদ্ধতি ব্যবহার করে সমাধান খুঁজে পাওয়ার সময় সূচকীয় হারে বাড়তে থাকে। ব্রাঞ্চ অ্যান্ড বাউন্ড এবং কাটিং প্লেনস-এর মতো ইন্টিজার প্রোগ্রামিং কৌশলগুলো এই বিশাল সার্চ স্পেসকে আরও দক্ষতার সাথে নেভিগেট করার জন্য ব্যবহার করা হয়। তবে, এরাও উল্লেখযোগ্যভাবে বড় গ্রিডগুলোর সাথে চ্যালেঞ্জের মুখোমুখি হয়।
এখানে মানুষের বিশেষজ্ঞদের দ্বারা ব্যবহৃত যুক্তিবাদের কৌশলগুলো অপটিমাইজেশনে "কাটিং প্লেনস"-এর অনুরূপ হয়ে ওঠে। যখন কোনো সলভার শনাক্ত করে যে বর্তমান কনস্ট্রেইন্টের ভিত্তিতে সার্চ ট্রি-এর কিছু শাখা সম্ভাব্য কোনো সমাধানের দিকে নিয়ে যেতে পারে না, তখন সেটি সেগুলোকে "কাট" বা মুছে ফেলে। একইভাবে, উন্নত সুডোকু কৌশলগুলি (যেমন এক-উইংগ বা সোর্ডফিশ) মানুষকে সারি এবং কলাম জুড়ে বিকল্পগুলিকে বিশ্বব্যাপী বাদ দেওয়ার অনুমতি দেয়, যা প্রতিটি সংযোজন পরীক্ষা না করেই সমস্যার আকার কার্যত কমিয়ে দেয়।
বেস-১০ এর বাইরে: বাইনারি কনস্ট্রেইন্ট
যখন আমরা ভিন্ন বেস ব্যবহার করা সুডোকু ভেরিয়েন্টগুলিকে দেখি, তখন লিনিয়ার অপটিমাইজেশনের নীতিগুলো আরও সম্প্রসারিত হয়। উদাহরণস্বরূপ, বাইনারি সুডোকু (তাকুযু নামেও পরিচিত) এ, ডিজিট ১-৯ এর পরিবর্তে ০ এবং ১ দিয়ে খেলা হয়।
এই ভেরিয়েন্টটি বাইনারি লজিক সার্কিট এবং বুঁলিয়ান সি্যাটিসফ্যাবিলিটি সমস্যার (SAT) সাথে ঘনিষ্ঠভাবে সামঞ্জস্যপূর্ণ। কনস্ট্রেইন্টগুলো আকারে সহজ হয়—মূলত নিশ্চিত করে যে প্রতিটি সারি/কলামে ০ এবং ১ এর সংখ্যা সমান—কিন্তু অন্তর্নিহিত লিনিয়ার অ্যালজেব্রা একই থাকে। এই পাজলগুলোর বাইনারি প্রকৃতি তাদেরকে ডিসক্রিট ডেটা স্ট্রাকচার হ্যান্ডেল করার জন্য ডিজাইন করা অ্যালগরিদমের জন্য চমৎকার পরীক্ষার ক্ষেত্র করে তোলে, যা কম্পিউটার বিজ্ঞানে ভিত্তিক।
বেস-২ গ্রিডে অপটিমাইজেশন কীভাবে কাজ করে তা বোঝা উচ্চ কার্ডিনালিটির (১-৯ ডিজিট) কোলাহল ছাড়া কনস্ট্রেইন্টগুলো কীভাবে মিথস্ক্রিয়া করে তার একটি পরিষ্কার দৃষ্টিভঙ্গি দেয়। এটি গাণিতিক জটিলতা সরিয়ে ফেলে এবং এমন একটি বিশুদ্ধ যৌক্তিক কাঠামো তুলে ধরে যা সকল সুডোকু-জাতীয় পাজলকে সংজ্ঞায়িত করে।
পাজল প্রেমীদের জন্য ব্যবহারিক অ্যাপ্লিকেশন
যদিও আপনি সকালের ক্রসওয়ার্ড সমাধান করার জন্য কোড লিখছেন না, এই সংযোগটি বুঝতে পারলে পাজল ডিজাইন এবং অনুধাবনে ব্যবহারিক সুবিধা থাকে। যখন আপনি একটি "কঠিন" পাজলের মুখোমুখি হন, তখন জানতে পারেন যে এটি উচ্চ-মাত্রিক গাণিতিক স্থানের একটি দৃঢ়ভাবে কনস্ট্রেইন্টেড অঞ্চল প্রতিনিধিত্ব করে, যা আপনার দৃষ্টিভঙ্গি পরিবর্তন করতে পারে।
গণিত এবং যুক্তির ছেদে আগ্রহীরা ইনপুট কনস্ট্রেইন্ট পরিবর্তন করে পাজল অন্বেষণ করলে তা শিক্ষানীড়ক হতে পারে। কিলার সুডোকু, উদাহরণস্বরূপ, মোটা বক্সগুলিকে নির্দিষ্ট মোটের যোগফল দেওয়া "খাঁচা" দিয়ে প্রতিস্থাপন করে। এটি সমস্যাকে বিশুদ্ধ বিন্যাস (ক্রম) থেকে পূর্ণসংখ্যা বিভাজনে সরিয়ে দেয়—কম্বিনেটোরিয়াল অপটিমাইজেশনের একটি ক্লাসিক্যাল চ্যালেঞ্জ।
এই কাঠামোগত পার্থক্যগুলো স্বীকার করে, আপনি নির্দিষ্ট বৈশিষ্ট্যগুলিকে প্রশিক্ষণ দেওয়ার মতো পাজল বেছে নিতে পারেন। সাধারণ যুক্তিবাদের পাজলগুলি প্যাটার্ন শনাক্তকরণ গঠনে সহায়তা করে, যখন সেই সবগুলোকে আরগেমেটিক সংযোজন প্রয়োজন হয় (যেমন কিলার বা ক্যালকুডোকু) তারা কর্মক্ষম স্মৃতি এবং সংখ্যা বোধের সাথে জড়িত। অন্তর্নিহিত গণিতটি বুঝতে সাহায্য করে ব্যাখ্যা করতে যে কিছু ভেরিয়েন্ট অন্যগুলির তুলনায় কেন "ভারী" বা আরও জটিল মনে হয়; তারা একই কনস্ট্রেইন্ট কাঠামোর মধ্যে ভিন্ন ধরনের ভেরিয়েবলগুলোর জন্য সমাধান করছে।
উপসংহার: যুক্তির সৌন্দর্য
সুডোকু এবং লিনিয়ার অপটিমাইজেশনের মধ্যে সম্পর্ক অ্যাবস্ট্রাকশনের শক্তির একটি প্রমাণ। সংখ্যার একটি সাধারণ গ্রিডকে বাইনারি ভেরিয়েবল এবং লিনিয়ার সমীকরণে বিচ্ছেদ করা যেতে পারে, যা আধুনিক কম্পিউটিং চালিত জটিল অ্যালগরিদমিক প্রক্রিয়াগুলি প্রকাশ করে।
আপনি কি শুরু করছেন সহজ সুডোকু দিয়ে যুক্তিবাদের মৌলিক বিষয়গুলো grasp করার জন্য, বা এনপি-সম্পূর্ণ সাধারণীকৃত গ্রিডগুলির মুখোমুখি হচ্ছেন একজন প্রেমিকা হিসেবে, আপনি গ্লোবাল সরবরাহ শৃঙ্খলকে অপটিমাইজ করা সেই একই গাণিতিক সত্যের সাথে জড়িত। পাজলটি কেবল একটি খেলা নয়; এটি গণিতের ক্রমবদ্ধ জগতে একটি জানালা।
পরবর্তী বার আপনি যখন একটি অনুপস্থিত সংখ্যা পূরণ করেন, মনে রাখবেন যে আপনি একটি জটিল কনস্ট্রেইন্ট সিস্টেমকে সিদ্ধান্ত দেছেন, প্রতিটি বাইনারি ভেরিয়েবল একবারে।