Closed JJ closed 10 years ago
Siempre suelo usar la que venga por defecto. Justo después de definir las variables y antes de empezar el algoritmo, y al final; antes de hacer los print.
Suelo hacerlo en webs cuando los tiempos de respuesta me parecen excesivos. Pero no es una práctica que siga habitualmente.
¿Por ejemplo?
En php uso time() y lo guardo antes de empezar, time() al final, lo resto y ahí tengo mi tiempo.
Y ese, ¿qué tiempo es? Eso admitiendo, claro, PHP como lenguaje de programación :-)
La hora actual del sistema. http://www.w3schools.com/php/func_date_time.asp
Y eso no es totalmente bueno porque...
En todo caso, ya lo verás cuando empieces a hacer mediciones. O lo habrás visto.
Entiendo que sea por la precisión. Pero a mí me preocupa a partir de varios segundos... No creo que no sea totalmente bueno :S
No, no es la precisión.
Ejecuta un comando con time delante y verás cosas interesantes.
Yo, por ejemplo, la última vez que usé funciones para medición de tiempo fue en C y utilicé la librería time.h, en concreto la función clock(). Después de declarar e inicializar las variables del programa, hacía: inicio=clock() Y, antes de los print: stop=clock() Para calcular y mostrar el tiempo transcurrido en el trozo de código deseado hacía: printf("El tiempo es de %f \n\n",difftime(stop,inicio)/CLOCKS_PER_SEC);
Después de ver el time del sistema. Creo que en lenguajes como php por ejemplo no se puede llegar a eso. En C++ y tal, supongo que sí. Pero en php como mucho puedes llegar a microtime() que te da el tiempo en microsegundos.
@pablopaolus es también wallclock. Para medir el tiempo de un algoritmo secuencial tienes que usar el tiempo de usuario, no el del sistema. @seiya64 es que para llamarse lenguaje hay que tener estudios...
xDDD
Hasta ahora donde he necesitado hacer mediciones ha sido en C, C++ y Java. Para los dos primeros, al igual que Pablo, he tenido que usar clock() o bien el struct timeval de time.h que proporciona precisión de microsegundos dado que el reloj en el kernel de Linux lo soporta. Windows NO!! jajajajaja. Para java, System.currentTimeMillis() justo antes y después del tiempo que quiero medir, aunque sólo proporciona el tiempo con precisión de milisegundos. Por otro lado, comentais el usar time delante de un comando no? Tengo entendido que propociona el tiempo que tarda en ejecutar el comando incluyendo el tiempo de espera, bloqueo... hasta que pasa al estado de ejecución. Eso sería el último recurso que usaría para medir tiempos si no tuviera otra opción
@rotty11 pruébalo.
A mí me pasa como a Pablo, he usado la librería time.h. En Perl estoy buscando información y he encontrado el módulo Time::HiRes. Con este módulo y haciendo:
($s, $usec) = gettimeofday();
Se obtienen en $s los segundos y en $usec los microsegundos. Entonces, para intervalos de tiempo:
$t0 = [gettimeofday];
$t1 = [gettimeofday];
$t0_t1 = tv_interval $t0, $t1;
Mirad esto, por ejemplo http://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1
Una de las formas de hacerlo desde Perl es usar esto http://search.cpan.org/~taffy/Unix-Getrusage-0.03/lib/Unix/Getrusage.pm o bien usar time desde la línea de órdenes. http://search.cpan.org/~jhi/BSD-Resource-1.2907/Resource.pm Desde C, sys/times.h
Participo para que no me regañe JJ :8ball:
Cómo suelo programar bastante en JAVA, normalmente uso alguna herramienta avanzada de profiler, cómo por ejemplo la que proporciona NETBEANS [1].
Depende también del tipo de medida que me interese. Por ejemplo, para temas web o cloud, realmente interesa más el tiempo real que el tiempo de procesador (pe. para saber si una petición no se ha procesado o para tareas de sincronización). En esos casos, gracias a trabajar en sistemas LINUX, suelo usar las peticiones nativas del sistema para la gestión del tiempo.
@deantares Pero ¿tienes acceso a esa herramienta desde el progrma? ¿O te puede generar informes que luego puedas usar en el análisis del algoritmo?
Algo tarde, pero el trabajo no me ha dejado conectarme antes, perdonad. El caso es que yo solo he necesitado temporizar partes de un programa, de higos a brevas, y claro cuando he necesitado algo así, he usado la clase de java: javax.swing.Timer Con esta clase sólo con instanciarla, y pasarle el tiempo en milisegundos en el que queremos que nos avise, o haga lo que sea, un Actionlistener, usando el método actionPerformed() ya tenemos la ejecución periódica. Para empezar a contar usamos el método start() cuando queremos que el temporizador empiece, o stop() para detenerlo, y si deseamos que sea cíclico setRepeats(boolean), en el boolean especificamos si queremos que sea repetitivo o no. He leído que también se puede usar la clase general java.util.Timer , pero no la he usado y me parece más compleja de usar, así que no puedo hablar mucho de ella.
Como le he indicado a tus compañeros, eso sólo mide el "wallclock time", no el tiempo que realmente el programa ha empleado en la CPU.
JJ
Estimado JJ;
Estoy liado con el trabajo final de la asignatura y quería preguntarte si lo que he hecho vale, porque tras leer el enunciado de nuevo me entró la duda (y ya lo tengo codificado, sólo me quedan las mediciones y la documentación).
He realizado un algoritmo genético que mediante la minimización de una función, en un intervalo dado (usando una función bidimensional), mediante una selección de torneos de 2, cruce en un punto, mutación en un punto, definiendo el valor para el que función parará el algoritmo. Usando elitismos de un individuo y para facilitar la operatoria un número impar de individuos (por ejemplo 11, de los cuales tomamos 10 para cruzarlos, que generan 10 hijos, que a su vez son mutados generando una población de 10 individuos a los que se añade el mejor individuo de la generación anterior). El número de individuos, probabilidad de cruce, mutación, etc... los defino como constantes en el propio programa.
¿Esto vale?, es que anoche me entró la duda y ya no sé que hago.
un saludo y gracias Alfonso Soto
Alfonso, la única forma que tengo de ver si vale o no es evaluarlo; con lo que me cuentas puede valer o todo lo contrario.
El 4 de junio de 2014, 15:54, Alfonso notifications@github.com escribió:
Estimado JJ;
Estoy liado con el trabajo final de la asignatura y quería preguntarte si lo que he hecho vale, porque tras leer el enunciado de nuevo me entró la duda (y ya lo tengo codificado, sólo me quedan las mediciones y la documentación).
He realizado un algoritmo genético que mediante la minimización de una función, en un intervalo dado (usando una función bidimensional), mediante una selección de torneos de 2, cruce en un punto, mutación en un punto, definiendo el valor para el que función parará el algoritmo. Usando elitismos de un individuo y para facilitar la operatoria un número impar de individuos (por ejemplo 11, de los cuales tomamos 10 para cruzarlos, que generan 10 hijos, que a su vez son mutados generando una población de 10 individuos a los que se añade el mejor individuo de la generación anterior). El número de individuos, probabilidad de cruce, mutación, etc... los defino como constantes en el propio programa.
¿Esto vale?, es que anoche me entró la duda y ya no sé que hago.
un saludo y gracias Alfonso Soto
— Reply to this email directly or view it on GitHub https://github.com/JJ/implementacion-eas/issues/13#issuecomment-45092912 .
JJ
Hola de nuevo;
Bueno pues acabo la documentación y los tiempos de medida y lo subo, es el primer algoritmo genético que hago, en mi vida había hecho nada de esto y sé que es una chorrrada, y que es muy simple, pero que a gusto me quedé cuando pude ejecutarlo.
un saludo y gracias Alfonso Soto
From: Juan Julián Merelo Guervós Sent: Wednesday, June 4, 2014 5:49 PM To: JJ/implementacion-eas Cc: Alfonso Subject: Re: [implementacion-eas] ¿Cómo temporizas los algoritmos? (#13)
Alfonso, la única forma que tengo de ver si vale o no es evaluarlo; con lo que me cuentas puede valer o todo lo contrario.
El 4 de junio de 2014, 15:54, Alfonso notifications@github.com escribió:
Estimado JJ;
Estoy liado con el trabajo final de la asignatura y quería preguntarte si lo que he hecho vale, porque tras leer el enunciado de nuevo me entró la duda (y ya lo tengo codificado, sólo me quedan las mediciones y la documentación).
He realizado un algoritmo genético que mediante la minimización de una función, en un intervalo dado (usando una función bidimensional), mediante una selección de torneos de 2, cruce en un punto, mutación en un punto, definiendo el valor para el que función parará el algoritmo. Usando elitismos de un individuo y para facilitar la operatoria un número impar de individuos (por ejemplo 11, de los cuales tomamos 10 para cruzarlos, que generan 10 hijos, que a su vez son mutados generando una población de 10 individuos a los que se añade el mejor individuo de la generación anterior). El número de individuos, probabilidad de cruce, mutación, etc... los defino como constantes en el propio programa.
¿Esto vale?, es que anoche me entró la duda y ya no sé que hago.
un saludo y gracias Alfonso Soto
— Reply to this email directly or view it on GitHub https://github.com/JJ/implementacion-eas/issues/13#issuecomment-45092912 .
JJ — Reply to this email directly or view it on GitHub.
:-)
Me alegro.
¿Qué herramientas del sistema/de la librería/de la caja de herramientas usas para temporizar los algoritmos?