help-glpk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-glpk] [Fwd: Terminating GLPK early]


From: Xypron
Subject: Re: [Help-glpk] [Fwd: Terminating GLPK early]
Date: Wed, 24 Aug 2011 18:25:12 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110626 Icedove/3.1.11

Hello Jonathan,

there are two solutions:

1) Implement the terminal hook function. This hook function is called at regular intervals by the solver. In the hook function call
glp_error("%s\n", "Aborting due to user request");

Implement the error_hook function to gracefully catch the produced error.

The following code snippets are taken from GLPK for Java:

    jmp_buf glp_java_env;

    glp_java_callback_env[glp_java_callback_level] = &glp_java_env;
    if (setjmp(glp_java_env)) {
      glp_java_throw(jenv, "function glp_simplex failed");
    } else {
      glp_error_hook(glp_java_error_hook, &glp_java_env);
      result = (int)glp_simplex(arg1,(glp_smcp const *)arg2);;
    }
    glp_java_callback_env[glp_java_callback_level] = NULL;
    glp_error_hook(NULL, NULL);


/**
 * This hook function will be processed if an error occured
 * calling the glpk library
 * @param in pointer to long jump environment
 */
void glp_java_error_hook(void *in) {
    glp_java_error_occured = 1;
    /* free GLPK memory */
    glp_free_env();
    /* safely return */
    longjmp(*((jmp_buf*)in), 1);
}

2) If you are solving a MIP problem, and want to get the best solution yet found, implement a callback routine the address of which you pass with the iocp structure. In the callback routine call
glp_ios_terminate(tree);

Both has been implemented successfully in example/java/GmplSwing.java of GLPK for Java.

You can download GLPK for Java from
http://glpk-java.sourceforge.net

It is included in GLPK for Windows available at
http://winglpk.sourceforge.net

Best regards

Xypron


On 24.08.2011 14:25, Andrew Makhorin wrote:
-------- Forwarded Message --------
Subject: Terminating GLPK early
Date: Wed, 24 Aug 2011 12:34:40 +1200

Dear Andrew,

I am currently modifying the GLPKMEX interface to GLPK (Matlab
interface) and wish to be able to terminate a call to GLPK if a user was
to say push Ctrl-C, and return the current best solution. I have read
through the documentation and have tried glp_error() however this also
causes Matlab to crash (not sure if I have done something wrong), but
wondered if there was a cleaner way?

I am imagining an event handler which could be passed to GLPK before
glp_simplex() or another solver is called, which is then called by the
solver each iteration (with perhaps some runtime information), and a
return code passed back to indicate whether to continue or stop.

I apologize if this already exists in GLPK however I have been unable to
find it!

Kind Regards,

Jonathan Currie


_______________________________________________
Help-glpk mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/help-glpk





reply via email to

[Prev in Thread] Current Thread [Next in Thread]