internal static BlogEditingTemplateStrategy GetTemplateStrategy(StrategyType strategyType) { switch (strategyType) { case StrategyType.NoStyle: return new NoStyleEditingTemplate(); case StrategyType.FontsAndPaddingOnly: return new WordStyleEditingTemplate(); case StrategyType.NoSiblings: return new ParentElementsOnlyEditingTemplate(); case StrategyType.Site: return new WebsiteEditingTemplate(); case StrategyType.FramedWysiwyg: return new FramedWordStyleEditingTemplate(); default: throw new ArgumentException("Unknown template strategy: " + strategyType.ToString()); } }
public override string ToString() { var sb = new StringBuilder("SamplingStrategyResponse("); sb.Append(", StrategyType: "); StrategyType.ToString(sb); if ((ProbabilisticSampling != null) && __isset.probabilisticSampling) { sb.Append(", ProbabilisticSampling: "); ProbabilisticSampling.ToString(sb); } if ((RateLimitingSampling != null) && __isset.rateLimitingSampling) { sb.Append(", RateLimitingSampling: "); RateLimitingSampling.ToString(sb); } if ((OperationSampling != null) && __isset.operationSampling) { sb.Append(", OperationSampling: "); OperationSampling.ToString(sb); } sb.Append(')'); return(sb.ToString()); }
// The center of the AI - get an action override public List <WorldAction> GetAction(World world) { // The immediate action comes from level 1 WorldAction bestAction = WorldAction.NoAction; // Update level 1 heuristic parameters World.Player player = playerNum == 1 ? world.Player1 : world.Player2; // Calculate new level 1 action if timer is up if (decisionTimer <= 0) { ActionWithFiller decision = level1Searcher.ComputeBestAction(world, fillerAction, strategy.NextPathIndex); bestAction = decision.Action; fillerAction = decision.FillerAction; decisionTimer = Level1StepSize; // Otherwise do the filler action } else { bestAction = fillerAction; // Check distance to path bool doneWithPath = false; if (strategy.SearchPath != null) { doneWithPath = strategy.NextPathIndex >= strategy.SearchPath.States.Count - 1; } // Calculate the path if this frame has been designated to it if (calculatePathNextFrame) { // Run A* Path path = level2Searcher.ComputeBestPath(blockWorld); // Must be set before using the level 1 heuristic with a path strategy.SearchPath = path; strategy.NextPathIndex = 0; calculatePathNextFrame = false; // If no path is able to be calculated, then check again sooner than normal if (path == null) { strategyTimer = NoPathFoundRefreshTimer; } } else { // Compute a new strategy if the old one is no longer valid SimplifiedWorld currentState = new SimplifiedWorld(world, playerNum); if (isFirstTime || !previousState.IsEquivalent(currentState) || doneWithPath || dangerZoneShifted(world) || playerLeftPath(world, strategy.SearchPath) || strategyTimer <= 0 || world.IsTerminal()) { if (isFirstTime) { previousState = currentState; } isFirstTime = false; // Get reward and update QValues if learning if (IsLearning) { float reward = SimplifiedWorld.Reward(previousState, strategy.Type, currentState); QLearner.UpdateQValue(previousState, strategy.Type, currentState, reward); // Don't learn once world is terminal if (world.IsTerminal()) { IsLearning = false; } } // Get a new strategy StrategyType newStrategy = QLearner.GetStrategy(currentState); #if STRATEGY_PRINT Debug.Log("Player " + playerNum.ToString() + " selects strategy: " + newStrategy.ToString()); #endif strategy = Strategy.StrategyWithType(playerNum, newStrategy); level1Searcher = new DiscreteAdversarialSearch(playerNum, strategy.Level1Heuristic, getFillerAction, getNewPathIndex, Level1StepSize, 4); level2Searcher = new AStar(Level2MaxNodesInPrioQueue, Level2MaxExpansions, strategy.Level2CostFunction, strategy.Level2GoalFunction, strategy.Level2HeuristicFunction); // Create block world and danger zone blockWorld = new BlockWorld(playerNum, world); // Recalc danger zone dangerZone = new DangerZone(opponentNum, world, blockWorld); // Must be set before using the level 2 reward, cost, and goal functions strategy.Level2DangerZone = dangerZone; // Calculate the path in the next frame calculatePathNextFrame = true; // Speeds up framerate after player has died if (world.IsTerminal()) { calculatePathNextFrame = false; } // Reset previous state previousState = currentState; strategyTimer = MaxStrategyTime; } } // Debug rendering of danger zone #if DANGER_RENDER dangerZone.Render(ResourceScript); dangerZone.RenderPlayerBeliefs(ResourceScript); #endif } // Advance path position strategy.NextPathIndex = getNewPathIndex(player, strategy.NextPathIndex); decisionTimer--; strategyTimer--; #if PATH_RENDER if (strategy.SearchPath != null) { strategy.SearchPath.Render(ResourceScript, strategy.NextPathIndex); } #endif // Return a single-valued list with the best action return(new List <WorldAction>() { bestAction }); }