package edu.marlboro.cs.prisoner; /** *

A prisoner's dilemma player that chooses randomly * betweeen COOPERATE and DEFECT strategies based on * its internal cooperateProbablity. *

*

The default probability of cooperation is 0.5. *

* * @author Jim Mahoney * @version $Id: RandomPlayer.java 12423 2007-04-05 06:04:42Z mahoney $ */ public class RandomPlayer extends Player { private static final double DEFAULT_COOPERATE_PROBABILITY = 0.5; private double cooperateProbability; public RandomPlayer(){ init(); setCooperateProbability(DEFAULT_COOPERATE_PROBABILITY); } public RandomPlayer(String inputName){ init(inputName); setCooperateProbability(DEFAULT_COOPERATE_PROBABILITY); } /** * 0 <= inputCooperateProbability <= 1 */ public RandomPlayer(String inputName, double inputCooperateProbability){ init(inputName); if (inputCooperateProbability < 0.0 || inputCooperateProbability > 1.0){ inputCooperateProbability = 0.5; } setCooperateProbability(inputCooperateProbability); } public void setCooperateProbability(double probability){ cooperateProbability = probability; } public double getCooperateProbability(){ return cooperateProbability; } public int getNextMove(int opponentId){ // 0 <= cooperateProbability <= 1 // 0 <= Math.random() < 1 if (Math.random() < cooperateProbability){ return Game.COOPERATE; } else { return Game.DEFECT; } // // If the fact that COOPERATE=0 and DEFECT=1 is used, // // this calculation can be done with just // return (int)(Math.random()/cooperateProbability); // // which is probably faster but less general. } public String getInternalState(){ return toString() + " : state=(p=" + cooperateProbability + "); score=" + getScore(); } }