ERGO-Code / HiGHS

Linear optimization software
MIT License
848 stars 164 forks source link

HiGHS 1.7.1 HighsCallbackDataOut data type can no longer be accessed directly for mip_solution item. #1812

Open jeffreydeankelly2 opened 1 week ago

jeffreydeankelly2 commented 1 week ago

I know that in 1.7.1 the item pdlp_iteration_count is moved to the end of the HighsCallbackDataOut data type but this now breaks the direct access of the mip_solution our Intel Fortran to C interface.

In 1.7.0 the direct access of mip_solution works well in terms of getting or retrieving the MIP solution from the HighsCallbackDataOut data structure i.e., getting the 1D array or vector of variable values.

We tried to retrieve the integer pointer for the mip_solution data item from Highs_getCallbackDataOutItem(data_out,item_name) but unfortunately this routine does not compile in Intel Fortran for some unknown reason i.e., complains that the data_out of type HighsCallbackDataOut does not match the input data type of HighsCallbackDataOut but they are coded to be the same.

Would it be possible to return the pdlp_iteration_count item back to the same location of as of 1.7.0 given that you now have an indirection or accessor mapping routine Highs_getCallbackDataOutItem(data_out,item_name)?

Or, in order to allow your C API to be interoperable with Fortran 2003+ for example (other non-C / non-C++ languages) we would need some way to retrieve the mip_solution data item directly as a data vector or 1D array of doubles.

Unfortunately it is the C data structure type to Fortran data structure types that make the interface interoperability difficult for non-C and non-C++ programming languages. The same issue was recently encountered with KNITRO which changed their C API to include heterogenous data types or structures.

jajhall commented 3 days ago

If I understand properly, this will be fixed by #1823