Como resolver um problema de arranjo no Archive Nationale of France usando a teoria dos grafos?


9

Boa noite! Na verdade, estou fazendo um estágio no Archives Nationales da França e encontrei uma situação que queria resolver usando gráficos ...

I. A situação empoeirada

Queremos otimizar a organização dos livros da minha biblioteca de acordo com a altura deles, a fim de minimizar o custo do arquivo. A altura e a espessura dos livros são conhecidas. Já organizamos os livros em ordem crescente de altura H1,H2,,Hn (não sei se foi a melhor coisa, mas ... foi assim que fizemos). Sabendo espessura de cada livro, podemos determinar para cada Hi classe a espessura necessária para o seu arranjo, chamá-lo (por exemplo, os livros que são de altura pode ter espessura totalH i = 23LiL i = 300Hi=23cmLi=300cm ).

A biblioteca pode fabricar prateleiras personalizadas, indicando o comprimento e a altura desejados (sem problemas com a profundidade). Uma prateleira de altura e comprimento custa F_i + C_ix_i , onde F_i é um custo fixo e C_i é o custo da prateleira por unidade de comprimento.x i F i + C i x i F i C iHixiFi+CixiFiCi

Observe que uma prateleira da altura Hi pode ser usada para armazenar livros da altura Hj com jEu . Queremos minimizar o custo.

Meu tutor sugeriu que eu modelasse esse problema como um problema de localização de caminhos. O modelo pode envolver vértices indexados de a . Meu mentor sugeriu que eu elaborasse as condições existentes, cada significação de borda e como calcular a avaliação associada à borda0 n v ( i , j ) ( i , j )n+1 10 0nv(i,j)(Eu,j) . Eu também ficaria bem com outras soluções e insights.

Por exemplo, temos para a Convenção (um período sombrio da história francesa) uma matriz assim:

i1234Hi12cm15cm18cm23cmLi100cm300cm200cm300cmFi1000120011001600Ci5/cm6/cm7/cm9/cm

II As suposições de um leitor estagiário

Acho que tenho que calcular um algoritmo entre Djikstra, Bellman ou Bellman-Kalaba ... Estou tentando descobrir qual das subseções a seguir.

1. Condições

Estamos aqui com um problema de busca de caminho entre um vértice e um vértice , deve sair de (ou seja, um caminho (ou uma caminhada) deve existir entre en n 0 0 n0nn00n

2.O que calcular (atualizado em 25/10/2015)

// Trabalho ainda em processo, até onde eu não sei quais vértices e quais arestas modelar ...

Meu melhor palpite

Acho que nos livramos de pelo menos um tipo de prateleira toda vez que encontramos um caminho mais curto da matriz, mas essa é apenas minha suposição ...;).

Acho que a melhor maneira de modelar como comprar prateleiras e armazenar nossos livros deve ser semelhante ao gráfico a seguir (mas, por favor, sinta-se à vontade para criticar meu método!;))

do gráfico 0

vértices:

  • i[1,4] são prateleiras que podemos usar para guardar nossos livros.
  • 0 é o estado em que nenhum livro está armazenado. O uso desse vértice permite que eu use cada fórmula de custo (arestas).

arestas: são o custo usando um tipo de prateleira. por exemplo: fom 0 é o custo usando apenas prateleiras do tipo 1 para armazenar nossos pergaminhos, manuscritos ...Fi+Cixi,i[1,4]F1+C1x1

No entanto, daqui em diante não sei como criar o meu problema de caminho mais curto.

Na verdade, eu não saberia onde guardaria todos os meus livros.

Isso me leva a outra ideia ...

outra ideia...

para 0 gráfico

Aqui, estou procurando o caminho mais curto de um determinado vértice para o estado 0, ou seja, sabendo que o documento mais alto é do altura, estou procurando a maneira mais barata de organizar meus documentos.type i

vértices:

  • i[1,4] são prateleiras que podemos usar para guardar nossos livros.
  • 0 é o estado em que todos os livros estão armazenados. O uso desse vértice permite que eu use cada fórmula de custo (arestas).

arestas: são o custo usando um tipo de prateleira. por exemplo: de 3 é o custo usando prateleiras depois de usar prateleiras para armazenar nossos pergaminhos, manuscritos ...F 1 + C 1 x 1 T y p e um T y p e trêsFi+Cixi,i[1,4]F1+C1x1type 1type 3

No entanto, não sei onde colocar .F4+C4x4

3.Como calcular

Penso que temos de começar pelas prateleiras mais altas, na medida em que possamos guardar os livros mais pequenos ...

Faz

Tomamos cm com a altura H i = n em uma prateleira de sua altura + z cm de uma altura H i = n - 1 até que se torne mais caro do que pegar a prateleira H i = n - 1 . então i = i - 1LnHi=nzHi=n1Hi=n1i=i1

Enquanto i> <0

Finalmente, eu não sei como fazer x variar ...

Isto é como escolher a colocar documentos em 4 ou 3 , por exemplo.xi43


Quantos livros estão lá? ou seja, os algoritmos os únicos que são aceitáveis? O(n),O(nlogn)
jjohn

5
Não vejo o que isso tem a ver com gráficos: por que se forçar a fazer algo baseado em gráficos quando o problema em questão é algo como empacotar caixas? Seu modelo não leva em consideração os aspectos práticos das prateleiras. Por exemplo, uma prateleira tem prateleiras de um determinado comprimento: você pode empilhar prateleiras de cinco metros de comprimento uma sobre a outra, mas uma prateleira de 99 cm, uma prateleira de 172 cm, uma prateleira de 128 cm, uma prateleira de 83 cm e uma prateleira de 18 cm (comprimento total 5m) são completamente inúteis. E, por que diabos custa 2500 € para construir um metro de estantes de 23 cm de altura? Isso não parece remotamente realista. Essa biblioteca é real?
David Richerby

3
1. Não entendo por que você se obriga a abordar isso como um problema de busca de caminhos. Se você está enfrentando essa situação na prática, não faz sentido impor uma limitação desnecessária - por que você rejeitaria outras soluções que resolvem seu problema usando uma abordagem diferente? Eu recomendo que você edite a pergunta para remover esse requisito. 2. Você ainda não nos disse quantos livros existem. Você pode nos dar um número? Algo mais específico do que "um loooot", mesmo que seja apenas uma estimativa de ordem de magnitude?
DW

11
Parece que você já pensou bastante no seu problema. Isso é bom! No entanto, armazenar uma história completa de seus pensamentos em uma pergunta a torna bastante difícil. O SE funciona muito melhor se você postar uma pergunta única e focada e apenas o histórico suficiente para torná-la responsável.
Raphael

11
Em relação a "Eu preciso expressá-lo como um problema gráfico" - isso é um ... requisito estúpido. Se o problema estiver em P, escreva-o como LP e calcule uma instância de fluxo máximo equivalente. Voila. Se estiver em NP, mas você não souber que está em P, escreva-o como IP e converta-o em qualquer problema gráfico completo de NP. Voila.
Raphael

Respostas:


5

Vejo você perguntando: "Quero resolver isso com o algoritmo de Dijkstra, mas não consigo configurar um bom gráfico para rodar", portanto, apresentarei esse gráfico.

Um dígrafo em que os vértices são conjuntos de livros arquivados.

Ok, temos livros com alturas 1 n N e larguras W n , com alturas em ordem ascendente de cada livro, e queremos reuni-las em prateleiras.Hn, 1nNWn,

Reutilize esses números para os nós de solução em que esse nó representa um estado de solução "todos os livros i n foram arquivados". Portanto, iniciaremos no nó 0 e procuraremos chegar ao nó N pelo caminho mais curto com o algoritmo de Dijkstra. Esses nós são os vértices do nosso gráfico.n,in0N

Em seguida, traçamos do nó para qualquer nó j > i uma aresta direcionada que assume que todos esses livros intermediários serão arquivados com uma prateleira, ou seja, o comprimento dessa aresta é L i j = F j + C j j n = i + 1 W n , onde assumi que, quando você dizia que o custo da soma era F i + C i x i, o índice i no x i era totalmente sem sentido.ij>i

Lij=Fj+Cj n=i+1jWn,
Fi+Cixiixi

O algoritmo de Dijkstra, então, dar-nos um caminho mais curto de comprimento ao nó N.


@Christ Drost, thaaaaaaaaanks, muito! Demorou tempo para entender o que você estava tentando criar sem nenhum gráfico, mas era exatamente isso que eu estava procurando! Eu li o seu perfil incrível, ele se encaixa com a sua resposta haha;)!
Revolucion para Monica

Fiquei me perguntando se Bellman-Kalaba não era mais apropriado do que Djikstra, a única necessidade é não ter qualquer cicruit (e nós não)
Revolucion para Monica

E é um algorthm que define definitivamente os comprimentos das bordas também. "nó n representa uma solução declarando" todos os livros que foram arquivados. "" Também não podemos voltar atrás com o que você forneceu.
Revolucion para Monica

Não sei ao certo o que significa "retroceder", mas se você quiser "retroceder", provavelmente precisará considerar um gráfico mais sofisticado, em que um nó é uma lista de "número de livros arquivados nesta prateleira" e Intmaior que 1. Isso leva a um gráfico de n^2vértices. Quando você está procurando um caminho entre A e B e todos os pesos das arestas são positivos, não há diferença entre Dijkstra e Bellman-Kalaba, exceto que a Bellman-Kalaba está sempre tentando atualizar arestas que não precisam ser atualizadas; Dijkstra apenas armazena ponteiros para os vértices com os quais se importa.
CR Drost

7

Eu acho que tenho uma solução para o seu problema. Espero não ter entendido algo errado na definição do seu problema. Aqui vai:

O(n2)

n

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

Vamos provar as duas coisas a seguir:

Ca>Ca1

Ba1a1cost=other,stuff+Ca1thickness(Ba1)

Ca<Ca1a1aha1<ha

cost=other,stuff+Cathickness(Ba)

Ca>Ca1

jaheight(j)>ha1

height(j)ha1a1

Das duas coisas que provamos, B é a mais significativa.

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

(a,b)

Por último, mas não menos importante, como eu disse acima, como os livros são grandes, você não pode usar o algoritmo para cada livro. Penso que representar a sua altura pela soma da sua espessura deve funcionar. (Eu acho que já é assim na sua declaração)

(Suponho que o número de alturas diferentes seja muito menor que o número de livros)



obrigado por esta ajuda sólida! Primeiro, fiz uma pergunta para a parte A: por que temos uma contradição devido ao problema de otimização? Entendo logicamente que um custo mais baixo ao armazenar livros de estatura mais baixa em prateleiras mais altas é contraditório, mas que otimização assumimos? (Talvez porque eu só faça programação dinâmica no próximo semestre ...?)
Revolucion for Monica

Cuma<Cuma-1 1

aCa>Ca+1aa+1aFuma

0

Às vezes, apenas "ampliar" o "problema mais próximo" na literatura pode ajudar a entender a teoria e os antecedentes por trás do problema, criar uma abstração e eliminar detalhes espúrios. O problema mais próximo na literatura do seu parece ser o que é conhecido como "problema de empacotamento de compartimento de tamanho variável". Papéis de amostra estão incluídos abaixo. Esse problema é altamente estudado teoricamente e existe algum software pronto para uso, ele aparece na otimização de caixas de embalagem em, por exemplo, caminhões que enviam contêineres. Existem também versões em que é possível ajustar o tamanho do contêiner. Existem muitas abordagens algorítmicas. por exemplo, do artigo:

O problema abordado neste artigo é o de embalar ortogonalmente um determinado conjunto de itens de forma retangular em um número mínimo de caixas retangulares tridimensionais.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.