Risultati empirici in articoli CS


31

Sono nuovo nel campo CS e ho notato che in molti dei documenti che ho letto non ci sono risultati empirici (nessun codice, solo lemmi e prove). Perché? Considerando che l'Informatica è una scienza, non dovrebbe seguire il metodo scientifico?


26
La risposta breve è che "informatica" è molte cose. Alcune parti come (alcune) l'IA sono in realtà scienza. Altre parti sono ingegneria e il lato teorico è la matematica (applicata). Parti di HCI sono più simili all'arte. L'informatica è una grande tenda.
Aaron Roth,

6
Se hai prove, perché hai persino bisogno di risultati empirici?
Aryabhata,

2
@Moron: come si dimostra che un algoritmo è implementabile senza implementarlo?
Jukka Suomela,

8
Il CS teorico sembra essere simile alla fisica matematica che evita anche risultati empirici. Se vuoi qualcosa come la fisica sperimentale, potresti guardare la ricerca in ingegneria del software, verifica del programma, sistemi di database ecc.
Yaroslav Bulatov

4
nitpicking: " il metodo scientifico"?
Kaveh,

Risposte:


21

Anche la matematica è una scienza e dovresti cercare a lungo per trovare risultati empirici pubblicati in questo campo (anche se immagino che debbano essercene alcuni). Esistono altri settori scientifici in cui "lemmi e prove" sono valutati sull'esperienza, come la fisica quantistica. Detto questo, la maggior parte delle scienze mescola teoria e pratica (con vari rapporti) e l'Informatica non fa eccezione.

L'informatica ha le sue radici nella matematica (vedi la biografia di Turing per esempio http://en.wikipedia.org/wiki/Alan_Turing ), e come molti risultati (generalmente soprannominati nel campo dell '"informatica teorica") consistono in prove che i computer in alcuni modelli computazionali possono risolvere alcuni problemi in una determinata quantità di operazioni (ad esempio conferenze come FOCS, STOC, SODA, SoCG, ecc.). Tuttavia, molti altri risultati dell'informatica riguardano l'applicabilità di tali teorie alla vita pratica, attraverso l'analisi di risultati sperimentali (ad es. Conferenze come WADS, ALENEX, ecc ...).

Si suggerisce spesso che l'ideale sia un buon equilibrio tra teoria e pratica, come in "Scienze naturali", in cui l'osservazione di esperimenti induce la generazione di nuove teorie, che a loro volta suggeriscono nuovi esperimenti per confermare o affermare quelli: come tanti le conferenze tentano di accettare risultati sia sperimentali sia teorici (es. ESA, ICALP, LATIN, CPM, ISAAC, ecc ...). Il sottocampo di "Algorithms and Data Structures" nell'informatica potrebbe soffrire di uno squilibrio, nel senso che le conferenze "Teoriche" sono generalmente più classificate rispetto a quelle sperimentali. Credo che ciò non sia vero in altri sottocampi dell'informatica, come HCI o AI.

Spero che sia d'aiuto?


Grazie, aiuta davvero molto. Ultimamente mi sono interessato alla teoria dei grafi e agli articoli che stavo leggendo, quasi nessuno di loro aveva codici o risultati sperimentali. Questo è il motivo per cui ho chiesto. Quando fai matematica pura, non puoi produrre risultati sperimentali, quindi le prove sono tutto. Ma in Graph Theory non è difficile codificare il tuo algoritmo e produrre utili risultati sperimentali! Prendiamo il problema MST. Le attuali implementazioni del settore sono Prim / Kruskal e Boruvska e tuttavia, nei documenti sono descritti algoritmi più potenti, ma non vengono utilizzati poiché nessuno li ha mai codificati.
toto

1
NP

1
@ toto Certamente ciò che stai dicendo si applica ad alcuni problemi, ma per il problema MST, puoi vedere i risultati (forse un po 'datati) dell'implementazione di alcuni dei potenti algoritmi in books.google.com/…
Abel Molina,

1
O(n)O(nlogn)

24

L'implementazione corretta degli algoritmi è un'abilità che richiede un diverso set di strumenti rispetto alla semplice dimostrazione di teoremi. Molti algoritmi scoperti dalla comunità teorica sono stati effettivamente implementati nella pratica (anche se mi piacerebbe vedere la comunità teorica assumere un ruolo più importante in questo processo). La fisica non chiede agli stessi ricercatori di fare teoria ed esperimento, anche se si prevede che i due gruppi comunichino. Perché non dovresti aspettarti di vedere la stessa divisione nell'informatica?

AGGIUNTO IN MODIFICA:

Espandendo il mio commento in risposta a Suresh su ciò che intendevo per "ruolo" sopra, presso Bell Labs e AT&T Labs, i ricercatori negli algoritmi sono stati incoraggiati a parlare con le persone in sviluppo. Non ho fatto tutto questo come avrei dovuto, ma ne ho ricavato almeno un documento e penso che sarebbe positivo per il settore se ci fosse più comunicazione tra le persone in teoria nelle università e nei professionisti . Questo non significa che penso che tutti quelli che escono con un algoritmo dovrebbero codificarlo (anche se è pratico).

D'altra parte, gli algoritmi di codifica (o il fatto che uno studente li codifichi) che ritieni possano essere pratici può essere utile per adattarli ai professionisti. Prendi in considerazione un esempio. Lempel e Ziv hanno scritto due articoli tecnici nel 1977 e nel 1978 su nuovi algoritmi di compressione dei dati. Tutti li hanno ignorati. Nel 1984, Welch ha scritto un documento molto meno tecnico dando una leggera svolta a LZ78 che ha migliorato un po 'le sue prestazioni e ha dato i risultati di un piccolo studio confrontando le sue prestazioni con altri metodi di compressione dei dati. È stato pubblicato in un diario letto da un numero di programmatori e l'algoritmo è stato dato da alcune righe di pseudocodice. Il metodo è stato rapidamente adattato in un certo numero di posti, risultando infine in una famigerata disputa sulla proprietà intellettuale.

Naturalmente, uno dei modi migliori per i ricercatori di algoritmi di comunicare con la pratica è quello di produrre studenti laureati che vanno e lavorano in Google, IBM o altre aziende, e lo stiamo già facendo. Un altro modo potrebbe essere quello di rispondere alle domande dei praticanti in questo forum. Speriamo che stiamo facendo un lavoro ragionevole anche in questo.


4
Quindi stai dicendo che anche se in fisica non ci si aspetta che la stessa persona faccia entrambe le cose, in teoria CS dovremmo fare entrambe le cose? è perché i modelli di calcolo sono molto più un'approssimazione alla realtà dei modelli di fisica?
Suresh Venkat,

10
Sto dicendo che i teorici dovrebbero parlare di più con i praticanti. Se guardi alla storia della fisica, iniziano a succedere cose brutte quando i teorici smettono di parlare con gli sperimentatori. In realtà penso che abbiamo una quantità ragionevole di comunicazione tra i due gruppi in questo momento, ma che non sarebbe male avere un po 'di più.
Peter Shor,

3
Non generalizzerò, ma penso che molti ricercatori semplicemente non possano programmare / non apprezzare e preferirebbero lasciare che il lavoro pratico venga svolto da uno dei loro studenti. È il caso di me e del mio mentore.
toto

La tensione associata alle specifiche formali rispetto al calcolo pratico risale molto indietro nella storia delle STEM. Talvolta porta a specifiche formali ("Sulla teoria delle onde di detonazione stazionarie" di von Neumann [1948] rispetto alle successive simulazioni computazionali) e a volte conduce a calcoli pratici ("New American Practical Navigator" [1807] di Bowditch contro "Disquisitiones generales about generalies curvas" di Gauss) [1827]). I più grandi matematici (Gauss e von Neumann negli esempi sopra citati) hanno spesso combinato specifiche formali con calcoli pratici.
John Sidles,

3
La storia di Lempel-Ziv e la ricerca di post su StackOverflow mi hanno portato a formulare un precetto molto semplice che potrebbe aiutare gli teorici degli algoritmi a inventare professionisti vy: Se pensi che il tuo algoritmo possa essere pratico, inserisci lo pseudocodice nel tuo carta.
Peter Shor,

17

Un'area di ricerca che utilizza metodi e metodi empirici di informatica teorica è il campo chiamato "algoritmi sperimentali" o "ingegneria algoritmica". Come ha detto Chris, il calcolo ad alte prestazioni si basa fortemente su questo dato che i sistemi moderni presentano problemi di cache e latenza complessi che abbiamo difficoltà a modellare.

Gerth Brodal e Peter Sanders sono buoni esempi di ricercatori che mantengono un piede nei regni "di prova" e "empirico".

- Aggiornamento del 20/01/2013-- Vorrei anche menzionare una grande presentazione di Robert Sedgewick .


4
Sia ALENEX che ESA incoraggiano il lavoro degli algoritmi applicati e su questo argomento c'è anche una conferenza (SAE).
Suresh Venkat,

Che cos'è SAE? Che TLA non è modificabile. Hai un URL per questo?
Peter Boothe,

5
SAE è un refuso per SEA, il Symposium on Experimental Algorithms.
David Eppstein,

1
Puoi anche eseguire Algorithm Engineering in modo più rigoroso, ad esempio perfezionare i modelli teorici in modo che si adattino alla realtà ma che eseguano analisi precise. È difficile, però.
Raffaello,

O(CubeRoot(n))

12

Questo dipende dalla disciplina in cui ti trovi; come afferma Jeremy, esiste uno spettro di teoria vs. pratica.

Temi come la complessità tendono ad essere ponderati dal lato della teoria, poiché spesso l'obiettivo è quello di trovare un limite per lo spazio o il tempo di esecuzione. L'implementazione di un algoritmo in C ++ e la sua esecuzione più volte non dimostrerà che un problema è NP-completo.

Come opposto polare, i computer ad alte prestazioni (con conferenze come il supercomputer ) sono tutti empirici; nessuno avrebbe mai presentato una prova a una pubblicazione HPC in quanto vi è troppa variabilità riguardo alla gerarchia di memoria e al sovraccarico del kernel.

Quindi, a quella che sembra la stessa domanda (quanto tempo ci vuole per correre?) Verranno affrontati due modi completamente diversi a seconda degli obiettivi, delle tecniche, della comunità, ecc. Vedi il capitolo di Poul-Henning Kamp che stai facendo per un esempio di la dissonanza.


10

Nella ricerca dei linguaggi di programmazione molte idee per nuovi costrutti del linguaggio di programmazione o nuovi meccanismi di controllo dei tipi derivano dalla teoria (forse informati dall'esperienza nella pratica, forse no). Spesso viene scritto un documento su tali meccanismi da una prospettiva formale / teorica / concettuale. È relativamente facile da fare. Segue il primo ostacolo: implementare i nuovi costrutti nel contesto di un compilatore esistente e sperimentarlo, in termini di efficienza o flessibilità. Anche questo è relativamente facile.

Ma possiamo quindi dire che il costrutto della programmazione costituisce un progresso nella scienza della programmazione? Possiamo dire che semplifica la scrittura di programmi? Possiamo dire che migliora il linguaggio di programmazione?

La risposta è no. Una risposta empirica adeguata che coinvolga decine di programmatori esperti per lunghi periodi di tempo sarebbe necessaria per rispondere a questo tipo di domande. Questa ricerca non è quasi mai stata fatta. L'unico giudice del valore di un linguaggio di programmazione (e dei suoi costrutti) è la popolarità del linguaggio. E per i puristi del linguaggio di programmazione, ciò va contro ciò che le nostre ipotesi ci dicono.


7

Forse mi manca la motivazione per la tua domanda, ma ci sono molti esempi di risultati empirici che motivano la ricerca, algoritmi e altri risultati.

Gli MP3 usano la psicoacustica per ottimizzare l'algoritmo per la codifica umana.

π

Sulla stessa linea, Bailey e Borwein sono grandi sostenitori della matematica sperimentale. Vedi "Il computer come crogiolo: un'introduzione alla matematica sperimentale" , "Escursioni computazionali nella teoria dei numeri" tra gli altri . Si potrebbe sostenere che si tratta di una matematica più sperimentale, ma direi che a questo livello la discussione la distinzione è semantica.

Le transizioni di fase dei problemi NP-Complete sono un'altra area in cui i risultati empirici sono fortemente utilizzati. Guarda Monasson, Zecchina, Kirkpatrick, Selman e Troyansky e Gent e Walsh per i principianti, anche se ce ne sono molti, molti altri (vedi qui per un breve sondaggio).

Sebbene non sia esattamente a livello di Teorica Informatica o Matematica, c'è una discussione qui su come l'utilità di unix di runtime medio di grep batte algoritmi del caso peggiore perché si basa sul fatto che sta cercando un testo leggibile dall'uomo (grep fa male o peggio su file con caratteri casuali).

Perfino Gauss ha usato prove sperimentali per dare la sua ipotesi del Teorema dei numeri primi.

Il data mining ( la soluzione di Bellkor al Premio Netflix per creare un sistema di raccomandazione migliore) potrebbe essere considerato una teoria completamente basata su prove empiriche. L'intelligenza artificiale (algoritmi genetici, reti neurali, ecc.) Si basa fortemente sulla sperimentazione. La crittografia è in costante spinta tra produttori di codice e interruttori di codice. Ne ho davvero nominati solo alcuni e se rilassi la tua definizione di empirico, allora potresti lanciare una rete ancora più ampia.

Mi scuso per essere stato così disperso nel rispondere alla tua domanda, ma spero di aver dato almeno alcuni esempi che sono utili.

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.