/* A test to see if multiple observers/loggers can be wrapped around a problem. */ void multiple_observers(void) { coco_suite_t *suite; coco_observer_t *observer_inner, *observer_middle, *observer_outer; coco_problem_t *problem_inner, *problem_middle, *problem_outer; suite = coco_suite("bbob-biobj", "year: 2016", "dimensions: 2 function_indices: 1-3 instance_indices: 1-2"); observer_inner = coco_observer("toy", ""); observer_middle = coco_observer("bbob-biobj", "log_nondominated: final log_decision_variables: none"); observer_outer = coco_observer("toy", ""); while ((problem_inner = coco_suite_get_next_problem(suite, observer_inner)) != NULL) { problem_middle = coco_problem_add_observer(problem_inner, observer_middle); problem_outer = coco_problem_add_observer(problem_middle, observer_outer); my_optimizer(problem_outer); problem_middle = coco_problem_remove_observer(problem_outer, observer_outer); problem_inner = coco_problem_remove_observer(problem_middle, observer_middle); } coco_observer_free(observer_inner); coco_observer_free(observer_middle); coco_observer_free(observer_outer); coco_suite_free(suite); }
/* Each time: run the benchmark and delete the output folder */ void run_once(char *observer_options) { coco_suite_t *suite; coco_observer_t *observer; coco_problem_t *problem; printf("Running experiment with options %s\n", observer_options); fflush(stdout); suite = coco_suite("bbob-biobj", NULL, "dimensions: 2 function_indices: 5-6 instance_indices: 2-3"); observer = coco_observer("bbob-biobj", observer_options); while ((problem = coco_suite_get_next_problem(suite, observer)) != NULL) { my_optimizer(problem); } coco_observer_free(observer); coco_suite_free(suite); wait_in_seconds(2); /* So that the directory removal is surely finished */ printf("DONE!\n"); fflush(stdout); }
/* * Class: CocoJNI * Method: cocoFinalizeObserver * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_moeaframework_problem_BBOB2016_CocoJNI_cocoFinalizeObserver (JNIEnv *jenv, jclass interface_cls, jlong jobserver_pointer) { coco_observer_t *observer = NULL; /* This test is both to prevent warning because interface_cls was not used and to check for exceptions */ if (interface_cls == NULL) { jclass Exception = (*jenv)->FindClass(jenv, "java/lang/Exception"); (*jenv)->ThrowNew(jenv, Exception, "Exception in cocoFinalizeObserver\n"); } observer = (coco_observer_t *) jobserver_pointer; coco_observer_free(observer); return; }