Find the smallest redistribution vector using a linear objective.

        The change in flux distribution is mimimized by minimizing the sum
        of the absolute values of the differences of wild type FBA solution
        and the knockout strain flux solution.

        Creates the constraint that the we select the optimal flux vector that
        is closest to the wildtype. This might still return an arbitrary flux
        vector the maximizes the objective function.

        Args:
            objective: Objective reaction for the model.
            wt_obj: The flux value for your wild type objective reactions.
                Can either use an expiremental value or on determined by FBA
                by using :meth:`.get_fba_obj_flux(objective)`.

def lin_moma2(self, objective, wt_obj):
        """Find the smallest redistribution vector using a linear objective.

        The change in flux distribution is mimimized by minimizing the sum
        of the absolute values of the differences of wild type FBA solution
        and the knockout strain flux solution.

        Creates the constraint that the we select the optimal flux vector that
        is closest to the wildtype. This might still return an arbitrary flux
        vector the maximizes the objective function.

        Args:
            objective: Objective reaction for the model.
            wt_obj: The flux value for your wild type objective reactions.
                Can either use an expiremental value or on determined by FBA
                by using :meth:`.get_fba_obj_flux(objective)`.
        """
        reactions = set(self._adjustment_reactions())

        z_diff = self._z_diff
        v = self._v
        v_wt = self._v_wt

        with self.constraints() as constr:
            for f_reaction in reactions:
                # Add the constraint that finds the optimal solution, such
                # that the difference between the wildtype flux
                # is similar to the knockout flux.
                constr.add(
                    z_diff[f_reaction] >= v_wt[f_reaction] - v[f_reaction],
                    v_wt[f_reaction] - v[f_reaction] >= -z_diff[f_reaction])

            # If we minimize the sum of the z vector then we will minimize
            # the |v_wt - v| from above
            self._prob.set_objective(z_diff.sum(reactions))

            constr.add(self._v_wt[objective] >= wt_obj)

            self._solve(lp.ObjectiveSense.Minimize)