Dobry wieczór! Właśnie odbywam staż w Archives Nationales of France i napotkałem sytuację, którą chciałem rozwiązać za pomocą wykresów ...
I. Zakurzona sytuacja
Chcemy zoptymalizować rozmieszczenie książek w mojej bibliotece zgodnie z ich wysokością, aby zminimalizować koszty archiwizacji. Wysokość i grubość książek są znane. Książki ułożyliśmy już w porządku rosnącym(Nie wiem, czy to była najlepsza rzecz, ale ... tak to zrobiliśmy). Znając grubość każdej książki, możemy określić dla każdej z nich określ wymaganą grubość do ich ułożenia, nazwij to (na przykład, które są wysoki może mieć całkowitą grubość ).
Biblioteka może produkować niestandardowe półki, wskazując pożądaną długość i wysokość (bez problemu z głębokością). Półka wysokości i długość koszty , gdzie jest kosztem stałym i to koszt półki na jednostkę długości.
Pamiętaj, że półka wysokości może służyć do przechowywania książek wysokości z . Chcemy zminimalizować koszty.
Mój nauczyciel zasugerował, że modeluję ten problem jako problem ze znalezieniem ścieżki. Model może obejmować forma indeksowana wierzchołków do . Mój mentor zasugerował, że opracowałem istniejące warunki, znaczenie każdej krawędzi i jak opracować wycenę związane z krawędzią . Byłbym również w porządku z innymi rozwiązaniami, a także ze spostrzeżeniami.
Na przykład mamy dla konwencji (mroczny okres historii Francji) taką tablicę:
II. Założenia mola szkoleniowego praktykanta
Myślę, że muszę obliczyć algorytm między Djikstrą, Bellmanem lub Bellmanem-Kalabą ... Próbuję dowiedzieć się, który z nich w poniższych podrozdziałach.
1. Warunki
Jesteśmy tutaj z problemem wyszukiwania ścieżki między wierzchołkiem i wierzchołek , musi pochodzić z (to znaczy między ścieżką musi istnieć ścieżka (lub spacer) i
2.Co obliczyć (zaktualizowano (25/10/2015))
// Nadal pracuję, o ile nie wiem, które wierzchołki i które krawędzie modelować ...
Moje najlepsze przypuszczenie
Myślę, że pozbywamy się co najmniej jednego rodzaju półek za każdym razem, gdy znajdziemy najkrótszą ścieżkę z tablicy, ale to tylko moje założenie ...;).
Myślę, że najlepszy sposób modelowania sposobu kupowania półek i przechowywania naszych książek musi wyglądać jak na poniższym wykresie (ale proszę, nie wahaj się krytykować mojej metody!;))
wierzchołki:
- to półki, których możemy użyć do przechowywania naszych książek.
- jest stanem, w którym żadna książka nie jest przechowywana. Korzystanie z tego wierzchołka pozwala mi używać każdej formuły kosztu (krawędzi).
krawędzie: są kosztami przy użyciu rodzaju półki. na przykład: fom 0 to koszt używania tylko półek typu 1 do przechowywania naszych pergaminów, rękopisów ...
Jednak stąd nie wiem, jak stworzyć mój najkrótszy problem.
Rzeczywiście, nie wiedziałbym, gdzie schowałbym wszystkie moje książki.
To prowadzi mnie do innego pomysłu ...
inny pomysł...
Tutaj szukam najkrótszej ścieżki od danego wierzchołka do stanu 0, czyli wiedząc, że najwyższy dokument to wysoki, szukam najtańszego sposobu na uporządkowanie dokumentów.
wierzchołki:
- to półki, których możemy użyć do przechowywania naszych książek.
- to stan, w którym przechowywane są wszystkie książki. Korzystanie z tego wierzchołka pozwala mi używać każdej formuły kosztu (krawędzi).
krawędzie: są kosztami przy użyciu rodzaju półki. na przykład: od 3 to koszt użycia półki po użyciu półki do przechowywania naszych pergaminów, rękopisów ...
Nie wiem jednak, gdzie umieścić .
3.Jak obliczyć
Myślę, że musimy zacząć od wyższych półek, o ile możemy następnie przechowywać mniejsze książki ...
Zrobić
Bierzemy cm z wysokość w półce o ich wysokości + cm wysokość, aż stanie się droższy niż biorąc odłożyć na półkę. następnie
Podczas gdy i> <0
Wreszcie, nie wiem, jak różnicować x ...
To znaczy, jak wybrać dokumenty w lub na przykład.
źródło
Odpowiedzi:
Widzę, jak pytasz: „Chcę rozwiązać ten problem za pomocą algorytmu Dijkstry, ale nie mogę ustawić dobrego wykresu do uruchomienia”, dlatego przedstawię ci taki wykres.
Digraph, w którym wierzchołki to zestawy półek z książkami.
Ok, mamy książki o wysokościHn, 1≤n≤N i szerokości Wn, z wysokościami w porządku rosnącym dla każdej książki i chcemy pogrupować je w półki.
Ponownie użyj tych liczb dla węzłów rozwiązanian, gdzie ten węzeł reprezentuje stan rozwiązania „wszystkie książki i≤n zostały odłożone. ”Dlatego zaczniemy od węzła 0 i staraj się dostać do węzła N najkrótszą ścieżką z algorytmem Dijkstry. Te węzły są wierzchołkami naszego wykresu.
Następnie rysujemy z węzłai do dowolnego węzła j>i skierowana krawędź, która zakłada, że wszystkie te książki pośrednie będą półki z jedną półką, tj. długość tej krawędzi wynosi
Algorytm Dijkstry da nam ścieżkę do węzła o najkrótszej długościN.
źródło
Int
większy niż1
. Prowadzi to do wykresun^2
wierzchołków. Kiedy szukasz ścieżki między A i B, a wszystkie wagi krawędzi są dodatnie, nie ma różnicy między Dijkstra i Bellman-Kalaba, z tym wyjątkiem, że Bellman-Kalaba zawsze próbuje aktualizować krawędzie, które nie wymagają aktualizacji; Dijkstra przechowuje jedynie wskaźniki do wierzchołków, na których mu zależy.Myślę, że mam rozwiązanie twojego problemu. Mam nadzieję, że nie zrozumiałem czegoś w definicji twojego problemu. Oto jest:
Opiszę podejście do programowania dynamicznego. To jestO(n2) algorytm, co oznacza, że skoro liczba książek jest ogromna, niewiele ci to pomoże. (musisz go trochę zmodyfikować!). Przy odrobinie pracy możesz zamienić wspomniane podejście programowania dynamicznego na przykład znalezienia najkrótszej ścieżki na ukierunkowanym wykresie acyklicznym. (Który sam jest algorytmem programowania dynamicznego: P)
Załóżmy, że sąn książki o różnej wysokości.
Załóżmy również, że optymalne koszty osiąga się, przypisując książki doi półki wysokości h1,h2,...,hi gdzie h1<h2<...<hi .
Udowodnijmy następujące dwie rzeczy:
ZA.Ca>Ca−1
Załóżmy, że jest inaczej. PozwolićBa−1 być zestawem książek przypisanych do półki a−1
Następnie cost=other,stuff+Ca−1∗thickness(Ba−1)
Ponieważ zakładaliśmy,Ca<Ca−1 , przenieśmy wszystkie książki z półki a−1 do a (co jest możliwe od tego czasu ha−1<ha .
Więc teraz,cost=other,stuff+Ca∗thickness(Ba) który jest niższy niż wcześniej. Mamy zatem sprzeczność z powodu założonej przez nas Optymalności.
WięcCa>Ca−1 dla wszystkich utworzonych półek
B. Niechj być książką przypisaną do półki a . Udowodnijmy toheight(j)>ha−1
To jest dość łatwe. Gdybyheight(j) był mniejszy niż ha−1 możemy odłożyć książkę na półkę a−1 dla lepszego kosztu (ze względu na A).
Z dwóch rzeczy, które udowodniliśmy, B jest znaczący.
Pozwolićdp[a] = optymalny koszt półek na książki 1...a aby była półka height(a) . Musisz znaleźć sposób na zdefiniowaniedp[a] według wartości dp[1],dp[2],....dp[a−1]
Zatrzymam się tutaj. Jeśli znasz programowanie dynamiczne, korzystając z faktu B, z łatwością wymyślisz powtórzenie. W przeciwnym razie zapytaj :). Jak powiedziałem, można to zmienić w problem DAG. Znając powyższą relację, łatwo zdać sobie sprawę z tego, co stanowi przewagę(a,b) oznacza i określa jego koszt.
Wreszcie, jak powiedziałem powyżej, ponieważ książki są duże, nie można używać algorytmu dla każdej książki. Myślę, że reprezentowanie jego wysokości przez sumę grubości powinno załatwić sprawę. (Myślę, że tak już jest w twoim oświadczeniu)
(Zgaduję, że liczba różnych wysokości jest znacznie mniejsza niż liczba książek)
źródło
Czasami samo „powiększenie” „najbliższego problemu” w literaturze może pomóc w zrozumieniu teorii i tła problemu, zbudować abstrakcję i wyeliminować fałszywe szczegóły. Najbliższym twoim problemem w literaturze jest tak zwany „problem pakowania pojemników o zmiennej wielkości”. Przykładowe dokumenty znajdują się poniżej. Problem ten jest wysoce teoretycznie zbadany i istnieje pewne gotowe oprogramowanie, które ujawnia się w optymalizacji opakowań w np. Kontenerach transportowych ciężarówek. Istnieją również wersje, w których można dostosować rozmiar pojemnika. Istnieje wiele podejść algorytmicznych. na przykład, od 1 st papieru:
OPTYMALIZACJA TRÓJWYMIAROWEGO OPAKOWANIA NA BINACH POPRZEZ SYMULACJĘ / Dube, Kanavathy
Problem z pakowaniem pojemników z niepewnymi objętościami i pojemnościami / Peng, Zhang
3d algorytmy pakowania bin stosu
źródło