پرش به محتوا

مسئله کوله‌پشتی: تفاوت میان نسخه‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
Asma.ghandeharioun (بحث | مشارکت‌ها)
بدون خلاصۀ ویرایش
Asma.ghandeharioun (بحث | مشارکت‌ها)
خط ۸۵: خط ۸۵:


== تاریخچه ==
== تاریخچه ==

مسئله ی کوله پشتی بیش از یک قرن مورد مطالعه قرار گرفته و اولین بررسی در سال 1897 انجام گرفته است.<ref>{{cite journal | title = On the partition of numbers | author = Mathews, G. B. | journal = Proceedings of the London Mathematical Society | volume = 28 | pages = 486&ndash;490 | date = 25 June 1897 | url = http://plms.oxfordjournals.org/content/s1-28/1/486.full.pdf}}</ref> هر چند اولین داده های ثبت شده در این مورد، به کارهای ریاضیدانی به نام (1884&ndash;1956) [[:en:Tobias Dantzig | Tobias Dantzig]] برمی گردد، چیزی با عنوان مسئله ی کوله پشتی قبلا در میان عامه ی مردم وجود داشته است. <ref>Kellerer, Pferschy, and Pisinger 2004, p. 3</ref>
مسئله ی کوله پشتی درجه دوم، اولین بار توسط Hammer ، Gallo و Simeone در سال 1960 مطرح شد.<ref>{{cite journal | title = Quadratic knapsack problems | author = Gallo, G.; Hammer, P. L.; Simeone, B. | journal = Mathematical Programming Studies | year = 1980 | volume = 12 | pages = 132&ndash;149 | doi = 10.1007/BFb0120892 | url = http://www.springerlink.com/content/x804231403086x51/}}</ref>
در سال 1988، تحقیقی از [[دانشگاه استونی بروک]] بر روی مجموعه ای از الگوریتم ها، نشان داد که از میان 75 مسئله ی الگوریتمی، مسئله ی کوله پشتی، 18 امین مسئله ی معروف و 4 امین مسئله ی پرکاربرد بعد از [[درخت کی دی]] ، [[:en:suffix tree | درخت پیشوندی]] و [[:en:bin packing| bin packing problem]] است. <ref>{{cite journal | title = Who is Interested in Algorithms and Why? Lessons from the Stony Brook Algorithm Repository | author = Skiena, S. S. |journal = AGM SIGACT News | volume = 30 | issue=3 |date = September 1999| pages= 65&ndash;74 |ISSN=0163-5700 |url = http://delivery.acm.org/10.1145/340000/333627/p65-skiena.pdf?key1=333627&key2=9434996821&coll=GUIDE&dl=GUIDE&CFID=108583297&CFTOKEN=90100478}}</ref>


== برای مطالعه ==
== برای مطالعه ==

نسخهٔ ‏۲۵ نوامبر ۲۰۱۱، ساعت ۱۷:۵۳

Example of a one-dimensional (constraint) knapsack problem: which boxes should be chosen to maximize the amount of money while still keeping the overall weight under or equal to 15 kg? A multiple constrained problem could consider both the weight and volume of the boxes. Modeling the shapes and sizes would instead constitute a packing problem.
(Solution: if any number of each box is available, then three yellow boxes and three grey boxes; if only the shown boxes are available, then all but the green box.)


مسئله کوله پشتی که با عنوان های Knapsack یا Rucksack مطرح می شود، مسئله ای در بهینه سازی ترکیبیاتی است. فرض کنید مجموعه ای از اشیا، که هر کدام داری وزن و ارزش خاصی هستند در اختیار دارید. به هر شی تعدادی را تخصیص دهید به طوری که وزن اشیا انتخاب شده کوچکتر یا مساوی حدی از پیش تعیین شده، و ارزش آنها بیشینه شود. علت نامگذاری این مسئله، جهانگردی است که کوله پشتی ای با اندازه ی محدود دارد و باید آن را با مفیدترین صورت ممکن از اشیا پر کند.

معمولا در تخصیص منابع با محدودیت های مالی، با این مسئله روبرو هستیم. همچنین مسائلی از این قبیل در ترکیبیات، نظریه پیچیدگی محاسباتی، رمزنگاری و ریاضیات کاربردی به چشم می خورد.

نسخه ی مسئله تصمیم برای مسئله ی کوله پشتی، این سوال است: "آیا ارزش V بدون فرارفتن از وزن W، قابل دستیابی است؟"


تعریف

فرض کنید جسم داریم که از تا شماره گذاری شده اند. جسم ام ارزشی معادل و وزنی برابر با دارد. معمولا فرض می شود که وزن ها و ارزش ها نامنفی اند. برای ساده تر شدن نمایش، بدون کم شدن از کلیت مسئله می توان فرض کرد اشیا به ترتیب صعودی بر حسب وزنشان مرتب شده اند. بیشترین وزنی که می توان در کوله پشتی حمل کرد، است.

معروف ترین نوع از این مسئله، مسئله ی کوله پشتی 0 و 1 است. یعنی تعداد از هر شی، یا 0 است (آن شی را انتخاب نمی کنیم) یا 1 ( آن شی انتخاب می شود). مسئله ی کوله پشتی 0 و 1 را می توان به این صورت، به زبان ریاضی بیان کرد:


  • مقدار را بیشینه کنید.
  • به طوری که

مسئله ی کوله پشتی کران دار، نسخه ی دیگری از این سوال است که در آن تعداد اشیا () عددی صحیح و نامنفی و حد اکثر برابر با است. به بیان ریاضی:

  • مقدار را بیشینه کنید.
  • به طوری که

مسئله ی کوله پشتی بیکران (UKP) ، هیچ محدودیتی روی تعداد اشیا قائل نمی شود. یعنی از هر شی، به هر تعداد دلخواهی می توان انتخاب کرد. نسخه ای ازین سوال که بیش از همه مورد توجه قرار میگیرد، دارای ویژگی های زیر است:

  • یک مسئله تصمیم است.
  • مسئله 0 و 1 است.
  • برای هر شی، وزن و ارزش آن برابرند. یعنی .

دقت کنید که در این مورد خاص، این مسئله هم ارز است با: " مجموعه ای از اعداد صحیح نا منفی داده شده است. آیا زیر مجموعه ای از آن وجود دارد که جمع اعضایش دقیقا شود؟" و چنانچه وزن های منفی هم قابل قبول باشند، و برابر با در نظر گرفته شود، مسئله عبارت است از: " مجموعه ای از اعداد صحیح داده شده است. آیا زیر مجموعه ای غیر تهی از آن هست که جمع اعضایش شود؟" این مسئله خاص، مسئله جمع زیرمجموعه ها نامیده می شود. در رمزنگاری، هر گاه از مسئله کوله پشتی نام برده می شود، منظور مسئله جمع زیرمجموعه ها است.

چنانچه چند کوله پشتی داشته باشیم، مسئله تبدیل به سوال bin packing می شود.

پیچیدگی محاسباتی

از دید علوم کامپیوتر، مسئله ی کوله پشتی شایان توجه است زیرا:

مسئله جمع زیر مجموعه ها که نسخه ای از مسئله ی کلی کوله پشتی است، به عنوان یکی از 21 مسئله ی NP-کامل ِ Karp مطرح است.

تلاش هایی برای استفاده از مسئله ی جمع زیر مجموعه ها به عنوان اصل در سیستم های رمزنگاری کلید عمومی، مانند رمزنگاری کولی پشتی ِ Merkle-Hellman انجام شد. در این روش ها، معمولا از گروه هایی به جز اعداد صحیح استفاده می شد. Merkle-Hellman و الگوریتم های مشابه دیگر بعدا با شکست روبرو شدند، زیرا مسائل خاصی که تولید می کردند در زمان چند جمله ای قابل حل بودند.

در خیلی از تحقیقات سعی می شود به این سوال پاسخ داده شود که نمونه های سخت مسئله ی کوله پشتی چه هستند؟ [۱][۲] یا از دید دیگر، چه ویژگی هایی از مثال های مسئله ی کوله پشتی، باعث می شود در زمانی معقولتر نسبت به آن چه در صورت کلی NP-completeِ سوال مطرح است، حل شوند. .[۳] الگوریتم های زیادی بر پایه ی: برنامه نویسی پویا,[۴] روش تقسیم و حد، [۵] یا ترکیبی از هر دو روش[۳][۶][۷][۸] برای این مسئله وجود دارند.

راه حل برنامه نویسی پویا

مسئله ی کوله پشتی بیکران

اگر تمام وزن ها ( ) اعداد صحیح نامنفی باشند، مسئله ی کوله پشتی در در زمانی شبه چند جمله ای با استفاده از برنامه نویسی پویا قابل حل است.

برای سادگی فرض کنید تمام وزن ها اکیدا مثبت اند ( ). می خواهیم جمع ارزش کالاهای انتخاب شده را بیشینه کنیم با این فرض که مجموع وزن آنها حداکثر شود. حال برای هر ،مقدار را بیشترین ارزش قابل دستیابی تعریف کنید به طوری که جمع وزن اشیا انتخاب شده حد اکثر شود. بدیهی است که پاسخ مورد نظر است.

دقت کنید که ویژگی های زیر را دارد:


  • (جمع اعضای مجموعه ی تهی 0 است)
  • که ارزش شی ام iاست.

بیشترین ارزش قابل دستیابی از مجموعه ی تهی، 0 است. برای محاسبه ی هر کدام از ها، باید شی را بررسی کرد. همچنین آرایه ی ، عنصر دارد. بنابر این زمان اجرای این الگوریتم است. بدیهی است با تقسیم کردن بر بزرگترین مقسوم علیه مشترک شان، می توان زمان اجرای الگوریتم را بهینه کرد.

پیچیدگی زمانی تناقضی با NP-complete بودن مسئله ی کوله پشتی ندارد. زیرا برخلاف ، برحسب ورودی چند جمله ای نیست. طول ِ ورودی، متناسب با تعداد بیت های لازم برای نمایش ، یعنی است، نه خود .

مسئله ی کوله پشتی 0 و 1

الگوریتم تقریبی حریصانه

روابط Dominance در UKP

4 مورد

کاربرد ها

تاریخچه

مسئله ی کوله پشتی بیش از یک قرن مورد مطالعه قرار گرفته و اولین بررسی در سال 1897 انجام گرفته است.[۹] هر چند اولین داده های ثبت شده در این مورد، به کارهای ریاضیدانی به نام (1884–1956) Tobias Dantzig برمی گردد، چیزی با عنوان مسئله ی کوله پشتی قبلا در میان عامه ی مردم وجود داشته است. [۱۰] مسئله ی کوله پشتی درجه دوم، اولین بار توسط Hammer ، Gallo و Simeone در سال 1960 مطرح شد.[۱۱] در سال 1988، تحقیقی از دانشگاه استونی بروک بر روی مجموعه ای از الگوریتم ها، نشان داد که از میان 75 مسئله ی الگوریتمی، مسئله ی کوله پشتی، 18 امین مسئله ی معروف و 4 امین مسئله ی پرکاربرد بعد از درخت کی دی ، درخت پیشوندی و bin packing problem است. [۱۲]

برای مطالعه

یادداشت ها

  1. Pisinger, D. 2003. Where are the hard knapsack problems? Technical Report 2003/08, Department of Computer Science, University of Copenhagen, Copenhagen, Denmark.
  2. L. Caccetta, A. Kulanoot, Computational Aspects of Hard Knapsack Problems, Nonlinear Analysis 47 (2001) 5547–5558.
  3. ۳٫۰ ۳٫۱ Vincent Poirriez, Nicola Yanev, Rumen Andonov (2009) A Hybrid Algorithm for the Unbounded Knapsack Problem Discrete Optimization http://dx.doi.org/10.1016/j.disopt.2008.09.004
  4. Rumen Andonov, Vincent Poirriez, Sanjay Rajopadhye (2000) Unbounded Knapsack Problem : dynamic programming revisited European Journal of Operational Research 123: 2. 168–181 http://dx.doi.org/10.1016/S0377-2217(99)00265-9
  5. S. Martello, P. Toth, Knapsack Problems: Algorithms and Computer Implementation, John Wiley and Sons, 1990
  6. S. Martello, D. Pisinger, P. Toth, Dynamic programming and strong bounds for the 0-1 knapsack problem , Manag. Sci., 45:414–424, 1999.
  7. G. Plateau, M. Elkihel, A hybrid algorithm for the 0-1 knapsack problem, Methods of Oper. Res., 49:277–293, 1985.
  8. S. Martello, P. Toth, A mixture of dynamic programming and branch-and-bound for the subset-sum problem, Manag. Sci., 30:765–771
  9. Mathews, G. B. (25 June 1897). "On the partition of numbers" (PDF). Proceedings of the London Mathematical Society. 28: 486–490.
  10. Kellerer, Pferschy, and Pisinger 2004, p. 3
  11. Gallo, G.; Hammer, P. L.; Simeone, B. (1980). "Quadratic knapsack problems". Mathematical Programming Studies. 12: 132–149. doi:10.1007/BFb0120892.{{cite journal}}: نگهداری یادکرد:نام‌های متعدد:فهرست نویسندگان (link)
  12. Skiena, S. S. (September 1999). "Who is Interested in Algorithms and Why? Lessons from the Stony Brook Algorithm Repository" (PDF). AGM SIGACT News. 30 (3): 65–74. ISSN 0163-5700.

منابع

پیوند های بیرونی


توسط Asma.ghandeharioun (بحث) در حال به روز آوری است.