Estou ministrando um curso sobre meta-heurísticas e preciso gerar instâncias interessantes de problemas combinatórios clássicos para o termo projeto. Vamos nos concentrar no TSP. Estamos lidando com gráficos de dimensão e maiores. Naturalmente, tentei gerar um gráfico com uma matriz de custos com valores retirados de um aleatório e descobri que (como esperado) o histograma para o custo do caminho (desenhado por amostragem de muitos caminhos aleatórios) tem uma distribuição normal muito estreita ( é mas é em torno de ). Isso significa, na minha opinião, que o problema é muito fácil, pois a maioria dos caminhos aleatórios estará abaixo da média e o caminho de custo mínimo está muito próximo de um caminho aleatório.
Então, tentei a seguinte abordagem: Depois de gerar a matriz , faça uma longa caminhada aleatória pelo gráfico e aleatoriamente (Bernoulli com ) duplique ou reduza pela metade o valor da aresta. Isso tende a diminuir todos os valores, chegando finalmente a zero, mas se eu seguir o número certo de etapas, posso obter uma distribuição com torno de e torno de .
Minha pergunta é: primeiro, essa é mesmo uma boa definição para um problema interessante ? Idealmente, eu gostaria de uma instância que seja altamente multimodal (para as funções de vizinhança mais comuns) e que tenha muito poucos caminhos próximos ao valor mínimo, para que a maioria das soluções aleatórias fique muito longe do ideal. A segunda pergunta é, dada essa descrição, como posso gerar instâncias com essas características?
fonte
Respostas:
Uma abordagem geral para gerar instâncias mais difíceis é a seguinte:
Essa abordagem é derivada de idéias gerais em criptografia, nas quais queremos criar problemas de alçapão unidirecional: onde o problema é difícil de resolver sem o conhecimento do alçapão secreto, mas com o conhecimento do alçapão secreto, o problema se torna muito fácil. Houve muitas tentativas de incorporar alçapões secretos em uma variedade de problemas difíceis (enquanto preservava a dureza do problema mesmo após a adição do alçapão), com graus variados de sucesso. Mas essa abordagem geral parece viável, para seus propósitos.
As instâncias de problemas resultantes podem ser difíceis , mas serão interessantes , de qualquer perspectiva prática? Eu não sei. Me bate. Eles parecem bastante artificiais para mim, mas o que eu sei?
Se seu objetivo principal é selecionar instâncias de problemas que sejam praticamente relevantes e representativas dos aplicativos do TSP no mundo real, minha sugestão seria adotar uma abordagem totalmente diferente. Em vez disso, comece pesquisando aplicativos do TSP do mundo real, procurando instâncias representativas desses problemas e convertendo-os na instância de problema do TSP correspondente - para trabalhar com instâncias de problemas derivadas de um problema do mundo real.
fonte
Uma abordagem que geralmente oferece alto controle sobre a natureza das soluções é a conversão de um problema completo de NP para outro. agora você define "interessante" em sua pergunta de maneira estatística, mas outra abordagem interessante é usar problemas clássicos do campo. meu favorito é fatorar / SAT. é trivial encontrar números "suaves" com muitos fatores ou números primos com apenas dois "fatores" (um e o primo). crie a instância SAT para resolver o fatoração, e as soluções são os fatores (na verdade permutações de fatores, mas também que não são difíceis de contar antecipadamente).
sob essa abordagem, existe uma definição natural de "interessante" - instâncias difíceis que não podem ser resolvidas no tempo P. e é garantido que essa abordagem produz instâncias difíceis para fatorar números não suaves, caso contrário, resolveria uma questão em aberto na teoria da complexidade, ou seja, dureza de fatorar .
então, possivelmente converta para o seu problema, neste caso o TSP. Para preencher esta resposta, seria bom ter uma conversão direta de SAT para TSP, acho que eles estão por aí, mas não estou familiarizado com eles. no entanto, aqui estão algumas referências sobre fatoração para SAT nesta pergunta: reduzindo o problema de fatoração de número inteiro para um problema completo de NP
se você não gosta de fatorar, ainda assim pode ser preferível criar as instâncias no SAT primeiro por vários motivos. você pode começar com instâncias SAT aleatórias ajustadas para centralizar no ponto de transição fácil-difícil-fácil, etc. ou você pode trabalhar a partir de instâncias rígidas do DIMACS , geradas pela comunidade. ou crie outros "programas" lógicos no SAT.
fonte