The Multi-Purposes Calibration and Optimization Tool): Un Software Libre Para Obtener Par´Ametros Emp´Iricos Necesarios En Modelos De Simulaci´On
Total Page:16
File Type:pdf, Size:1020Kb
MPCOTool (the Multi-Purposes Calibration and Optimization Tool): un software libre para obtener par´ametros emp´ıricos necesarios en modelos de simulaci´on Autores del software: J. Burguete y B. Latorre Autor del manual: J. Burguete 8 de diciembre de 2018 ´Indice general 1. Compilando el c´odigo fuente 2 2. Interfaz 5 2.1. Formatoenl´ıneadecomandos . 5 2.2. Uso de MPCOTool como una librer´ıa externa . 6 2.3. Aplicaci´on con interfaz gr´afica de usuario interactiva....... 6 2.4. Ficherosdeentrada.......................... 7 2.4.1. Ficherodeentradaprincipal. 7 2.4.2. Ficherosdeplantilla . 11 2.5. Ficherosdesalida........................... 11 2.5.1. Ficheroderesultados. 11 2.5.2. Ficherodevariables . 11 3. Organizaci´on de MPCOTool 13 4. M´etodos de optimizaci´on 15 4.1. M´etodo de fuerza bruta de barrido regular . 15 4.2. M´etododeMonte-Carlo . 16 4.3. M´etodo de fuerza bruta de muestreo ortogonal . 17 4.4. Algoritmo iterativo aplicado a los m´etodos de fuerza bruta. 18 4.5. M´etododeascensodecolinas . 20 4.5.1. Ascensoporcoordenadas . 21 4.5.2. Ascensoaleatorio. 21 4.6. M´etodogen´etico . 22 4.6.1. Elgenoma........................... 22 4.6.2. Supervivencia de los mejores individuos . 22 4.6.3. Algortimodemutaci´on . 24 4.6.4. Algoritmodereproducci´on . 24 4.6.5. Algoritmodeadaptaci´on. 25 4.6.6. Paralelizaci´on. 25 Referencias 27 1 Cap´ıtulo 1 Compilando el c´odigo fuente El c´odigo fuente en MPCOTool est´aescrito en lenguaje C. El programa ha sido compilado y probado en los siguientes sistemas operativos: Debian Hurd, kFreeBSD y Linux 9; Devuan Linux 2; DragonFly BSD 5.2; Dyson Illumos; Fedora Linux 29; FreeBSD 11.2; Linux Mint DE 3; Manjaro Linux; Microsoft Windows 71, y 101; NetBSD 7.0; OpenBSD 6.4; OpenIndiana Hipster; OpenSUSE Linux Leap; Ubuntu Mate Linux 18.04; y Xubuntu Linux 18.10. Es probable que tambi´en puede compilarse y funcione en otros sistemas operati- vos, otras distribuciones de software y otras versiones pero no ha sido probado. 1Windows 7, y Windows 10 son marcas registradas de Microsoft Corporation. 2 Para generar el fichero ejecutable a partir de c´odigo fuente, un compilador de C (GCC [2018] o Clang [2018]), los sistemas de configuraci´on Autoconf [2018], Automake [2018] y Pkg-config [2018], el programa de control de la creaci´on de ejecutables GNU-Make [2018] y las siguienres librer´ıas de software libre son necesarias: Libxml [2018]: Librer´ıa requerida para leer el fichero principal de entrada en formato XML. GSL [2018]: Librer´ıa cient´ıfica usada para generar los n´umeros pseudo- aleatorios usados por los algoritmos gen´etico y de Monte-Carlo. GLib [2018]: Librer´ıa requerida para analizar las plantillas de los ficheros de entrada y para implementar algunos tipos de datos, funciones ´utiles y rutinas usadas para paralelizar la carga computacional en los diferentes procesadores de la m´aquina. JSON-GLib [2018]: Librer´ıa usada para leer el fichero principal de entrada en formato JSON. GTK+3 [2018]: Librer´ıa opcional usada para dibujar la interfaz gr´afica interactiva. OpenMPI [2018] o MPICH [2018]: Librer´ıas opcionales. Cuando est´an ins- taladas en el sistema una de ellas es usada para permitir la paralelizaci´on del c´alculo en m´ultiples computadoras. Las indicaciones proporcionadas en Install-UNIX [2018] pueden seguirse para instalar todas estas utilidades. En OpenBSD 6.4, antes de generar el c´odigo, deben seleccionarse versiones adecuadas de Autoconf y Automake haciendo en un terminal: > export AUTOCONF VERSION=2.69 AUTOMAKE VERSION=1.16 En sistemas Windows hay que instalar MSYS2 (http://sourceforge.net/projects/msys2) y las librer´ıas y utilidades requeridas. Para ello se pueden seguir las instrucciones detalladas en https://github.com/jburguete/install-unix. En Fedora Linux 29, para usar OpenMPI hay que hacer en un terminal (en la versi´on de 64 bits): > export PATH=$PATH:/ usr/ lib64 /openmpi/bin En FreeBSD 11.2, debido a un extra˜no error en la versi´on por defecto de gcc, hay que hacer en un terminal: > export CC=gcc5 (o CC=clang) Una vez que todas las utilidades necesarias han sido instaladas, hay que descargar el c´odigo de Genetic. Luego puede compilarse haciendo en un terminal: > git clone https://github.com/jburguete/genetic. git > cd genetic /2.2.2 > ./ build El siguiente paso es descargar el c´odigo fuente de MPCOTool, enlazarlo con el de Genetic y compilar todo junto haciendo: > git clone https://github.com/jburguete/mpcotool. git > cd mpcotool/4.0.3 > ln −s ../../genetic/2.2.2 genetic > ln −s genetic/libgenetic.so (o .dll en sistemas Windows) > ./ build 3 En sevidores o en cl´usters, en los que una versi´on sin interfaz gr´afica parale- lizada con MPI es lo m´as conveniente, reempl´acese el script build por: > ./ build without gui Opcionalmente, si se quieren compilar los tests con las funciones anal´ıticas de optimizaci´on est´andar, hay que hacer (los ejecutables de test2, test3 y test4 usan tambi´en la librer´ıa Genetic): > cd ../ tests/test2 > ln −s ../../../genetic/2.2.2 genetic > ln −s genetic/libgenetic.so (.dll en sistemas Windows) > cd ../ test3 > ln −s ../../../genetic/2.2.2 genetic > ln −s genetic/libgenetic.so (.dll en sistemas Windows) > cd ../ test4 > ln −s ../../../genetic/2.2.2 genetic > ln −s genetic/libgenetic.so (.dll en sistemas Windows) > cd ../../4.0.3 > make tests Finalmente podemos construir los manuales en formato PDF haciendo: > make manuals 4 Cap´ıtulo 2 Interfaz ¡OJO! La representaci´on de los n´umeros reales se hace, seg´un el est´andar internacional, separando los decimales mediante el “.” decimal. 2.1. Formato en l´ınea de comandos En esta secci´on hemos marcado entre corchetes los argumentos opcionales. La l´ınea de comandos en modo secuencial es (donde X es el n´umero de hilos a ejecutar paralelamente y S una semilla para el generador de n´umeros pseudo-aleatorios): > ./mpcotoolbin [− nthreads X] [− seed S] fichero de entrada .xml [ fichero de resultados] [fichero de variables ] La l´ınea de comandos en modo paralelizado en diferentes computadoras con MPI es (donde X es el n´umero de hilos a ejecutar en cada nodoyS una semilla para el generador de n´umeros pseudo-aleatorios): > mpirun [MPI options] ./mpcotoolbin [− nthreads X] [− seed S] fichero de entrada.xml [fichero de resultados ] [ fichero de variables ] La sintaxis del programa simulador ha de ser: > ./simulador fichero de entrada 1 [fichero de entrada 2] [...] fichero de salida Hay dos opciones para el fichero de salida. Puede comenzar con un n´umero que indique el valor de la funci´on objetivo o puede ser un fichero de resul- tados que tiene que ser evaluado por un programa externo (el evaluador) comparando con un fichero de datos experimentales. En caso de la ´ultima opci´on del punto anterior, la sintaxis del programa para evaluar la funci´on objetivo tiene que ser (donde el fichero de resulta- dos debe comenzar con el valor de la funci´on objetivo): > ./evaluador fichero simulado fichero experimental fichero de resultados 5 En systemas de tipo UNIX, la aplicaci´on interactiva puede abrirse hacien- do en un terminal: > ./mpcotool 2.2. Uso de MPCOTool como una librer´ıa ex- terna MPCOTool se puede usar tambi´en como una librer´ıa externa haciendo: 1. C´opiese la librer´ıa din´amica (“libmpcotool.so” en sistemas Unix o “libmp- cotool.dll” en sistemas Windows) a la ruta de su programa. 2. Incl´uyase la cabecera de la funci´on en su c´odigo fuente: > extern int mpcotool ( int argn , char ∗∗ argc); 3. Constr´uyase el fichero ejecutable de su programa incluyendo los flags del enlazador: > $ gcc ... −L. −Wl,− rpath=. −lmpcotool ... 4. La llamada a esta funci´on es equivalente a la orden en modo de l´ınea de comandos (v´ease la secci´on anterior): argn: n´umero de argumentos incluyendo el nombre del programa. argc[0]: ”mpcotool”(nombre del programa). argc[1]: primer argumento de la l´ınea de comandos. ... argc[argn − 1]: ´ultimo argumento de la l´ınea de comandos. 2.3. Aplicaci´on con interfaz gr´afica de usuario interactiva Una forma alternativa de usar el programa consiste en usar la aplicaci´on con interfaz gr´afica de usuario interactiva, llamada MPCOTool. En esta aplicaci´on la paralelizaci´on en diferentes computadoras usando OpenMPI o MPICH est´a desactivada, esta paralelizaci´on s´olo puede usarse en modo de comandos. En la figura 2.1 se muestra una figura con la ventana principal de la utilidad. Desde esta ventana podemos acceder a cada variable, coeficiente, algoritmo y programa de simulaci´on requerido. Los resultados ´optimos se presentan finalmente en un cuadro de di´alogo como el mostrado en la figura 2.2. 6 Figura 2.1: Ventana principal de la aplicaci´on con interfaz gr´afica de usuario interactiva de MPCOTool. Figura 2.2: Cuadro de di´alogo de los resultados ´optimos de la aplicaci´on con interfaz gr´afica de usuario interactiva de MPCOTool. optimize simulator algorithm evaluator nsimulations niterations tolerance nbest threshold npopulation ngenerations mutation reproduction adaptation seed climbing nsteps nestimates relaxation norm p result variables ··· experiment name template1 template2 templaten weight ··· ··· experiment name template1 template2 templaten weight variable name minimum maximum absolute minimum absolute maximum precision nsweeps nbits step ··· variable name minimum maximum absolute minimum absolute maximum precision nsweeps nbits step Figura 2.3: Estructura del fichero principal de entrada. Nodos y propiedades im- prescindibles est´an en negrita. No obstante, otras propiedades tambi´en pueden ser necesarias en funci´on del algoritmo de optimizaci´on seleccionado. 2.4. Ficheros de entrada 2.4.1.