@@ -429,46 +429,46 @@ TEST_CASE("highs-callback-mip-cut-pool", "[highs_callback]") {
429429 highs.resetGlobalScheduler (true );
430430}
431431
432- // TEST_CASE("highs-callback-mip-user-solution", "[highs_callback]") {
433- // // const std::vector<std::string> model = {"rgn", "flugpl", "gt2", "egout",
434- // // "bell5", "lseu", "sp150x300d"};//, "p0548", "dcmulti"}; const
435- // // std::vector<HighsInt> require_origin = {0, 1, 2, 3, 4, 5, 6};
436- // const std::vector<std::string> model = {"p0548", "flugpl", "gt2", "egout",
437- // "sp150x300d"};
438- // const std::vector<HighsInt> require_origin = {0, 1, 2, 3, 4}; //, 4, 5, 6};
439- // assert(model.size() == require_origin.size());
440- // Highs highs;
441- // highs.setOptionValue("output_flag", dev_run);
442- // highs.setOptionValue("mip_rel_gap", 0);
443- // HighsInt from_model = 0;
444- // HighsInt to_model = HighsInt(model.size());
445- // for (HighsInt iModel = from_model; iModel < to_model; iModel++) {
446- // const std::string filename =
447- // std::string(HIGHS_DIR) + "/check/instances/" + model[iModel] + ".mps";
448- // highs.readModel(filename);
449- // highs.run();
450- // std::vector<double> optimal_solution = highs.getSolution().col_value;
451- // double objective_function_value0 = highs.getInfo().objective_function_value;
452- // highs.clearSolver();
453-
454- // UserMipSolution user_callback_data;
455- // user_callback_data.optimal_objective_value = objective_function_value0;
456- // user_callback_data.optimal_solution = optimal_solution.data();
457- // user_callback_data.require_user_solution_callback_origin =
458- // require_origin[iModel];
459- // void* p_user_callback_data = (void*)(&user_callback_data);
460-
461- // // highs.setOptionValue("presolve", kHighsOffString);
462- // highs.setCallback(userkMipUserSolution, p_user_callback_data);
463- // highs.startCallback(kCallbackMipUserSolution);
464- // highs.run();
465- // highs.stopCallback(kCallbackMipUserSolution);
466- // double objective_function_value1 = highs.getInfo().objective_function_value;
467- // double objective_diff =
468- // std::fabs(objective_function_value1 - objective_function_value0) /
469- // std::max(1.0, std::fabs(objective_function_value0));
470- // REQUIRE(objective_diff < 1e-12);
471- // }
472-
473- // highs.resetGlobalScheduler(true);
474- // }
432+ TEST_CASE (" highs-callback-mip-user-solution" , " [highs_callback]" ) {
433+ // const std::vector<std::string> model = {"rgn", "flugpl", "gt2", "egout",
434+ // "bell5", "lseu", "sp150x300d"};//, "p0548", "dcmulti"}; const
435+ // std::vector<HighsInt> require_origin = {0, 1, 2, 3, 4, 5, 6};
436+ const std::vector<std::string> model = {" p0548" , " flugpl" , " gt2" , " egout" ,
437+ " sp150x300d" };
438+ const std::vector<HighsInt> require_origin = {0 , 1 , 2 , 3 , 4 }; // , 4, 5, 6};
439+ assert (model.size () == require_origin.size ());
440+ Highs highs;
441+ highs.setOptionValue (" output_flag" , dev_run);
442+ highs.setOptionValue (" mip_rel_gap" , 0 );
443+ HighsInt from_model = 0 ;
444+ HighsInt to_model = HighsInt (model.size ());
445+ for (HighsInt iModel = from_model; iModel < to_model; iModel++) {
446+ const std::string filename =
447+ std::string (HIGHS_DIR) + " /check/instances/" + model[iModel] + " .mps" ;
448+ highs.readModel (filename);
449+ highs.run ();
450+ std::vector<double > optimal_solution = highs.getSolution ().col_value ;
451+ double objective_function_value0 = highs.getInfo ().objective_function_value ;
452+ highs.clearSolver ();
453+
454+ UserMipSolution user_callback_data;
455+ user_callback_data.optimal_objective_value = objective_function_value0;
456+ user_callback_data.optimal_solution = optimal_solution.data ();
457+ user_callback_data.require_user_solution_callback_origin =
458+ require_origin[iModel];
459+ void * p_user_callback_data = (void *)(&user_callback_data);
460+
461+ // highs.setOptionValue("presolve", kHighsOffString);
462+ highs.setCallback (userkMipUserSolution, p_user_callback_data);
463+ highs.startCallback (kCallbackMipUserSolution );
464+ highs.run ();
465+ highs.stopCallback (kCallbackMipUserSolution );
466+ double objective_function_value1 = highs.getInfo ().objective_function_value ;
467+ double objective_diff =
468+ std::fabs (objective_function_value1 - objective_function_value0) /
469+ std::max (1.0 , std::fabs (objective_function_value0));
470+ REQUIRE (objective_diff < 1e-12 );
471+ }
472+
473+ highs.resetGlobalScheduler (true );
474+ }
0 commit comments