Ejemplo n.º 1
0
  private void streetAction(PerformedAction performedAction) {
    myBets += myBetsThisStreet;
    myBetsThisStreet = 0;
    theirBets += theirBetsThisStreet;
    theirBetsThisStreet = 0;

    changeEquity += changeEquityCall;

    changeEquityCall = 0.0;
    changeEquityTemp = 0.0;

    if (performedAction.getStreet().equalsIgnoreCase("FLOP")) {
      currentState = GameState.PRETURN;

      // changeEquity += (maj.getSDWRate() - 0.6) * sdwFactor / 2.0;
    } else if (performedAction.getStreet().equalsIgnoreCase("TURN")) {
      currentState = GameState.PRERIVER;

      changeEquity += (maj.getSDWRate() - 0.6) * sdwFactor / 4.0;
    } else if (performedAction.getStreet().equalsIgnoreCase("RIVER")) {
      currentState = GameState.POSTRIVER;

      changeEquity += (maj.getSDWRate() - 0.6) * sdwFactor / 4.0;
    }
  }
Ejemplo n.º 2
0
  private void theirBetAction(PerformedAction performedAction) {
    theirBetsThisStreet += performedAction.getAmount();

    double potBet =
        (double) performedAction.getAmount() / (brain.potSize - performedAction.getAmount());

    if (potBet < 0.2) return;

    theirRaiseHistory[currentState.ordinal()].add(performedAction.getAmount());

    double PFR = adjustPFR(maj.getPFR());
    double AGGRO = adjustAggro(maj.getAggression());
    double AGGROFREQ = adjustAggroFreq(maj.getAggressionFrequency());

    double logFactor =
        HelperUtils.logisticSmall(3.0, 3.0, potBet)
            * Math.min(
                100.0,
                (HelperUtils.logistic(400.0, 400.0, performedAction.getAmount()) + 300.0) / 4);

    if (currentState == GameState.PREFLOP) {
      changeEquity -= pfRaiseFactor * logFactor / PFR;
    } else {
      changeEquity -= pfRaiseFactor * logFactor / AGGROFREQ;
    }

    changeEquityCall = 0.0;
  }
Ejemplo n.º 3
0
  private void theirCheckAction(PerformedAction performedAction) {
    checkHistory[currentState.ordinal()] = true;

    double PFR = adjustPFR(maj.getPFR());
    double AGGRO = adjustAggro(maj.getAggression());
    double AGGROFREQ = adjustAggroFreq(maj.getAggressionFrequency());
    double CHECKRAISE = maj.getCheckRaise();

    if (currentState == GameState.PREFLOP) {
      changeEquityCall = pfCheckFactor * PFR * (1.0 - 4 * CHECKRAISE);
    } else {
      changeEquityCall = pfCheckFactor * AGGROFREQ * (1.0 - 4 * CHECKRAISE);
    }
  }
Ejemplo n.º 4
0
  private void theirRaiseAction(PerformedAction performedAction) {

    double potBet =
        (double) (performedAction.getAmount() - theirBetsThisStreet)
            / (brain.potSize - performedAction.getAmount());
    if (potBet < 0.2) {
      theirBetsThisStreet += performedAction.getAmount();
      return;
    }

    theirRaiseHistory[currentState.ordinal()].add(performedAction.getAmount());

    double PFR = adjustPFR(maj.getPFR());
    double AGGRO = adjustAggro(maj.getAggression());
    double AGGROFREQ = adjustAggroFreq(maj.getAggressionFrequency());

    double logFactor =
        HelperUtils.logisticSmall(3.0, 3.0, potBet)
            * Math.min(
                100.0,
                (HelperUtils.logistic(
                            400.0, 400.0, performedAction.getAmount() - theirBetsThisStreet)
                        + 300.0)
                    / 4);

    double THREEB = maj.get3BetRate();
    double TWOB = maj.get2BetRate();

    if (myRaiseHistory[currentState.ordinal()].size() == 1
        && theirRaiseHistory[currentState.ordinal()].size() == 1) {
      logFactor *=
          1.0
              + (0.2 - TWOB)
                  * Math.min(100.0, myRaiseHistory[currentState.ordinal()].get(0))
                  / 30.0;
    } else if (theirRaiseHistory[currentState.ordinal()].size() == 2) {
      logFactor *= 1.0 + (0.25 - THREEB) * 1.5;
    } else if (theirRaiseHistory[currentState.ordinal()].size() >= 3) {
      logFactor *= 1.0 + (0.25 - THREEB) * 3.0;
    }

    if (currentState == GameState.PREFLOP) {
      changeEquity -= pfRaiseFactor * logFactor / PFR;
    } else {
      changeEquity -= pfRaiseFactor * logFactor / AGGROFREQ;
    }

    changeEquityCall = 0.0;
    theirBetsThisStreet += performedAction.getAmount();
  }
Ejemplo n.º 5
0
  private void theirCallAction(PerformedAction performedAction) {
    // if(currentState == GameState.PREFLOP) {
    double PFR = adjustPFR(maj.getPFR());
    double CALLRAISE = maj.getCallRaise();

    //		if(currentState == GameState.PREFLOP) {
    //			changeEquityTemp -= callRaiseFactor * CALLRAISE;
    //		}

    // changeEquityCall = pfCallFactor * adjustedPFR / (1.0 +
    // theirRaiseHistory[currentState.ordinal()].size() +
    // myRaiseHistory[currentState.ordinal()].size());
    // equity += d * pfr / (1 + total number of raises (both players))
    // }

    theirBetsThisStreet = myBetsThisStreet;
  }
Ejemplo n.º 6
0
  public Action act() {

    reset();

    for (LegalAction legalAction : legalActions) {
      if (legalAction.getType().equalsIgnoreCase("RAISE")) {
        raiseAction = legalAction;
        canRaise = true;
      } else if (legalAction.getType().equalsIgnoreCase("BET")) {
        betAction = legalAction;
        canBet = true;
      } else if (legalAction.getType().equalsIgnoreCase("CHECK")) {
        canCheck = true;
      } else if (legalAction.getType().equalsIgnoreCase("CALL")) {
        canCall = true;
      } else if (legalAction.getType().equalsIgnoreCase("DISCARD")) {
        canDiscard = true;
        if (chosenDiscardCard == null) chooseDiscardCard();
        return discardCard();
      }
    }

    for (PerformedAction performedAction : lastActions) {
      if (performedAction.getType().equalsIgnoreCase("DEAL")) {
        ec.setBoard(board);
        if (performedAction.getStreet().equalsIgnoreCase("FLOP")) {
          chooseDiscardCard(); // this will also update equity
        } else {
          equity = ec.calculateTotalEquity();
        }
      } else if (performedAction.getType().equalsIgnoreCase("POST")
          && performedAction.getActor().equalsIgnoreCase(maj.myName)) {
        equity = ec.calculateTotalEquity();
      }
    }

    maj.update(lastActions);
    dory.update();

    if (board[2] == null) return actPreFlop();
    else if (board[3] == null) {
      return actPostFlop();
    } else if (board[4] == null) return actPostTurn();
    else return actPostRiver();
  }
Ejemplo n.º 7
0
  /**
   * Initialize this place history handler.
   *
   * @return a registration object to de-register the handler
   */
  public HandlerRegistration register(
      PlaceController placeController, EventBus eventBus, Place defaultPlace, Place errorPlace) {
    this.placeController = placeController;
    this.defaultPlace = defaultPlace;
    this.errorPlace = errorPlace;

    final HandlerRegistration placeReg =
        eventBus.addHandler(
            PlaceChangeEvent.TYPE,
            new PlaceChangeEvent.Handler() {
              public void onPlaceChange(PlaceChangeEvent event) {
                log().log(Level.INFO, "Place changed");
                Place newPlace = event.getNewPlace();
                historian.newItem(tokenForPlace(newPlace), false);
              }
            });

    final HandlerRegistration historyReg =
        historian.addValueChangeHandler(
            new ValueChangeHandler<String>() {
              public void onValueChange(ValueChangeEvent<String> event) {
                String token = event.getValue();
                log().log(Level.INFO, "History changed: " + token);
                handleHistoryToken(token);
              }
            });

    return new HandlerRegistration() {
      public void removeHandler() {
        ExPlaceHistoryHandler.this.defaultPlace = Place.NOWHERE;
        ExPlaceHistoryHandler.this.placeController = null;
        placeReg.removeHandler();
        historyReg.removeHandler();
      }
    };
  }
Ejemplo n.º 8
0
 /**
  * Handle the current history token. Typically called at application start, to ensure bookmark
  * launches work.
  */
 @Override
 public void handleCurrentHistory() {
   handleHistoryToken(historian.getToken());
 }
Ejemplo n.º 9
0
 private Action actPreFlopNotButton() { // big blind acts second
   if (eL(1)) {
     return checkFold();
   } else if (eL(2)) {
     if (equity < 1.0 - maj.getPFR()) {
       return checkFold();
     } else if (equity < 1.0 - maj.getPFR() / 1.25) {
       return call();
     } else if (equity < 1.0 - maj.getPFR() / 1.5) {
       return putLin(
           equity, 1.0 - maj.getPFR() / 1.25, 1.0 - maj.getPFR() / 1.5, sVals[0], sVals[1]);
     } else {
       return putLin(equity, 1.0 - maj.getPFR() / 1.5, 1.0, sVals[1], sVals[2]);
     }
   } else if (eL(4)) {
     if (equity < 1.0 - maj.getPFR()) {
       return checkFold();
     } else if (equity < 1.0 - maj.getPFR() / 1.33) {
       return putMin();
     } else if (equity < 1.0 - maj.getPFR() / 1.66) {
       return putLin(
           equity, 1.0 - maj.getPFR() / 1.33, 1.0 - maj.getPFR() / 1.66, sVals[1], sVals[2]);
     } else {
       return putLin(equity, 1.0 - maj.getPFR() / 1.66, 1.0, sVals[2], sVals[3]);
     }
   } else if (eL(5)) {
     if (equity < 1.0 - equity) {
       return call();
     } else if (equity < 1.0 - maj.getPFR() / 1.33) {
       return putMin();
     } else if (equity < 1.0 - maj.getPFR() / 1.66) {
       return putLin(
           equity, 1.0 - maj.getPFR() / 1.33, 1.0 - maj.getPFR() / 1.66, sVals[3], sVals[4]);
     } else {
       return putLin(equity, 1.0 - maj.getPFR() / 1.66, 1.0, sVals[4], sVals[5]);
     }
   } else {
     return putAllinMinusOne();
   }
 }
Ejemplo n.º 10
0
  public void processInput(String input) {
    String[] tokens = input.split(" ");
    String word = tokens[0];
    if ("NEWGAME".compareToIgnoreCase(word) == 0) {
      String myName = tokens[1];
      String oppName = tokens[2];
      int stackSize = Integer.parseInt(tokens[3]);
      int bb = Integer.parseInt(tokens[4]);
      numHands = Integer.parseInt(tokens[5]);

      maj = new Historian(myName, oppName, stackSize, bb);
      // newGame();
    } else if ("KEYVALUE".compareToIgnoreCase(word) == 0) {
      if (tokens.length < 2) return;
      String[] smallTokens = tokens[1].split(":");
      if (smallTokens.length < 2) return;
      maj.notifyValue(smallTokens[0], smallTokens[1], tokens[2]); // the key value pair
    } else if ("NEWHAND".compareToIgnoreCase(word) == 0) {
      int handNum = Integer.parseInt(tokens[1]);

      if (handNum == numHands / 4) cons = true;
      if (handNum == numHands * 2 / 4) {
        System.out.println("Reg earnings: " + regEarnings + " consEarnings: " + consEarnings);
        if (consEarnings > regEarnings) cons = true;
        else cons = false;
      }

      System.out.println("Using conservative brain? " + cons);

      Card[] hand = new Card[3];
      hand[0] = CardUtils.getCardByString(tokens[3]);
      hand[1] = CardUtils.getCardByString(tokens[4]);
      hand[2] = CardUtils.getCardByString(tokens[5]);

      double timebank = Double.parseDouble(tokens[8]);

      Random rand = new Random();

      boolean callRaise = false, checkRaise = false;

      if (rand.nextDouble() < 0.5) {
        callRaise = true;
      }
      if (rand.nextDouble() < 0.5) {
        checkRaise = true;
      }

      if (cons) brain = new ConservativeBrain(maj, hand, timebank, callRaise, checkRaise);
      else brain = new Brain(maj, hand, timebank, callRaise, checkRaise);

      brain.handId = Integer.parseInt(tokens[1]);
      brain.button = Boolean.parseBoolean(tokens[2]);

      brain.board = new Card[5];

      brain.myBank = Integer.parseInt(tokens[6]);
      brain.oppBank = Integer.parseInt(tokens[7]);

      // newHand();
    } else if ("GETACTION".compareToIgnoreCase(word) == 0) {
      brain.potSize = Integer.parseInt(tokens[1]);

      brain.numBoardCards = Integer.parseInt(tokens[2]);
      int i = 3;
      for (; i < brain.numBoardCards + 3; i++)
        brain.board[i - 3] = CardUtils.getCardByString(tokens[i]);

      brain.numLastActions = Integer.parseInt(tokens[i]);
      brain.lastActions = new PerformedAction[brain.numLastActions];
      int j = i + 1;
      for (; j < brain.numLastActions + i + 1; j++) {
        brain.lastActions[j - i - 1] = ActionUtils.getPerformedActionByString(tokens[j]);
      }

      brain.numLegalActions = Integer.parseInt(tokens[j]);
      brain.legalActions = new LegalAction[brain.numLegalActions];

      int k = j + 1;
      for (; k < brain.numLegalActions + j + 1; k++)
        brain.legalActions[k - j - 1] = ActionUtils.getLegalActionByString(tokens[k]);

      brain.timebank = Double.parseDouble(tokens[k]);

      // String res = ActionUtils.performedActionToString((PerformedAction)brain.act());
      // System.out.println(res);
      outStream.println(ActionUtils.performedActionToString((PerformedAction) brain.act()));
    } else if ("HANDOVER".compareToIgnoreCase(word) == 0) {
      brain.myBank = Integer.parseInt(tokens[1]);
      brain.oppBank = Integer.parseInt(tokens[2]);

      if (cons) {
        consEarnings = brain.myBank - regEarnings;
      } else {
        regEarnings = brain.myBank;
      }

      brain.numBoardCards = Integer.parseInt(tokens[3]);
      int i = 4;
      for (; i < brain.numBoardCards + 4; i++)
        brain.board[i - 4] = CardUtils.getCardByString(tokens[i]);

      brain.numLastActions = Integer.parseInt(tokens[i]);
      brain.lastActions = new PerformedAction[brain.numLastActions];
      int j = i + 1;
      for (; j < brain.numLastActions + i + 1; j++) {
        brain.lastActions[j - i - 1] = ActionUtils.getPerformedActionByString(tokens[j]);
      }

      maj.update(brain.lastActions);
      maj.numHandsPlayed++;

      System.out.println("\nPFR: " + maj.getPFR());
      System.out.println("SDW: " + maj.getSDWRate() + "\n");
    } else if ("REQUESTKEYVALUES".compareToIgnoreCase(word) == 0) {
      // At the end, engine will allow bot to send key/value pairs to store.
      // FINISH indicates no more to store.
      outStream.println("DELETE " + maj.oppName);
      outStream.println("PUT " + maj.oppName + ":PFR " + maj.getValueToSave("PFR"));
      outStream.println("PUT " + maj.oppName + ":SDW " + maj.getValueToSave("SDW"));
      outStream.println("FINISH");
    }
  }
Ejemplo n.º 11
0
 private void theirPostAction(PerformedAction performedAction) {
   theirBetsThisStreet += performedAction.getAmount();
   changeEquity += (maj.getSDWRate() - 0.6) * sdwFactor;
 }