MCPcopy Create free account
hub / github.com/ERGO-Code/HiGHS / userCallback

Function userCallback

check/TestCAPI.c:103–199  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

101}
102
103static void userCallback(const int callback_type, const char* message,
104 const HighsCallbackDataOut* data_out,
105 HighsCallbackDataIn* data_in,
106 void* user_callback_data) {
107 // Extract the double value pointed to from void* user_callback_data
108 const double local_callback_data =
109 user_callback_data == NULL ? -1 : *(double*)user_callback_data;
110
111 if (callback_type == kHighsCallbackLogging) {
112 if (dev_run)
113 printf("userCallback(%11.4g): %s\n", local_callback_data, message);
114 } else if (callback_type == kHighsCallbackMipImprovingSolution) {
115 // Test the accessor function for data_out
116 //
117 // Check that passing an valid name returns a non-null pointer,
118 // and that the corresponding value is the same as obtained using
119 // the struct
120 const void* objective_function_value_p = Highs_getCallbackDataOutItem(
121 data_out, kHighsCallbackDataOutObjectiveFunctionValueName);
122 assert(objective_function_value_p);
123 double objective_function_value = *(double*)(objective_function_value_p);
124 assert(objective_function_value == data_out->objective_function_value);
125 if (dev_run)
126 printf("userCallback(%11.4g): improving solution with objective = %g\n",
127 local_callback_data, objective_function_value);
128 // Now test all more simply
129 checkGetCallbackDataOutInt(data_out, kHighsCallbackDataOutLogTypeName, 1);
130 checkGetCallbackDataOutDouble(
131 data_out, kHighsCallbackDataOutRunningTimeName, data_out->running_time);
132 checkGetCallbackDataOutHighsInt(
133 data_out, kHighsCallbackDataOutSimplexIterationCountName,
134 data_out->simplex_iteration_count);
135 checkGetCallbackDataOutHighsInt(data_out,
136 kHighsCallbackDataOutIpmIterationCountName,
137 data_out->ipm_iteration_count);
138 checkGetCallbackDataOutHighsInt(data_out,
139 kHighsCallbackDataOutPdlpIterationCountName,
140 data_out->pdlp_iteration_count);
141 checkGetCallbackDataOutDouble(
142 data_out, kHighsCallbackDataOutObjectiveFunctionValueName,
143 data_out->objective_function_value);
144 checkGetCallbackDataOutInt64(data_out,
145 kHighsCallbackDataOutMipNodeCountName,
146 data_out->mip_node_count);
147 checkGetCallbackDataOutDouble(data_out,
148 kHighsCallbackDataOutMipPrimalBoundName,
149 data_out->mip_primal_bound);
150 checkGetCallbackDataOutDouble(data_out,
151 kHighsCallbackDataOutMipDualBoundName,
152 data_out->mip_dual_bound);
153 checkGetCallbackDataOutDouble(data_out, kHighsCallbackDataOutMipGapName,
154 data_out->mip_gap);
155 // Cutpool data structure is not assigned, so num_col, num_cut and
156 // num_nz are unassigned
157 // checkGetCallbackDataOutHighsInt(data_out,
158 // kHighsCallbackDataOutCutpoolNumColName, 0);
159 // checkGetCallbackDataOutHighsInt(data_out,
160 // kHighsCallbackDataOutCutpoolNumCutName, 0);

Callers

nothing calls this directly

Tested by

no test coverage detected