Generazione di interessanti problemi di ottimizzazione combinatoria


9

Sto insegnando un corso sulla meta-euristica e ho bisogno di generare esempi interessanti di classici problemi combinatori per il termine progetto. Concentriamoci su TSP. Stiamo affrontando grafici di dimensione e superiore. Ho ovviamente cercato di generare un grafico con una matrice di costo con valori presi da una casuale e ho scoperto che (come previsto) l'istogramma per il costo del percorso (disegnato campionando molti percorsi casuali) ha una distribuzione normale molto stretta ( è ma è circa ). Ciò significa, secondo me, che il problema è molto semplice, poiché la maggior parte dei percorsi casuali sarà inferiore alla media e il percorso di costo minimo è molto vicino a un percorso casuale.U ( 0 , 1 ) μ 100200U(0,1)μ 1004σ4

Quindi ho provato il seguente approccio: Dopo aver generato la matrice , faccio una lunga passeggiata casuale attorno al grafico e casualmente (Bernoulli con ) raddoppia o dimezza il valore del bordo. Questo tende ad abbassare tutti i valori, raggiungendo infine lo zero, ma se prendo il giusto numero di passaggi, posso ottenere una distribuzione con intorno a e intorno a .p = 0,5 μ 2 σ 1U(0,1)p=0.5μ2σ1

La mia domanda è, in primo luogo, è anche una buona definizione per un problema interessante ? Idealmente, vorrei un'istanza altamente multimodale (per le funzioni di vicinato più comuni) e che abbia pochissimi percorsi vicino al valore minimo, in modo che la maggior parte delle soluzioni casuali sia molto lontana dall'ottimale. La seconda domanda è, data questa descrizione, come posso generare istanze con tali caratteristiche?


3
Cercare librerie di benchmark TSP, come studiato in sala operatoria (ad es. Ricerca di lavori su TSP di Applegate et al., Ad es. Qui )?
Neal Young,

2
C'è il TSPLIB con molte istanze.
adrianN,

Grazie, ho controllato il link ed è utile, ma la mia domanda riguarda la generazione di istanze non perché voglio risolvere un'istanza specifica, ma piuttosto perché cerco una visione di ciò che rende buoni problemi combinatori, una visione che può essere successivamente estesa a altri problemi oltre a TSP.
Alejandro Piad


1
@ Alejandro, Il problema della cricca nascosto potrebbe essere un esempio di ciò che stai cercando. Inoltre, potresti cercare ricerche su quali casi casuali di soddisfazione sono considerati difficili.
Neal Young,

Risposte:


6

Un approccio generale alla generazione di istanze più difficili è il seguente:

  • Inizia con un'istanza casuale del problema.
  • Incorpora una "backdoor nascosta": scegli in modo casuale una buona soluzione (probabilmente molto migliore di qualsiasi soluzione già esistente) e modifica l'istanza del problema per incorporare forzatamente questa soluzione nell'istanza del problema.

Ad esempio, per TSP, potresti fare qualcosa di simile al seguente. Genera un'istanza casuale del problema selezionando una matrice di costo casuale . Quindi, regola l'istanza del problema per nascondere una soluzione molto migliore al suo interno: seleziona in modo casuale un tour che visita ogni vertice esattamente una volta e riduci i pesi dei bordi in quel tour (ad esempio, generalo in modo casuale da dove ; ridurre il peso esistente; o modificare il bordo esistente con una certa probabilità fissa). Questa procedura di regolazione garantisce che la soluzione ottimale sarà, con alta probabilità, quel tour speciale selezionato. Se sei fortunato e selezioni un incorporamento ragionevole, non sarà nemmeno facile riconoscere dove hai nascosto la soluzione speciale.U ( 0 , c ) c < 1U(0,1)U(0,c)c<1

Questo approccio è derivato da idee generali nella crittografia, in cui vogliamo creare problemi a una via della botola: dove il problema è difficile da risolvere senza la conoscenza della botola segreta, ma con la conoscenza della botola segreta, il problema diventa molto semplice. Ci sono stati molti tentativi di incorporare le botole segrete in una varietà di problemi difficili (pur conservando la durezza del problema anche dopo che la botola è stata aggiunta), con diversi gradi di successo. Ma questo approccio generale sembra fattibile, per i tuoi scopi.

Le risultanti problematiche potrebbero essere difficili , ma saranno interessanti , da qualsiasi prospettiva pratica? Non lo so. Mi batte. Mi sembrano abbastanza artificiali, ma cosa ne so?

Se il tuo obiettivo principale è selezionare istanze problematiche che siano praticamente rilevanti e rappresentative delle applicazioni del mondo reale di TSP, il mio suggerimento sarebbe di adottare un approccio totalmente diverso. Invece, inizia esaminando le applicazioni del mondo reale di TSP, quindi cercando istanze rappresentative di tali problemi e convertendole nella corrispondente istanza del problema TSP, in modo da lavorare con le istanze del problema derivate da un problema del mondo reale.


Mi piace molto questo approccio, anzi è molto vicino a quello che stavo cercando di inventare e sembra praticamente adattabile a diversi problemi. La mia motivazione iniziale era quella di creare problemi di test per gli studenti, quindi anche se ho problemi con le parole reali, ma mi soddisfa bene per questa situazione piuttosto artificiale (cercando di valutare gli algoritmi degli studenti). In ogni caso, cercherò di adattarlo anche per le mie esigenze di ricerca, ma ciò richiederà uno sguardo più attento, come dici tu, per determinare se le istanze così create sono abbastanza rappresentative. Grazie mille, hai ottenuto il mio +1 e l'accettazione.
Alejandro Piad,

3

un approccio che spesso offre un elevato controllo sulla natura delle soluzioni è la conversione da un problema completo NP a un altro. ora definisci "interessante" la tua domanda in modo statistico, ma un altro approccio pulito è quello di usare i classici problemi del campo. il mio preferito è factoring / SAT. è banale trovare numeri "uniformi" con molti fattori o numeri primi con solo due "fattori" (uno e il primo). creare l'istanza SAT per risolvere il factoring e le soluzioni sono i fattori (in realtà permutazioni di fattori, ma anche che non è difficile contare in anticipo).

secondo questo approccio, esiste una definizione naturale di "interessanti" istanze difficili che non possono essere risolte in P time. e questo approccio è garantito per produrre casi difficili per il factoring di numeri non uniformi, altrimenti risolverebbe una questione prevalentemente aperta nella teoria della complessità, ovvero la durezza del factoring .

quindi, eventualmente convertire al tuo problema, in questo caso TSP. per compilare questa risposta sarebbe bello avere una conversione diretta da SAT a TSP, pensare che siano là fuori, ma non ho familiarità con loro. tuttavia, ecco alcuni riferimenti sul factoring-to-SAT in questa domanda: ridurre il problema della fattorizzazione a numeri interi a un problema completo NP

se non ti piace il factoring, potrebbe essere preferibile creare prima le istanze in SAT per una serie di motivi. potresti iniziare con istanze SAT casuali sintonizzate sul centro nel punto di transizione facile-difficile-facile, eccetera. oppure potresti lavorare dalle istanze difficili DIMACS , generate dalla community. o creare altri "programmi" logici in SAT.


1
Mi piace l'approccio di conversione, anche se non fornisci ulteriori collegamenti specificamente correlati a TSP, ma comunque grazie per l'idea, lo esplorerò più in profondità. Hai il mio +1.
Alejandro Piad,

1
@alejandro thx ok ecco un link su questo. vedi ad es. a partire dalla diapositiva 28 qui [classe universitaria!], CMSC 451: SAT, Coloring, Hamiltonian Cycle, TSP Slides Di: Carl Kingsford . conversione di SAT → ciclo hamiltoniano (TSP). ci possono essere approcci di conversione più efficienti (meno generali) o con altri aspetti su misura in letteratura se questo è ciò che si desidera. spero di saperne di più sul tuo lavoro, forse rispondi qui o sul mio blog se vuoi
vzn

1
Ho controllato il pdf, di altissimo livello ma abbastanza comprensibile. Anche se per il momento ho ottenuto quello che mi serviva con la risposta @DW, il tuo approccio mi sembra molto interessante. Dovrò provarlo da solo. Avevo già visto la riduzione in precedenza (in un corso universitario di complessità) ma non avevo pensato a una sua effettiva implementazione specifica per la creazione di istanze difficili. Ho un interesse a lungo termine per l'ottimizzazione e la metaeuristica e una delle mie aree di interesse riguarda la creazione di interessanti problemi di benchmark. A proposito, ho appena controllato il tuo blog, torneremo di sicuro !!!
Alejandro Piad,
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.