El documento describe un programa BASH llamado ultimo.sh que extrae información clave de archivos LST generados por el programa GAMS. El programa solicita al usuario el número de unidades básicas y luego usa awk y sed para extraer el estado del solver, estado del modelo, valor objetivo, mejor valor y gaps absoluto y relativo de los archivos LST y redireccionarlos a archivos de salida.
2. Objetivo del programa
ultimo.sh
Se desea extraer información de un archivo tipo LST
que se genera al correr el programa GAMS, y
contiene demasiada información.
Lo que se desea obtener son los siguientes
resultados:
Status del solver
Status del modelo
Valor de la función objetivo
Mejor valor obtenido
Gaps absoluto y relativo:
3. Parámetros necesarios
El programa necesita saber el nombre del archivo
que utilizara, como son 5 instancias parecidas de un
total de 4 tipos, esto se automatizara con la ayuda del
uso de BASH.
El resultado obtenido se re direcciona a los archivos
que llevaran el prefijo
res_nombre_de_la_instancia.txt
El nombre del archivo BASH creado es ultimo.sh
No olvides dar permiso de escritura antes de
ejecutarlo.
4. Antes de ejecutar ultimo.sh
El programa pedirá el numero de unidades básicas y
con eso genera el nombre de la instancoa y ejecuta el
for dentro del bash.
6. Programa ultimo.sh
#!/bin/bash
read
v=$REPLY
echo "numero de unidades basicas: "
for i in 1 2 3 4 5; do
if [ $v -eq "20" ]
then
for j in 2 3; do
awk 'BEGIN {print "R E S U L T A D O S n"} $1 == "****" && $3 == "STATUS" {print $2,$3,":",$5,$6,$7} $2
== "OBJECTIVE" {print $2,$3,$4} $1 == "MIP" && $2 == "status" {print $0} $1 == "Best" {print $0, "nLos
GAP absolutos y relativos son:"} $2 ~ /gap:$/ {print $0} END {print "--------------fin----------------"}'
$"weee_"$v"_"$j"_"$i"_cplex_opt.lst" > "res_weee_"$v"_"$j"_"$i"_cplex_opt.txt"
done
elif [ $v -eq "40" ];
then
for j in 3 4; do
awk 'BEGIN {print "R E S U L T A D O S n"} $1 == "****" && $3 == "STATUS" {print $2,$3,":",$5,$6,$7} $2
== "OBJECTIVE" {print $2,$3,$4} $1 == "MIP" && $2 == "status" {print $0} $1 == "Best" {print $0, "nLos
GAP absolutos y relativos son:"} $2 ~ /gap:$/ {print $0} END {print "--------------fin----------------"}'
$"weee_"$v"_"$j"_"$i"_cplex_opt.lst" > "res_weee_"$v"_"$j"_"$i"_cplex_opt.txt"
done
else
echo "Solo hay instancias con 20 y 40 nodos"
break
fi
echo "Finalizado con $v unidades basicas"
done
7. Archivo de salida
El formato del archivo de salida es el siguinete:
Emacs res_weee_40_3_2_cplex_opt:
RESULTADOS
SOLVER STATUS : RESOURCE INTERRUPT
MODEL STATUS : INTEGER SOLUTION
OBJECTIVE VALUE 0.8000
Best possible: 9.400000
Los GAP absolutos y relativos son:
Absolute gap: 8.600000
Relative gap: 10.750000
--------------fin----------------
8. Objetivo del programa
intento_sed.sh
Se desea obtener la siguiente información de un
archivo tipo LST
Estatus del solver
Estatus del modelo
Valor del gap (fijado por usuario en GAMS)
Gap Absoluto
Gap Relativo
9. Parámetros necesarios
El programa pide al usuario la cantidad de unidades
básicas (solo hay instancias de 20 y 40 nodos). Se
ayudara con una automatización hecha con BASH.
El resultado obtenido se re direcciona a los archivos
que llevaran el nombre:
obtenido_NumNodos_Param_instancia
El nombre del archivo BASH creado es
intento_sed.sh
No olvides dar permiso de escritura antes de
ejecutarlo.
11. Programa intento_sed.sh
#!/bin/bash
echo "numero de unidades basicas: "
read
v=$REPLY
for i in 1 2 3 4 5; do
if [ $v -eq "20" ];
then
for j in 2 3; do
sed -n -e '/STATUS/p' -e '/gap/p' "weee_"$v"_"$j"_"$i"_cplex_opt.lst" > "obtenido_"$v"_"$j"_"$i
done
elif [ $v -eq "40" ];
then
for j in 3 4; do
sed -n -e '/STATUS/p' -e '/gap/p' "weee_"$v"_"$j"_"$i"_cplex_opt.lst" > "obtenido_"$v"_"$j"_"$i
done
else
echo "Solo hay instancias con 20 y 40 nodos"
break
fi
echo "Finalizado con $v unidades basicas"
done
12. Archivo de salida
El formato del archivo d¿es el siguinete:
Emacs obtenido_20_3_5:
**** SOLVER STATUS 1 NORMAL COMPLETION
**** MODEL STATUS 1 OPTIMAL
>> epgap 0.0001
Absolute gap: 0.000000
Relative gap: 0.000000