একটি অপ্টিমাইজেশন অ্যালগরিদমের অনুকূলতার মূল্যায়ন করার জন্য কি কোনও সাধারণ পদ্ধতি আছে?


9

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

আমি এতক্ষণে যে একমাত্র পদ্ধতিটি সামনে এলাম তা হ'ল ইতোমধ্যে পরিচিত অনুকূল সমাধানগুলির সাথে অ্যালগরিদমের ফলাফলের তুলনা করা।

যদি তা না হয় তবে কিছু বিশেষ সমস্যার জন্য নির্দিষ্ট পদ্ধতি রয়েছে কি?

এডিটিটি স্পষ্ট করতে: সর্বোত্তমতার দ্বারা আমি বোঝাতে চাইছি ফলাফলটি সর্বোত্তম সমাধানের ফলাফলের সাথে কতটা কাছাকাছি।


সম্ভবত cstheory.stackexchange.com এর জন্য একটি প্রশ্ন ?
লুসিও

অপ্টিমাইজেশন অ্যালগরিদমের 'অনুকূলতা' কীভাবে সংজ্ঞায়িত করবেন? আপনি কি এর উত্স কোডটিতে বিশ্লেষণ করতে চান এবং তারপরে আনুমানিক ফ্যাক্টরটি কী তা জানাতে চান?
অ্যালেক্স দশ ব্রিংক

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

উত্তর:


3

এটি নির্ভর করে সমস্যার ধরণের উপর।

যদি সমস্যাটির জন্য বহুবর্ষ-সময়ের আনুমানিক পরিকল্পনা (পিটিএএস) থাকে (যেমন ইউক্লিডিয়ান টিএসপি), তবে আপনি বহুবর্ষের সময়ে অনুকূল সমাধানের সাথে ইচ্ছামতভাবে সমাধানের সমাধান পেতে পারেন। তার মানে, প্রতিটি > 0 এর জন্য, একটি বহুপদী সময় অ্যালগোরিদম রয়েছে যা আপনার সমস্যার একটি আনুমানিক সমাধান খুঁজে পাবে , এটি সর্বোত্তম সমাধানের (1+ ) এর মধ্যে গ্যারান্টিযুক্ত । সেক্ষেত্রে আপনি কেবল ই এর একই মানের জন্য দুটি অ্যালগরিদমের জন্য রানটাইম / মেমরি জটিলতার তুলনা করবেন । যদি একটি অ্যালগরিদম অন্যটির তুলনায় একই "অনুকূলতা গ্যারান্টি" তৈরি করতে পারে তবে কম চলমান সময় / মেমরির ব্যয়ে, তবে এটি সম্ভবত আরও ভাল অ্যালগরিদম।

যদি সমস্যাটি এপিএক্স হয় তবে পিটিএএস নয় , অর্থাত্ যদি বহুগতির সময় আনুমানিক অ্যালগরিদম থাকে যেগুলি উত্পাদন সমাধানের গ্যারান্টযুক্ত যেগুলি সর্বোত্তম সমাধানের একটি ধ্রুবক ফ্যাক্টরের মধ্যে থাকে, তবে আপনি সেই ধ্রুবক ফ্যাক্টরের সাথে তুলনা করতে পারেন। নিম্ন ফ্যাক্টরযুক্ত একটি আরও ভাল সমাধানগুলি উত্পাদন করতে পারে (তবে প্রায়শই উচ্চতর চলমান সময় / মেমরির ব্যয়ে)

যদি সমস্যাটি classes শ্রেণির মধ্যে না হয় তবে আমি মনে করি আপনি যা করতে পারেন তা হ'ল এলোমেলো সমস্যাগুলির সেটগুলির জন্য বা পরিচিত অনুকূল সমাধানগুলির সমস্যার জন্য তাদের সমাধানগুলির তুলনা করা।


1

আমি মনে করি না এটি করার একটি সাধারণ উপায় আছে, তবে অবশ্যই এটি করার পদ্ধতি রয়েছে।

উদাহরণস্বরূপ, সমস্যাটি সেট-কভার নিন। যারা সমস্যা জানেন না তাদের জন্য নিম্নলিখিতটি হল:

উপাদানগুলির একটি সেট B={1,2,...,m}এবং এমন অনেকগুলি উপসর্গ দেওয়া হয়েছে S_1, S_2, ..., S_nযার ইউনিয়ন B। আপনি এই সাবসেটের ন্যূনতম সংখ্যাটি সন্ধান করার চেষ্টা করছেন যে ইউনিয়নটি এখনও রয়েছে B। এই সমস্যার একটি বাস্তব-জগতের আদর্শ উদাহরণ হ'ল যেখানে আপনাকে আশেপাশের সংকলন দেওয়া হয় এবং আপনি dনিকটবর্তী স্কুল থেকে কিছুটা দূরে প্রতিটি পাড়া পরিবেশন করা হয় এমন স্কুল স্থাপনের জন্য অনুকূল স্থানগুলি সন্ধান করার চেষ্টা করছেন । এই ক্ষেত্রে, Bআশেপাশের S_xসেটগুলি রয়েছে dএবং শহরের মধ্যে সমস্ত সেট থাকে x

আপনি প্রমাণ করেছেন যে এই সমস্যাটি এনপি-কমপ্লিট। তবে একটি সাধারণ লোভী সমাধান রয়েছে যেখানে আপনি বারবার S_iসর্বাধিক সংখ্যক অনাবৃত উপাদানগুলির সাথে সেটটি বেছে নিয়েছেন। এবং আপনি প্রমাণ করতে পারেন যে এই অ্যালগরিদমটি ভাল করে

যদি সর্বোত্তম অ্যালগরিদম kসেটগুলি নিয়ে গঠিত থাকে তবে লোভী অ্যালগরিদম k ln(n)সেটগুলির চেয়ে বেশি থাকবে না যেখানে এলএন প্রাকৃতিক লোগারিদম।


1

কোনও প্রোগ্রামের 'অনুকূল পারফরম্যান্স' এ বা 'অনুকূলতা পারফরম্যান্স' বি রয়েছে তা নির্ধারণের সমস্যাটি কেবল 'সর্বোত্তমতা কর্মক্ষমতা' এর কোনও সংজ্ঞার জন্য সাধারণভাবে অনস্বীকার্য (নীচে প্রমাণ)। এটি সূচিত করে যে এমন কোনও একক পদ্ধতি নেই যা সর্বদা আপনাকে বলতে পারে যে কোনও অ্যালগরিদম অনুকূল।

প্রায়শই অ্যালগরিদম বিশ্লেষণ করার সময় প্রায়শই এমন পদ্ধতি প্রয়োগ করা হয়। প্রায়শই, আনুমানিক অ্যালগরিদমগুলি এর সমাধানটি সর্বোত্তম সমাধান থেকে কতটা দূরে থাকে তার গ্যারান্টি দ্বারা মূল্যায়ন করা হয়। আমি একটি সমস্যা এবং আনুমানিক একটি উদাহরণ দেব, যা আমি 'লোয়ার বাউন্ড' পদ্ধতিটি ব্যবহার করে প্রমাণ করব, যা অনুপাত প্রমাণ করার জন্য খুব ব্যবহৃত একটি পদ্ধতি।

সমস্যার সমাধান হ'ল 'ট্রাক লোডিং' সমস্যা: আমাদের কাছে প্রচুর অভিন্ন ট্র্যাক রয়েছে (আমরা যত পছন্দ করি) প্রতিটি টি বেশিরভাগ টি-তে ভার বহন করতে সক্ষম। পরিবহন। প্রতিটি বস্তুর আমার ওজন w_i রয়েছে, যেখানে w_i <= T (সুতরাং এমন কোনও আইটেম নেই যা নিজেরাই এমনকি ট্রাকেও ফিট করতে পারে না)। আইটেমগুলি অংশগুলিতে বিভক্ত করা যায় না। আমরা ট্রাকগুলি পূরণ করতে চাই যাতে আমাদের যতটা সম্ভব কম ট্রাকের প্রয়োজন হয়। এই সমস্যাটি এনপি-সম্পূর্ণ।

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

এই অ্যালগরিদম সমস্যাটির জন্য তথাকথিত 2-আনুমানিকতা: এটি সর্বোত্তম সমাধানের চেয়ে দ্বিগুণ ট্রাক ব্যবহার করে। 'সর্বাধিক' গুরুত্বপূর্ণ: আমরা ভাগ্যবান এবং সর্বোত্তম সমাধানটি খুঁজে পেতে পারি, তবে কমপক্ষে আমরা খুব খারাপ করব না।

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

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


এই অ্যালগরিদম একটি ধ্রুবক-ফ্যাক্টর অনুমান দেয়: এটি সর্বোত্তম সমাধানের চেয়ে প্রায় 2 গুণ খারাপ bad অন্যান্য ব্যবস্থার কয়েকটি উদাহরণ: সর্বোত্তম সমাধানের চেয়ে সর্বাধিক সি বেশি (অ্যাডিটিভ ত্রুটি, বেশ অস্বাভাবিক), সর্বাধিক সি লগ এন বেস্ট হিসাবে অনুকূল সমাধান হিসাবে খারাপ হিসাবে সর্বাধিক সিএন সময়ে সর্বোত্তম সমাধান হিসাবে খারাপ হিসাবে সর্বাধিক সি 2 d (ডিএন) সময়ের অনুকূল সমাধান হিসাবে খুব খারাপ (খুব খারাপ; উদাহরণস্বরূপ, সাধারণ টিএসপি কেবল এই ধরণের গ্যারান্টি সহ অ্যালগরিদমকে স্বীকার করে)।

অবশ্যই, আপনি যদি নিশ্চিত হতে চান যে আপনি যে ফ্যাক্টরটি প্রমাণ করেছেন সেটিই আপনি প্রমাণ করতে পারেন যে সেরা ফ্যাক্টর, আপনার অ্যালগরিদম যে সমাধানটি দেয় তা সম্ভবত যতটা খারাপ হতে পারে তার উদাহরণ খুঁজে পাওয়ার চেষ্টা করা উচিত।

এছাড়াও মনে রাখবেন যে আমরা কখনও কখনও এনপি-হার্ড নয় এমন সমস্যায় প্রায় অ্যালগরিদম ব্যবহার করি।

আমি এটিকে (আরও অনেকের মধ্যে) আমার বিশ্ববিদ্যালয়ের আনুমানিক অ্যালগরিদম কোর্সে শিখেছি।


অনিবার্যতার প্রমাণ: পি যেন সমস্যা হয় এবং এ এবং বি পি এর সান্নিধ্যে অ্যালগরিদম হয় যেখানে A এবং B এর 'অনুকূলতা' এর কিছু বুদ্ধিমান সংজ্ঞার জন্য একই 'অনুকূলতা' থাকে না এবং যেখানে A এবং B চলমান সময় উভয়ই ওমেগা হয় (1) (ধ্রুবক সময়ের চেয়ে কঠোরভাবে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে তারা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে থামে) এবং যেখানে এ এবং বি উভয় স্থির থাকে।

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

তারপরে আমরা থামার সমস্যা সমাধানের জন্য ডি ব্যবহার করতে পারি। E কে একটি প্রোগ্রাম হতে দিন এবং F এই প্রোগ্রামটির জন্য একটি ইনপুট হয়ে উঠুক। আমরা ইনপুট এফ বন্ধ করবে কিনা তা সিদ্ধান্ত নিতে আমরা ডি ব্যবহার করব।

আমরা একটি প্রোগ্রাম জি ডিজাইন করি যা নিম্নলিখিতগুলি করে: সমস্যা পি এর জন্য একটি ইনপুট এস দেওয়া, এটি সমানত্রে F এবং A এ এস চালায়: এটি E কে কিছুক্ষণের জন্য কার্যকর করে, তারপরে এ, তারপরে E আবার এবং আরও অনেক কিছু করে। যদি E এফ বন্ধ থাকে, তবে এটি A চালানো বন্ধ করে দেয় এবং পরিবর্তে এস তে বি চালায় এবং খ এর ফলাফল প্রদান করে। যদি E থামার আগে A থেমে যায় তবে এটি A এর ফলাফল প্রদান করে।

ডি তে জি ব্যবহার করা এখন সিদ্ধান্ত নিয়েছে যে এফ এ E টি থামবে কিনা: E যদি F এ থামে, তবে যথেষ্ট পরিমাণে বড় ইনপুট এস এর জন্য এস এ-এ থামার আগে F এ E টি থামবে (কারণ E টি থামাতে সময় লাগে তার আকারের উপর নির্ভর করে না ইনপুট, এ এর ​​বিপরীতে)। ডি এর ফলে জি রিপোর্ট করেছেন যে বি এর সর্বোত্তম বৈশিষ্ট্য রয়েছে E যদি F এ থামায় না, ডি রিপোর্ট করবেন যে জি এর সর্বোত্তম বৈশিষ্ট্য রয়েছে।

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