Example #1
0
/** creates the integer objective value separator and includes it in SCIP */
SCIP_RETCODE SCIPincludeSepaIntobj(
   SCIP*                 scip                /**< SCIP data structure */
   )
{
   SCIP_SEPADATA* sepadata;
   SCIP_EVENTHDLRDATA* eventhdlrdata;

   /* create intobj separator data */
   SCIP_CALL( sepadataCreate(scip, &sepadata) );

   /* include separator */
   SCIP_CALL( SCIPincludeSepa(scip, SEPA_NAME, SEPA_DESC, SEPA_PRIORITY, SEPA_FREQ, SEPA_MAXBOUNDDIST,
         SEPA_USESSUBSCIP, SEPA_DELAY,
         sepaCopyIntobj, sepaFreeIntobj, sepaInitIntobj, sepaExitIntobj, 
         sepaInitsolIntobj, sepaExitsolIntobj, 
         sepaExeclpIntobj, sepaExecsolIntobj,
         sepadata) );

   /* include event handler for objective change events */
   eventhdlrdata = (SCIP_EVENTHDLRDATA*)sepadata;
   SCIP_CALL( SCIPincludeEventhdlr(scip, EVENTHDLR_NAME, EVENTHDLR_DESC, 
         NULL,
         eventFreeIntobj, eventInitIntobj, eventExitIntobj, 
         eventInitsolIntobj, eventExitsolIntobj, eventDeleteIntobj, eventExecIntobj,
         eventhdlrdata) );

   return SCIP_OKAY;
}
/** creates the event handler for the given event handler object and includes it in SCIP */
SCIP_RETCODE SCIPincludeObjEventhdlr(
   SCIP*                 scip,               /**< SCIP data structure */
   scip::ObjEventhdlr*   objeventhdlr,       /**< event handler object */
   SCIP_Bool             deleteobject        /**< should the event handler object be deleted when eventhdlristic is freed? */
   )
{
   SCIP_EVENTHDLRDATA* eventhdlrdata;

   assert(scip != NULL);
   assert(objeventhdlr != NULL);

   /* create event handler data */
   eventhdlrdata = new SCIP_EVENTHDLRDATA;
   eventhdlrdata->objeventhdlr = objeventhdlr;
   eventhdlrdata->deleteobject = deleteobject;

   /* include event handler */
   SCIP_CALL( SCIPincludeEventhdlr(scip, objeventhdlr->scip_name_, objeventhdlr->scip_desc_,
         eventhdlrCopyObj,
         eventhdlrFreeObj, eventhdlrInitObj, eventhdlrExitObj,
         eventhdlrInitsolObj, eventhdlrExitsolObj, eventhdlrDeleteObj, eventhdlrExecObj,
         eventhdlrdata) ); /*lint !e429*/

   return SCIP_OKAY; /*lint !e429*/
}
Example #3
0
/** creates the event handler for the given event handler object and includes it in SCIP */
JNIEXPORT
void JNISCIP(includeJavaEventhdlr)(
   JNIEnv*               env,                /**< JNI environment variable */
   jobject               jobj,               /**< JNI class pointer */
   jlong                 jscip,              /**< SCIP data structure */
   jclass                javaeventhdlr,      /**< event handler object */
   jboolean              deleteobject        /**< should the event handler object be deleted when eventhdlristic is freed? */
   )
{
   SCIP* scip;
   SCIP_EVENTHDLRDATA* eventhdlrdata;
   jstring jname;
   jstring jdesc;
   jboolean iscopy;
   jfieldID fieldID;

   const char* name;
   const char* desc;

   /* convert JNI pointer into C pointer */
   scip = (SCIP*) (size_t) jscip;
   assert(scip != NULL);

   /* create event handler data */
   JNISCIP_CALL( SCIPallocMemory(scip, &eventhdlrdata) );

   /* store JNI environment */
   eventhdlrdata->env = env;
   eventhdlrdata->jobj = jobj;

   /* store java class pointer */
   eventhdlrdata->javaeventhdlr = javaeventhdlr;

   /* collect for all callback methods the methods id and store these in the event handler data */
   eventhdlrdata->scip_free = (*env)->GetMethodID(env, javaeventhdlr, "scip_free", "(JJ)V");
   eventhdlrdata->scip_init = (*env)->GetMethodID(env, javaeventhdlr, "scip_init", "(JJ)V");
   eventhdlrdata->scip_exit = (*env)->GetMethodID(env, javaeventhdlr, "scip_exit", "(JJ)V");
   eventhdlrdata->scip_initsol = (*env)->GetMethodID(env, javaeventhdlr, "scip_initsol", "(JJ)V");
   eventhdlrdata->scip_exitsol = (*env)->GetMethodID(env, javaeventhdlr, "scip_exitsol", "(JJ)V");
   eventhdlrdata->scip_delete = (*env)->GetMethodID(env, javaeventhdlr, "scip_delete", "(JJ)V");
   eventhdlrdata->scip_exec = (*env)->GetMethodID(env, javaeventhdlr, "scip_exec", "(JJJJ)V");

   eventhdlrdata->deleteobject = deleteobject;

   /* collect event handler name */
   fieldID = (*env)->GetFieldID(env, javaeventhdlr, "name", "Ljava/lang/String;");
   jname = (*env)->GetObjectField(env, jobj, fieldID);

   /* convert JNI string into const char* */
   name = (*env)->GetStringUTFChars(env, jname, &iscopy);
   assert(name != NULL);
   assert(iscopy);


   /* collect event handler description */
   fieldID = (*env)->GetFieldID(env, javaeventhdlr, "desc", "Ljava/lang/String;");
   jdesc = (*env)->GetObjectField(env, jobj, fieldID);

   /* convert JNI string into const char* */
   desc = (*env)->GetStringUTFChars(env, jdesc, &iscopy);
   assert(desc != NULL);
   assert(iscopy);

   /* include event handler */
   JNISCIP_CALL( SCIPincludeEventhdlr(scip, name, desc,
         eventhdlrCopyJava,
         eventhdlrFreeJava, eventhdlrInitJava, eventhdlrExitJava,
         eventhdlrInitsolJava, eventhdlrExitsolJava, eventhdlrDeleteJava, eventhdlrExecJava,
         eventhdlrdata) ); /*lint !e429*/

   (*env)->ReleaseStringUTFChars(env, jname, name);
   (*env)->ReleaseStringUTFChars(env, jdesc, desc);
}