@property<EOL><INDENT>def reduced_cost(self):<DEDENT>
try:<EOL><INDENT>check_solver_status(self._model.solver.status)<EOL>return self.forward_variable.dual - self.reverse_variable.dual<EOL><DEDENT>except AttributeError:<EOL><INDENT>raise RuntimeError(<EOL>"<STR_LIT>".format(self.id))<EOL><DEDENT>except (RuntimeError, OptimizationError) as err:<EOL><INDENT>raise_with_traceback(err)<EOL><DEDENT>except Exception as err:<EOL><INDENT>raise_from(OptimizationError(<EOL>"<STR_LIT>"<EOL>"<STR_LIT>".format(str(err))), err)<EOL><DEDENT>
The reduced cost in the most recent solution.

Reduced cost is the dual value of the corresponding variable in the
model.

Warnings
--------
* Accessing reduced costs through a `Solution` object is the safer,
  preferred, and only guaranteed to be correct way. You can see how to
  do so easily in the examples.
* Reduced cost is retrieved from the currently defined
  `self._model.solver`. The solver status is checked but there are no
  guarantees that the current solver state is the one you are looking
  for.
* If you modify the underlying model after an optimization, you will
  retrieve the old optimization values.

Raises
------
RuntimeError
    If the underlying model was never optimized beforehand or the
    reaction is not part of a model.
OptimizationError
    If the solver status is anything other than 'optimal'.

Examples
--------
>>> import cobra.test
>>> model = cobra.test.create_test_model("textbook")
>>> solution = model.optimize()
>>> model.reactions.PFK.reduced_cost
-8.673617379884035e-18
>>> solution.reduced_costs.PFK
-8.6736173798840355e-18