NP problemi completi NP o NP nella vita reale


17

Qualcuno ha esempi di vita reale in cui risolvono regolarmente problemi NP completi o NP difficili (per euristica o inseguendo una soluzione non ottimale o altro) nel loro lavoro? So che si verificano nella pianificazione, pianificazione, progettazione VLSI, ecc., Ma sto cercando di farmi un'idea dei principali settori che oggi impiegano programmatori o ingegneri che lo fanno regolarmente. Se uno dovesse sviluppare competenze o una biblioteca, per esempio, l'ottimizzazione combinatoria dove si potrebbe usare come parte di un lavoro di programmazione?

Qualche account personale?


Cosa intendi con "regolarmente"
Conrad Frix il

@Conrad, beh, immagino sia un'idea soggettiva. Direi che potrebbe essere più del 5-10% dello sforzo focalizzato sulla risoluzione di problemi np-complete o np-hard.
highBandWidth,

Credo che la programmazione dell'IA nei giochi abbia il potenziale per essere NP-completa.
Michael K,

Ci sono molti problemi NP-difficili là fuori (la pianificazione e la pianificazione con risorse limitate sono solitamente NP-difficili). Tuttavia, l'ottimizzazione combinatoria è la strada sbagliata da percorrere. Essere in grado di generare 100! le combinazioni il più rapidamente possibile è molto meno utile della capacità di applicare l'euristica specifica del dominio.
David Thornley,

@ David, non intendevo generare combinazioni per ottimizzazione combinatoria. Mi riferivo a una classe di problemi, come k-SAT o Traveling Salesman Problem ecc.
highBandWidth

Risposte:


8

Alcune delle cose che mi vengono in mente (la maggior parte di queste sono state coinvolte più o meno):

  • Ambienti di sviluppo per linguaggi e compilatori. Domande come: questa grammatica genera un linguaggio ambiguo? (Questo problema è in realtà indecidibile!)
  • Recupero dati. Rimontaggio di pacchetti di dati parzialmente persi o recupero di file frammentati. (Complessità fattoriale)
  • Sicurezza del software. Valutazione di tutti i possibili percorsi di esecuzione attraverso un software per determinare se alcuni comportamenti osservati possono essere attribuiti ad esso. (Arresto problema?)
  • La logistica. Ottimizzare l'uso dei trasporti in base ai pacchetti da trasportare, le loro dimensioni e dove devono andare. (Almeno esponenziale)

Ci sono molti esempi standard come trovare il percorso più breve, la programmazione degli infermieri, ecc. Ma se ti piacciono le ottimizzazioni combinatorie, sai tutto su quelle :)


Quindi ci sono programmatori impiegati da società di logistica che si dedicano effettivamente alla risoluzione di questi problemi di ottimizzazione o la maggior parte di queste operazioni viene generalmente risolta una volta e viene ripetuta per la maggior parte delle aziende? +1 per un numero di esempi. Sei / sei stato coinvolto in qualcuno di questi?
highBandWidth,

I primi due strumenti per cui ho scritto, il terzo è qualcosa su cui i colleghi lavorano. Mi aspetto che le grandi aziende di logistica facciano attivamente ricerche in questo settore poiché possono risparmiare milioni di dollari se raggiungono un paio di percento di prestazioni extra attraverso un nuovo algoritmo :)
Deckard,

Ho intervistato per un ruolo di commesso viaggiatore. La grande società madre aveva una stanza piena di dottori che si stavano sbarazzando nella speranza di ottenere qualche decimo di miglioramento percentuale del loro percorso. Il che varrebbe loro qualche milione di dollari ogni giorno. Quindi quei posti esistono. Routing routing e pianificazione sono i due biggies: immagina di avere 1000 persone e una fabbrica che gestisce due o tre turni. Ora programma tutti a lavorare per il prossimo mese tenendo presente queste 200 regole e preferenze di tutti ...

9

Ho usato la ricottura simulata a tempo limitato per risolvere un problema del venditore ambulante come nella produzione di pannelli touch. Ogni millisecondo che potremmo radere dal tempo di ciclo dell'incisione laser di ciascun pannello aumenterebbe la produttività, l'utilizzo e quindi la redditività della macchina, quindi ho fatto un grande sforzo per ridurre al minimo i tempi morti (percorsi non scribing) tra i percorsi di scribing (che ovviamente non può essere ottimizzato via).

Ho usato un algoritmo limitato nel tempo per aggirare la durezza NP del problema, poiché non potevamo permetterci il rischio che il calcolo dell'ottimizzazione potesse richiedere più tempo del tempo risparmiato dal percorso più ottimale. Mentre la macchina spostava il pannello dalla posizione di caricamento alla posizione in cui la testa del laser si trovava sopra l'angolo più vicino, ho avuto il tempo di eseguire alcune simulazioni. L'algoritmo non ha quasi mai raggiunto il completamento entro poche centinaia di millisecondi della mossa, ma quasi sempre ha restituito un percorso di scrittura migliore rispetto a qualsiasi dei modelli semplici e non adattativi che avevamo sempre usato prima (come una spirale o percorsi di serpenti).


2
Questo è figo. Ma ho pensato che ogni pannello avrebbe avuto lo stesso modello e che avresti risolto il problema una volta anziché ripetutamente per ogni widget. Perché hai dovuto risolverlo ogni volta?
highBandWidth,

2
Il modello ideale era lo stesso per ciascun pannello, ma l'allineamento meccanico del pannello, la posizione degli strati precedenti nel processo e la natura piastrellata della testa di scrittura laser significavano che per ciascun pannello doveva essere calcolato un insieme dinamico di sottotitoli individualmente e quindi optmised. È stato un problema interessante su cui lavorare, soprattutto visti i vincoli temporali.
Mark Booth,

7

Sto lavorando (in questo momento, in realtà) al problema bioinformatico dell'allineamento di sequenze multiple di DNA locale. Il punto di ciò è che se molte sequenze di geni con qualche proprietà comune (profilo di espressione simile o stesso legame del fattore di trascrizione in un esperimento ChIP-chip) si allineano fortemente ad un certo punto, allora probabilmente hai trovato il motivo del loro comune proprietà. Inoltre, sono più interessato agli aspetti statistici del problema. Anche se è NP-difficile, non perdi molto usando l'euristica in pratica. La parte interessante del problema, IMHO, è un problema di rapporto segnale rumore.


1
stai usando approcci combinatori / ai classici o statistici. In un certo senso, tutto il moderno nlp, il clustering, l'apprendimento automatico affronta i problemi di np-complete, ma di solito viene attaccato da una prospettiva statistica. È comunque interessante e pertinente. È nel mondo accademico o industriale?
highBandWidth,

@highBandWidth: il mio approccio è statistico. Sono al mondo accademico. Il punto centrale della ricerca che sto facendo è che se ignori i problemi statistici e ti concentri solo sul problema combinatorio, Bad Things Happen.
dsimcha,

3

Non so davvero cosa significhi NP completo / difficile, ma penso che fornire l'autopanning sia una cosa del genere.

Hai un piano di domanda a partire da 90 giorni per 100 SKU di prodotti: birra! La SKU di 100 prodotti proviene da:

  • ci sono 10-15 tipi di roba prodotta base di livello 1, prodotta in grandi lattine da millesimo di litro e ci vuole un giorno;
  • dopo la preparazione della birra, alcuni materiali devono essere aggiunti (lievito?) e devono riposare per 10-15 giorni, quindi hai 15-20 tipi di roba di livello 2;
  • infine, quando è pronto, alcuni materiali dovrebbero essere aggiunti, è la roba di livello 3, chiamata birra bevibile, ci sono cc. 30 tipi di birre;
  • la birra può essere imbottigliata come 3 dl, 5 dl, a volte ottiene un collo speciale (livello 4), quindi può essere confezionata in scatola 5x4, confezione da 6 (livello 5).

Esistono "linee" di macchine per ogni operazione: dalla produzione della birra al confezionamento. Le macchine possono eseguire più operazioni, ad esempio, alcune confezionatrici possono produrre 6 pacchi e 3 pacchi, ma altre possono fare solo 6 pacchi. Ci sono vincoli, ad esempio la velocità, o il grande bollitore per la birra è minimo. 6000, max, 8000 l di birra (ma se il tipo di birra è leggero, il minimo è 5000 l e il massimo è 7000 l). E così via, ad ogni livello.

Il compito: come ho già detto, c'è un piano di domanda, per il tipo 100 di livello 5 (roba imbottigliata e confezionata). Crea un piano di produzione ottimale per tutti e 5 i livelli, tutte le macchine. Ridurre al minimo gli interruttori della macchina (ad es. Imbottigliamento .5, .5, .5, .3, .3, .3 è migliore di .3, .5, .3, .5, .3, .5, c'è meno swithc, meno tempo morto per le macchine imbottigliatrici). Priorità per cliente: alcuni clienti richiedono di spedire la birra solo con più del 50% dei tempi di scadenza. Ecc. Ecc.

Scopri i colli di bottiglia (eh), fai piani alternativi con l'aggiunta di macchine inesistenti a questi punti, quindi puoi utilizzare il miglior scenario virtuale per suggerire di acquistare una nuova macchina.

È abbastanza difficile o dovrei dirti come funziona una fabbrica tessile ?

(Osservazione personale: il web, la banca e la logistica sono aree difficili, ma sono giocattoli per bambini rispetto ai problemi di fabbricazione.)

Dichiarazione di non responsabilità: i numeri sono distorti per motivi di sicurezza, l'ordine di grandezza è reale.


Stai lavorando a qualcosa del genere o uno strumento per risolvere cose come questa per il tuo datore di lavoro?
highBandWidth,

1
Bene, la produzione è logistica di grandi dimensioni. Sotto questo aspetto, decisamente più difficile della finanza. Ma almeno si occupa di problemi definiti, non di equazioni casuali e ordini di operazioni vagamente definiti!
Michael K,

1
Qualsiasi tipo di algoritmo di pianificazione con il miglior adattamento delle risorse è probabilmente equivalente al problema dello zaino , che è NP-completo.
Scott Whitlock,

Un mio amico ha creato un sistema DP / SP in Excel + VB anni fa. Non contiene la scansione automatica, l'app è troppo grassa per Excel. Quindi, abbiamo appena reso espandibile un collaborativo basato su MySQL / PHP / AJAX (vedi: flusso di dati - aka. Programmazione basata sul flusso - approccio) foglio di calcolo (me), e adottato la logica biz dalla versione XLS (amico) . Abbiamo implementato anche l'autoplanning (amico). È stata una pazza idea scrivere un foglio di calcolo, ma funziona. La parte migliore: XLS-> SQL switch è in qualche modo meraviglioso! Possiamo fare qualsiasi cosa con i dati (es. Autoplan), usando qualsiasi strumento / piattaforma (PHP, Java, ciò che desideriamo).
Ern0,

@ ern0, NP-complete / NP-hard si riferisce fondamentalmente a quante scorciatoie si può anche presumere di poter prendere invece di provare tutte le possibilità una per una. I teorici dedicano molti sforzi alla ricerca di scorciatoie che, ad esempio, affermano che se sappiamo che il percorso ABC sarà sempre più lungo dell'AC direttamente, possiamo renderlo più veloce e dimostrare di essere entro il 50% del valore ottimale. Ecc.
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.