Come risolvere un problema di arrangiamento all'Archivio Nazionale della Francia usando la teoria dei grafi?


9

Buonasera! Sto effettivamente facendo uno stage presso gli Archivi nazionali della Francia e ho riscontrato una situazione che volevo risolvere usando i grafici ...

I. La situazione polverosa

Vogliamo ottimizzare la disposizione dei libri della mia biblioteca in base alla loro altezza al fine di ridurre al minimo i costi di archiviazione. L'altezza e lo spessore dei libri sono noti. Abbiamo già sistemato i libri in ordine crescente di altezza H1,H2,,Hn (non so se fosse la cosa migliore ma ... è così che abbiamo fatto). Conoscendo lo spessore di ogni libro, possiamo determinare per ogni classe Hi lo spessore necessario per la loro disposizione, chiamandolo (ad esempio, i libri che sono potrebbero avere uno spessore totale ).H i = 23LiL i = 300Hi=23cmLi=300cm

La libreria può produrre mensole personalizzate, indicando la lunghezza e l'altezza desiderate (nessun problema con la profondità). Uno scaffale di altezza Hi e lunghezza xi costa Fi+Cixi , dove Fi è un costo fisso e Ci è il costo dello scaffale per unità di lunghezza.

Si noti che uno scaffale di altezza Hi può essere utilizzato per conservare libri di altezza Hj con ji . Vogliamo ridurre al minimo il costo.

Il mio tutor mi ha suggerito di modellare questo problema come un problema di ricerca del percorso. Il modello potrebbe comprendere vertici indicizzati da 0 a n . Il mio mentore mi ha suggerito di elaborare le condizioni esistenti, ogni significato del bordo e come elaborare la valutazione v ( i , j ) associata al bordo ( i , j ) . Starei anche bene con altre soluzioni e approfondimenti.n+10nv(i,j)(i,j)

Ad esempio abbiamo per la Convenzione (un periodo oscuro della storia francese) una tale matrice:

i1234Hi12cm15cm18cm23cmLi100cm300cm200cm300cmFi1000120011001600Ci5/cm6/cm7/cm9/cm

II. I presupposti di un topo di biblioteca in tirocinio

Penso di dover calcolare un algoritmo tra Djikstra, Bellman o Bellman-Kalaba ... Sto cercando di scoprire quale nelle seguenti sottosezioni.

1. Condizioni

Siamo qui con un problema di pathfinding tra un vertice e un vertice n , n deve essere in uscita da 0 (vale a dire, un percorso (o una camminata) deve esistere tra 0 e n0nn00n

2.Cosa calcolare (aggiornato (25/10/2015))

// Lavoro ancora in corso per quanto non so a quali vertici e quali bordi modellare ...

La mia ipotesi migliore

Penso che ci liberiamo di almeno un tipo di scaffali ogni volta che troviamo un percorso più breve dall'array, ma questa è solo la mia ipotesi ...;).

Penso che il modo migliore per modellare come acquistare scaffali e conservare i nostri libri debba assomigliare al seguente grafico (ma, per favore, sentiti libero di criticare il mio metodo!;))

da 0 grafico

vertici:

  • sono scaffali che possiamo usare per conservare i nostri libri.i[1,4]
  • è lo stato in cui non è memorizzato alcun libro. L'uso di questo vertice mi consente di utilizzare ciascuna formula di costo (bordi).0

bordi: Fi+Cixi,i[1,4] sono i costi usando un tipo di scaffalatura. per esempio: fom 0 è il costo che utilizza solo scaffali di tipo 1 per conservare le nostre pergamene, i nostri manoscritti ...F1+C1x1

Eppure, da qui non so come creare il mio problema di percorso più breve.

Anzi, non saprei dove avrei riposto tutti i miei libri.

Questo mi porta a un'altra idea ...

un'altra idea ...

a 0 grafico

Qui sto cercando il percorso più breve da un dato vertice allo stato 0, vale a dire sapendo che il documento più alto è alto, io sto cercando il modo più economico di organizzare i miei documenti.type i

vertici:

  • sono scaffali che possiamo usare per conservare i nostri libri.i[1,4]
  • è lo stato in cui sono memorizzati tutti i libri. L'uso di questo vertice mi consente di utilizzare ciascuna formula di costo (bordi).0

bordi: sono i costi usando un tipo di scaffalatura. ad esempio: F 1 + C 1 x 1 dal 3 è il costo utilizzando t y p e 1 ripiani dopo usandoFi+Cixi,i[1,4]F1+C1x1type 1 ripiani per memorizzare le nostre pergamene, manoscritti ...type 3

Tuttavia, non so dove mettere .F4+C4x4

3.Come calcolare

Penso che dobbiamo iniziare con gli scaffali più alti per quanto possiamo quindi conservare i libri più piccoli ...

Fare

Prendiamo cm di con l' altezza H i = n in uno scaffale della loro altezza + z cm di un'altezza H i = n - 1 fino a quando non diventa più costoso che prendere lo scaffale H i = n - 1 . allora ioLnHi=nzHi=n1Hi=n1i=i1

Mentre io> <0

Infine, non so come fare x variare ...

Vale a dire come scegliere di mettere documenti in 4 oxi4 per esempio.3


Quanti libri ci sono? cioè gli algoritmi gli unici accettabili? O(n),O(nlogn)
Giovanni,

5
Non vedo che cosa abbia a che fare con i grafici: perché forzarti a fare qualcosa basato sui grafici quando il problema attuale è qualcosa come l'imballaggio dei rifiuti? Il tuo modello non riesce a tenere conto delle funzionalità di scaffalature. Ad esempio, un'unità di scaffalatura ha mensole di una certa lunghezza: puoi impilare mensole lunghe cinque metri l'una sopra l'altra, ma una mensola da 99 cm, una mensola da 172 cm, una mensola da 128 cm, una mensola da 83 cm e una mensola da 18 cm (lunghezza totale 5m) sono completamente inutili. E perché mai è costato € 2500 per costruire un metro di scaffalature alte 23 cm? Non sembra molto realistico. Questa biblioteca è reale?
David Richerby,

3
1. Non capisco perché ti costringi ad affrontare questo problema come problematico. Se stai affrontando questa situazione in pratica, non ha senso imporre un limite così inutile: perché dovresti rifiutare altre soluzioni che risolvono il tuo problema usando un approccio diverso? Ti consiglio di modificare la domanda per rimuovere tale requisito. 2. Non ci hai ancora detto quanti libri ci sono. Puoi darci un numero? Qualcosa di più specifico di "un loooot", anche se è solo una stima dell'ordine di grandezza?
DW

1
Sembra che tu abbia speso parecchi pensieri sul tuo problema. Quello è buono! Tuttavia, memorizzare una storia completa dei tuoi pensieri in una domanda lo rende piuttosto ingombrante. SE funziona molto meglio se pubblichi un'unica domanda focalizzata e lo sfondo sufficiente per rendere la domanda rispondibile.
Raffaello

1
Per quanto riguarda "Ho bisogno di esprimerlo come un problema grafico" - questo è un requisito ... stupido. Se il problema è in P, scriverlo come LP e calcolare un'istanza di flusso massimo equivalente. Ecco. Se è in NP ma non sai che si trova in P, scrivilo come IP e convertilo in qualsiasi problema grafico completo NP. Ecco.
Raffaello

Risposte:


5

Ti vedo chiedere: "Voglio risolverlo con l'algoritmo di Dijkstra ma non riesco a impostare un buon grafico su cui eseguire", quindi ti presenterò un tale grafico.

Un digrafo in cui i vertici sono insiemi di libri accantonati.

Ok, abbiamo libri con altezze 1 n N e larghezze W n ,Hn, 1nNWn, con altezze in ordine crescente per ogni libro e vogliamo raggrupparli in scaffali.

Riutilizzare questi numeri per i nodi della soluzione dove quel nodo rappresenta uno stato della soluzione "tutti i libri i n sono stati accantonati". Inizieremo quindi dal nodo 0 e cercheremo di arrivare al nodo N con il percorso più breve con l'algoritmo di Dijkstra. Questi nodi sono i vertici del nostro grafico.n,in0N

Disegniamo quindi dal nodo a qualsiasi nodo j > i un bordo diretto che presuppone che tutti quei libri intermedi saranno accantonati con uno scaffale, cioè la lunghezza di questo bordo è L i j = F j + C j j n = i + 1 W n , dove ho ipotizzato che quando stavi dicendo che il costo della somma era F i + C i x i il pedice i sulla x iij>i

Lij=Fj+Cj n=i+1jWn,
Fi+Cixiixi era totalmente priva di significato.

L'algoritmo di Dijkstra poi ci danno un percorso più breve di lunghezza al nodo N.


@Christ Drost, thaaaaaaaaanks, molto! Ci è voluto del tempo per capire cosa stavi cercando di creare senza alcun grafico ma era esattamente quello che stavo cercando! Ho letto il tuo profilo straordinario, si adatta alla tua risposta ahah;)!
Revolucion per Monica,

Mi chiedevo se Bellman-Kalaba non fosse più appropriato di Djikstra, l'unica necessità è di non avere alcuna ciclica (e noi no)
Revolucion per Monica,

Ed è un algoritmo che imposta definitivamente anche le lunghezze dei bordi. "Il nodo n rappresenta una soluzione affermando che" tutti i libri i≤n sono stati accantonati. "" Non possiamo tornare indietro anche con ciò che hai fornito.
Revolucion per Monica,

Non sono sicuro di cosa significhi "tornare indietro", ma se volessi "tornare indietro" probabilmente dovresti considerare un grafico più sofisticato in cui un nodo è un elenco di "numero di libri accantonati da questo scaffale", un Intmaggiore di 1. Questo porta a un grafico di n^2vertici. Quando stai cercando un percorso tra A e B e tutti i pesi dei bordi sono positivi, allora non c'è differenza tra Dijkstra e Bellman-Kalaba, tranne Bellman-Kalaba che cerca sempre di aggiornare i bordi che non necessitano di aggiornamento; Dijkstra memorizza semplicemente i puntatori ai vertici che gli interessano.
CR Drost,

7

Penso di avere una soluzione al tuo problema. Spero di non aver frainteso qualcosa nella definizione del tuo problema. Eccolo:

O(n2)

n

ih1,h2,...,hih1<h2<...<hi .

Dimostriamo le seguenti due cose:

Ca>Ca1

Ba1a1cost=other,stuff+Ca1thickness(Ba1)

Ca<Ca1a1aha1<ha

cost=other,stuff+Cathickness(Ba)

Ca>Ca1

jaheight(j)>ha1

height(j)ha1a1

Delle due cose che abbiamo dimostrato, B è quella significativa.

dp[a]1...aheight(a)dp[a]dp[1],dp[2],....dp[a1]

(a,b)

Ultimo ma non meno importante, come ho detto sopra, poiché i libri sono grandi, non è possibile utilizzare l'algoritmo per ogni libro. Penso che rappresentare la sua altezza con la somma del suo spessore dovrebbe fare il trucco. (Penso che sia già così dalla tua dichiarazione)

(Immagino che il numero di altezze diverse sia molto inferiore al numero di libri)



grazie per questo valido aiuto! Innanzitutto ho avuto una domanda per la parte A: perché abbiamo una contraddizione dovuta al problema dell'ottimalità? Capisco logicamente che un costo inferiore quando si conservano libri di altezza inferiore negli scaffali più alti è contraddittorio, ma io quale ottimalità assumiamo? (Forse perché faccio solo programmazione dinamica il prossimo semestre ...?)
Revolucion per Monica,

Cun'<Cun'-1

un'Cun'>Cun'+1aa+1aFa
jjohn

0

A volte il semplice "ingrandimento" del "problema più vicino" in letteratura può aiutare a comprendere la teoria e il background dietro il problema, costruire un'astrazione ed eliminare dettagli spuri. Il problema più vicino in letteratura al tuo sembra essere quello che è noto come "problema di imballaggio del contenitore di dimensioni variabili". I documenti di esempio sono inclusi di seguito. Questo problema è stato teoricamente studiato ed esiste un software standardizzato, che si manifesta nell'ottimizzazione delle scatole di imballaggio, ad esempio nei contenitori di spedizione per camion. Esistono anche versioni in cui è possibile regolare le dimensioni del contenitore. Esistono molti approcci algoritmici. es, da 1 ° carta:

Il problema affrontato in questo documento è quello di impacchettare ortogonalmente una data serie di oggetti di forma rettangolare in un numero minimo di bidoni rettangolari tridimensionali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.