জেনেটিক প্রোগ্রামিং [বন্ধ]


13

আমি সম্প্রতি রেডডিট ব্রাউজ করছি এবং একটি "জাভাস্ক্রিপ্ট জেনেটিক অ্যালগরিদম" উদাহরণের সাথে লিঙ্ক করে একটি পোস্ট জুড়ে এসেছি। আমি জেনেটিক অ্যালগরিদম এবং প্রোগ্রামিংয়ের ধারণাগুলিতে সত্যিই মুগ্ধ হয়েছি, যদিও কিছু গুগলিংয়ের পরেও আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি। এটা কিভাবে কাজ করে?

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


1
"এআই টেকনিক্স ফর গেম প্রোগ্রামিং" নামে পরিচিত ম্যাট বাকল্যান্ডের একটি ভাল বই রয়েছে ( অ্যামাজন / টেকনিক্সস-প্রোগ্রামিং- প্রিমিয়ার- প্রেসার-ডেভেলপমেন্ট / ডিপি / )) বইটির অর্ধেক জিনগত অ্যালগরিদমকে অন্তর্ভুক্ত করেছে। বইটির শিরোনামটি কিছুটা মিসনোমার, এটি জিএ এবং নিউরাল নেট সম্পর্কিত একটি বই। এটি বিষয়টিতে একটি দুর্দান্ত ভূমিকা।
স্টিভেন এভার্স

উত্তর:


19

আপনি জেনেটিক অ্যালগরিদম সম্পর্কে জেনেটিক প্রোগ্রামিংয়ের চেয়ে বেশি কথা বলছেন এমন মনে হচ্ছে তবে আপনার বোঝার জন্য আমার অবদান এখানে।


জিএগুলি যে অংশগুলির দ্বারা রচিত সেগুলি বিবেচনা করা সহজ hand

সুতরাং আসুন আপনি কিছু সমস্যা আছে বলে যাক। আপনার প্রথমটি প্রয়োজন যা সমাধানটি দেখতে কেমন তা প্রকাশ করার একটি উপায়। যদি আপনার A, B, C, D, E শহরগুলির সাথে ভ্রমণ ভ্রমণকারী সমস্যা থাকে তবে আপনি ইতিমধ্যে জানেন যে কোনও সমাধান কী হতে পারে, [বি, সি, এ, ডি, ই] শহরের নামের একটি অ্যারে।

এই জিন

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

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

এটি ফিটনেস ফাংশন

সুতরাং এখন আপনি একটি সম্ভাব্য সমাধান নিতে পারেন এবং এটি কোনও ভাল কিনা তা খুঁজে বের করতে পারেন। এরপর কি?

পরবর্তী আমাদের আমাদের প্রথম প্রজন্ম শুরু করা দরকার। সুতরাং আমরা একগুচ্ছ এলোমেলো সমাধান উত্পন্ন করি। তারা ভাল আছে বা না তা বিবেচ্য নয়। এটি আপনার প্রাথমিক বা বীজ, জনসংখ্যা। আপনি এটিকে আপনার জিন পুল বলতে পারেন।

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

ভিজ্যুয়ালাইজ করা সহজ এমন একটি উপায় বাছাই করার সহজ উপায়: প্রতিটি জিন হ'ল চক্রের একটি স্লাইস এবং তাদের ফিটনেস স্কোরটি ইঙ্গিত করে যে তাদের স্লাইসটি কত বড় (ফিটনেসটি আরও ভাল, বৃহত্তর স্লাইস)। চাকাটির দিকে নির্দেশ করে একটি পিন রাখুন এবং এটিকে একটি স্পিন দিন (অর্থাত্ একটি এলোমেলো সংখ্যা তৈরি করুন)। পিনটি প্রথম পিতামাতাকে নির্দেশ করে। এটি দ্বিতীয় পিতামাতার জন্য আবার করুন।

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

আপনার এই নতুন প্রজন্মটি একবার হয়ে গেলে, আপনি প্রতিটি শিশুকে এলোমেলো, তবু বিরল , রূপান্তর in আমি প্রায়শই দেখেছি যে পরিবর্তনের হার 1% এরও কম হয়। পরিব্যক্তি ফাংশন এলোমেলোভাবে আপনার এনকোডেড জিনের কিছু পরিবর্তন করতে হবে। যদি আপনার জিনটি কিছুটা স্ট্রিং হয় তবে এটি কিছুটা অদলবদল করতে পারে, যদি এটি শহরগুলির একটি অ্যারে হয় তবে এটি তালিকার 2 টি শহরকে অদলবদল করতে পারে। গুরুত্বপূর্ণ অংশটি হ'ল এটি তুলনামূলকভাবে বিরল ঘটনা এবং জিনিসগুলিকে মিশ্রিত করে।

পছন্দসই সংখ্যক প্রজন্মের আগ পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি করুন বা আপনার ফিটনেস ফাংশনটি নিয়মিত উচ্চ ফিটনেস স্কোর সহকারে পিতামাতাকে তৈরি না করে এবং আপনার কাছে এমন একটি সমাধান রয়েছে যা (আশা করি, আপনি যদি সবকিছু ঠিকঠাক করে থাকেন) অনুকূল হন।


এটি কিছুটা কথামূলক ছিল, সুতরাং আমি একটি রূপকের সাথে সংক্ষিপ্ত করে বলি:

  1. জিন হ'ল লোকৰ সমস্যা সমাধান হয়
  2. ফিটনেস ফাংশন গ্রেড হয়: লোকেরা কতটা সমস্যা সমাধান করে তার উপর ভিত্তি করে গ্রেড পায়
  3. আপনি একটি নতুন জনসংখ্যার প্রজননের জন্য 2 জন ব্যক্তি নির্বাচন করেছেন: আপনি আরও ভাল গ্রেডযুক্ত লোকদের প্রজননের আরও ভাল সম্ভাবনা প্রদান করেন
  4. বাবা-মা যখন প্রজনন করেন, তখন তারা একত্রিত হয়ে সন্তান জন্ম দেয় produce
  5. আপনি খুব কমই এবং এলোমেলোভাবে তাদের বাচ্চাদের পরিবর্তন করতে পারেন
  6. আপনি নতুন জনসংখ্যার শিশুদের গ্রেড করুন
  7. পাখলান পুনরাবৃত্তি

আশাকরি এটা সাহায্য করবে.


এটি একটি দুর্দান্ত ব্যাখ্যা। আমি সবসময় ভেবেছিলাম জেনেটিক অ্যালগরিদমগুলি ডারউইনিয়ান অ্যালগরিদম বা বিবর্তনীয় অ্যালগরিদম হিসাবে আরও ভালভাবে বর্ণনা করা হয়েছে তবে "জেনেটিক" অবশ্যই মেকানিক্সকে আরও ভালভাবে বর্ণনা করে (যদি এটির সামগ্রিক ধারণা না হয়)। আমি তাদের ডারউইনীয় জেনেটিক অ্যালগরিদম বলব।
স্টিভেন লু

কনওয়ের জীবনের খেলা কী জেনেটিক অ্যালগরিদম?
ফ্লোরিয়ান মার্জাইন

@ ফ্লোরিয়ান মার্জাইন: গেম অফ লাইফ একটি সেলুলার অটোমেটন, একটি সম্পর্কহীন ধারণা (জীবনের খেলা সম্পূর্ণরূপে নির্বিচারক, এবং জিএ স্টোকাস্টিক হলেও এটি শুরু হয়)।
scrwtp

1
এটি হ'ল, আমি কখনও শুনেছি জিএর একক শ্রেষ্ঠ ব্যাখ্যা। আমি অতীতে জেনেটিক অ্যালগরিদমগুলি একাধিক অনুষ্ঠানে উল্লেখ করেছি, সাধারণত অফহান ব্যাখ্যার সাথে, তবে সত্যই বুঝতে পারি নি যে তারা এখন পর্যন্ত কী ছিল। ধন্যবাদ!
লক করুন

আমি যখন এই প্রথম জিএএস শিখতে শুরু করি তখন আমি এই ব্যাখ্যাটি দেখতে পেতাম!
অভ্রোহম ইয়িসরোয়েল

7

বিট-স্ট্রিং হিসাবে কোনও সমস্যার সমাধান এনকোড করুন

একটি ফাংশন লিখুন (যাকে "ফিটনেস" ফাংশন বলা হয়) যা এনকোডযুক্ত সমাধানটিকে কীভাবে 'বিট' স্ট্রিং দেওয়া হয় তা মূল্যায়ন করে - ফলাফলটি সাধারণত 0 এবং 1 এর মধ্যে একটি সংখ্যা হয়

এলোমেলোভাবে এই বিট-স্ট্রিংগুলির একটি গুচ্ছ উত্পাদন করে এবং তাদের ফিটনেসটি মূল্যায়ন করে

কিছু গোছা বেছে নিন - সাধারণত বেশি ফিট-করে - এবং কিছু নতুন বিট-স্ট্রিং (ক্রসওভার) তৈরি করতে তাদের অর্ধেক এবং অদলবদল করে কেটে নিন them

তারপরে কখনও কখনও, কিছু নতুন বিট-স্ট্রিংগুলিতে এলোমেলোভাবে কিছু বিট ফ্লিপ করুন (মিউটেশন)

একটি ভাল সমাধান বিকশিত না হওয়া পর্যন্ত পুনরাবৃত্তি করুন

কেন এটি করবেন: কিছু সমস্যার সম্ভাব্য সমাধানের বিশাল জায়গা রয়েছে, এত বড় যে সমস্ত সম্ভাবনার মূল্যায়ন করা অবৈজ্ঞানিক (সিএফ ট্র্যাভেলিং সেলসম্যান প্রবলেম)

আমি জেনেটিক অ্যালগরিদমস অনুসন্ধান, অপ্টিমাইজেশন এবং মেশিন লার্নিংয়ে বইটি সুপারিশ করছি


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

চ্যালেঞ্জ: জেনেটিক অ্যালগরিদম হিসাবে উত্তরটি পুনরায় চালু করুন। [-:
বোকা

@ ডেভিড লিঙ্ক যুক্ত হয়েছে; 1989 এ প্রকাশিত হয়েছে সুতরাং এখন আরও ভাল হতে পারে তবে এইটি ভালভাবে ব্যাখ্যা করেছে
স্টিভেন এ লো লো

1
@ গেমসফুলিশ: প্রথমে প্রশ্নটিকে একটি সীমাবদ্ধ পৃথক স্থান-সমাধান হিসাবে পুনঃস্থাপন করুন
স্টিভেন এ লো লো

@ ডেভিড জেনেটিক অ্যালগরিদমগুলি কৃত্রিম বুদ্ধিমত্তা সম্পর্কে বৃহত্তর বইয়ের একটি বা দুটি অধ্যায় হতে পারে।
ব্যারি ব্রাউন

6

জেনেটিক প্রোগ্রামিং আপনার জন্য কম্পিউটার রাইটিং প্রোগ্রাম রাখার একটি উপায়!

এমএস ওয়ার্ডের মতো "প্রোগ্রাম" ভাবেন না, "প্রোগ্রামগুলি" কে নিম্নলিখিত হিসাবে ভাবেন:

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")(অনেক অন্যদের মধ্যে)।

সমীকরণগুলি বিকশিত হওয়া বেশ বিরক্তিকর। যদি আপনার টার্মিনাল সেটটি নিম্নলিখিতগুলির মতো দেখায় তবে এটি আরও আকর্ষণীয় হয়ে উঠবে: (আগুন, সংবেদনশীল শত্রু, পদক্ষেপ, ...) এবং আপনার ফিটনেস ফাংশনটি আপনার স্বাস্থ্য এবং মার্শাল দানবগুলির মৃতদেহের সংখ্যার পরিমাপ করে।

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


1

ফিটেস্টের বেঁচে থাকা: উইন্ডোজ ফর্মগুলির সাথে প্রাকৃতিক নির্বাচন ছিল আমি জেনেটিক প্রোগ্রামিংয়ের সাথে কীভাবে পরিচিতি পেয়েছি। এটি ডাউনলোডের জন্য উপলব্ধ কোড সহ একটি সহজ পাঠ্য। খারাপ দিকটি হ'ল রানটাইমের সময় তৈরি করা কোড কার্যকর করার জন্য জিপি-র একটি মাধ্যমের প্রয়োজন হয় এবং নিবন্ধটি লেখার সময় সি # এই কাজের পক্ষে খুব উপযুক্ত ছিল না। এই কারণেই উদাহরণটি কোড-ডম ব্যবহার করে রান-টাইমে কোড উত্পন্ন, সংকলন এবং রান করার জন্য ব্যবহার করে, যা নিজেই এটিতে জটিলতার আরও একটি স্তর যুক্ত করে।

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

এখানে আপনি জিপিতে একটি ফ্রি ইবুক ডাউনলোড করতে পারেন, এতে খুব সংক্ষিপ্ত জাভা কোড উদাহরণ রয়েছে যা আপনি আকর্ষণীয়ও বোধ করতে পারেন।


-1

জেনেটিক অ্যালগরিদম এবং জেনেটিক প্রোগ্রামিং সম্পর্কিত, তবে বিভিন্ন ধারণা।

জেনেটিক অ্যালগরিদম (জিএ) জটিল অপ্টিমাইজেশান সমস্যার জন্য অনুসন্ধান অ্যালগরিদম। জিএ-তে আপনি "ডিএনএ" বিটস্ট্রিং-এ কিছু সমস্যার সমাধানের প্যারামিটারগুলি এনকোড করেন, তারপরে এলোমেলোভাবে এই বিটস্ট্রিংগুলিকে "বংশবৃদ্ধি" করুন: সেগুলির অংশগুলি একত্রিত করে পুনরুত্পাদন করুন এবং সমস্ত বিটস্ট্রিংগুলি মুছে ফেলে "ফিস্টেস্টের বেঁচে থাকা" প্রয়োগ করুন আপনার সমস্যা সমাধানের ক্ষেত্রে সবচেয়ে ভাল যেগুলি রয়েছে তা ছাড়া আপনি পেয়েছেন।

জেনেটিক প্রোগ্রামিং (জিপি) আরও জটিল: এখানে, আপনি তাদের ডিএনএ (বিটস্ট্রিংস) দ্বারা প্রোগ্রামগুলি উপস্থাপন করেন না, তবে যে গাছগুলি আপনার বংশবৃদ্ধি এবং নির্বাচন করেছেন তা পার্স করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.