240 likes | 439 Vues
Rīgas Tehniskā universitāte Datorzinātnes un informācijas tehnoloģijas fakultāte Lietišķo datorsistēmu institūts , Lietišķo datorzinātņu katedra. Somas iepakošanas uzdevums. Mihails Prihodko, Daniels Umanovskis , Aleksejs Zaharovs I-DMD-01. 201 1 . gads. Ievads.
E N D
Rīgas Tehniskā universitāte Datorzinātnes un informācijas tehnoloģijas fakultāte Lietišķo datorsistēmu institūts, Lietišķo datorzinātņu katedra Somas iepakošanasuzdevums Mihails Prihodko, Daniels Umanovskis, Aleksejs Zaharovs I-DMD-01 2011. gads
Ievads • Somas iepakošanas uzdevums angl. knapsack problem, kriev. задача о рюкзаке pieder pie šādiem uzdevumu klasēm: • Kombinatoriskās optimizācijas uzdevums; • Maksimizēšanas uzdevums.
Klasiskā uzdevuma nostādne • Ir dots: • Priekšmetu kopa, kur katram priekšmetam ir definēta masa; • Mugursoma ar ierobežotu celtspēju; • Nepieciešams iepakot somu, maksimizējot priekšmetu skaitu; • Katrs priekšmets eksistē tikai vienā eksemplārā.
Zagļa problēma (risināta šajā darbā) • Ir dots: • Priekšmetu kopa, kur katram priekšmetam ir definēta masa+ naudas vērtība. • Mugursoma ar ierobežotu celtspēju; • Nepieciešams iepakot somu, maksimizējot kopējo naudas vērtību; • Katrs priekšmets eksistē tikai vienā eksemplārā.
Integrētā vide Vienotā vide algoritmu izpildei ir izveidotā Python valodā. Vide atbalsta divus pakošanas algoritmu pieslēgšanas paņēmienus: • kā moduļu pirmkodu Python valodā, • kā nokompilētas Microsoft Windows dinamisko saišu bibliotēkas, DLL.
Studentu realizēti algoritmi Pakošanas problēmu var risināt ar vairākiem paņēmieniem. Šajā darbā tika realizētas šādas pieejas: • Ģenētiskais algoritms; • Zaru atciršanas algoritms; • ХЗ metode; • Ололо pieeja; • Meklēšana pēc pirmās labākās sakritības; • Dinamiskās programmēšanas pieeja.
Ģenētiskais algoritms (1/4) Pamatā ir šādi jēdzieni: • gēns – bitu virkne, raksturo indivīdu; • hromosoma – viens bits gēnā; • indivīds – kāds uzdevuma risinājums – iespējams vai neiespējams); • populācija – indivīdu kopa.
Ģenētiskais algoritms (2/4) • Tiek ģenerēta iespējamo risinājumu sākuma populācija. • Iteratīvi tiek veikta paaudžu maiņa: • Visi vēcāki tiek novērtēti ar heiristiskā novērtējuma funkciju; • Vecāku novērtēšana, klonēti divi labākie (1. un 2. vieta); • Tiek nejauši izvēlēts gēna sagriešanas punkts; • Krustošanas gaitā iegūta bērnu populācija. • Izvēlēts dārgākais risinājums no visiem atrastiem iespējamiem.
Ģenētiskais algoritms (3/4) Indivīda (risinājuma) heiristiskā novērtējuma pamatā ir naudas vērtība, heiristiskās funkcijas vērtība ir: • Ja risinājums nav iespējams → naudas vērtība; • Ja risinājums ir iespējams → naudas vērtības kvadrāts. Tas nodrošina, ka iespējamiem risinājumiem heiristiskā vērtība tiecas būt lielākā.
Ģenētiskais algoritms (4/4) • Ģenētisks algoritms negarantē optimālo risinājumu. Pamatā ir pietuvinātā heiristiskā novērtējuma funkcija. • Algoritmā ir ieliktā nejaušība, tāpēc algoritms var sniegt atšķirīgus risinājumus.
Zaru atciršanas algoritms (1/5) • Tiek uzbūvēts risinājumu koks; • Katrā koka virsotne ir uzdevuma risinājums; • Apriori neveiksmīgie risinājumu tiek atcirti (šajā realizācijā vispār netiek ielikti kokā); • Neiespējamo risinājumu izslēgšana ļauj iegūt priekšrocību salīdzinājumā ar visu variāciju apskatīšanu.
Zaru atciršanas algoritms (2/5) Koks ir būvēts pēc šāda principa: • Sākne ir visu iespējamu un neiespējamu risinājumu apgabals; • Starpvirsotnes ir risinājumu apakšapgabali; • Beigu virsotnes ir iespējamie risinājumi. • „?” nozīmē, ka risinājumu apgabalā ietilpst risinājumi, kur attiecīgais priekšmets gan ir gan nav ielikts; • „0” nozīme, ka priekšmets nav ielikts; • „1” nozīmē, ka priekšmets ir ielikts.
Zaru atciršanas algoritms (4/5) Koka apstaigāšana notiek šādi: • Kā sākumpunkts, nodod koka sākni; • Tiek izmantota rekursīva funkcija, kura atgriež dārgāko risinājumu, kurš eksistē apakškokā; • Tiek izmantots fakts, ka apstaigāt virsotni tas ir apstaigāt pašu virsotni un tās tiešus pēctečus; • Notiek pārmeklēšana dziļumā; • Atcirstie apgabali netiek ģenerēti.
Zaru atciršanas algoritms (5/5) • Algoritms sniedz garantēti optimālo risinājumu, jo pārmeklē visus iespējamus risinājumus un atrod dārgāko; • Pie lielā pieejamu priekšmetu skaita stāvokļu telpa kļūst liela.
Dinamiskāsprogrammēšanas pieeja (1/5) • Tiek izmantota uzdevumu dališana uz mazakiem uzdevumiem • Katra mazaka uzdevuma risinajums ir optimals • Mazakie uzdevumi tiek risinati dalot tos velreiz • Mazakais uzdevums – tads, uz kuru var uzreiz atbildet • Mazako uzdevumu rezultati tiek saglabati
Dinamiskāsprogrammēšanas pieeja (2/5) • Galvenais reazlizacijā ir matrica (n+1) x (W+1), kur n ir priekšmetu daudzums un W ir uzdotas somas celtspēja. • Matrica tiek aizpildita pa rindiņam izmantojot sekošas formulas:
Dinamiskāsprogrammēšanas pieeja (3/5) Kw,iir maksimāla kopīga vērtība, kuru mēs varam iegūt pirmajiem i priekšmetiem, kuriem kopīga masanepārsniedzw Ʋiir i-ta priekšmeta cena. W ir maksimalacelspēja somai wi ir i-ta priekšmeta masa • K0,j = 0, 0 <= j <= n • Kw,0 = 0, 0 <= w <= W • Kw,i = max{Kw,i − 1, Kw-wi,i– 1 + Ʋi} | 0 <= w <= W, wi <= w} • Kw,i = Kw,i − 1, ja wi > w (mēs vairs nevaram ievietot priekšmetu somā)
Meklēšana pēc pirmās labākās sakritības (1/3) • Koku apiešanas algoritms • “Atvērtas“ virsotnes pēcteči ir ievietoti sarakstā • Izvēlas no virsotnēm to virsotni, kurai ir vislabākais heiristiskais novērtējums • Ir piemērots uzdevumiem ar papildinformāciju par mērķi
Meklēšana pēc pirmās labākās sakritības (2/3) • Vienkāršāka heiristika: F(i) = weighti / pricei • Funkcija neparedz atkāpšanos, jo tas neievēro pašreizējo situāciju. • No 2 priekšmetiem ar vienādu novērtējumu, algoritms var izmantot to priekšmetu, kuram ir lielāka masa.
Meklēšana pēc pirmās labākās sakritības (3/3) • Vairāk piemērota funkcija F(i) = (WeightLeft / weighti) / (pricei / weighti) • līdz noteiktam brīdim mēs varam likt somā vis kaut kas pēc skopa algoritma, kamēr somai nepaliek maz celtspējas, • Jo mazāk celtspējas somai, jo vairāk uzmanības algoritms pievērš tai.