# C++ Reference: class SharedResponseManager

This documentation is automatically generated.

Manages the global best response kept by the solver. All functions are thread-safe.Method | |
---|---|

`AddSolutionCallback` | Return type: Arguments: Adds a callback that will be called on each new solution (for statisfiablity problem) or each improving new solution (for an optimization problem). Returns its id so it can be unregistered if needed. Note that currently the class is waiting for the callback to finish before accepting any new updates. That could be changed if needed. |

`BestSolutionInnerObjectiveValue` | Return type: Returns the current best solution inner objective value or kInt64Max if there is no solution. |

`GetInnerObjectiveLowerBound` | Return type: The "inner" objective is the CpModelProto objective without scaling/offset. Note that these bound correspond to valid bound for the problem of finding a strictly better objective than the current one. Thus the lower bound is always a valid bound for the global problem, but the upper bound is NOT. |

`GetInnerObjectiveUpperBound` | Return type: |

`GetResponse` | Return type: Returns the current solver response. That is the best known response at the time of the call with the best feasible solution and objective bounds. Note that the solver statistics correspond to the last time a better solution was found or SetStatsFromModel() was called. |

`MutableSolutionsRepository` | Return type: |

`NewSolution` | Return type: Arguments: Reads the new solution from the response and update our state. For an optimization problem, we only do something if the solution is strictly improving. TODO(user): Only the follwing fields from response are accessed here, we might want a tighter API: - solution_info - solution - solution_lower_bounds and solution_upper_bounds. |

`NotifyThatImprovingProblemIsInfeasible` | Return type: Arguments: Changes the solution to reflect the fact that the "improving" problem is infeasible. This means that if we have a solution, we have proven optimality, otherwise the global problem is infeasible. Note that this shouldn't be called before the solution is actually reported. We check for this case in NewSolution(). |

`PrimalIntegral` | Return type: |

`ProblemIsSolved` | Return type: Returns true if we found the optimal solution or the problem was proven infeasible. |

`SetStatsFromModel` | Return type: Arguments: Sets the statistics in the response to the one of the solver inside the given in-memory model. This does nothing if the model is nullptr. TODO(user): Also support merging statistics together. |

`SharedResponseManager` | Arguments: If log_updates is true, then all updates to the global "state" will be logged. This class is responsible for our solver log progress. |

`SolutionsRepository` | Return type: Returns the underlying solution repository where we keep a set of best solutions. |

`UnregisterCallback` | Return type: Arguments: |

`UpdateInnerObjectiveBounds` | Return type: Arguments: Updates the inner objective bounds. |