docs: def optimize(self):
          """
          Solve the optimization problem using the relevant solver back-end.
          The status returned by this method tells whether an optimal solution was found,
          if the problem is infeasible etc. Consult optlang.statuses for more elaborate explanations
          of each status.
  
          The objective value can be accessed from 'model.objective.value', while the solution can be
          retrieved by 'model.primal_values'.
  
          Returns
          -------
          status: str
              Solution status.
          """
          self.update()
          status = self._optimize()
          if status != OPTIMAL and self.configuration.presolve == "auto":
              self.configuration.presolve = True
              status = self._optimize()
              self.configuration.presolve = "auto"
          self._status = status
          return status