জেনেটিক প্রোগ্রামিং আপনার জন্য কম্পিউটার রাইটিং প্রোগ্রাম রাখার একটি উপায়!
এমএস ওয়ার্ডের মতো "প্রোগ্রাম" ভাবেন না, "প্রোগ্রামগুলি" কে নিম্নলিখিত হিসাবে ভাবেন:
function(x){ return x*2; }
এই ফাংশন (বা প্রোগ্রাম) নিজে থেকেই, এর অস্তিত্বের কোনও কারণ নেই। আমরা সমস্যার সমাধান খুঁজছি। আপনার যদি দুটি সংখ্যার যোগফল খুঁজতে হয় তবে আপনি কেবল ক্যালকুলেটরটি খোলেন এবং গণিতটি করুন। কি হবে যদি কেউ আপনাকে নিম্নলিখিত টেবিলে দিয়েছেন মধ্যে সম্পর্ক জিনিসটা আপনাকে জিজ্ঞাসা result
এবং x
এবং y
:
x y result
99 1 (3.02)
79 88 2.01
21 62 5.01
84 52 (6.58)
12 70 5.54
67 18 0.73
এই ডেটাটি আপনার "প্রশিক্ষণ" ডেটা। আপনার কম্পিউটারটি এই ডেটাটি কিছু অনুমান তৈরি করার জন্য ব্যবহার করবে, তারপরে আপনি এটি প্রকৃত ডেটার বিপরীতে পরীক্ষা করবেন।
বলুন যে আপনি পরিসংখ্যান জানেন না এবং সিদ্ধান্ত নিন যে এই সমস্যাটি নিজেরাই নির্ধারণ করা খুব কঠিন, সুতরাং আপনি কম্পিউটারটি এটি খুঁজে বের করার জন্য পেয়ে যাবেন।
কম্পিউটার এলোমেলোভাবে বন্য অনুমান উত্পন্ন করুন
আপনার কাছে কম্পিউটারে এক মিলিয়ন উত্তর জেনারেট হয়েছে এবং দেখুন তাদের কোনও আটকে আছে কিনা (অনুমান ... এক মিলিয়ন বার!)। কয়েকটি অনুমানের উদাহরণ নিম্নলিখিত:
function(x,y){ return x+y; } // wrong
function(x,y){ return x/1*1*1*1*1*1+y; } //wrong, silly
আপনি এটি জানেন বা নাও জানেন, তবে ফাংশন বা প্রোগ্রামগুলি গাছ হিসাবেও উপস্থাপন করা যেতে পারে, উদাহরণস্বরূপ, দ্বিতীয় কার্যটি হ'ল:
(+ (/ x (* 1 (* 1 (* 1 (* 1 (* 1 1)))) y)
আপনি এটিকে গাছের মতো এডেন্ট্ট করে আরও বেশি দেখতে পারেন (বিটিডাব্লু, বিপরীত পোলিশ নোটেশন এবং লিস্প সিনট্যাক্স দেখুন ... তবে আপনি বুঝতে পারবেন কেন আমরা শীঘ্রই এর মতো প্রোগ্রামগুলিকে প্রতিনিধিত্ব করি):
(+
(/ x
(* 1
(* 1
(* 1
(* 1
(* 1 1))))
y)
( +
দুই "পাতার" সঙ্গে শীর্ষে /
এবং y
। /
নিজেই, বিভিন্ন সন্তান রয়েছে ইত্যাদি)
এই কারণেই আপনি জেনেটিক প্রোগ্রামিংয়ে "গাছ" সম্পর্কে এত বেশি পড়েন। যাই হোক, আমরা মান প্লাগ ইন x
এবং y
এই ফাংশন মধ্যে এবং এটা আমাদের ভুল উত্তর দেয়। যদিও আমরা এলোমেলোভাবে এটি তৈরি করেছি তা অবাক হওয়ার মতো নয়।
আপনি এখন এই জাতীয় এক মিলিয়ন সমাধান উত্পন্ন করার সিদ্ধান্ত নিয়েছেন। সবই ভুল। তবে, আপনি লক্ষ্য করেছেন যে কিছু উত্তর অন্যের তুলনায় সঠিক উত্তরের নিকটে রয়েছে। অন্য কথায়, কিছু সমাধান অন্যের চেয়ে "ফিট"। নোট করুন যে কম্পিউটারটি "সঠিক" এবং "ভুল" কী তা জানেন না তাই আপনাকে নিজের "ফিটনেস ফাংশন" সরবরাহ করতে হবে। এই ফাংশনটি একটি সম্ভাব্য সমাধান, প্রশিক্ষণের ডেটা হস্তান্তরিত করে, এবং জিপি সিস্টেমটিকে এই সমাধানটি কতটা "ফিট" করার জন্য দায়ী। আপনি যেমন কল্পনা করতে পারেন, এই ফাংশনটি কয়েক মিলিয়ন বারে চালিত হয়।
জিপি কে কী আলাদা করে তোলে
বংশানুক্রমিক অনুমানগুলি থেকে জিনগত প্রোগ্রামিংকে আলাদা করে তোলে Here আপনি আরও লক্ষ লক্ষ অনুমানের সিদ্ধান্ত নেবেন; তবে, আপনি এটি কিছুটা বুদ্ধিমানের সাথে করেন do আপনি অনুমানের শীর্ষ 10% (প্রকৃত মানগুলির সাথে বন্ধ ছিল এমনগুলি) নেন এবং তাদের দ্বিতীয় প্রজন্মের অংশ করেন make আপনি এই সমাধানগুলির অনেকগুলিও গ্রহণ করেন (সম্ভবত একই 10% ... আমার মনে নেই) এবং "সেগুলি মিশ্রিত করার" সিদ্ধান্ত নিয়েছেন।
আপনি এলোমেলোভাবে দুটি সমাধান বাছুন, এলোমেলোভাবে উপ-গাছগুলি বেছে নিন এবং সেগুলি অদলবদল করতে শুরু করুন। সমাধানের অংশটি বি এর বিপরীতে শেষ হয় এবং এর বিপরীতে - আপনি কেবল তাদের "ক্রস" করেছেন। আপনি কিছু সমাধানও নেন এবং কেবল তাদের "পরিবর্তিত" করুন ... কিছু সাবট্রি নিন এবং কিছুটা 'স্ক্রু আপ' করুন (আরে, সমাধানটি যদি ভয়ঙ্কর হয় তবে 'অকারণে এটি নিয়ে স্ক্রু করা' আসলে এটি উন্নত করতে পারে)।
এটির চিন্তাভাবনার একটি ভাল উপায় নিম্নলিখিতটি: আপনার মা এবং বাবার কিছু নির্দিষ্ট বৈশিষ্ট্য রয়েছে - চুলের রঙ, উচ্চতা, রোগের সম্ভাবনা ইত্যাদি, আপনি শিশু হিসাবে আপনার পিতা-মাতার উভয়ের থেকে আলাদা আলাদা বৈশিষ্ট্যের অধিকারী হন। যদি আপনার বাবা-মা দুজনেই অলিম্পিক অ্যাথলেট ছিলেন তবে আপনিও একজন সুপার অ্যাথলিট হবেন, তাই না? ঠিক আছে, জীববিজ্ঞানী, সমাজবিজ্ঞানী এমনকি ইতিহাসবিদরা এই ধারণাটি নিয়ে আসতে পারেন, তবে কম্পিউটার বিজ্ঞানীরা এখানে ইউজানিক্সের নৈতিকতার সাথে উদ্বিগ্ন নন। তারা সবেমাত্র একটি "সিস্টেম" দেখেছিল যে সমাধান প্রদানের জন্য বেশ ভাল কাজ করছে, তাই তারা এটি সফ্টওয়্যারে মডেল করার সিদ্ধান্ত নিয়েছে।
যদি এটি বাস্তবে জীববিজ্ঞানের সাথে মেলে না, তবে এখনও ভাল উত্তর সরবরাহ করে ... অনেক কম্পিউটার বিজ্ঞানী সম্মিলিতভাবে "যাই হোক না কেন ডায়াড, এবং পরিভাষার জন্য ধন্যবাদ" বলে থাকেন। এছাড়াও মনে রাখবেন যে আপনার সমস্ত ভাই-বোন এবং ঠিক একই রকম নয় ... এমনকি তাদের পিতা-মাতাও রয়েছে। প্রতিটি ব্যক্তির জিন থাকে যা কোনও কারণেই পরিবর্তিত হয় (দয়া করে এটি কোনও জীববিজ্ঞানীর কাছে দেখাবেন না, মূল বিষয়টি হল পরিভাষার অনেকাংশের পিছনে অনুপ্রেরণা বোঝার জন্য)।
সুতরাং এখন আমরা লক্ষ লক্ষ প্রোগ্রাম উত্পন্ন করার জন্য কম্পিউটারটি পাচ্ছি এবং তাদের ফিটনেস পরিমাপ করছি। সেরা সমাধান পরবর্তী প্রজন্মের মধ্যে টিকে আছে। আমরা "পরিবর্তন" করি এবং "জনসংখ্যার" উপর ক্রসওভার করি (লক্ষ করুন কীভাবে জেনেটিক্স এবং জীববিদ্যার ভাষা ব্যবহৃত হচ্ছে)। দ্বিতীয় প্রজন্মটি তৈরি হয়ে গেলে, ফিটনেসটি আবার পরিমাপ করা হয়। যেহেতু পূর্ববর্তী প্রজন্মের থেকে এই প্রজন্মের সর্বোত্তম সমাধান রয়েছে এবং আমরা সর্বোত্তম সমাধানগুলি পেরিয়েছি এবং পরিবর্তিত করেছি (সাধারণ জনসংখ্যার পাশাপাশি - বৈচিত্র্য বজায় রাখতে), তাই এই প্রজন্মটি আগের প্রজন্মের চেয়ে কমপক্ষে একটু ভাল হওয়া উচিত better
আমরা প্রজন্মের একটি বিশাল সংখ্যক জন্য এটি অবিরত। প্রতিটি প্রজন্ম (আশা করি) আরও ভাল এবং আরও ভাল সমাধান সরবরাহ করে, যতক্ষণ না আমরা সঠিক উত্তর পাই। উদাহরণ স্বরূপ:
(+ (- 2.2 (/ x 11) (* 7 (cos y))))
ভাল এই দেখুন, এটি সঠিক!
(আমি এটি http://en.wikedia.org/wiki/ জেনেটিক_প্রগ্রামিং থেকে অনুলিপি করেছি , যার এই গাছের গ্রাফিক উপস্থাপনা রয়েছে)
টুকিটাকি
কিছু গুরুত্বপূর্ণ বিষয়, কিভাবে আপনি স্থির করবেন যেটি "টার্মিনাল" মত হয় ( +, -, *, /, cos, sin, tan
) আপনার জিপি সিস্টেম, কিভাবে আপনি সুস্থতা কার্যকারিতা লিখে না করার জন্য পাওয়া যায় কিভাবে যেমন করে সিস্টেম হ্যান্ডেল অ sensical প্রোগ্রাম (1 + cos)
বা (2 / "hello")
(অনেক অন্যদের মধ্যে)।
সমীকরণগুলি বিকশিত হওয়া বেশ বিরক্তিকর। যদি আপনার টার্মিনাল সেটটি নিম্নলিখিতগুলির মতো দেখায় তবে এটি আরও আকর্ষণীয় হয়ে উঠবে: (আগুন, সংবেদনশীল শত্রু, পদক্ষেপ, ...) এবং আপনার ফিটনেস ফাংশনটি আপনার স্বাস্থ্য এবং মার্শাল দানবগুলির মৃতদেহের সংখ্যার পরিমাপ করে।
আমি এগুলির বেশিরভাগ স্মৃতি থেকে লিখেছি তবে এটি মূল ধারণা। আমি আমার কলেজ বছরগুলিতে কিছু জিপি করেছি। এটি অবশ্যই আপনার সাথে খেলা উচিত। সমস্ত পরিভাষা বোঝার বিষয়ে চিন্তা করবেন না, কিছু ফ্রি জিপি সিস্টেম ডাউনলোড করুন, এটির জন্য অনুভূতি অর্জনের জন্য কয়েকটি উদাহরণ দিয়ে চালান এবং আপনার নিজের আকর্ষণীয় উদাহরণগুলি তৈরি করুন (বিভিন্ন ডেটা সেটগুলির মধ্যে সম্পর্ক সন্ধান করুন, এটিকে খেলাতে আঁকতে চেষ্টা করুন) এপিআই, ইত্যাদি)