GLPK+JAVA+Windows (Guía Rápida)
Con esta guía rápida pretendo ahorrar algo de tiempo a aquellos que sean nuevos a GLPK y que quieran usarla desde JAVA ya sea para un proyecto académico (como es mi caso) o de cualquier otra índole. Es una de las muchas maneras de echar a andar la librería, si hay otra solución más fácil y/o sofisticada, por favor no duden en comentarla aquí.
¿Qué es GLPK?
- GLPK = GNU Linear Programming Kit
- Paquete escrito en lenguaje C.
- Ideal para resolver problemas a gran escala de programación lineal (LP), programación entera mixta (MIP) y otros tipos de problemas relacionados.
Pre-Requisitos
Para comenzar a utilizar esta guía se debe de cumplir con los siguientes pre-requisitos:
- Tener un compilador de JAVA previamente instalado.
Paso 1 – Bajar WINGLPK
WINGLPK es un paquete pre-compilado de la librería de GLPK para Windows 32 y 64 bits. Hay que bajar el paquete de http://sourceforge.net/projects/winglpk/
Una vez que lo bajaste, descomprime la carpeta del paquete y muévela a la ubicación que quieras en tu sistema. Ejemplo: C:\GLPK\glpk-4.44
Paso 2 – Crear Programa java
Ya sea utilizando tu IDE favorito o el block de notas, crea tu primer programa de JAVA utilizando GLPK. Puedes utilizar el siguiente ejemplo (tomado de la documentación del paquete de glpk: C:\…\glpk-4.44\docs\glpk-java.pdf).
import org.gnu.glpk.GLPK;
import org.gnu.glpk.GLPKConstants;
import org.gnu.glpk.GlpkException;
import org.gnu.glpk.SWIGTYPE_p_double;
import org.gnu.glpk.SWIGTYPE_p_int;
import org.gnu.glpk.glp_prob;
import org.gnu.glpk.glp_smcp;
public class Main {
// Minimize z = (x1-x2) /2 + (1-(x1-x2)) = -.5 * x1 + .5 * x2 + 1
//
// subject to
// 0.0<= x1 - x2 <= 0.2
// where,
// 0.0 <= x1 <= 0.5
// 0.0 <= x2 <= 0.5
public static void main(String[] args) {
glp_prob lp;
glp_smcp parm;
SWIGTYPE_p_int ind;
SWIGTYPE_p_double val;
int ret;
try {
// Create problem
lp = GLPK.glp_create_prob();
System.out.println("Problem created");
GLPK.glp_set_prob_name(lp, "myProblem");
// Define columns
GLPK.glp_add_cols(lp, 2);
GLPK.glp_set_col_name(lp, 1, "x1");
GLPK.glp_set_col_kind(lp, 1, GLPKConstants.GLP_CV);
GLPK.glp_set_col_bnds(lp, 1, GLPKConstants.GLP_DB, 0, .5);
GLPK.glp_set_col_name(lp, 2, "x2");
GLPK.glp_set_col_kind(lp, 2, GLPKConstants.GLP_CV);
GLPK.glp_set_col_bnds(lp, 2, GLPKConstants.GLP_DB, 0, .5);
// Create constraints
GLPK.glp_add_rows(lp, 1);
GLPK.glp_set_row_name(lp, 1, "c1");
GLPK.glp_set_row_bnds(lp, 1, GLPKConstants.GLP_DB, 0, 0.2);
ind = GLPK.new_intArray(3);
GLPK.intArray_setitem(ind, 1, 1);
GLPK.intArray_setitem(ind, 2, 2);
val = GLPK.new_doubleArray(3);
GLPK.doubleArray_setitem(val, 1, 1.);
GLPK.doubleArray_setitem(val, 2, -1.);
GLPK.glp_set_mat_row(lp, 1, 2, ind, val);
// Define objective
GLPK.glp_set_obj_name(lp, "z");
GLPK.glp_set_obj_dir(lp, GLPKConstants.GLP_MIN);
GLPK.glp_set_obj_coef(lp, 0, 1.);
GLPK.glp_set_obj_coef(lp, 1, -.5);
GLPK.glp_set_obj_coef(lp, 2, .5);
// Solve model
parm = new glp_smcp();
GLPK.glp_init_smcp(parm);
ret = GLPK.glp_simplex(lp, parm);
// Retrieve solution
if (ret == 0) {
write_lp_solution(lp);
} else {
System.out.println("The problem could not be solved");
}
// Free memory
GLPK.glp_delete_prob(lp);
} catch (GlpkException ex) {
ex.printStackTrace();
}
}
/**
* write simplex solution
* @param lp problem
*/
static void write_lp_solution(glp_prob lp) {
int i;
int n;
String name;
double val;
name = GLPK.glp_get_obj_name(lp);
val = GLPK.glp_get_obj_val(lp);
System.out.print(name);
System.out.print(" = ");
System.out.println(val);
n = GLPK.glp_get_num_cols(lp);
for (i = 1; i <= n; i++) {
name = GLPK.glp_get_col_name(lp, i);
val = GLPK.glp_get_col_prim(lp, i);
System.out.print(name);
System.out.print(" = ");
System.out.println(val);
}
}
}
Paso 3 – Compilar programa
Para compilar hay que hacer referencia al archivo glpk-java.jar que ya está incluido en nuestro paquete de winglpk, se puede agregar como una librería desde el IDE que estén usando o se puede especificar en el comando del compilador. En mi caso para compilar el programa corro el siguiente comando:
javac -classpath C:\GLPK\glpk-4.44\w64\glpk-java.jar Main.java
Paso 4 – Correr el programa
Para correr el programa se necesita hacer referencia nuevamente a la carpeta en donde se encuentran los archivos pre-compilados de la librería GLPK, en mi caso esta carpeta es C:\GLPK\glpk-4.44\w64. Se pueden modificar las propiedades del proyecto en la IDE en la que se esté trabajando o se puede especificar la ubicación en el comando de java. En mi caso para correr el programa hago lo siguiente:
java -Djava.library.path=C:\GLPK\glpk-4.44\w64 -classpath C:\GLPK\glpk-4.44\w64\glpk-java.jar;. Main
Con –Djava.library.path= le especifico a la VM dónde buscar las librerías que va a cargar dinámicamente (glpk_4_44.dll y glpk_4_44_java.dll).

Más Información
Consulta la documentación que viene en tu distribución de glpk. (Ejemplo C:\…\glpk-4.44\docs\glpk-java.pdf)
Para más información, recomiendo visitar los siguientes sitios:
http://www.gnu.org/software/glpk/
http://winglpk.sourceforge.net/
http://www.ibm.com/developerworks/linux/library/l-glpk1/
http://codingtech.wordpress.com/2010/03/12/glpk-y-visual-studio-en-10-pasos/
Lanzamiento de Visual Studio 2010 y Windows Azure
Si tu vida es crear aplicaciones, participa en las actividades del Lanzamiento de Visual Studio 2010 y Windows Azure.
1
Inscríbete al concurso “Tu vida en código” para ganar una Lenovo ThinkPad de doble pantalla.
2
Asiste al evento de lanzamiento “Tu Vida en Código” en México D.F. el 22 de abril de 2010.
Si no estás en Cd. de México, consulta los eventos más cercanos a tu ciudad.
3
Asiste al evento virtual: “La eficiencia en tus manos” el 21 de abril de 2010.
5 maneras de aprender tecnología estas vacaciones
Ya se acercan las vacaciones de semana santa, y para algunos estudiantes esto significará tener un montón de tiempo libre para descansar y disfrutar.
Para los estudiantes apasionados por la tecnología, ofrezco en este post 5 alternativas para descansar y aprender sobre tecnología en estas vacaciones.
1.- Participa con tus amigos en los Imagine Cup Awards.
Los Imagine Cup Awards son pequeñas competencias adicionales a las categorías que componen la Copa de la Imaginación. Entre estos retos adicionales se destacan:
- Envisioning 2020 Award (Imaginando el 2020) – Un reto que consiste en crear un video en el que se describa cómo va a ser el mundo en el 2020 con ayuda de la tecnología. Inscribirse antes del 5 de Mayo.
- Windows Phone 7 “Rockstar” Award – Consiste en crear una aplicación para el nuevo SO para celulares Windows Phone 7, utilizando herramientas como XNA o Silverlight. La aplicación debe ser muy atractiva visualmente y desarrollada con el usuario en mente. Se puede utilizar un simulador para realizar las pruebas. Inscribirse antes del 24 de Mayo.
- Interoperability Award - Realizar una aplicación que permita llevar una plataforma o servicio de Microsoft a otra plataforma o dispositivo, ya sea hacer un cliente de SkyDrive para Linux, checar el correo de hotmail en el microondas o instalar messenger en tu televisión de LCD, no hay límites. El registro está abierto todavía y la aplicación se debe entregar antes del 5 de Mayo.
2.- Desarrolla tus habilidades de programación y matemáticas en el UVA Online Judge.
Si lo tuyo son la programación y las matemáticas esta opción seguro es para ti. ACM ICPC es una competencia internacional de programación y algoritmos computacionales. El UVA Online Judge es un compendio de problemas usados en ediciones anteriores del concurso. En esta página puedes crear tu perfil e ir resolviendo problemas. Conforme vas resolviendo problemas y los envías, éstos son validados por un software especializado y van aumentando tu ranking online.
3.- Actualízate en tecnología con la Academia Virtual de Microsoft.
La Microsoft Virtual Academy es un lugar de aprendizaje y actualización en las tecnologías de Microsoft. Ofrece cursos gratuitos, así como carreras (cursos de mayor duración y alcance). Las herramientas de aprendizaje son muy eficaces e interactivas. En MVA puede participar cualquier persona con intereses en tecnología.
4.- Escucha buenos Podcasts.
Los podcasts son una buena alternativa para mantenerte actualizado en estas vacaciones. A continuación listo 3 de mis podcasts favoritos en ciencia y tecnología:
-
El Explicador con Enrique Gánem – Programa de radio de difusión científica (excelente).
-
Dommo – Muy buen Podcast de tecnología. Informativo y divertido.
-
Byte, tecnología aplicada… a la vida - También muy buena información acerca de tecnología y “cultura geek”. Muuuy divertido.
5.- Lee un buen libro online.
Júntate con unos amigos y adquieran una cuenta en Safari Books Online. Un sitio web que te da acceso a contenido de tecnología de alta calidad. Libros, videos, turoriales, white papers, etc. Yo llevo un año con el servicio y no me arrepiento de pagar los 10 dólares que pago por mes. Son sin duda una muy buena inversión.
IIS en Windows 7
IIS (Internet Information Services) es un conjunto de servicios que se ofrecen para computadoras que funcionan con el SO Windows. Los servicios que contiene IIS son: FTP, SMTP, NNTP y HTTP/HTTPS.
La novedad es ahora que IIS está instalado en todas las versiones de Windows 7.
En versiones anteriores de Windows sólo se ofrecía este servicio para algunas versiones del SO (XP Professional, Vista Bussines y Ultimate).
Si tienes una computadora con Windows 7, ya tienes instalado el IIS, sólo hay que activarlo. Aquí les dejo una liga de un post muy bueno de cómo Activar IIS en Windows 7.
Guía para registro FCFM MSDNAA
Instrucciones para el registro en la página www.fcfm.uanl.mx
1.- En la página de la facultad, en la sección oportunidades únicas, está el logo del msdn aa.
2.- Al darle clic, aparece el mensaje de dirección, y al final viene la opción “Regístrese aquí”.
3.-Hay que teclear el número de matrícula y un correo electrónico válido.
Recuerda: el registro estará abierto del 8 al 12 de Marzo de 2010. (el periodo de inscripción se alargó hasta el 21 de marzo de 2010)
4.- El fin de semana del 13 de marzo recibirás por correo una liga a el sitio de administración de software MSDN-AA FCFM UANL así como tu nombre de usuario y tu contraseña.

5.- Entras al sitio con tu usuario y contraseña.
6.- Y tendrás acceso directo al software más nuevo de Microsoft totalmente gratis para que lo utilices en tus proyectos escolares, investigaciones, experimentos, etc.
¡Se divierten!
FCFM en MSDN Academic Alliance
La Facultad de Ciencias Físico Matemáticas de la Universidad Autónoma de Nuevo León es ahora miembro oficial del programa MSDN Academic Alliance, un programa de suscripción anual que permite a los estudiantes tener acceso absoluto a lo último en el software de Microsoft, tales como Windows7, SQL Server 2008 y Visual Studio 2008 entre otros.
El programa requiere que los alumnos se registren en la página de la facultad y reciban una cuenta, con la cual podrán ingresar a contenidos exclusivos de software de Microsoft con fines educativos.
El registro estará abierto del 8 al 12 de Marzo de 2010, y a vuelta de correo se enviará un e-mail, que tendrá como título “Cuenta Activada!” con información acerca del uso del programa. Guía para el registro.
Para más información lea el comunicado oficial de la dirección de la facultad:
Comunicado Oficial FCFM MSDNAA
Imaginando el 2020
¿Cómo puede la tecnología transformar nuestras vidas en el año 2020?
El pasado 2 de Marzo de 2010 se abrió la convocatoria del premio Imaginando el 2020 como parte de Microsoft Imagine Cup. El concurso consiste en imaginar el mundo en diez años y expresar esas ideas en forma de un video. El video con los conceptos más ingeniosos, con más potencial de impacto y visión de largo plazo será premiado.
¿Para cuándo?
La fecha límite para participar es el 5 de Mayo de 2010 a las 12:59 PM GMT.
Premios
Si tu equipo está entre los semifinalistas se ganarán un viaje a Varsovia. También se ofrecen los siguientes premios para los tres primeros lugares:
-
Primer lugar: $8,000 USD
-
Segundo lugar: $4,000 USD
-
Tercer lugar: $3,000 USD
Más información
Si te interesó la convocatoria visita el Sitio Oficial de Imagine Cup y revisa las bases para inscribirte con tu equipo.












