প্রশ্নের প্রকৃতির কারণে, আমাকে প্রচুর পটভূমি তথ্য অন্তর্ভুক্ত করতে হবে (কারণ আমার প্রশ্নটি: আমি কীভাবে এটিকে সংকীর্ণ করব?) যে বলেছিল, এটি সংক্ষিপ্ত করে দেওয়া যেতে পারে (আমার জ্ঞানের সেরা হিসাবে):
চূড়ান্তভাবে বড় সমন্বয়যুক্ত অনুসন্ধানের জায়গাগুলিতে স্থানীয় সর্বোত্তম খুঁজে পেতে কোন পদ্ধতি বিদ্যমান?
পটভূমি
টুল-অ্যাসিস্টড সুপারপ্লে সম্প্রদায়ে আমরা কিছু ব্যয় (সাধারণত সময়-সমাপ্তি) হ্রাস করার জন্য একটি ভিডিও গেম কনসোল বা এমুলেটরকে বিশেষভাবে তৈরি (রিয়েল-টাইমে উত্পন্ন নয়) ইনপুট সরবরাহ করতে দেখি। এটি বর্তমানে যেভাবে করা হয় তা হ'ল গেমের ফ্রেম-বাই-ফ্রেম খেলা এবং প্রতিটি ফ্রেমের জন্য ইনপুট নির্দিষ্ট করে দেওয়া, প্রায়শই রানের অংশগুলি বহুবার পুনরায় করা হয় (উদাহরণস্বরূপ, দ্য লিজেন্ড অফ জেল্ডার জন্য সম্প্রতি প্রকাশিত রান : টাইম অফ ওকারিনা রয়েছে) মোট 198,590 পুনরায় চেষ্টা করুন)।
এই রানগুলি তাদের লক্ষ্য অর্জন করা সাধারণত দুটি প্রধান কারণের মধ্যে নেমে আসে: রুট-পরিকল্পনা এবং ট্র্যাভারসাল। পূর্ববর্তীটি পরবর্তীকালের চেয়ে অনেক বেশি "সৃজনশীল" is
গেমটি সম্পূর্ণ করতে খেলোয়াড়কে সামগ্রিকভাবে কীভাবে নেভিগেট করা উচিত এবং তা প্রায়শই রানের সবচেয়ে গুরুত্বপূর্ণ অংশ তা নির্ধারণ করে রুট-প্ল্যানিং। উদাহরণস্বরূপ, কোনটি বাছাইয়ের পদ্ধতিটি বেছে নেওয়ার ক্ষেত্রে এটি সাদৃশ্য। বিশ্বের সেরা বুদ্বুদ সাজানোর জন্য কেবল 1 মিলিয়ন উপাদানগুলিতে দ্রুত সাজানোর চেয়ে কার্যকর হতে পারে না।
পরিপূর্ণতার জন্য, তবে ট্র্যাভারসাল (রুটটি কীভাবে পরিচালনা করা হয়) এটিও একটি বিশাল কারণ। উপমা চালিয়ে যাওয়া, এভাবেই বাছাই করা অ্যালগরিদম বাস্তবায়ন করা হয়। কিছু রুট এমনকি ইনপুট খুব নির্দিষ্ট ফ্রেম ছাড়া সম্পাদন করা যাবে না। এটি সরঞ্জাম-সহায়তা করার জন্য সবচেয়ে ক্লান্তিকর প্রক্রিয়া এবং এটি একটি সম্পূর্ণ রান উত্পাদন করতে কয়েক মাস বা এমনকি কয়েক বছর সময় নেয়। এটি কোনও কঠিন প্রক্রিয়া নয় (কোনও মানুষের কাছে) কারণ এটি একই ধারণাটির বিভিন্ন প্রকারের চেষ্টা করতে আসে যতক্ষণ না কাউকে সেরা হিসাবে বিবেচনা করা হয়, তবে মানুষ কেবল তাদের মনোযোগ-বিস্তারে এতগুলি ভিন্নতার চেষ্টা করতে পারে। এই কাজে মেশিনের প্রয়োগ এখানে যথাযথ বলে মনে হয়।
এখন আমার লক্ষ্য হ'ল নিন্টেন্ডো 64 সিস্টেমের জন্য ট্র্যাভারসাল প্রক্রিয়াটি সাধারণভাবে স্বয়ংক্রিয় করার চেষ্টা করা । অনুসন্ধান এই সমস্যার জন্য স্থান পর্যন্ত খুব বলপূর্বক পদ্ধতির আক্রমণ করতে বড়। একটি N64 রানের একটি এন-ফ্রেম বিভাগে 2 30n সম্ভাব্য ইনপুট রয়েছে, যার অর্থ হ'ল ইনপুট মাত্র 30 ফ্রেম (30FPS এ একটি সেকেন্ড) 2 900 সম্ভাব্য ইনপুট রয়েছে; এই সম্ভাব্য সমাধানগুলি পরীক্ষা করা অসম্ভব, পুরো দুই ঘন্টা চালানোর জন্য এগুলি ছেড়ে দিন।
যাইহোক, আমি চেষ্টা করতে আগ্রহী নই (বা বরং, এমনকি চেষ্টা করার চেষ্টাও করছি না) সম্পূর্ণ রানের মোট বিশ্বব্যাপী অপ্টিমাইজেশন। বরং, আমি চাই, ইনিশিয়াল ইনপুট দেওয়া আনুমানিক স্থানীয় একটি নির্দিষ্ট জন্য সর্বোত্তম সেগমেন্ট একটি রান (অথবা নিকটতম এন স্থানীয় আনুকূল্য আধা বিশ্বব্যাপী অপ্টিমাইজেশান কেমন জন্য,) । এটি হল, একটি রুট এবং সেই রুটের প্রাথমিক ট্র্যাভারসাল দেওয়া: ব্যয় হ্রাস করতে সেই ট্র্যাভ্যাসালের প্রতিবেশীদের অনুসন্ধান করুন, তবে সমস্যাটি সমাধান করতে পারে এমন সমস্ত ক্ষেত্রে চেষ্টা করার চেষ্টা করবেন না।
আমার প্রোগ্রামটি তাই আরম্ভের রাষ্ট্র গ্রহণ করা উচিত, একটি ইনপুট স্ট্রিম, একটি মূল্যায়ন ফাংশন এবং মূল্যায়নের ফলাফলকে হ্রাস করে স্থানীয় সর্বোত্তমকে আউটপুট দেয়।
বর্তমান অবস্থা
বর্তমানে আমি সমস্ত কাঠামো যত্ন নেওয়া আছে। এর মধ্যে এমুলেটর, সেটআপ এবং টিয়ারডাউন, কনফিগারেশন ইত্যাদির হেরফেরের মাধ্যমে একটি ইনপুট স্ট্রিমের মূল্যায়ন অন্তর্ভুক্ত থাকে এবং প্রকারের স্থানধারক হিসাবে, অপ্টিমাইজারটি একটি খুব বেসিক জেনেটিক অ্যালগরিদম। এটি কেবলমাত্র ইনপুট স্ট্রিমের একটি জনসংখ্যার মূল্যায়ন করে, বিজয়ীকে সঞ্চয় / প্রতিস্থাপন করে এবং বিজয়ীর স্ট্রিমকে পরিবর্তিত করে একটি নতুন জনসংখ্যা উত্পন্ন করে। সময় বা প্রজন্মের মতো কিছু স্বেচ্ছাচারিত মানদণ্ড পূরণ না হওয়া পর্যন্ত এই প্রক্রিয়া অব্যাহত থাকে।
নোট করুন যে এই প্রোগ্রামের ধীরতম অংশটি এখন পর্যন্ত কোনও ইনপুট স্ট্রিমের মূল্যায়ন হবে । এর কারণ এটি এন ফ্রেমের জন্য গেমটি অনুকরণ জড়িত । (আমার যদি সময় থাকে তবে আমি আমার নিজস্ব এমুলেটর লিখতাম যা এই ধরণের স্টাফগুলিতে হুক সরবরাহ করেছিল, তবে আপাতত আমি বার্তা সংশ্লেষিত করতে এবং অন্য প্রক্রিয়া থেকে বিদ্যমান এমুলেটারের জন্য মেমরি সংশোধন করে রেখেছি) আমার মূল কম্পিউটারে, যা মোটামুটি আধুনিক, 200 ফ্রেমের মূল্যায়ন করতে প্রায় 14 সেকেন্ড সময় লাগে। যেমন, আমি একটি অ্যালগরিদম পছন্দ করি (পছন্দটি দেওয়া) যা ফাংশন মূল্যায়নের সংখ্যা হ্রাস করে।
আমি ফ্রেমওয়ার্কে একটি সিস্টেম তৈরি করেছি যা একই সাথে এমুলেটর পরিচালনা করে। যেমন আমি লিনিয়ার পারফরম্যান্স স্কেল দিয়ে এক সাথে অনেকগুলি স্ট্রিমের মূল্যায়ন করতে পারি , তবে ব্যবহারিকভাবে বলতে গেলে চলমান ইমুলেটরগুলির সংখ্যা কেবল 8 থেকে 32 (এবং 32 সত্যিই এটি চাপ দিচ্ছে) সিস্টেমের কর্মক্ষমতা খারাপ হওয়ার আগেই হতে পারে। এর অর্থ (পছন্দ অনুযায়ী দেওয়া), একটি অ্যালগরিদম যা কোনও মূল্যায়ন হওয়ার সময় প্রক্রিয়াজাতকরণ করতে পারে তা অত্যন্ত উপকারী হবে, কারণ কোনও মূল্যায়নের জন্য অপেক্ষা করার সময় অপ্টিমাইজার কিছু ভারী-উত্তোলন করতে পারে।
একটি পরীক্ষা হিসাবে, আমার মূল্যায়ন ফাংশন (গেম ব্যাঞ্জো কাজুয়ির জন্য ) প্রতি ফ্রেমে প্রতি খেলোয়াড় থেকে গোল পয়েন্টের দূরত্বের যোগফল ছিল। এর অর্থ সর্বোত্তম সমাধানটি যত দ্রুত সম্ভব পয়েন্টটির কাছাকাছি পৌঁছানো। কেবলমাত্র অ্যানালগ স্টিকের মধ্যে রূপান্তর সীমাবদ্ধ করে, ঠিক আছে সমাধান পেতে একদিন সময় নিল । (এটি আমি চুক্তি বাস্তবায়ন করার আগেই হয়েছিল))
সম্মতি যুক্ত করার পরে, আমি একটি বোতাম প্রেসগুলির রূপান্তর সক্ষম করেছিলাম এবং এমন একটি জায়গায় একই মূল্যায়ন কার্য সম্পাদন করেছি যার জন্য ঝাঁপ দেওয়া দরকার। প্রাথমিকভাবে ফাঁকা ইনপুট স্ট্রিম থেকে লক্ষ্যটি পৌঁছাতে ২৪ টি এমুলেটর চলতে প্রায় এক ঘন্টা সময় নিয়েছিল তবে সর্বোত্তম কোনও কিছু পেতে সম্ভবত কয়েক দিন দৌড়াতে হবে।
সমস্যা
আমি যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল আমার অপ্টিমাইজেশান সমস্যাটি কীভাবে সঠিকভাবে মডেল করা যায় তা জানতে আমি গাণিতিক অপ্টিমাইজেশন ক্ষেত্র সম্পর্কে পর্যাপ্ত পরিমাণে জানি না ! উদাহরণস্বরূপ, উইকিপিডিয়ায় বর্ণিত অনেক অ্যালগরিদমের ধারণামূলক ধারণাটি আমি মোটামুটি অনুসরণ করতে পারি, তবে আমি জানি না কীভাবে আমার সমস্যাটিকে শ্রেণিবদ্ধ করা যায় বা সেই বিভাগের জন্য অত্যাধুনিক অ্যালগরিদম নির্বাচন করতে হয়।
আমি যা বলতে পারি তা থেকে, আমার খুব বড় পাড়ার একটি সংযুক্ত সমস্যা রয়েছে । তার উপরে, মূল্যায়ন ফাংশনটি অত্যন্ত বিচ্ছিন্ন, কোনও গ্রেডিয়েন্ট নেই, এবং অনেকগুলি মালভূমি রয়েছে । এছাড়াও, অনেকগুলি প্রতিবন্ধকতা নেই, যদিও আমি সমস্যাটি সমাধানে সহায়তা করে যদি আমি আনন্দের সাথে তাদের প্রকাশ করার ক্ষমতা যুক্ত করি; আমি উল্লেখ করতে চাই যে স্টার্ট বোতামটি ব্যবহার করা উচিত নয়, উদাহরণস্বরূপ, তবে এটি সাধারণ ক্ষেত্রে নয়।
প্রশ্ন
সুতরাং আমার প্রশ্নটি: আমি কীভাবে এটি মডেল করব? আমি কোন ধরণের অপ্টিমাইজেশান সমস্যাটি সমাধান করার চেষ্টা করছি? আমি কোন অ্যালগরিদম ব্যবহার করার জন্য মনে করি? আমি গবেষণামূলক কাগজপত্র পড়তে ভয় পাই না তাই আমার কী পড়তে হবে তা আমাকে জানান!
স্বজ্ঞাতভাবে, একটি জেনেটিক অ্যালগরিদম সেরা হতে পারে না, কারণ এটি আসলে শিখেছে বলে মনে হয় না। উদাহরণস্বরূপ, যদি স্টার্ট টিপলে সর্বদা মূল্যায়ন খারাপ হয়ে যায় বলে মনে হয় (কারণ এটি গেমটি বিরতি দেয়), এমন কিছু ডিজাইনার বা মস্তিষ্ক থাকা উচিত যা শিখতে পারে: "যে কোনও মুহুর্তে স্টার্ট টিপানো ব্যর্থ।" তবে এই লক্ষ্যটি ততটা তুচ্ছ হিসাবে দেখা যায় না, কারণ কখনও কখনও চাপ দেওয়া শুরু হয় সর্বোত্তম, যেমন সুপার মারিও 64৪-তে তথাকথিত "বিরতি পশ্চাৎ-দীর্ঘ লাফান" ! এখানে মস্তিষ্ককে আরও জটিল প্যাটার্ন শিখতে হবে: "প্লেয়ারটি যখন খুব নির্দিষ্ট অবস্থাতে থাকে তখন বাটন প্রেসের মিশ্রণটি চালিয়ে যাওয়া ব্যতীত স্টার্ট টিপানো অকেজো ।"
দেখে মনে হচ্ছে আমার (বা মেশিনটি শিখতে পারে) অন্য কোনও ফ্যাশনে ইনপুট উপস্থাপনের জন্য আরও উপযুক্ত। প্রতি ফ্রেম ইনপুটটি খুব দানাদার বলে মনে হচ্ছে, কারণ যা দরকার তা হ'ল "ক্রিয়া", যা বেশ কয়েকটি ফ্রেম বিস্তৃত হতে পারে ... তবুও অনেকগুলি আবিষ্কার ফ্রেম-ফ্রেম ভিত্তিতে করা হয়, সুতরাং আমি একেবারে রায় দিতে পারি না ( পূর্বোক্ত বিরতি পিছনে-দীর্ঘ-জাম্পের জন্য ফ্রেম-স্তরের নির্ভুলতা প্রয়োজন)। এটি দেখে মনে হয় যে ইনপুটটি সিরিয়ালি প্রক্রিয়াজাত হয় এমন কিছু হওয়া উচিত যা মূলধনযুক্ত হতে পারে তবে আমি কীভাবে নিশ্চিত তা জানি না।
বর্তমানে আমি (প্রতিক্রিয়াশীল) তাবু অনুসন্ধান, খুব বড় আকারের নেবারহুড অনুসন্ধান, টিচিং-লার্নিং-ভিত্তিক অপটিমাইজেশন এবং পিঁপড়া কলোনি অপ্টিমাইজেশন সম্পর্কে পড়ছি।
এ সমস্যাটি এলোমেলো জিনগত অ্যালগোরিদম ব্যতীত অন্য যে কোনও বিষয় মোকাবেলা করা কি খুব কঠিন? নাকি এটি আসলে একটি তুচ্ছ সমস্যা যা অনেক আগেই সমাধান হয়েছিল? পড়ার জন্য ধন্যবাদ এবং যে কোনও প্রতিক্রিয়ার জন্য আগাম ধন্যবাদ।