Cosa può fare gnuplot

Ovvero, come trasformare un informe mucchio di dati tanto interessanti quanto noiosi a vedersi in qualcosa di bello, comodo, comprensibile e magari pure colorato a dovere…

Sto realizzando un programmino in java che testa un algoritmo euristico che mi sono inventato per risolvere un problema di Ricerca Operativa (valevole come elaborato per l’omonimo esame, il cui scritto SPERO di aver passato stamattina). Per testare l’algoritmo in maniera estesiva svolgo diverse prove, aumentando di volta in volta la complessità del sistema (ovvero il numero di elementi in gioco); per ciascuna prova svolgo il mio algoritmo, e ne misuro il tempo di computazione; per confronto eseguo anche un algoritmo semi-random per un pò di run, ricavandone risultato migliore, risultato peggiore, media dei risultati e media dei tempi di computazione.

Alla fine ho in output per ciascuna prova una riga di testo costituita dai valori numerici corrispondenti, nell’ordine, a:

  1. complessità problema
  2. risultato migliore dell’algoritmo random
  3. risultato medio dell’algoritmo random
  4. risultato peggiore dell’algoritmo random
  5. risultato del mio algoritmo
  6. tempo medio di computazione dell’algoritmo random
  7. tempo di computazione del mio algoritmo

Ho il mio bel file di dati che descrive tutte le prove svolte; e adesso come faccio a rendere questi dati in una forma accattivante che renda giustizia alla bontà delle mie masturbazioni in java? Semplice: dò il file in pasto a gnuplot!

Il risultato è decisamente bello. Ma che dico, bello? Bellissimo! (ps: è naturale che solo un ingegnere possa trovare fisicamente attraente un grafico ben fatto, me ne rendo conto).

gnuplot grafico 1

gnuplot grafico 2

Il file utilizzato per creare questi grafici a partire dal file “data” è il seguente:

set terminal postscript eps color solid
set output “grafico.ps”

set multiplot

set lmargin 13
set grid

set size 1,0.7
set origin 0,0.3

set autoscale
unset log
unset label
set xtic auto
set ytic auto
set ylabel “Funzione costo”
unset xlabel

set title “Funzione obiettivo al variare della complessita’ del problema”
set key left top Left

plot “data” using 1:2 title ‘Funzione migliore’ with linespoints lw 2, \
“data” using 1:4 title ‘Media random’ with lines lw 2, \
“data” using 1:3 title ‘Minimo random’ with lines, \
“data” using 1:5 title ‘Massimo random’ with lines

set size 1,0.3
set origin 0,0
unset title
set xlabel “Dimensione problema”
unset ylabel
set ytics (“-5” -5, “0” 0, “5” 5, “10” 10, “15” 15)
set key right bottom Left

plot “data” using 1:(($4-$2)/$2*100) title “Risparmio percentuale” with lines

unset multiplot

#fine primo grafico, inizio secondo

unset size
unset origin
set ytic auto

set title “Tempo computazionale al variare della complessita’ del problema”
set xlabel “Dimensione problema”
set ylabel “Tempo di elaborazione (ms)”

set output “graficotempi.ps”

set log y
set grid

plot “data” using 1:6 title “Media Random” with linespoints lw 2, \
“data” using 1:7 title “Funzione migliore” with linespoints lw 2,\
“data” using 1:($1*$1*log($1)) title “n^2*log(n)” with lines

Semplice, no? Non fatevi ingannare, è più semplice di quanto possa sembrare. E, andiamo, i risultati sono spettacolosissimi!

Questa voce è stata pubblicata in Uncategorized e contrassegnata con , , . Contrassegna il permalink.

Una risposta a Cosa può fare gnuplot

  1. Pingback: Libru » Cosa può fare gnuplot

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...