/// <summary> /// /// </summary> /// <param name="EvadersPolicy"></param> /// <param name="PursuersPolicy"></param> /// <param name="p"></param> /// <param name="g"></param> /// will be used if policies ask input in input boxes /// </param> public PerformanceEstimation(string EvadersPolicy, string PursuersPolicy, GameLogic.IGameParams p, AGameGraph g) { this.evadersPolicy = Utils.ReflectionUtils.constructEmptyCtorType <IEvadersPolicy>(EvadersPolicy).GetType(); //AEvadersPolicy.ChildrenByTypename[EvadersPolicy]; this.pursuersPolicy = Utils.ReflectionUtils.constructEmptyCtorType <APursuersPolicy>(PursuersPolicy).GetType(); //APursuersPolicy.ChildrenByTypename[PursuersPolicy]; this.gameParam = p; this.gameGraph = g; }
/// <summary> /// processes the specific scenario, and runs simulation according to params in 'policyInput' /// NOTE: 1) 'policyInput' is assumed to include AppArgumentKeys.SIMULATION_REPETETION_COUNT /// NOTE: 2) results will contain policyInput /// </summary> /// <param name="parallelOptInner"></param> /// <param name="evadersPolicy"></param> /// <param name="pursuersPolicy"></param> /// <param name="p"></param> /// <param name="g"></param> /// <param name="policyInput"></param> /// <param name="game"></param> /// <returns></returns> public static Dictionary <string, string> getEstimatedResultsAverage(ParallelOptions parallelOptInner, string evadersPolicy, string pursuersPolicy, GameLogic.IGameParams p, AGameGraph g, Dictionary <string, string> policyInput, AGameProcess game, bool calcStdDev) { int repetetionCount = int.Parse(AppConstants.AppArgumentKeys.SIMULATION_REPETETION_COUNT.tryRead(policyInput)); if (repetetionCount <= 0) { return(null); } PerformanceEstimation estimator = new PerformanceEstimation(evadersPolicy, pursuersPolicy, p, g); var res = new Dictionary <string, string> (policyInput); res.AddRange( Utils.Algorithms.AlgorithmUtils.Average( estimator.estimatePerformance( Utils.ReflectionUtils.constructEmptyCtorTypeFromObj <AGameProcess>(game), repetetionCount, policyInput, int.MaxValue, false, parallelOptInner), calcStdDev)); return(res); }