Кіріспе
Математикалық және есептеулік мәселе.
Қоқыс жәшігін толтыру мәселесі – әртүрлі өлшемдегі заттарды шектеулі сандағы қоқыс жәшіктеріне немесе контейнерлерге, әрқайсысы белгілі сыйымдылыққа ие, қолданылатын қоқыс жәшіктерінің санын ең азайту мақсатымен орналастыру мәселесі. Бұл мәселенің көптеген қолданыс аймақтары бар, мысалы, контейнерлерді толтыру, салмақ сыйымдылығы шектеулі жүк көліктеріне жүк тиеу, медиа файлдарын резервтік көшірмелеу және FPGA жартылай өткізгіш чиптерін жобалаудағы технологиялық картаны жасау. Есептеу тұрғысынан, бұл мәселе NP-қиын, ал сәйкес шешімді табу мәселесі – заттарды белгіленген сандағы контейнерлерге сыйыстыруға бола ма, жоқ па, дегенді анықтау – NP-толық. Ең жаман жағдайдағы қиындығына қарамастан, мәселенің өте үлкен мысалдары үшін күрделі алгоритмдерді қолдану арқылы оңтайлы шешімдерді табуға болады. Сонымен қатар, көптеген жуықтау алгоритмдері бар. Мысалы, бірінші сәйкестік алгоритмі әр затты оған сыятын алғашқы қоқыс жәшігіне орналастыруды қамтитын жылдам, бірақ көбінесе оңтайлы емес шешімді ұсынады. Ол Θ(n log n) уақытты қажет етеді, мұнда n – буып-түюге жататын заттар саны. Алгоритмді заттар тізімін алдымен төмендеу ретімен сұрыптау арқылы әлдеқайда тиімді етуге болады (кейде бірінші сәйкестік төмендеу алгоритмі деп аталады), бірақ бұл әлі де оңтайлы шешімге кепілдік бермейді және ұзақ тізімдер үшін алгоритмнің жұмыс уақытын ұзартуы мүмкін. Дегенмен, заттардың кемінде бір рет дұрыс реттелген орналасуы бірінші сәйкестік алгоритмімен оңтайлы шешім табуға мүмкіндік беретіні белгілі. Бұл мәселенің көптеген түрлері бар, мысалы, 2D-қаптама, сызықтық қаптама, салмақ бойынша қаптама, құны бойынша қаптама және т.б. Қоқыс жәшігін толтыру мәселесін кесу қоры мәселесінің ерекше жағдайы ретінде қарастыруға болады. Егер қоқыс жәшіктерінің саны 1-ге шектелген болса және әр зат көлемімен де, құнымен де сипатталса, қоқыс жәшігіне сыятын заттардың құнын барынша арттыру мәселесі рюкзак мәселесі деп аталады. Практикада жиі кездесетін қаптаманың бір түрі – заттарды қоқыс жәшігіне орналастырғанда олар орынды бөлісе алады. Атап айтқанда, бірнеше затты бірге жинағанда олардың жеке өлшемдерінің қосындысынан кем орынды алады. Бұл нұсқа VM-қаптамасы деп аталады, себебі виртуалды машиналарды (VM) серверде қаптағанда, олардың жалпы жад талаптары VM-дармен бөлісетін беттерге байланысты азаюы мүмкін, оларды тек бір рет сақтау жеткілікті. Егер заттар кеңістікті кез келген тәсілмен бөлісе алса, қоқыс жәшігін толтыру мәселесін тіпті жуықтау да қиын. Алайда, егер кеңістікті бөлісу иерархиялық болса, яғни виртуалды машиналарда жадты бөлісу сияқты, қоқыс жәшігін толтыру мәселесін тиімді жуықтауға болады. Практикалық тұрғыдан қызығушылық тудыратын қоқыс жәшігін толтырудың тағы бір түрі – онлайн қоқыс жәшігін толтыру. Бұл жерде әртүрлі көлемдегі заттар тізбектей келіп түседі деп күтіледі, ал шешім қабылдаушы ағымдағы затты таңдап, қаптамаға салуға, немесе оны жіберіп жіберуге шешім қабылдауы керек. Әр шешім қайта қарастырылмайды. Керісінше, офлайн қоқыс жәшігін толтыру қосымша заттар келгеннен кейін жақсырақ қаптама алу үшін заттарды қайта орналастыруға мүмкіндік береді. Бұл, әрине, қайта орналастырылатын заттарды сақтауға арналған қосымша жадты қажет етеді.
Қорапты толтырудың қаттылығы
Қоқыс жәшігін толтыру мәселесі күшті NP-толық. Бұл күшті NP-толық 3-бөлу мәселесін қоқыс жәшігін толтыруға келтіру арқылы дәлелдеуге болады. Барлық кіріс сандарының қосындысы S болғанда, 3-бөлу мәселесінің бір мысалын қарастырып, қораптың көлемі T болатын қоқыс жәшігін толтыру мәселесінің мысалын құрастырамыз. Егер кіріс сандарының тең бөлінісі болса, онда ең жақсы толтыру үшін 2 қорап қажет; демек, жақындастыру қатынасы 2-ден кіші болған кез келген алгоритм 3-тен кем қорапты қайтаруы керек, яғни 2 қорапты қайтаруы керек. Керісінше, егер кіріс сандары тең бөлінбесе, онда ең жақсы толтыру үшін кем дегенде 3 қорап қажет болады. Екінші жағынан, қоқыс жәшігін толтыру, кез келген белгілі бір K қорап саны үшін псевдополиномиалдық уақытта, ал кез келген белгілі бір B қорап сыйымдылығы үшін полиномиалдық уақытта шешіледі.
Қосылмалы шамалау
Кармаркар Карп қора жинау алгоритмі ең көп дегенде өлшемі бар шешімді табады және n-ге қатысты полиномдық уақытта жұмыс істейді (полиномның дәрежесі жоғары, кем дегенде 8). Ротвос ең көп дегенде контейнерлерді пайдаланатын шешім жасайтын алгоритм ұсынды. Хоберг пен Ротвос бұл алгоритмді жетілдіріп, ең көп дегенде контейнерлерді пайдаланатын шешім жасауға қол жеткізді. Алгоритм кездейсоқтандырылған, ал оның жұмыс істеу уақыты n-ге қатысты полиномдық.
Әр түрлі өлшемдер саны аз
Қоқыс жәшігін толтырудың ерекше жағдайы, егер әр түрлі өлшемдегі заттардың саны d болса туындайды. Әрбір өлшемде көптеген бірдей заттар болуы мүмкін. Бұл жағдай жоғары көптікпен қоқыс жәшігін толтыру деп аталады және ол жалпы мәселеге қарағанда тиімдірек алгоритмдерге ие.
Фрагментациямен қорапқа салу
Фрагментациямен қорапты толтыру немесе фрагменттеуге болатын объектілерді қорапқа толтыру – бұл қорапты толтыру мәселесінің бір түрі, онда заттарды бөліктерге бөлуге және әр бөлікті жеке-жеке қорапқа салуға рұқсат етіледі. Заттарды бөліктерге бөлу жалпы өнімділікті жақсартуға, мысалы, қолданылатын қораптардың жалпы санын азайтуға мүмкіндік береді. Сонымен қатар, ең оңтайлы кесте табу есептеу жағынан жеңілдеуі мүмкін, себебі кейбір оңтайландыру айнымалылары үздіксіз болады. Бірақ заттарды бөлуге жұмсалатын шығын да болуы мүмкін. Бұл мәселені алғаш рет Мандал, Чакрабари және Гоузе ұсынған.
Нұсқалар
Мәселе екі негізгі нұсқада қарастырылады. Бірінші нұсқа, өлшемін ұлғайтатын фрагментациямен қорапты толтыру (BP SIF) деп аталады, онда әрбір зат фрагменттерге бөлінуі мүмкін; әрбір фрагменттің өлшеміне қосымша бірліктер ескеріледі. Екінші нұсқа, өлшемін сақтайтын фрагментациямен қорапты толтыру (BP SPF) деп аталады, онда әрбір заттың көлемі мен құны болады; затты фрагменттеу оның құнын арттырады, бірақ көлемін өзгерте алмайды.
Есептеу күрделілігі
Мандал, Чакрабари және Гоузе BP SIF және BP SPF екеуі де күшті NP-қатты екенін көрсетті. Қаттылығына қарамастан, олар бірнеше алгоритмдер ұсынады және олардың өнімділігін зерттейді. Олардың алгоритмдері негіз ретінде буып жинаудың классикалық алгоритмдерін, мысалы, келесіге сәйкес келетін және біріншіге сәйкес келетін азайту алгоритмдерін пайдаланады. Бертацци, Голден және Ван BP SIF-тың бөлу ережесі бар түрін енгізді: заттың мөлшеріне сәйкес бір затты тек бір жолмен бөлуге рұқсат етіледі. Бұл, мысалы, көлік маршрутын жоспарлау мәселесі үшін пайдалы. Олар өз мақалаларында осы түрдің нашар жағдайдағы өнімділік шегін келтіреді. Шахнай, Тамир және Егезекили BP SIF және BP SPF үшін жуықтау схемаларын жасады: екілік PTAS (мәселенің екі түрі үшін PTAS), APTAS деп аталатын асимптотикалық PTAS және екі түр үшін AFPTAS деп аталатын екілік асимптотикалық FPTAS. Екичи BP SPF-тың кейбір заттары қақтығысқа түсетін түрін енгізді, онда қақтығысқан заттардың бөліктерін бірге бірге жинауға тыйым салынады. Олар осы түрдің де NP-қатты екенін дәлелдеді. Кассасса және Чезелли шығын мен қосымша шығынсыз, ал контейнерлер саны белгілі бір түрін енгізді. Дегенмен, бөлулер санын азайту қажет. Олар нақты және жуықталған шешімдер үшін математикалық бағдарламалау алгоритмдерін ұсынады.
Қатысушы мәселелер
Жазалармен бөлінетін рюкзак проблемасын Малагути, Моначи, Паронуцци және Пферши ұсынды. Олар бұл проблема үшін FPTAS және динамикалық бағдарлама әзірледі, сондай-ақ модельдерінің тиімділігін салыстыратын кең ауқымды есептеу зерттеуін жүргізді. Қосымша қараңыз: Бөлінетін жұмыс жоспарлау.
Бөлінуге болатын нысандар өлшемдерімен өнімділік
Қоқыс контейнерлерін толтырудың маңызды ерекше жағдайы – заттардың мөлшері бөлінетін тізбек құрайтын жағдай (немесе факторланған). Бөлінетін заттар мөлшерінің ерекше жағдайы компьютерлік жүйелерде жадты бөлу кезінде кездеседі, онда заттардың мөлшерінің бәрі 2-нің дәрежесі болып табылады. Егер заттардың мөлшері бөлінсе, қоқыс контейнерлерін толтыруға арналған кейбір эвристикалық алгоритмдер оңтайлы шешімді табады.
Қоймаларға қойылатын кәріздік шектеулер
Қораптарды толтырудың бір түрі бар, онда қораптарға кардиналдық шектеулер қойылады: әрбір қорапта ең көп дегенде k зат болуы мүмкін, мұнда k – белгілі бір тұрақты бүтін сан. Краузе, Шен және Шветман бұл мәселені оңтайлы тапсырмаларды жоспарлаудың бір түрі ретінде қарастырады: компьютерде k процессор бар. Бірлік уақытқа (1) орындалатын, бірақ әртүрлі жад көлемі қажет болатын n тапсырма бар. Әрбір уақыт бірлігі жеке қорап ретінде қарастырылады. Мақсат – мүмкіндігінше аз қорапты (= уақыт бірліктерін) пайдалану, сонымен бірге әрбір қорапта ең көп дегенде k тапсырма орындалуын қамтамасыз ету. Олар ең көп қорапты пайдаланатын бірнеше эвристикалық алгоритмдерді ұсынады. Келлер және Пферши орындалу уақыты бар, ең көп қорапты пайдаланатын алгоритмді ұсынады. Олардың алгоритмі OPT-ны екілік іздеу арқылы анықтайды. Әрбір ізделінетін m мәні үшін ол заттарды 3m/2 қорапқа орналастыруға тырысады.
Krause, Shen and Schwetman introduce this problem as a variant of optimal job scheduling: a computer has some k processors. There are some n jobs that take unit time (1), but have different memory requirements. Each time unit is considered a single bin. The goal is to use as few bins (=time units) as possible, while ensuring that in each bin, at most k jobs run. They present several heuristic algorithms that find a solution with at most bins. Kellerer and Pferschy present an algorithm with run time , that finds a solution with at most bins. Their algorithm performs a binary search for OPT. For every searched value m, it tries to pack the items into 3m/2 bins.
Қатысушы мәселелер
Қоқыс жәшіктерін толтыру мәселесінде жәшіктердің мөлшері белгілі және олардың санын арттыруға болады (бірақ мүмкіндігінше азайту керек). Керісінше, көп жолды санды бөлу мәселесінде жәшіктердің саны белгілі, ал олардың мөлшерін арттыруға болады. Мақсат – жәшіктердің мөлшері мүмкіндігінше тең болатын бөлінуді табу (мультипроцессорлық кестелеу мәселесі немесе ең аз мерзімдік мәселе деп аталатын түрінде мақсат – ең үлкен жәшіктің мөлшерін азайту). Кері қоқыс жәшіктерін толтыру мәселесінде жәшіктердің саны мен мөлшері белгілі, бірақ заттардың мөлшерін өзгертуге болады. Мақсат – барлық заттарды белгіленген жәшіктерге орналастыру үшін заттардың мөлшер векторын ең аз өзгерту. Максималды ресурсты қоқыс жәшіктерін толтыру мәселесінде мақсат – пайдаланылған жәшіктердің санын барынша арттыру, яғни жәшіктердің белгілі бір реті бойынша кейінгі жәшіктегі ешбір зат бұрынғы жәшікке сыймауы керек. Двойной (қос) мәселеде жәшіктердің саны белгілі, ал мақсат – жәшіктерге салынған заттардың жалпы санын немесе жалпы мөлшерін азайту, сонда қалған заттар толтырылмаған жәшікке сыймайды. Қоқыс жәшігін жабу мәселесінде жәшік мөлшері төменнен шектелген: мақсат – әр жәшіктегі жалпы мөлшер кем дегенде белгілі бір шекті құрауы үшін пайдаланылған жәшіктердің санын барынша арттыру. Әділ бөлінбейтін шаруаларды бөлу мәселесінде (әділ бөлудің бір түрі) заттар шаруаларды білдіреді, ал әр шаруаның қиындығын әртүрлі бағалайтын әртүрлі адамдар бар. Мақсат – әр адамға шаруалар жиынтығын бөлу, олардың жалпы қиындық деңгейіне жоғары шек қойылады (осылайша, әр адам жәшікке сәйкес келеді). Бұл мәселеде қоқыс жәшіктерін толтырудан алынған көптеген техникалар қолданылады. Гильотинамен кесу мәселесінде заттар мен "жәшіктер" бір өлшемді сандар емес, екі өлшемді тіктөртбұрыштар болып табылады және заттар жәшіктен шетінен шетке кесу арқылы кесілуі керек. Өзімшіл қоқыс жәшіктерін толтыру мәселесінде әр зат өзінің бағасын азайтуға тырысатын ойыншы. Сондай-ақ, жәшіктерді толтырудың бір түрі бар, онда азайтылуға тиіс шығын жәшіктердің саны емес, әр жәшіктегі заттар санының белгілі бір қисық функциясы. үш өлшемді жәшіктерді толтыру, жеткізіліммен жәшіктерді толтыру.
Ресурстар
BPPLIB – сараптамалар, кодтар, өлшемдер, генераторлар, шешушілер және библиография кітапханасы.