/// <summary> /// DeepBeliefNetworkを取得します。 /// </summary> /// <param name="version">AIプレイヤのバージョン</param> /// <returns>DeepBeliefNetwork</returns> public DeepBeliefNetwork GetDeepBeliefNetwork(AiPlayer.Version version) { if (!this.DeepBeliefNetworks.ContainsKey(version)) { this.DeepBeliefNetworks[version] = Serializer.Load <DeepBeliefNetwork>(string.Format(LearningConfig.LearnerSavePath + @"/{0}_{1}.bin", DeepBeliefNetworkFileName, version.ToString().ToLower())); } return(this.DeepBeliefNetworks[version]); }
/// <summary> /// 指定したバージョンのベクトルを取得します。 /// </summary> /// <param name="version">ベクトルバージョン</param> /// <param name="context">フィールド状態</param> /// <returns>ベクトル</returns> public SparseVector <double> GetVector(AiPlayer.Version version, FieldContext context) { if (!this.VectorGens.ContainsKey(version)) { throw new ArgumentException("ベクトル種別が不正です"); } var vector = this.GetVector(this.VectorGens[version], context); return(vector); }
/// <summary> /// MultipleLinearRegression。 /// </summary> /// <param name="learner">MultipleLinearRegression</param> /// <param name="version">AIプレイヤのバージョン</param> public void SaveMultipleLinearRegression(MultipleLinearRegression learner, AiPlayer.Version version) { var filePath = string.Format(LearningConfig.LearnerSavePath + @"/{0}_{1}_{2}.csv", MultipleLinearRegressionFileName, DateTime.Now.ToString("yyyyMMddhhmmss"), version.ToString().ToLower()); var sb = new StringBuilder(); foreach (var w in learner.Weights) { sb.Append($"{w},"); } sb.Append(learner.Intercept.ToString()); FileHelper.Write(sb.ToString(), filePath); }
/// <summary> /// MultipleLinearRegressionを取得します。 /// </summary> /// <param name="version">AIプレイヤのバージョン</param> /// <returns>MultipleLinearRegression</returns> public MultipleLinearRegression GetMultipleLinearRegression(AiPlayer.Version version) { if (!this.MultipleLinearRegressions.ContainsKey(version)) { var csv = Resources.Load <TextAsset>($"Csvs/Learners/{MultipleLinearRegressionFileName}_{version.ToString().ToLower()}").ToString(); var weightsAndIntercept = csv.Split(','); var weightsLength = weightsAndIntercept.Count() - 1; var intercept = weightsAndIntercept.Last(); var weights = weightsAndIntercept.Take(weightsLength).Select(w => double.Parse(w)).ToArray(); this.MultipleLinearRegressions[version] = new MultipleLinearRegression(); this.MultipleLinearRegressions[version].NumberOfInputs = weightsLength; this.MultipleLinearRegressions[version].Intercept = double.Parse(intercept); this.MultipleLinearRegressions[version].Weights = weights; } return(this.MultipleLinearRegressions[version]); }
/// <summary> /// 指定した種別の評価値を取得します。 /// </summary> /// <param name="version">バージョン</param> /// <param name="context">フィールド状態</param> /// <returns>評価値</returns> public double GetEval(AiPlayer.Version version, FieldContext context) { double ev = 0.0d; switch (version) { case AiPlayer.Version.V1_0: case AiPlayer.Version.V2_0: ev = this.LinearRegressionEvaluators[version].Evaluate(context); ev += this.AliveEvaluators[version].Sum(e => e.Evaluate(context)); ev += this.RandomEvaluator.Evaluate(this.RandomParams[version]); break; default: throw new ArgumentException("バージョンが不正です"); } return(ev); }
/// <summary> /// DeepBeliefNetworkを保存します。 /// </summary> /// <param name="network">DeepBeliefNetwork</param> public void SaveDeepBeliefNetwork(DeepBeliefNetwork network, AiPlayer.Version version) { var filePath = string.Format(LearningConfig.LearnerSavePath + @"/{0}_{1}_{2}.bin", DeepBeliefNetworkFileName, DateTime.Now.ToString("yyyyMMddhhmmss"), version.ToString().ToLower()); network.Save(filePath); }
/// <summary> /// 依存する情報を注入します。 /// </summary> /// <param name="version">AIプレイヤのバージョン</param> public void Inject(AiPlayer.Version version) { this.Version = version; this.Regression = DiProvider.GetContainer().GetInstance <LearnerManager>().GetMultipleLinearRegression(this.Version); this.HasInjected = true; }