public NeuralAIv3(AIRandomControl aiRandomControl) : base(aiRandomControl) { aiType = AIGeneration.NeuralV3; specificUpdateKey = new RequestedInfoKey(false); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinPercentage); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumActivePlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumUnactedPlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumTableSeats_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_GameStage_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToCallAmount_Amount); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToStealAmount_Amount); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToBotCheck_Prob); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToBotCall_Prob); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_FoldToBotCall_Prob); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToStealSuccess_Prob); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumRaises_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumCalls_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumChecks_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_ImmediatePotOdds_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgScaledOppRaiseFreq_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgScaledOppCallFreq_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgScaledOppPreFlopPlayFreq_Double); }
internal SimpleAIv7(AIRandomControl aiRandomControl) : base(aiRandomControl) { aiType = AIGeneration.SimpleV7; //Setup this AI's specific update key specificUpdateKey = new RequestedInfoKey(false); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsMatchedPlayability); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_DealerDistance_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumActivePlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumUnactedPlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerMoneyInPot_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerHandStartingStackAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalPotAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumCalls_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_ProbOpponentHasBetterWRFIXED); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToCallStealSuccessProb); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToStealSuccessProb); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppCurrentRoundAggr_Double); }
internal SimpleAIv5(AIRandomControl aiRandomControl) : base(aiRandomControl) { specificUpdateKey = new RequestedInfoKey(); specificUpdateKey.SetInfoTypeRequired(InfoProviders.InfoType.WR_ModelAction); specificUpdateKey.SetInfoTypeRequired(InfoProviders.InfoType.WR_ModelActionAmount); }
public NeuralAIv6(AIRandomControl aiRandomControl) : base(aiRandomControl) { aiType = AIGeneration.NeuralV6; //Setup this AI's specific update key specificUpdateKey = new RequestedInfoKey(false); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_GameStage_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsAAPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsKKPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsAK_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsOtherHighPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsOtherLowPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsTroubleHand_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsMidConnector_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsLowConnector_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsSuited_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_DealerDistance_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumActivePlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumUnactedPlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerMoneyInPot_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerHandStartingStackAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalPotAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_LastAdditionalRaiseAmount); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_ProbOpponentHasBetterWRFIXED); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToCallAmount); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToStealAmount); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToCallStealSuccessProb); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToStealSuccessProb); //specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToStealSuccess_Prob); //specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToCallAmount_Amount); //specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToStealAmount_Amount); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppPreFlopPlayFreq_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppPostFlopPlayFreq_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppCurrentRoundAggr_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppCurrentRoundAggrAcc_Double); ////The following mostly used by PAP //specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumTableSeats_Byte); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_FlushPossible_Bool); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_StraightPossible_Bool); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_AOnBoard_Bool); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_KOnBoard_Bool); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_AKQToBoardRatio_Real); //specificUpdateKey.SetInfoTypeRequired(InfoType.BP_LastAdditionalRaiseAmount); //specificUpdateKey.SetInfoTypeRequired(InfoType.BP_BetsToCall_Byte); }
public SimpleAIV1(AIRandomControl aiRandomControl) : base(aiRandomControl) { aiType = AIGeneration.SimpleV1; specificUpdateKey = new RequestedInfoKey(false); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinPercentage); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinRatio); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalPotAmount_Decimal); }
public NeuralAIv2(AIRandomControl aiRandomControl) : base(aiRandomControl) { aiType = AIGeneration.NeuralV2; specificUpdateKey = new RequestedInfoKey(false); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToCallAmount_Amount); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinPercentage); }
public NeuralAIv4(AIRandomControl aiRandomControl) : base(aiRandomControl) { aiType = AIGeneration.NeuralV4; //Setup this AI's specific update key specificUpdateKey = new RequestedInfoKey(false); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsMatchedPlayability); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_GameStage_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_DealerDistance_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumActivePlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumUnactedPlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_ImmediatePotOdds_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerMoneyInPot_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerHandStartingStackAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalPotAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumRaises_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumCalls_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumChecks_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_ScaledCallAmount_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_ProbOpponentHasBetterWRFIXED); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinPercentage); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinPercentageIndex); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToStealSuccess_Prob); //specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgScaledOppRaiseFreq_Double); //specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgScaledOppCallFreq_Double); //specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgScaledOppPreFlopPlayFreq_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToCallAmount_Amount); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToStealAmount_Amount); //The following mostly used by PAP //specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumTableSeats_Byte); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_FlushPossible_Bool); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_StraightPossible_Bool); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_AOnBoard_Bool); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_KOnBoard_Bool); //specificUpdateKey.SetInfoTypeRequired(InfoType.CP_AKQToBoardRatio_Real); //specificUpdateKey.SetInfoTypeRequired(InfoType.BP_LastAdditionalRaiseAmount); //specificUpdateKey.SetInfoTypeRequired(InfoType.BP_BetsToCall_Byte); //The fixing metrics specificUpdateKey.SetInfoTypeRequired(InfoType.WR_ProbOpponentHasBetterWRFIXED); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToCallAmount); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToStealAmount); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToCallStealSuccessProb); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToStealSuccessProb); }
public SimpleAIV4AggTrack(AIRandomControl aiRandomControl) : base(aiRandomControl) { aiType = AIGeneration.SimpleV4AggressionTrack; specificUpdateKey = new RequestedInfoKey(false); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinPercentage); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinRatio); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToCallAmount_Amount); //specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToStealAmount_Amount); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgScaledOppPreFlopPlayFreq_Double); }
private void AIManagerConstructor(int numInstances, AIRandomControl aiRandomControl, bool runInSafeMode, Object jobToRun) { RunInSafeMode = runInSafeMode; InfoProviderBase.CurrentJob = jobToRun; this.decisionRequestQueue = new Queue(); instanceSelector = new InstanceSelector(); aiInstanceList = new List <AIInstance>(); //Setup the instances for (int i = 0; i < numInstances; i++) { aiInstanceList.Add(new AIInstance(instanceSelector, i, decisionRequestQueue, aiRandomControl)); } for (int i = 0; i < numInstances; i++) { instanceSelector.instancesIdle = instanceSelector.instancesIdle | (1 << i); } }
public AIBase(AIRandomControl aiRandomControl) { //this.disableStochasticChoice = disableStochasticChoice; this.aiRandomControl = aiRandomControl; defaultInfoTypeUpdateConfigs = new Dictionary <InfoType, string>(); if (aiRandomControl.DecisionRandomPerHandSeedEnabled) { randomGen = new CMWCRandom(aiRandomControl.DecisionRandomPerHandSeed); } else { randomGen = new CMWCRandom(); } //This set's all info types required to true and disables the few which are never used defaultUpdateKey = new RequestedInfoKey(true); defaultUpdateKey.SetInfoTypeRequired(InfoType.IO_ImpliedPotOdds_Double, false); defaultUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWeightedPercentage, false); defaultUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWeightedOpponentWinPercentage, false); defaultUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToBotRaise_Prob, false); defaultUpdateKey.SetInfoTypeRequired(InfoType.WR_AveragePercievedProbBotHasBetterHand, false); }
internal SimpleAIv6(AIRandomControl aiRandomControl) : base(aiRandomControl) { specificUpdateKey = new RequestedInfoKey(); specificUpdateKey.SetInfoTypeRequired(InfoProviders.InfoType.WR_ProbOpponentHasBetterWR); }
public AIManager(int providersTimeOutMilliSeconds, int numInstances, AIRandomControl aiRandomControl, bool runInSafeMode) { AIManagerConstructor(numInstances, aiRandomControl, runInSafeMode, null); }
public GameProvider(InfoCollection information, Dictionary <InfoProviderType, InfoProviderBase> allInformationProviders, AIRandomControl aiRandomControl) : base(information, InfoProviderType.Game, allInformationProviders, aiRandomControl) { requiredInfoTypes = new List <InfoType>() { }; providedInfoTypes = new List <InfoPiece> { new InfoPiece(InfoType.GP_NumTableSeats_Byte, 10), new InfoPiece(InfoType.GP_NumPlayersDealtIn_Byte, 10), new InfoPiece(InfoType.GP_NumActivePlayers_Byte, 10), new InfoPiece(InfoType.GP_NumUnactedPlayers_Byte, 0), new InfoPiece(InfoType.GP_GameStage_Byte, 0), new InfoPiece(InfoType.GP_DealerDistance_Byte, 1) }; AddProviderInformationTypes(); }
public NeuralAIBase(AIRandomControl aiRandomControl) : base(aiRandomControl) { threadSafeNetworkDict = new Dictionary <string, NNThreadSafeNetworkPool>(); }
public ImpliedOddsProvider(InfoCollection information, Dictionary <InfoProviderType, InfoProviderBase> allInformationProviders, AIRandomControl aiRandomControl) : base(information, InfoProviderType.ImpliedOdds, allInformationProviders, aiRandomControl) { //requiredInfoProviders = new List<InfoProviderType>() {InfoProviderType.PlayerActionPrediction}; providedInfoTypes = new List <InfoPiece>() { new InfoPiece(InfoType.IO_ImpliedPotOdds_Double, 0), }; /* * requiredInfoTypes = new List<InfoType>() { InfoType.BP_MinimumCallAmount_Decimal, //Provided * InfoType.BP_TotalPotAmount_Decimal, //Provided * InfoType.GP_GameStage_Byte, * InfoType.PAP_FoldToBotCall_Prob, * InfoType.BP_PlayerBetAmountCurrentRound_Decimal, * InfoType.BP_ImmediatePotOdds_Double, * InfoType.GP_NumUnactedPlayers_Byte, * }; */ AddProviderInformationTypes(); }
public InfoProviderBase(InfoCollection information, InfoProviderType providerType, Dictionary <InfoProviderType, InfoProviderBase> allInformationProviders, AIRandomControl aiRandomControl) { //this.disableTrueRandomness = disableTrueRandomness; this.aiRandomControl = aiRandomControl; if (allInformationProviders == null) { this.providerInitialisationSequenceNum = 1; } else { this.providerInitialisationSequenceNum = allInformationProviders.Count + 1; } if (aiRandomControl.InfoProviderRandomPerHandSeedEnabled) { this.randomGen = new CMWCRandom(aiRandomControl.InfoProviderRandomPerHandSeed); } else { this.randomGen = new CMWCRandom(DateTime.Now.Ticks + providerInitialisationSequenceNum); } this.providerType = providerType; this.allInformationProviders = allInformationProviders; if (this.allInformationProviders != null) { this.allInformationProviders.Add(providerType, this); } //We need to check that dependant providers have already been added //This code is here but it does not seem to be useable if (requiredInfoProviders != null) { int numRequiredProviders = requiredInfoProviders.Count; int requiredInfoProvidersPresent = (from availableProviders in allInformationProviders.Values join requiredProviders in requiredInfoProviders on availableProviders.ProviderType equals requiredProviders select availableProviders).Count(); if (numRequiredProviders != requiredInfoProvidersPresent) { throw new Exception("Required information providers for this provider are not yet present."); } } if (information != null) { this.infoStore = information; } else if (requiredInfoTypes != null) { throw new Exception("InfoStore and GlobalRequestedInfo Types must both be provided or neither, not one or the other."); } //We need to check that the requiredInfoTypes are already in the infoStore if (requiredInfoTypes != null && information != null) { int numRequiredInfoTypes = requiredInfoTypes.Count; int requiredInfoTypesPresent = (from availableInformation in infoStore.GetInformationStore().Keys join requiredTypes in requiredInfoTypes on availableInformation equals requiredTypes select infoStore).Count(); if (numRequiredInfoTypes != requiredInfoTypesPresent) { throw new Exception("Required information types for this provider are not yet present in the information store."); } } else if (requiredInfoTypes != null && information == null) { throw new Exception("If requiredInfoTypes is not null an infoStore MUST be used!"); } //Setup the slow update function delegates lock (slowUpdateLocker) { if (!slowUpdateTaskDelegates.ContainsKey(providerType)) { slowUpdateTaskDelegates.Add(providerType, ProviderSlowUpdateTask); } } }
//protected databaseCache.AIConfig botConfig; public SimpleAIBase(AIRandomControl aiRandomControl) : base(aiRandomControl) { }
public NeuralAIv7(AIRandomControl aiRandomControl) : base(aiRandomControl) { aiType = AIGeneration.NeuralV7; #region preflop update key //Setup this AI's specific update key specificUpdateKey = new RequestedInfoKey(false); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_GameStage_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsAAPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsKKPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsAK_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsOtherHighPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsOtherLowPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsTroubleHand_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsMidConnector_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsLowConnector_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsSuited_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_DealerDistance_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumActivePlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumUnactedPlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerMoneyInPot_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerHandStartingStackAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalPotAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_ProbOpponentHasBetterWRFIXED); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToCallAmount); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToStealAmount); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToCallStealSuccessProb); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToStealSuccessProb); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppPreFlopPlayFreq_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppPostFlopPlayFreq_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppCurrentRoundAggr_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppCurrentRoundAggrAcc_Double); #endregion #region postflop update key postFlopUpdateKey = new RequestedInfoKey(false); postFlopUpdateKey.SetInfoTypeRequired(InfoType.GP_GameStage_Byte); postFlopUpdateKey.SetInfoTypeRequired(InfoType.GP_DealerDistance_Byte); postFlopUpdateKey.SetInfoTypeRequired(InfoType.GP_NumActivePlayers_Byte); postFlopUpdateKey.SetInfoTypeRequired(InfoType.GP_NumUnactedPlayers_Byte); postFlopUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerMoneyInPot_Decimal); postFlopUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerHandStartingStackAmount_Decimal); postFlopUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); postFlopUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalPotAmount_Decimal); postFlopUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); postFlopUpdateKey.SetInfoTypeRequired(InfoType.WR_ProbOpponentHasBetterWRFIXED); postFlopUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToCallAmount); postFlopUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToStealAmount); postFlopUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToCallStealSuccessProb); postFlopUpdateKey.SetInfoTypeRequired(InfoType.WR_RaiseToStealSuccessProb); postFlopUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppPreFlopPlayFreq_Double); postFlopUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppPostFlopPlayFreq_Double); postFlopUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppCurrentRoundAggr_Double); postFlopUpdateKey.SetInfoTypeRequired(InfoType.AP_AvgLiveOppCurrentRoundAggrAcc_Double); #endregion }
public AggressionProvider(InfoCollection information, Dictionary <InfoProviderType, InfoProviderBase> allInformationProviders, AIRandomControl aiRandomControl) : base(information, InfoProviderType.AIAggression, allInformationProviders, aiRandomControl) { requiredInfoTypes = new List <InfoType>() { }; providedInfoTypes = new List <InfoPiece> { //Old scaled values new InfoPiece(InfoType.AP_AvgScaledOppRaiseFreq_Double, 0), new InfoPiece(InfoType.AP_AvgScaledOppCallFreq_Double, 0), new InfoPiece(InfoType.AP_AvgScaledOppPreFlopPlayFreq_Double, 0), //New live values including accuracy new InfoPiece(InfoType.AP_AvgLiveOppPreFlopPlayFreq_Double, 0), new InfoPiece(InfoType.AP_AvgLiveOppPostFlopPlayFreq_Double, 0), new InfoPiece(InfoType.AP_AvgLiveOppCurrentRoundAggr_Double, 0), new InfoPiece(InfoType.AP_AvgLiveOppCurrentRoundAggrAcc_Double, 0), }; AddProviderInformationTypes(); lock (locker) { if (CurrentJob == null) { playerAggressionCache = new List <PlayerAggression>(); } else { //For now we will just start a blank list but we should be using the serialised data in the job. playerAggressionCache = new List <PlayerAggression>(); } } }
public AIInstance(InstanceSelector instanceSelector, int instanceNumber, Queue decisionRequestQueue, AIRandomControl aiRandomControl) { taskTrees = new Dictionary <RequestedInfoKey, InfoProviderTaskTree>(); this.instanceSelector = instanceSelector; this.instanceNumber = instanceNumber; this.decisionRequestQueue = decisionRequestQueue; this.decisionInProgress = new object(); //Setup the AI's and providers here infoStore = new InfoCollection(); infoProviderDictList = new Dictionary <InfoProviderType, InfoProviderBase>(); aiDictList = new Dictionary <AIGeneration, AIBase>(); //Setup the 1st infostore instance var GP = new GameProvider(infoStore, infoProviderDictList, aiRandomControl); var WRP = new ProviderWinRatio.WinRatioProvider(infoStore, infoProviderDictList, aiRandomControl); var BP = new BetsProvider(infoStore, infoProviderDictList, aiRandomControl); var CP = new CardsProvider(infoStore, infoProviderDictList, aiRandomControl); var AP = new AggressionProvider(infoStore, infoProviderDictList, aiRandomControl); var PAPP = new PlayerActionPredictionProvider(infoStore, infoProviderDictList, aiRandomControl); //Hard lock the infostore collection preventing any further changes. infoStore.HardLockInfoList(); //Setup the AI list //We are going to lock the AI's into random mode. aiDictList.Add(AIGeneration.SimpleV1, new SimpleAIV1(aiRandomControl)); aiDictList.Add(AIGeneration.SimpleV2, new SimpleAIV2(aiRandomControl)); aiDictList.Add(AIGeneration.NeuralV1, new NeuralAIv1(aiRandomControl)); aiDictList.Add(AIGeneration.SimpleV3, new SimpleAIV3(aiRandomControl)); aiDictList.Add(AIGeneration.NeuralV2, new NeuralAIv2(aiRandomControl)); aiDictList.Add(AIGeneration.SimpleV4AggressionTrack, new SimpleAIV4AggTrack(aiRandomControl)); aiDictList.Add(AIGeneration.NeuralV3, new NeuralAIv3(aiRandomControl)); aiDictList.Add(AIGeneration.NeuralV4, new NeuralAIv4(aiRandomControl)); aiDictList.Add(AIGeneration.SimpleV5, new SimpleAIv5(aiRandomControl)); aiDictList.Add(AIGeneration.SimpleV6, new SimpleAIv6(aiRandomControl)); aiDictList.Add(AIGeneration.NeuralV5, new NeuralAIv5(aiRandomControl)); aiDictList.Add(AIGeneration.NeuralV6, new NeuralAIv6(aiRandomControl)); aiDictList.Add(AIGeneration.SimpleV7, new SimpleAIv7(aiRandomControl)); aiDictList.Add(AIGeneration.CheatV1, new CheatV1(aiRandomControl)); aiDictList.Add(AIGeneration.NeuralV7, new NeuralAIv7(aiRandomControl)); if (ConcurrencyMode.Concurrency == ConcurrencyMode.ConcurencyModel.MultiCore) { providerTasks = new Dictionary <InfoProviderType, Task>(); } else { providerActions = new Dictionary <InfoProviderType, Action>(); } }
public BetsProvider(InfoCollection information, Dictionary <InfoProviderType, InfoProviderBase> allInformationProviders, AIRandomControl aiRandomControl) : base(information, InfoProviderType.Bets, allInformationProviders, aiRandomControl) { providedInfoTypes = new List <InfoPiece>() { new InfoPiece(InfoType.BP_BetsToCall_Byte, 5), new InfoPiece(InfoType.BP_LastRoundBetsToCall_Byte, 0), new InfoPiece(InfoType.BP_MinimumPlayAmount_Decimal, 0), new InfoPiece(InfoType.BP_PlayerHandStartingStackAmount_Decimal, 0), new InfoPiece(InfoType.BP_PlayerLastAction_Short, (byte)Definitions.PokerAction.CatastrophicError), new InfoPiece(InfoType.BP_PlayerMoneyInPot_Decimal, 0), new InfoPiece(InfoType.BP_TotalNumCalls_Byte, 5), new InfoPiece(InfoType.BP_TotalNumRaises_Byte, 5), new InfoPiece(InfoType.BP_TotalPotAmount_Decimal, 1), new InfoPiece(InfoType.BP_CalledLastRound_Bool, 0), new InfoPiece(InfoType.BP_RaisedLastRound_Bool, 0), new InfoPiece(InfoType.BP_PlayerBetAmountCurrentRound_Decimal, 0), new InfoPiece(InfoType.BP_ImmediatePotOdds_Double, 0), new InfoPiece(InfoType.BP_TotalNumChecks_Byte, 0), new InfoPiece(InfoType.BP_CurrentCallAmountLarger4BB, 1), new InfoPiece(InfoType.BP_LastAdditionalRaiseAmount, 0), new InfoPiece(InfoType.BP_ScaledCallAmount_Double, 1) }; AddProviderInformationTypes(); }
public CardsProvider(InfoCollection information, Dictionary <InfoProviderType, InfoProviderBase> allInformationProviders, AIRandomControl aiRandomControl) : base(information, InfoProviderType.Cards, allInformationProviders, aiRandomControl) { requiredInfoTypes = new List <InfoType>() { }; providedInfoTypes = new List <InfoPiece> { new InfoPiece(InfoType.CP_AOnBoard_Bool, 1), new InfoPiece(InfoType.CP_KOnBoard_Bool, 1), new InfoPiece(InfoType.CP_FlushPossible_Bool, 1), new InfoPiece(InfoType.CP_StraightPossible_Bool, 1), new InfoPiece(InfoType.CP_AKQToBoardRatio_Real, 1), new InfoPiece(InfoType.CP_TableStraightDraw_Bool, 1), new InfoPiece(InfoType.CP_TableFlushDraw_Bool, 1), new InfoPiece(InfoType.CP_HoleCardsAAPair_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsKKPair_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsOtherHighPair_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsOtherLowPair_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsOtherPair_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsAK_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsTroubleHand_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsMidConnector_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsLowConnector_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsSuited_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsFlushDraw_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsStraightDraw_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsOuterStraightDrawWithHC_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsInnerStraightDrawWithHC_Bool, 0), new InfoPiece(InfoType.CP_HoleCards3KindOrBetterMadeWithHC_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsTopOrTwoPair_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsAOrKInHand_Bool, 0), new InfoPiece(InfoType.CP_HoleCardsMatchedPlayability, 0), }; AddProviderInformationTypes(); LoadCardUsage("Marc"); LoadCardUsage("Ailwyn"); LoadCardUsage("SimpleV7"); LoadCardUsage("CheatV1"); }
public PlayerActionPredictionProvider(InfoCollection information, Dictionary <InfoProviderType, InfoProviderBase> allInformationProviders, AIRandomControl aiRandomControl) : base(information, InfoProviderType.PlayerActionPrediction, allInformationProviders, aiRandomControl) { requiredInfoTypes = new List <InfoType>() { InfoType.CP_AKQToBoardRatio_Real, //Same for all InfoType.CP_AOnBoard_Bool, //Same for all InfoType.CP_FlushPossible_Bool, //Same for all InfoType.CP_KOnBoard_Bool, //Same for all InfoType.CP_StraightPossible_Bool, //Same for all InfoType.GP_GameStage_Byte, //Same for all InfoType.GP_NumActivePlayers_Byte, //Provided InfoType.GP_NumPlayersDealtIn_Byte, //Same for all InfoType.GP_NumTableSeats_Byte, //Same for all InfoType.GP_NumUnactedPlayers_Byte, //Provided InfoType.BP_BetsToCall_Byte, //Provided InfoType.BP_LastRoundBetsToCall_Byte, // ********* From CACHE InfoType.BP_MinimumPlayAmount_Decimal, //Provided InfoType.BP_PlayerLastAction_Short, // ********* From CACHE InfoType.BP_PlayerMoneyInPot_Decimal, // ********* From CACHE InfoType.BP_TotalNumCalls_Byte, //Provided InfoType.BP_TotalNumRaises_Byte, //Provided InfoType.BP_TotalPotAmount_Decimal, //Provided InfoType.BP_LastAdditionalRaiseAmount, InfoType.GP_DealerDistance_Byte, // ********* From CACHE InfoType.AP_AvgScaledOppPreFlopPlayFreq_Double //We don't actually need this we just want to make sure the agression provider has been added }; providedInfoTypes = new List <InfoPiece>() { new InfoPiece(InfoType.PAP_RaiseToStealAmount_Amount, 0), new InfoPiece(InfoType.PAP_RaiseToStealSuccess_Prob, 0), new InfoPiece(InfoType.PAP_RaiseToCallAmount_Amount, 0), new InfoPiece(InfoType.PAP_RaiseToBotCall_Prob, 1), new InfoPiece(InfoType.PAP_FoldToBotCall_Prob, 0), new InfoPiece(InfoType.PAP_RaiseToBotCheck_Prob, 1), }; AddProviderInformationTypes(); //Create the player action prediction network manager if it's has not already been created. if (networkManager == null) { networkManager = new playerActionPredictionNetworkManager(); } #if logging //If we are logging configure the logger ILoggerRepository repository = LogManager.GetRepository(Assembly.GetCallingAssembly()); IBasicRepositoryConfigurator configurableRepository = repository as IBasicRepositoryConfigurator; PatternLayout layout = new PatternLayout(); layout.ConversionPattern = "%level% [%thread%] - %message%newline"; layout.ActivateOptions(); FileAppender appender = new FileAppender(); appender.Layout = layout; appender.File = "aiDecisions_PAP.csv"; appender.AppendToFile = true; appender.ActivateOptions(); configurableRepository.Configure(appender); #endif }
public NeuralAIv1(AIRandomControl aiRandomControl) : base(aiRandomControl) { aiType = AIGeneration.NeuralV1; specificUpdateKey = new RequestedInfoKey(false); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsAAPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsKKPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsAK_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsOtherHighPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsOtherLowPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsTroubleHand_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsMidConnector_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsLowConnector_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsSuited_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsFlushDraw_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsOuterStraightDrawWithHC_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsInnerStraightDrawWithHC_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsTopOrTwoPair_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCardsAOrKInHand_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_HoleCards3KindOrBetterMadeWithHC_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_AOnBoard_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_KOnBoard_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_AKQToBoardRatio_Real); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_FlushPossible_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_StraightPossible_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_TableStraightDraw_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.CP_TableFlushDraw_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumPlayersDealtIn_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumTableSeats_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumActivePlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_NumUnactedPlayers_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_GameStage_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.GP_DealerDistance_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_ImmediatePotOdds_Double); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerMoneyInPot_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerHandStartingStackAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalPotAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumRaises_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumCalls_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_TotalNumChecks_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_LastRoundBetsToCall_Byte); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_CurrentCallAmountLarger4BB); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_RaisedLastRound_Bool); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerLastAction_Short); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinPercentage); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyOpponentWinPercentage); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyWinPercentageLastRoundChange); specificUpdateKey.SetInfoTypeRequired(InfoType.WR_CardsOnlyOpponentWinPercentage); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToBotCheck_Prob); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToBotCall_Prob); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_FoldToBotCall_Prob); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToStealSuccess_Prob); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToStealAmount_Amount); specificUpdateKey.SetInfoTypeRequired(InfoType.PAP_RaiseToCallAmount_Amount); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); specificUpdateKey.SetInfoTypeRequired(InfoType.BP_PlayerBetAmountCurrentRound_Decimal); //specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); //specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); //specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); //specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); //specificUpdateKey.SetInfoTypeRequired(InfoType.BP_MinimumPlayAmount_Decimal); }