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).

Problema de ejemplo glpk-java

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

FCFM 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 

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.

 

ACM ICPC – México en competencias internacionales de tecnología

ACM ICPC - International Collegiate Programming Contest

La ACM (Association for Computing Machinery) es la sociedad de ciencias computacionales de carácter educacional y científico más grande del mundo.  Uno de los eventos con los que promueven el interés de los estudiantes por las matemáticas, la algoritmia y la programación es la competencia de programación ACM ICPC que se realiza cada año reuniendo a decenas de miles de los mejores estudiantes de diferentes disciplinas de computación de más de 2,000 universidades alrededor del globo.

¿Por qué participar en una competencia de programación? 

Estudiantes en concursos de programacion

  1. Es un reto. Esta competencia de programación presenta al estudiante retos matemáticos y computacionales despertando en él una poco común curiosidad matemática y en poco tiempo, el resolver retos como los que se presentan, puede convertirse en un vicio.
  2. Currículum. Si bien un problema que muchos estudiantes enfrentan al graduarse es el de la experiencia laboral, o la falta de ésta. El participar en un concurso de programación permite al estudiante seguir con su vida estudiantil, y le da cartas de recomendación para presentar ante un futuro empleador.
  3. Trabajo en equipo. Participar en un concurso con un grupo de estudiantes es divertido, y más si el equipo está formado por buenos amigos.
  4. Nuevas experiencias. Jornadas de trabajo de 16 horas, noches en vela programando, viajes, discusiones y chistes algorítmicos. Sin lugar a duda, experiencias nuevas y enriquecedoras que quizás sólo se puedan vivir siendo estudiante.
  5. Promoción tecnológica. Si cada vez más y más universidades mexicanas comienzan a utilizar estos medios para desarrollar habilidades tecnológicas en sus alumnos, seguro que la comunidad internacional lo notará y atraeremos su atención (y quizás también su dinero y tecnología).

Otros concursos de tecnología

Microsoft Imagine Cup 2010Microsoft Imagine Cup

Abierto Nacional de Programacion ANTS

Abierto Nacional de Programación Ants

Desafío Intel América Latina

Desafío Intel América Latina

Cualquier información que pudiera completar esta lista de concursos tecnológicos para apoyar la educación en México es bienvenida. En conclusión, es buen momento para que las universidades contemplen estos “trampolines tecnológicos” en sus reuniones de planeación.

Soluciones Microsoft para la PYME en México

La mayoría de las PYMES actuales carecen de una buena organización de su información y pocas cuentan con presencia en internet.

Actualmente sólo 50% de las Pequeñas y Medianas Empresas (Pymes) mexicanas usan equipos de cómputo, de acuerdo con estimaciones de la consultora de comunicaciones Limbergy. [1]

Más que indagar sobre las causas del rezago tecnológico en este sector quisiera proponer una solución básica con herramientas gratuitas y confiables.

La solución propuesta incluye las siguientes herramientas:

  1. Correo electrónico gratuito.
  2. Sitio web gratuito y fácil de administrar.
  3. CRM básico gratuito.
  4. Pequeñas bases de datos en Excel compartidas en la web.
  5. Almacenamiento de archivos en la web.

Estas herramientas se pueden obtener con 3 productos gratuitos:

Microsoft Office Live Small Business

  • Sitio Web.
  • Administrador de Contactos (CRM básico).
  • Hasta 100 cuentas de correo electrónico.

Abrir la cuenta de tu empresa es muy fácil. Adicionalmente se puede comprar un dominio propio por 15 USD al año y asociarlo con los servicios gratuitos de OLSB. Una parte muy interesante es la aplicación de Administrador de contactos, que cuenta con características que permiten centralizar la información de los clientes y proveedores además de dar un seguimiento básico a los clientes.

Windows Live SkyDrive

  • 25 GB de almacenamiento gratuito en la web.
  • La Pymes pueden utilizar esta herramienta para compartir archivos entre las estaciones de trabajo. Sin importar el giro de la empresa, 25 GB por cuenta es una capacidad que brinda la flexibilidad de crear sistemas de organización de archivos basados en la web.

    Microsoft Office Live Workspaces

    • Almacenamiento de archivos compartidos para trabajo en equipo.

    Esta herramienta es muy útil para llevar a cabo la administración de la empresa. Si se cuenta con catálogos de Excel para llevar un registro de clientes, productos, inventario, etc. Se pueden subir esos catálogos a un área de trabajo y compartirlos con usuarios específicos para su edición.  Esto permite tener una pequeña pero sofisticada base de datos basada en Excel y la función VLOOKUP con referencia a los libros desde su ubicación web.

    Como un adelanto al siguiente post, dejo un ejemplo de la función VLOOKUP para enlazar datos de diferentes libros de excel:

    =BUSCARV(B5,'http://josketres1.workspace.office.live.com/Docs/[lista-clientes.xlsx]Sheet1'!$A$1:$B$3,2,VERDADERO)

    Para utilizar estas referencias a origenes de datos se debe de tener autorización para leer el documento especificado por la fórmula.

    En conclusión, ya es tiempo de ir aprovechando las herramientas gratuitas y ponerlas al servicio de nuestras empresas en México.

    Microsoft en la UANL

    Durante muchos años, hablar de Microsoft en Monterrey era hablar de sus programas académicos en el Tecnológico de Monterrey (ITESM). Se escuchaba también que los mejores alumnos del TEC eran reclutados desde algunos semestres anteriores al término de sus estudios para colaborar con ese gigante de la tecnología.

    Ya en el año 2007, durante el Fórum Universal de las Culturas una persona (que resulta ser mi madre) lanzó la pregunta a los expositores de Microsoft: ¿y la UANL? ¿Acaso no tenemos también jóvenes con  talento y futuros líderes tecnológicos en nuestras universidades públicas?

    Bueno, pues después de unos años, llegan al fin los beneficios de los programas académicos de Microsoft a las aulas de nuestra Alma Mater. En Agosto de 2009 se invitó a los alumnos de la Facultad de Ciencias Físico Matemáticas (FCFM) a participar en diversas convocatorias (Microsoft Student Partners, Imagine Cup 2010, entre otras) y se realizaron conferencias y talleres impartidas por gente de Microsoft, las cuales sembraron muchas inquietudes en la comunidad estudiantil.MSP's en Físico Matemáticas

    La Facultad se va moviendo en dirección a una participación mucho más activa y enriquecedora en el ámbito tecnológico nacional e internacional. Algunos ejemplos de este hecho:

    • Desde Noviembre de 2009 se reúne un grupo de estudiantes interesados en el desarrollo de videojuegos con la plataforma XNA de Microsoft, el club estudiantil se llama Bisonte Game Studio
    • Hoy, la facultad cuenta con 3 MSP’S (Microsoft Student Partners) cuya misión principal es llevar los beneficios de los diferentes programas académicos de Microsoft a los estudiantes.
    • En Enero 2010 2 equipos de la facultad respondieron a la convocatoria de Microsoft Imagine Cup 2010 presentando novedosos proyectos de software.
    • Ya se cuenta con un plan de trabajo para promover la certificación en alguna tecnología Microsoft como una estrategia de diferenciación entre los estudiantes.

    Los estudiantes estamos contentos con este gran paso y seguiremos apoyando iniciativas como ésta en nuestra facultad. Microsoft, Oracle, Intel y cualquier otra empresa que pueda agregar valor a nuestro estudio y contribuir a la formación de futuros profesionales de las TI: ¡Bienvenidos a la UANL!

    Seguir

    Get every new post delivered to your Inbox.