একটি ইন্টারেস্টিং Quora উত্তরের বাংলা রূপান্তর

ম্যাট্রিক্স মুভিতে মেশিনের শক্তি সরবারহের জন্য কেন শুধুমাত্র ব্যাটারি হিসেবে মানুষকে ব্যবহার করা হলো? মানুষের বদলে গরু, ছাগল, মহিষ, ভেড়া বা অন্যান্য শক্তিশালী প্রাণিদেরকেও তো এনার্জি সেল হিসেবে ব্যবহার করা যেত!!

আসলে ম্যাট্রিক্স মুভিতে মেশিন মানুষদের শুধুমাত্র এনার্জি সেল বা ব্যাটারী হিসেবে ব্যবহার করেছে এই ধারণা সম্পূর্ণ সঠিক নয়। আসলে মানুষরাই মেশিনের বিরুদ্ধে নিজেদের যুদ্ধকে জাস্টিফাই করার জন্যে এটি বলছে। অর্থ্যাৎ মানুষ নিজেরাই নিজেদেরকে মোটিভেট করার জন্য এটি বলছে। আসল ব্যাপারটা হচ্ছে মেশিন মানুষদেরকে সুরক্ষিত রাখার জন্যই তাদেরকে ভার্চুয়াল রিয়েলিটিতে আটকে রাখছে। একটু ব্যাখ্যা করলে বিষয়টা আরেকটু পরিস্কার হবে।

মেশিনদের ডিজাইন করা হয়েছিল মূলত মানুষকে সুরক্ষিত রাখার জন্য। যে কোন মেশিনারি সিস্টেমের প্রথম এবং প্রধান লক্ষ্যই থাকে মানুষের কাজকে কমিয়ে আনা, মানুষের কাজগুলোকে আরেকটু সুবিধাজনক করা। কিন্তু দেখা গেল মানুষ মেশিনকে ভয় পেতে শুরু করেছে এবং মেশিন ব্যবহারের বিরুদ্ধে ক্রমেই একটা বিপ্লব মাথাচাড়া দিয়ে উঠতে শুরু করেছে। আবার দেখা যাচ্ছে নিজেদের ভিতর যুদ্ধে মানুষ পৃথিবীর ইকোসিস্টেমকে ধ্বংসের মুখে নিয়ে গেছে। ধুলোবালিতে সূর্যের আলো ঢাকা পড়েছে। ঠিক সেই সময় মেশিন বুঝতে পারলো, মানুষের অস্তিত্বে বিপন্নের জন্য সবচেয়ে বড় হুমকি মানুষ নিজেই। তাই মেশিন মানুষের অস্তিত্ব রক্ষার জন্য তার নিজের মত করে একটা পরিকল্পনা বের করলো।
matrix
ম্যাট্রিক্স মুভির একটি কল্পিত চিত্র
মেশিন বুঝতে পারলো মূল সমস্যাটা হচ্ছে মানুষের নিজের মত করে চিন্তা ভাবনা করার ক্ষমতা। তাই মানুষের চিন্তাভাবনাকে একদিকে নিয়ন্ত্রণ করা দরকার। কিন্তু মানুষের চিন্তা-ভাবনা নিয়ন্ত্রণ করার আবার একটা সমস্যাও আছে। মানুষ সবসময় সুখী থাকতে চায়। আর সুখী থাকার সবচেয়ে বড় উপায়টা হচ্ছে যা ইচ্ছা তাই করতে পারা, স্বাধীনভাবে ভাবতে পারা, মানে নিজের সিদ্ধান্ত নিজেরা নিতে পারা আর তার সাথে সাথে সেইসব কাজের বাস্তবায়নও নিজের মত করতে পারা। অর্থ্যাৎ আমি যদি মানুষকে ফ্রি উইল না দিই, তাহলে মানুষটা সুখী থাকবে না। আবার ফ্রি উইল দিলেও নিজেরা নিজেদেরকে ধ্বংস করে ফেলবে। সুতরাং মেশিন পরলো মহাফাপড়ে। কোন মেশিনই প্যারাডক্স পছন্দ করে না।

সুতরাং মেশিনের মাথায় যেই সমাধানটা আসলো সেটা হচ্ছে ভার্চুয়াল রিয়েলিটি। এখানে মানুষদের চিন্তাভাবনা থাকবে স্বাধীন, তারা নিজেরা নিজেদের মতই চলবে, কিন্তু ভার্চুয়লি। মূল নিয়ন্ত্রণ থাকবে মেশিনের হাতে। মানুষ যত স্বাধীনভাবেই চিন্তাভাবনা করতে পারুক, নিজেদের ধ্বংস করতে পারবে না। তারা নিজেদের ভার্চুয়াল জগৎে ঘোরাঘুরি করবে—আর ভাববে, বাহ! আমরা তো মহা সুখে আছি! মানুষের শরীর থাকবে ছোট ছোট ব্যাটারী সেলে, কিন্তু তারা বাস করবে ভার্চুয়াল ম্যাট্রিক্সে।

সুতরাং প্রশ্নটা হচ্ছে, কেন তাহলে মরফিয়াস নিওকে বললো, মেশিন আসলে মানুষদের ব্যাটারী হিসেবে ব্যবহার করছে? কারণটি হচ্ছে ম্যাট্রিক্সে কিছু ত্রুটি সবসময়ই ছিলো। কিছু মানুষ সবসময় ছিলো যারা ম্যাট্রিক্সের ফলাফলেও সন্তুষ্ট ছিল না। তারা বুঝতে পারছিল, তাদের জীবনযাত্রায় কিছু একটা ভুল হচ্ছে। কিছু অস্বাভাবিক ব্যাপার তাদের চোখে পড়ছিল। ম্যাট্রিক্সের আর্কিটেকচার এমন হবার কথা ছিলো যেন মানুষের কাছে জিনিষটাকে স্বর্গ বলে মনে হয়। সমস্যাটা ছিলো এখানে ঘটনাগুলো ছিল লিনিয়ার। এই ম্যাট্রিক্সের মানুষের আবেগ এবং অনুভূতিগুলো মিল খুঁজতে হিমশিম খাচ্ছিলো।

মেশিন এই সমস্যা সমাধানের জন্য ওরাকল নমে একটি প্রোগ্রাম ডিজাইন করা হলো। ওরাকল একটির বদলে দুইটি ম্যাট্রিক্স তৈরী করলো। এর পেছনের মূল কারণটি ছিল মানুষ আসলে সংশয়বাদী। ধরা যাক আপনি একটি গাড়ির শোরুমে গিয়েছেন গাড়ি কিনতে। এখন প্রথম দোকানের সেলস্ম্যান আপনাকে বললো, আমাদের গাড়িটাই সবচেয়ে ভালো। চোখ বুজে কিনে নিয়ে যান। আপনি জিতবেন। কিছু মানুষ প্রথম সেলস্ম্যানের কথা বিশ্বাস করে গাড়ি কিনে ফেলবে। কিন্তু বেশীরভাগ মানুষ প্রথম দোকান পার হয়ে অন্যান্য দোকানে গাড়িগুলোও দেখবে। অন্য কোন দোকানের সেলস‍্ম্যান যদি বলে, আরে ভাই জানেন না? ঐ দোকানের গাড়িগুলা তো ভূয়া। এই কথা শোনার পর বেশীরভাগ সম্ভবনা, আপনি আর প্রথম দোকানে ফিরে যাবেন না।

মরফিয়াস আসলে পরের দোকানের সেলস্ম্যান। আর দ্বিতীয় ম্যাট্রিক্স হচ্ছে যা সে বিক্রী করছে। সে সকল সংশয়বাদী মানুষগুলোকে একত্রিত করছে, যারা তাদের জগৎের অস্তিত্ব নিয়ে সন্দিহান। সে তাদের বলছে, হ্যাঁ আসলেই তোমাদের সন্দেহ ঠিক আছে। ম্যাট্রিক্স জগৎ আসলেই একটা ভারচুয়াল রিয়েলিটি। এর কোন অস্তিত্ব নেই। মেশিন মানুষদের এনার্জি সেল হিসেবে ব্যবহার করছে। দ্বিতীয় ম্যাট্রিক্সই হচ্ছে সত্যিকারের জগৎ। দ্বিতীয় ম্যাট্রিক্স নিয়ে যদি কেউ সন্দেহ প্রকাশ করে তাহলে হয়তো ঐদিকেই বাস্তব জগৎ আছে। কিন্তু আসলেই কোনটি বাস্তব জগৎ আমরা জানি না!

মূলঃ প্রশ্ন উত্তর

Advertisements

Got certificate on Machine Learning from Stanford University through Coursera

That was an amazing journey of Machine Learning. Professor Andrew Ng taught this course in such a way that was very easy to understand. I actually took this course to build a foundation of my thesis work in undergraduate level. I hope this knowledge will help me even further into the future. Again, I would like to thank the Coursera community for provided me with the necessary financial aid and helped me to complete the course.
MACHINE LEARNING@STANFORD
The feeling of that moment cannot be described in words. Course certificate link is provided here.

সবচেয়ে ভালো উপকরণটি বাছাইকরণের সম্ভাব্যতা!!!

অনেকগুলো একই ধরণের জিনিস আছে। যেকোন ধরণের জিনিস হতে পারে। এটি হতে পারে কোরবানির ঈদে গরুর হাটে সবচেয়ে ভালো গরুটি বাছাইকরণ অথবা পাবলিক টয়লেটের সারিতে সবচেয়ে ভালো টয়লেটটি বাছাইকরণ। হতে পারে কোন হোটেলের সবচেয়ে ভালো রুমটি বাছাই করা অথবা যাতায়াতের সময় সবচেয়ে ভালো সিটটি বাছাই করা। অর্থ্যাৎ যেকোন একই ধরনের জিনিসের মধ্যে সবচেয়ে ভালো জিনিসটি আমাকে বাছাই করতে হবে। জিনিস কি হবে সেটা নিয়ে আমাদের খুব বেশী মাথাব্যাথা নেই। আমরা যেটা দেখতে চাই সেটা হচ্ছে সবচেয়ে কম সংখ্যক উপকরণ পর্যবেক্ষণ করে গাণিতিক উপায়ে  সূত্রের সাহায্যে কীভাবে আমরা সবচেয়ে ভালো উপকরণটি বাছাই করতে পারি

ধরা যাক n সংখ্যক জিনিস পাশাপাশি সাজানো আছে। সবচেয়ে ভালো উপকরণটি বাছাই করতে হলে আমাকে অবশ্যই n সংখ্যক উপকরণের মধ্যে কিছু সংখ্যক উপকরণ আগে থেকেই পর্যবেক্ষণ করে নিতে হবে, যেন আমরা তুলনা করতে পারি আমাদের বাছাই করা উপকরণটি আগে পর্যবেক্ষণ করা উপকরণগুলো থেকে ভালো না খারাপ! ধরা যাক, আমরা যে কয়টি উপকরণ পর্যবেক্ষণ করবো তার সংখ্যা k, এবং k অবশ্যই n-য়ের সমান অথবা n থেকে ছোট। অর্থ্যাৎ ব্যাপারটি এরকম-n সংখ্যক সারি সারি পাবলিক টয়লেট পাশাপাশি আছে। আমি একটি ভালো টয়লেট বাছাই করতে চাই। কিন্তু বাছাই করার আগে আমাকে k সংখ্যক টয়লেট পর্যবেক্ষণ করে নিতে হবে, যেন আমার বাছাই করা টয়লেট, আগের পর্যবেক্ষণ করা k সংখ্যক টয়লেট থেকে ভালো কিনা সেটা তুলনা করা যায়।

BEST TOILET 01
চিত্রঃ বাছাইকরার উপকরণ যেকোন কিছু হতে পারে, এমনকি সেটা হতে পারে পাবলিক টয়লেটও!!

আলোচনা এবং উদ্দেশ্য বোঝা গেল। এখন গাণিতিকভাবে সম্ভাব্যতা হিসাব করার পালা।

k সংখ্যক উপকরণ পর্যবেক্ষণ করে সবচেয়ে ভালো উপকরণটি বাছাই করার সম্ভাব্যতা যদি P(k) হয়, তাহলে গাণিতিকভাবে P(k) হবে—

P(k)=∑P(পর্যবেক্ষণ করা k সংখ্যক উপকরণের n-তম অবস্থানে থাকার সম্ভাব্যতা)×P(n-তম উপকরণকেই বাছাই করার সম্ভাব্যতা)

অর্থ্যাৎ প্রথম সম্ভব্যতা হচ্ছে k-য়ের মান n-তম (1,2,3,…,n-1,n) হবার সম্ভাব্যতা এবং দ্বিতীয় সম্ভাব্যতাটি হচ্ছে n-তম (1,2,3,…,n-1,n) উপকরণকেই বাছাই করার সম্ভাব্যতা।

প্রথম k-তম উপকরণকে আমরা পর্যবেক্ষণ করবো। এরপর k+1-তম উপাদান থেকে n-তম উপকরণের ভিতর প্রথম যে উপকরণটি আগের পর্যবেক্ষণ করা k সংখ্যক উপকরণ থেকে ভালো হবে, আমরা সেই উপকরণটি বাছাই করবো। যদি k+1-তম উপকরণ থেকে n-তম উপকরণ পর্যন্ত আগেই পর্যবেক্ষণ করা k-সংখ্যক উপকরণের চেয়ে ভালো কোন উপকরণ পাওয়া না যায় তাহলে আমরা সর্বশেষ উপকরণটি অর্থ্যাৎ n-তম উপকরণটি বাছাই করব। সেটি আগের k সংখ্যক উপকরণ থেকে ভালো না খারাপ, সেটি আর বিবেচনায় আনবো না।

BEST TOILET 02চিত্রঃ বাছাই করার জন্য n-সংখ্যক উপকরণ। প্রথম k-সংখ্যক উপকরণ শুধুমাত্র পর্যবেক্ষণ করার জন্য। পরের গুলো বাছাই করার জন্য।

প্রথমে আমরা পর্যবেক্ষণ করা প্রথম k-সংখ্যক উপকরণের জন্য সম্ভাব্যতা হিসাব করি। যেহেতু আমাদের কাছে n-সংখ্যক উপকরণ আছে তাই k-তম উপকরণের n-তম অবস্থানে থাকার সম্ভাব্যতা 1/n। এবং প্রথম k-সংখ্যক উপকরণের বাছাই হবার সম্ভাব্যতা শূণ্য। কারণ, প্রথম k-সংখ্যক উপকরণ থেকে আমরা কোন উপকরণ বাছাই করবো না। k+1-তম উপকরণ থেকে বাছাই করা শুরু হবে।

তাই পর্যবেক্ষণ করা প্রথম k-সংখ্যক উপাদানের জন্য—

P(k)=∑(1/n)×0
P(k)=(k-সংখ্যক 1/n এর সমষ্টি)×(k-সংখ্যক 0-য়ের সমষ্টি)
P(k)=(k/n)×(k×0)
P(k)=0

দেখা যাচ্ছে যে, প্রথম k-সংখ্যক উপকরণের জন্য সম্ভাব্যতার সূত্রে কোন প্রভাব পরছে না। এখন বাছাই করার জন্য বাকি k+1-তম উপকরণ থেকে n-তম উপাদানের জন্য সম্ভাব্যতা হিসাব করা যাক। k+1-তম উপকরণ থেকে n-তম উপকরণ পর্যন্ত সকল উপকরণের জন্য k-তম উপকরণের n-তম অবস্থানে থাকার সম্ভাব্যতা 1/n। কারণ এখানেও আমাদের n-সংখ্যক উপকরণ আছে এবং k-য়ের মান n-সংখ্যক অবস্থানের যেকোন জায়গায় হতে পারে। তাই এখানেও প্রথম সম্ভাব্যতা 1/n।

এখন ধরা যাক, k-তম উপকরণের পর আর মাত্র একটি উপকরণই আছে বাছাইয়ের জন্য। অর্থ্যাৎ সেক্ষেত্রে k+1-তম উপকরণই n-তম উপকরণ এবং ঐ একটি উপকরণ বাছাই হবার সম্ভাব্যতা অবশ্যই 1। অর্থ্যাৎ বাছাই করার জন্য মাত্র একটি উপকরণই অবশিষ্ট আছে এবং আমাকে ঐ একটি উপকরণই বাছাই করতে হবে।

দ্বিতীয় সম্ভাব্যতার জন্য তাই k+1-তম বাছাই হবার সম্ভাব্যতা 1। এখন যদি বাছাই করার জন্য k+2-তম উপকরণ উপস্থিত থাকে তাহলে সেটি বাছাই করার সম্ভাব্যতা কত হবে? এই সম্ভব্যতা হিসাব করার জন্য আমাদের সামান্য কৌশলের আশ্রয় নিতে হবে।

k+2-তম উপকরণ বাছাই করার সম্ভাব্যতা হিসাব না করে আমরা k+2-তম উপকরণের বাছাই না হবার সম্ভাব্যতা হিসাব করতে পারি। যেহেতু k+2-তম উপকরণের আগে আরো k+1-সংখ্যক উপাদান আছে তাই k+2-তম উপাদান বাছাই না করে বাকি k+1-সংখ্যক উপকরণের যেকোন একটি বাছাইকরণের সম্ভাব্যতা হবে 1/k+1। এটি হচ্ছে k+2-তম উপকরণের বাছাই না হবার সম্ভাব্যতা। তাহলে 1 থেকে এই সম্ভব্যতা বিয়োগ করলে আমরা পাবো k+2-তম উপকরণের বাছাই হবার সম্ভাব্যতা, এবং সেটি হচ্ছে k/k+1।

ঠিক একইভাবে k+3-তম উপকরণের বাছাই হবার সম্ভাব্যতা k/k+2।

k+4-তম উপকরণের বাছাই হবার সম্ভাব্যতা k/k+3।

n-তম উপকরণের বাছাই হবার সম্ভাব্যতা k/n-1।

এখন k+1-তম উপকরণ থেকে n-তম উপকরণ পর্যন্ত সম্ভাব্যতা হিসেব করলে আমরা পাই

P(k)=(1/n)×1+(1/n)×(k/k+1)+(1/n)×(k/k+2)+(1/n)×(k/k+3)+…+(1/n)×(k/n-1)

এই সম্ভব্যতা রাশি থেকে k/n পৃথক করে নিলে সম্ভাব্যতা দাড়ায়—
P(k)=(k/n)×((1/k)+(1/k+1)+(1/k+2)+(1/k+3)+…+(1/n-1))
উপরের সম্ভাব্যতা রাশিতে k/n থেকে পৃথক করা অংশটুকু আমরা একটি ফাংশনের বিস্তৃতি হিসেবে লিখতে পারি।ফাংশনটি হচ্ছে, f(x)=1/x
এই ফাংশনটিকে আমরা যদি লেখচিত্রের মাধ্যমে প্রকাশ করি তাহলে মোটামুটি নিচের চিত্রর মত একটি চিত্র পাব-
FUNCTION GRAPHচিত্রঃ f(x)= 1/x ফাংশনের লেখচিত্র।

এই ফাংশনে x এর মান যত বেশী হবে আমাদের সম্ভাব্যতার সূত্রটি ততো ভালোভাবে কাজ করবে। অর্থ্যাৎ সম্ভাব্যতার সূত্রের সাহায্যে ভালো ফলাফল পেতে হলে আমাদের উপকরণের সংখ্যা বেশী হতে হবে। এই ফাংশনটিকে k থেকে n পর্যন্ত ইন্টিগ্রেশন করলে আমরা পাই—
∫(1/x), k to n
= [ln(x)]kn
= ln(n)-ln(k)
= ln(n/k)

সুতরাং, সম্ভব্যতা রাশির k/n থেকে পৃথক করা ফাংশনের বিস্তৃতিকে আমরা ln(n/k) দিয়ে প্রকাশ করতে পারি। সেক্ষেত্রে আমাদের সম্ভাব্যতা দাড়ায়—
P(k)=(k/n)×ln(n/k)
k/n-কে যদি আমরা অন্য একটি চলক z দিয়ে প্রতিস্থাপিত করি তাহলে পাই—

P(z)= z×ln(1/z)
P(z)= z×(ln(1)-ln(z))
P(z)= z×(0-ln(z))
P(z)= z×(-ln(z))
P(z)= -z×ln(z)

সম্ভাব্যতার এই ফাংশনটিকে যদি আমরা লেখচিত্রের মাধ্যমে প্রকাশ করি তাহলে নিচের চিত্রের মত একটি চিত্র পাওয়া যাবে—
PROBABILITY FUNCTIONচিত্রঃ সম্ভাব্যতা ফাংশনের লেখচিত্র।

সম্ভাব্যতা ফাংশনের প্রথম ডেরিভেটিভ যে বিন্দুতে শূণ্য হবে, সেই বিন্দুতে সম্ভাব্যতার মান সবচেয়ে বেশী হবে উপরের সম্ভাব্যতার ফাংশনকে প্রথম ডেরিভেটিভ করে আমরা পাই—

P’(z)= -ln(z)-z×(1/z)
P’(z)= -ln(z)-1

প্রথম ভেরিভেটিভের মান P’(z) কে 0 দিয়ে প্রতিস্থাপন করে পাই—

0= -ln(z)-1

এই সমীকরণ থেকে z-য়ের মান পাওয়া যায়—

z= e-1
z= 1/e
z= 0.368…
z~ 0.37

অর্থ্যাৎ z-য়ের মান মোটামুটি 0.37-য়ের সমান। অর্থ্যাৎ আমাদের যদি মোট 100-টি উপকরণ থাকে তাহলে প্রথম 37-টি উপকরণ আমরা পর্যবেক্ষণ করবো। 38-তম উপাদান থেকে 100-তম উপকরণ পর্যন্ত প্রথম যে উপকরণটি আগের 37-টি উপকরণ থেকে তুলনামূলকভাবে ভালো আমরা ঠিক সেই উপকরণটি বাছাই করবো। একইভাবে কোরবানির গরুর হাটে যদি 100-টি গরু থাকে তাহলে প্রথম 37-টি গরু আমরা পর্যবেক্ষণ করবো। এরপরের যে গরুটি আগের 37-টি গরুর চেয়ে ভালো আমরা সম্ভাব্যতার সূত্রের সাহায্যে সেই গরুটিই  কিনবো। এই সূত্রের সাহায্যে দেখানো যায় যে সবচেয়ে ভালো উপকরণটি এই পদ্ধতিতে বাছাইয়ের সম্ভাব্যতা 37%।

উপরের পদ্ধতিটি একটি জনপ্রিয় গাণিতিক সমস্যা।

তথ্যসূত্র এবং চিত্র কৃতজ্ঞতাঃ
১) www.numberphile.com
২) Mathematical Sciences Research Institute 

Shannon Number এবং সম্ভাব্য সর্বমোট দাবা খেলার সংখ্যা!!

দাবা খেলায় সবগুলো সঠিক মুভ হিসেব করলে মোট কত প্রকার দাবা খেলা সম্ভব হতে পারে? অর্থ্যাৎ দাবার গুটিগুলোর সঠিক মুভ বিবেচনা করলে সর্বমোট কতপ্রকার দাবা খেলার অস্তিত্ব থাকতে পারে? খুব সহজ একটি প্রশ্ন, কিন্তু উত্তরটা হয়তো এতো সহজ না।

চিত্রঃ দাবাবোর্ডচিত্রঃ দাবাবোর্ড

চিত্রঃ গণিতবিদ Claude Shannon

চিত্রঃ গণিতবিদ Claude Shannon

গণিতবিদ Claude Shannon একটি অনুমান করেছেন– মোট দাবা খেলার সম্ভাব্য সংখ্যা 10120। কীভাবে? তিনি বেশ কিছু দাবা খেলার প্রকারভেদ হিসেব করে বলেছেন যখন কোন খেলোয়াড় (সাদা অথবা কালো ঘুটি, যেকোন একপাশের খেলোয়াড়) কোন চাল দিবে তখন মোটামুটি গড়ে ৩০ প্রকার চাল দিতে পারবে। সুতরাং অন্যপাশের খেলোয়াড়ও প্রতি মুভে গড়ে ৩০ প্রকার চাল দিতে পারবে।

Shannon আরও হিসেব করেছেন দাবা খেলায় গড়ে উভয় প্রকার খেলোয়াড়ের ৪০টি করে চালে মোট ৪০*২=৮০ চালে খেলা শেষ হয়। ফলে এই গড় হিসেবে সর্বমোট সম্ভাব্য দাবা খেলার সংখ্যা দাড়াবে 3080 টি। যা মোটামুটিভাবে 10120 এর সমান। এটি একটি ভয়াবহ রকমের বড় একটি সংখ্যা। এই সংখ্যাকে Shannon-য়ের নাম অনুসারে Shannon Number বলা হয়।

Shannon Number কত বড় একটি সংখ্যা, সেটি একটু বোঝার চেষ্টা করা যাক। ধরা যাক আমি এমন একটি কম্পিউটার প্রোগ্রাম বানাতে চাই যেটি দাবার চালের সম্ভাব্য সব ধরণের ফলাফল নিয়ে চিন্তা করে কোন চাল দিবে। সেই ধরণের কোন কম্পিউটার কি আদৌ বানানো সম্ভব? আচ্ছা দেখা যাক!!

আমাদের মহাবিশ্বে মোট পরমাণুর সংখ্যা হচ্ছে মোটামুটিভাবে 1080 টিএক বছরে মোটামুটি π*107 সেকেন্ড থাকে। আমাদের মহাবিশ্বের বয়স প্রায় ১৪ বিলিয়ন বছর। অর্থ্যাৎ 14*109 বছর। এখন মহাবিশ্বের প্রতিটি পরমাণু দিয়ে যদি কোন কম্পিউটার বানানো হয় এবং সেই কম্পিউটার যদি যদি বিগ ব্যাংয়ের পর থেকে শুরু করে প্রতি এক সেকেন্ডে 109 টি দাবার সম্ভাব্য দাবার চাল নিয়ে চিন্তা করে, তবুও সে এখন পর্যন্ত সবগুলো চাল পর্যালচনা করতে পারেনি। এখন পর্যন্ত সেটি মোট  14π*1080*1014*109*107= 14π*10110 টি চাল পর্যালোচনা করেছে। যেটি মোট সম্ভাব্য চালের সংখ্যা(10120) থেকে অনেক ছোট।

সুতরাং Shannon Number একটি অত্যন্ত বড় সংখ্যা।

যদিও Claude Shannon দাবা খেলায় চালের সংখ্যা গড়ে ৮০টি ধরে হিসেব করেছেন। কিন্তু যদি আমরা এটা ধরে রাখি যে– যদি কোন বোর্ডের ঘুটি পরাপর তিনবার একই সমাবেশে থাকে অথবা ৫০ টি চাল দেয়ার পরেও কোন পক্ষের কোন ঘুটি খাওয়া যায়নি তাহলে ড্র, তাহলে কোন দাবা খেলায় সর্বোচ্চ চালের সংখ্যা হতে পারে 11800 টি। সবধরণের চালের সংখ্যা হিসেব করে গণিতবিদ Godfrey Hardy(যিনি আরেক মহান গণিতবিদ রামানুজনকে আবিষ্কার করেছিলেন) মোট দাবা খেলার সংখ্যা হিসেব করেছেন 1010^50। Hardy-র এই সংখ্যার কাছে Shannon-য়ের সংখ্যার তুলনা করতে সেটি হবে অনেকটা মহাবিশ্বের সাথে পৃথিবীর কোন ধূলিকণার তুলনা করার মত। তাহলে Hardy-র এই সংখ্যা কত বড় কেউ কি কখনো অনুভব করতে পারবে!!

তথ্যসূত্রঃ
১) Numberphile
২) MIT Opencourseware

হ্যামিং কোডঃ Error Detection ও Correction

ডেটা ট্রান্সমিট করার সময় যদি কোন বিট পজিশনে error থাকে তাহলে Hamming Code-র মাধ্যমে তা detect করা যায় এবং একই সাথে error correction-ও করা যায়। Single bit error ও Burst error- এই দুই ধরনের error-ই Hamming Code-এর সাহায্যে আমরা detect এবং correct করতে পারি। এই নোটে আমরা কেবলমাত্র single bit error-এর ক্ষেত্রে error detection ও correction নিয়ে আলোচনা করবো

ধরা যাক আমরা বাইনারি ডেটা ট্রান্সমিট করছি এবং যেই ডেটা ট্রান্সমিট করছি সেটাঃ 1001101.

অর্থ্যাৎ 7 bit-এর ডেটা। Hamming Code-র মাধ্যমে error detect করার জন্য মূল ডেটার সাথে অতিরিক্ত আরও কিছু ডেটা ট্রান্সমিট করতে হবে, যাদের আমরা বলবো redundant data. এখন প্রশ্ন আসবে 7 bit-য়ের মূল ডেটার সাথে আমরা কয়টা redundant data bit ট্রান্সমিট করবো??

ধরা যাক মূল ডেটার (redundant data ছাড়া) bit সংখ্যা= m
এবং ধরা যাক m সংখ্যক মূল data bit এর জন্য প্রয়োজনীয় redundant data bit সংখ্যা= k
এখানে k হচ্ছে সর্বনিম্ন integer যেটা 2^k > m+k+1 অসমতাকে সিদ্ধ করে।

অর্থ্যাৎ মূল data bit-য়ের সংখ্যা যদি m=7 হয় তাহলে redundant data bit সংখ্যা হবে 4, কারণ 2^4 > 7+4+1 বা, 16 > 12. কিন্তু m=7 এর জন্যে যদি আমরা k=3 বসাতাম  তাহলে 2^3 > 7+3+1 অসমতাটি সিদ্ধ হত না।

ঠিক একইভাবে মূল data bit-য়ের সংখ্যা যদি m=16 হয়, তাহলে redundant data bit সংখ্যা হবে k=5, কারণ 2^5 > 16+5+1 বা 32>22.

এখানে একটা মজার ব্যাপার হচ্ছে Hamming Code-য়ের মাধ্যমে আমি যদি মাত্র একটা bit data ট্রান্সমিট করতে চাই তাহলে আমার redundant bit লাগবে দুইটা। কারণ এক্ষেত্রে অসমতাটি সত্য হবার জন্য m=1 এর জন্য k=2 হতে হতে হবে।

সুতরাং বোঝা যাচ্ছে m=7 bit data ট্রান্সমিট করার জন্য আমার মোট ডেটা ট্রান্সমিট করতে হবে (m+k) bit =(7+4)bit= 11 bit

এখন দ্বিতীয় প্রশ্নটি আসবে, সেটি হচ্ছে redundant data-গুলি আমরা কোন place-য়ে বসাবো?

Redundant data-র placing-টা খুব সিম্পল। n-তম redundant data আমরা বসাবো 2^(n-1) তম পজিশনে। অর্থ্যাৎ প্রথম redundant data bit 2^0=1 পজিশনে, দ্বিতীয় redundant data bit 2^1=2 পজিশনে, তৃতীয় redundant data bit 2^2=4 পজিশনে, চতুর্থ redundant data bit 2^3=8 পজিশনে এভাবে চলতে থাকবে।

তাহলে দেখা যাক redundant data placing-য়ের পরে আমাদের ডেটা ট্রান্টমিট অ্যারে-র অবস্থা কেমন দাড়ালো-

1আমরা জেনেছি কোন কোন পজিশনে মূল ডেটা এবং কোন পজিশনে redundant data আছে। কিন্তু আমরা এখনো জানি না আমাদের redundant data-র bit value গুলো কী কী। সেটা বের করার আগে আমাদের আনুসঙ্গীক আরও কিছু কাজ করতে হবে। যেহেতু আমাদের মোট 11 টি data bit ট্রান্সমিট করতে হবে তাই প্রত্যেকটি redundant data-র জন্য আমাদের bit field-য়ের value গুলো বের করতে হবে। এবং সেই bit field-গুলোর parity check করে আমরা redundant data গুলোর bit value জানতে পারবো।

এখন নিচের চিত্রটি লক্ষ্য করি-

2

 

এখানে প্রথম কলামে bit field-য়ের সংখ্যাগুলি দেওয়া হয়েছে এবং পাশের চারটি কলামে তাদের associated binary value দেওয়া হয়েছে। দেখা যাচ্ছে r1 কলামে 1,3,5,7,9,11 bit position-য়ের bit value 1. তাই r1 এর parity check করার জন্য আমাদের 1,3,5,7,9,11 পজিশনের bit value গুলো বিবেচনায় আনতে হবে। একইভাবে-

r1-> 1,3,5,7,9,11
r2-> 2,3,6,7,10,11
r4-> 4,5,6,7
r8-> 8,9,10,11

এখন r1 এর জন্য উপরে উল্লেখিত bit position গুলো check করি।

3

দেখা যাচ্ছে ঐ bit position গুলোতে মোট 3-টি 1 আছে, অর্থ্যাৎ odd সংখ্যক 1, সুতরাং এর parity 1, সুতরাং r1 position-য়ে 1 বসবে। r1-য়ের bit value placing-য়ের পরে আমরা যে bit transmit array পাই সেটি এরকম-

4

এখন r2 এর জন্য একইভাবে bit position গুলো check করলে আমরা চারটি 1 বা even সংখ্যক 1 পাবো। অর্থ্যাৎ এর parity হবে 0, তাহলে r2-য়ের মান বসিয়ে যে bit sequence-টি আমরা পাই সেটি এরকম—

5

এভাবে r4-য়ের bit value বসিয়ে-

6

এবং সবশেষে r8-য়ের bit value বসিয়ে পাই-

7

এখন আমরা যে 11-টি bit transmit করবো তার সবগুলো value  আমাদের জানা। এই 11 টি data bit যখন sender medium-এ receiver-য়ের উদ্দেশ্য ট্রান্সমিট করবে তখন ধরা যাক bit field-য়ের কোন একটা জায়গায় (মনে করি 7th bit position-এ) error ঘটলো। ফলে 7 bit position-এ receiver 1-এর বদলে 0 receive করলো। এখন আমাদের তৃতীয় প্রশ্ন- receiver কীভাবে error detect করবে??

এক্ষেত্রে receiver প্রথমে r1 এর জন্য 1,3,5,7,9,11 bit position-য়ের জন্য parity check করবে।

8

এক্ষেত্রে 1,3,5,7,9,11 পজিশনে মোট তিনটি 1 আছে, সুতরাং r1 position-য়ে parity 1
আবার একইভাবে r2-য়ের ক্ষেত্রে 2,3,6,7,10,11 পজিশনে তিনটি 1 আছে, তাই r2 position-য়ে parity 1

9

r4-য়ের ক্ষেত্রে 4,5,6,7 পজিশনে একটি 1 আছে তাই r4-য়ের parity 1

10

সবশেষে r8-য়ের ক্ষেত্রে 8,9,10,11 পজিশনে মোট দুইটি 1 আছে তাই r8-য়ের parity 0

11

এখন receiver যখন receiving end-য়ে r8, r4, r2, r1-য়ের এই value গুলো পাবে তখন r8->r4->r2->r1 এই অনুক্রমে একটা bit sequence পাওয়া যাবে, যেটি হচ্ছে আমাদের উদাহরণে 0111. এই binary value যেই decimal value-কে represent করবে সেই bit position-কে faulty বলে নেওয়া হবে। Error detection তো হয়ে গেল, এখন সর্বশেষ সমস্যা হচ্ছে error correction। আমরা যেহেতু single bit error নিয়ে চিন্তা করছি তাই faulty bit position-য়ের bit value-কে complement করে দিলে আমরা যেই bit sequence-টা পাবো সেটি receiver end-য়ে corrected bit sequence হিসেবে accepted হবে।