1. AWK
2. SED
En ambos casos se crearon programas del tipo BASH para realizar repeticiones de los programas con ambas herramientas.
El objetivo de ambos programas es obtener información de un archivo *.lst generado al resolver un programa de optimización en GAMS, cada uno con su sintaxis respectiva.
El primer archivo se llama ultimo.sh y usa AWK par leeer por columnas la informacion del archivo de entrada (*.lst) y cuando encuentra las coincidencias re-direcciona la infornación hacia diferentes archivos de salida (res_weee_NumNodos_Param_Repetición.txt) El segundo archivo se llama intento_sed.sh y usa
El archivo ultimo.sh que pide el numero de nodos para saber que instancias son las que se realizaran (20 o 40 nodos) cada uno con 10 variantes.
El archivo intento_sed.sh pide el número de nodos para crear el nombre del archivo de entrada (*.lst) y cuando encuentra las coincidencias re-direcciona la información hacia diferentes archivos de salida (obtenido_NumNodos_Param_Repetición)
Se adjuntan ambos programas:
El archivo ultimo.sh
#!/bin/bashEl formato del archivo de salida es el siguiente:
echo "numero de unidades basicas: "
read
v=$REPLY
echo $v
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
R E S U L T A D O S
SOLVER STATUS : NORMAL COMPLETION
MODEL STATUS : OPTIMAL
OBJECTIVE VALUE 2.0000
Best possible: 2.000000
Los GAP absolutos y relativos son:
Absolute gap: 0.000000
Relative gap: 0.000000
--------------fin----------------
El archivo 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
El formato del archivo de salida es el siguiente:
**** SOLVER STATUS 1 NORMAL COMPLETION
**** MODEL STATUS 1 OPTIMAL
>> epgap 0.0001
Absolute gap: 0.000000
Relative gap: 0.000000
No hay comentarios:
Publicar un comentario