.. _morality-metrics: Calculate Morality Metrics ========================== Tyler Singer-Clark's June 2014 paper, "Morality Metrics On Iterated Prisoner’s Dilemma Players" [Singer-Clark2014]_), describes several interesting metrics which may be used to analyse IPD tournaments all of which are available within the ResultSet class. (Tyler's paper is available here: http://www.scottaaronson.com/morality.pdf). Each metric depends upon the cooperation rate of the players, defined by Tyler Singer-Clark as: .. math:: CR(b) = \frac{C(b)}{TT} where C(b) is the total number of turns where a player chose to cooperate and TT is the total number of turns played. A matrix of cooperation rates is available within a tournament's ResultSet:: >>> import axelrod as axl >>> players = [axl.Cooperator(), axl.Defector(), ... axl.TitForTat(), axl.Grudger()] >>> tournament = axl.Tournament(players) >>> results = tournament.play() >>> [[round(float(ele), 3) for ele in row] for row in results.normalised_cooperation] [[1.0, 1.0, 1.0, 1.0], [0.0, 0.0, 0.0, 0.0], [1.0, 0.005, 1.0, 1.0], [1.0, 0.005, 1.0, 1.0]] There is also a 'good partner' matrix showing how often a player cooperated at least as much as its opponent:: >>> results.good_partner_matrix [[0, 10, 10, 10], [0, 0, 0, 0], [10, 10, 0, 10], [10, 10, 10, 0]] Each of the metrics described in Tyler's paper is available as follows (here they are rounded to 2 digits):: >>> [round(ele, 2) for ele in results.cooperating_rating] [1.0, 0.0, 0.67..., 0.67...] >>> [round(ele, 2) for ele in results.good_partner_rating] [1.0, 0.0, 1.0, 1.0] >>> [round(ele, 2) for ele in results.eigenjesus_rating] [0.58, 0.0, 0.58, 0.58] >>> [round(ele, 2) for ele in results.eigenmoses_rating] [0.37, -0.37, 0.6, 0.6]