NP completo ou NP problemas difíceis na vida real

17

Alguém tem exemplos da vida real em que resolve regularmente problemas completos ou complexos de NP (por heurística ou buscando uma solução subótima ou o que seja) em seu trabalho? Sei que eles ocorrem no planejamento, planejamento, design VLSI etc., mas estou tentando ter uma idéia das principais indústrias que hoje empregam programadores ou engenheiros que fazem isso regularmente. Se alguém desenvolvesse conhecimento ou uma biblioteca, por exemplo, otimização combinatória, onde alguém poderia usá-lo como parte de um trabalho de programação?

Alguma conta pessoal?

alta largura de banda
fonte
O que você quer dizer com "regularmente"
Conrad Frix
@Conrad, bem, acho que é uma ideia subjetiva. Eu diria que mais de 5 a 10% do esforço está focado na solução de problemas np-complete ou np-hard.
highBandWidth
A programação de IA em jogos tem o potencial de ser NP-completa, acredito.
Michael K
Existem muitos problemas difíceis de NP por aí (a programação e o planejamento com recursos finitos geralmente são difíceis de NP). No entanto, a otimização combinatória é o caminho errado a seguir. Ser capaz de gerar 100! combinações o mais rápido possível é muito menos útil do que ser capaz de aplicar heurísticas específicas de domínio.
22711 David Thornley
@ David, eu não quis dizer gerar combinações por otimização combinatória. Eu estava me referindo a uma classe de problemas, como k-SAT ou Problema do Caixeiro Viajante etc.
highBandWidth

Respostas:

8

Algumas das coisas em que consigo pensar (na maioria delas, mais ou menos):

  • Ambientes de desenvolvimento para idiomas e compiladores. Perguntas como: essa gramática gera uma linguagem ambígua? (Esse problema é realmente indecidível!)
  • Recuperação de dados. Remontagem de pacotes de dados parcialmente perdidos ou recuperação de arquivos fragmentados. (Complexidade fatorial)
  • Segurança de software. Avaliação de todos os caminhos de execução possíveis por meio de um software para determinar se algum comportamento observado pode ser atribuído a ele. (Problema de parada?)
  • Logística. Otimizando o uso de transportes com base em pacotes para transporte, seu tamanho e para onde eles devem ir. (Pelo menos exponencial)

Existem muitos exemplos padrão, como encontrar a rota mais curta, agendar enfermeiros, etc. mas se você gosta de otimização combinatória, sabe tudo sobre esses :)

Deckard
fonte
Então, existem programadores empregados por empresas de logística que são realmente dedicados a resolver esses problemas de otimização ou a maioria dessas operações geralmente é resolvida uma vez e é repetida apenas para a maioria das empresas? +1 para vários exemplos. Você / você esteve envolvido em alguma dessas?
highBandWidth
As duas primeiras ferramentas para as quais escrevi, a terceira é sobre a qual os colegas trabalham. Eu esperaria que as empresas grandes de logística fazer ativamente a pesquisa nesta área, uma vez que pode salvar-lhes milhões de dólares se conseguir um desempenho extra casal por cento através de algum novo algoritmo :)
Deckard
Eu entrevistei para um papel de vendedor ambulante. A grande empresa-mãe tinha uma sala cheia de doutores escravizados na esperança de obter alguns décimos de uma melhoria percentual em seu encaminhamento. O que valeria alguns milhões de dólares para eles ... todos os dias. Então esses lugares existem. O material de roteamento e a programação são os dois figurões - imagine que você tenha 1000 pessoas e uma fábrica que opera dois ou três turnos. Agora agendar todos a trabalhar para a próxima manutenção mês em mente estes 200 regras e preferências everyones ...
9

Utilizei o recozimento simulado com restrição de tempo para resolver um problema de vendedor ambulante na fabricação de painéis de toque. A cada milissegundo que podíamos barbear a partir do tempo de ciclo da gravação a laser de cada painel aumentava a taxa de transferência, a utilização e, portanto, a lucratividade da máquina, por isso dediquei muito esforço a minimizar o tempo morto (caminhos sem riscas) entre os caminhos de riscagem (que obviamente não poderia ser otimizado).

Usei um algoritmo com limite de tempo para contornar a dureza NP do problema, pois não podíamos arcar com o risco de o cálculo da otimização demorar mais do que o tempo economizado pelo caminho mais otimizado. Enquanto a máquina estava movendo o painel da posição de carregamento para a posição em que a cabeça do laser estava no canto mais próximo, tive tempo para executar algumas simulações. O algoritmo quase nunca chegou a ser concluído dentro das poucas centenas de milissegundos da mudança, mas quase sempre retornava um caminho de gravação melhor do que qualquer um dos modelos simples e não adaptativos que sempre usamos antes (como caminhos em espiral ou cobra).

Mark Booth
fonte
2
Isso é legal. Mas eu pensei que todos os painéis teriam o mesmo padrão, e você resolveria o problema uma vez e não repetidamente para cada widget. Por que você teve que resolver isso toda vez?
highBandWidth
2
O padrão ideal era o mesmo para cada painel, mas o alinhamento mecânico do painel, a posição das camadas anteriores no processo e a natureza lado a lado da cabeça de corte a laser significava que um conjunto dinâmico de sub-padrões tinha que ser calculado para cada painel individualmente e depois otimizados. Foi um problema interessante de se trabalhar, especialmente devido às restrições de tempo.
Mark Booth
7

Estou trabalhando (agora, na verdade) no problema de bioinformática do alinhamento de várias seqüências de DNA local. O ponto disso é que, se muitas seqüências de genes com alguma propriedade comum (perfil de expressão semelhante ou a mesma ligação do fator de transcrição em um experimento com chip ChIP) se alinham fortemente em algum momento, então você provavelmente já encontrou a razão de sua propriedade. Por outro lado, estou mais interessado nos aspectos estatísticos do problema. Mesmo que seja NP-difícil, você não perde muito usando heurísticas na prática. A parte interessante do problema, IMHO, é um problema de relação sinal / ruído.

dsimcha
fonte
1
você está usando abordagens combinatórias / ai clássicas ou estatísticas. De certa forma, todo o moderno aprendizado de máquina, clustering e nlp lida com problemas de np-complete, mas geralmente são atacados de uma perspectiva estatística. É interessante e relevante, no entanto. Isso está na academia ou na indústria?
highBandWidth
@highBandWidth: Minha abordagem é estatística. Eu estou na academia. O ponto principal da pesquisa que estou fazendo é que, se você ignora as questões estatísticas e se concentra no problema combinatório, as coisas ruins acontecem.
dsimcha
3

Realmente não sei o que significa NP completo / difícil, mas acho que o planejamento automático de suprimentos é um tipo disso.

Você tem um plano de demanda daqui a 90 dias para 100 SKUs de produtos: cerveja! O SKU de 100 produtos vem de:

  • existem 10 a 15 tipos de material cru de base de nível 1, são fabricados em latas grandes de milésimos de litro e leva um dia;
  • após a fermentação, alguns materiais devem ser adicionados (fermento?) e devem ser descansados ​​por 10 a 15 dias; então, você tem 15 a 20 tipos de coisas de nível 2;
  • finalmente, quando estiver pronto, alguns materiais devem ser adicionados, é o material de nível 3, chamado cerveja potável, aí está cc. 30 tipos de cervejas;
  • a cerveja pode ser engarrafada em 3 dl, 5 dl, às vezes recebe um colar especial (nível 4) e, em seguida, pode ser embalada como caixa 5x4, embalagem de 6 unidades (nível 5).

Existem "linhas" de máquinas para cada operação: da fabricação de cerveja à embalagem. As máquinas podem realizar mais operações, digamos, algumas máquinas de embalagem podem fabricar 6 pacotes e 3 pacotes, mas outras podem fazer apenas 6 pacotes. Existem restrições, por exemplo, velocidade, ou a chaleira grande para fazer cerveja min. 6000, máx., 8000 l de cerveja (mas se o tipo de cerveja for leve, o mínimo é 5000 le o máximo é 7000 l). E assim por diante, em todos os níveis.

A tarefa: como mencionei, há um plano de demanda para o tipo 100 do nível 5 (o material engarrafado e embalado). Faça um plano de fabricação ideal para todos os 5 níveis, todas as máquinas. Minimize as trocas de máquinas (por exemplo, engarrafar .5, .5, .5, .3, .3, .3 é melhor que .3, .5, .3, .5, .3, .5, há menos swithc, menos tempo morto para as máquinas de engarrafamento). Priorizar pelo cliente: alguns clientes precisam enviar a cerveja apenas com mais de 50% do tempo de validade restante. Etc etc.

Descubra gargalos (eh), faça planos alternativos com a adição de máquinas inexistentes a esses pontos; então, o melhor cenário virtual pode ser usado para sugerir a compra de novas máquinas.

Já é difícil o suficiente, ou devo lhe dizer como funciona uma fábrica têxtil ?

(Observação pessoal: a web, o banco e a logística são áreas desafiadoras, mas são brinquedos para bebês em comparação com os problemas de fabricação.)

Isenção de responsabilidade: os números são distorcidos por motivos de segurança, a ordem de magnitude é real.

ern0
fonte
Você está trabalhando em algo assim ou em uma ferramenta para resolver coisas assim para o seu empregador?
highBandWidth
1
Bem, a manufatura é ampla em logística. Definitivamente mais difícil do que financiar a esse respeito. Mas pelo menos lida com problemas definidos, não com equações aleatórias e ordens de operação pouco definidas!
Michael K
1
Qualquer tipo de algoritmo de agendamento com melhor ajuste de recursos provavelmente é equivalente ao problema da mochila , que é NP-completo.
Scott Whitlock
Um amigo meu criou um sistema DP / SP no Excel + VB anos atrás. Ele não contém planejamento automático, o aplicativo é muito gordo para o Excel. Então, acabamos de criar uma estrutura de planilha expansível colaborativa baseada em MySQL / PHP / AJAX (consulte: fluxo de dados - também conhecido como programação baseada em fluxo - abordagem) (me) e adotamos a lógica de negócios da versão XLS (amigo) . Também implementamos o planejamento automático (amigo). Foi uma idéia maluca escrever uma planilha, mas funciona. A melhor parte: o interruptor XLS-> SQL é um tanto maravilhoso! Podemos fazer qualquer coisa com os dados (por exemplo, autoplan), usando qualquer ferramenta / plataforma (PHP, Java, o que desejamos).
precisa saber é o seguinte
@ern0, NP-complete / NP-hard refere-se basicamente a quantos atalhos você pode assumir que é capaz de usar, em vez de tentar todas as possibilidades uma por uma. Os teóricos envidam muitos esforços para descobrir atalhos que, por exemplo, dizem que, se soubermos que o caminho ABC sempre será mais longo que o CA diretamente, podemos torná-lo mais rápido e provar estar dentro de 50% do valor ideal. Etc.