docs: def optimize(self, method="simplex", verbosity=False, tolerance=1e-9, **kwargs):
          """Run the linprog function on the problem. Returns None."""
          c = np.array([self.objective.get(name, 0) for name in self._variables])
          if self.direction == "max":
              c *= -1
  
          bounds = list(six.itervalues(self.bounds))
          solution = linprog(c, self.A, self.upper_bounds, bounds=bounds, method=method,
                             options={"maxiter": 10000, "disp": verbosity, "tol": tolerance}, **kwargs)
          self._solution = solution
          self._status = solution.status
          if SCIPY_STATUS[self._status] == interface.OPTIMAL:
              self._var_primals = solution.x
              self._slacks = solution.slack
          else:
              self._var_primals = None
              self._slacks = None
  
          self._f = solution.fun