Beispiel #1
0
        /// <summary>
        /// FVを、-999.0~999.0(*bairitu)に矯正。
        /// </summary>
        public static void FvParamRange_PP(FeatureVector fv)
        {
            //--------------------------------------------------------------------------------
            // 変換前のデータを確認。
            //--------------------------------------------------------------------------------
            Util_Inspection.Inspection1(fv);

            //--------------------------------------------------------------------------------
            // 点数を、順位に変換します。
            //--------------------------------------------------------------------------------
            Util_Ranking.Perform_Ranking(fv);

            //--------------------------------------------------------------------------------
            // トポロジー的に加工したあとのデータを確認。
            //--------------------------------------------------------------------------------
            Util_Zooming.ZoomTo_FvParamRange(fv);
        }
Beispiel #2
0
        /// <summary>
        /// 平手初期局面が -100点~+100点 に収まるように調整します。
        ///
        /// 7回だけ調整します。
        ///
        /// [0]回目: 順位を 64 ずらす。
        /// [1]回目: 順位を 32 ずらす。
        /// [2]回目: 順位を 16 ずらす。
        /// [3]回目: 順位を 8 ずらす。
        /// [4]回目: 順位を 4 ずらす。
        /// [5]回目: 順位を 2 ずらす。
        /// [6]回目: 順位を 1 ずらす。
        ///
        /// これで、1方向に最長で(順位換算で) 130 ほどずれます。
        ///
        /// </summary>
        public static void Adjust_HirateSyokiKyokumen_0ten_AndFvParamRange(
            ref bool ref_isRequestDoEvents,
            FeatureVector fv)
        {
            if (null == Util_StartZero.src_Sky_hirateSyokikyokumen)
            {
                // 平手初期局面
                Util_StartZero.src_Sky_hirateSyokikyokumen = SkyConst.NewInstance(
                    Util_SkyWriter.New_Hirate(Playerside.P1),
                    0                     // 初期局面は 0手目済み
                    );
            }

            if (null == Util_StartZero.n54List_hirateSyokikyokumen)
            {
                //----------------------------------------
                // 40枚の駒、または14種類の持駒。多くても54要素。
                //----------------------------------------
                Util_StartZero.n54List_hirateSyokikyokumen = Util_54List.Calc_54List(Util_StartZero.src_Sky_hirateSyokikyokumen);
            }

            Hyokakansu_NikomaKankeiPp kansu = new Hyokakansu_NikomaKankeiPp();



            //--------------------------------------------------------------------------------
            // Check
            //--------------------------------------------------------------------------------
            //
            // 平手初期局面の点数を調べます。
            //
            float score;

#if DEBUG || LEARN
            KyHyokaMeisai_Koumoku meisaiKoumoku_orNull;
#endif
            kansu.Evaluate(
                out score,
#if DEBUG || LEARN
                out meisaiKoumoku_orNull,
#endif
                Util_StartZero.src_Sky_hirateSyokikyokumen,
                fv
                );

            if (-100 <= score && score <= 100)
            {
                // 目標達成。
                goto gt_Goal;
            }

            for (int iCount = 0; iCount < 7; iCount++)//最大で7回調整します。
            {
                // 初期局面の評価値が、-100~100 よりも振れていれば、0 になるように調整します。

                //--------------------------------------------------------------------------------
                // 点数を、順位に変換します。
                //--------------------------------------------------------------------------------
                Util_Ranking.Perform_Ranking(fv);

                //
                // 調整量
                //
                int chosei_offset = Util_StartZero.tyoseiryo[iCount];// 調整量を、調整します。どんどん幅が広くなっていきます。

                if (-100 <= score && score <= 100)
                {
                    // 目標達成。
                    goto gt_Goal;
                }
                else if (100 < score)// ±0か、マイナスに転じさせたい。
                {
                    chosei_offset *= -1;
                }

                int changedCells;
                Util_FvScoreing.Fill54x54_Add(out changedCells, chosei_offset, src_Sky_hirateSyokikyokumen, fv,
                                              Util_StartZero.n54List_hirateSyokikyokumen);

                // 順位を、点数に変換します。
                Util_Zooming.ZoomTo_FvParamRange(fv);

                // フォームの更新を要求します。
                ref_isRequestDoEvents = true;

                //--------------------------------------------------------------------------------
                // Check
                //--------------------------------------------------------------------------------
                //
                // 平手初期局面の点数を調べます。
                //
                kansu.Evaluate(
                    out score,
#if DEBUG || LEARN
                    out meisaiKoumoku_orNull,
#endif
                    Util_StartZero.src_Sky_hirateSyokikyokumen,
                    fv
                    );

                if (-100 <= score && score <= 100)
                {
                    // 目標達成。
                    goto gt_Goal;
                }

                // 目標を達成していないなら、ループを繰り返します。
            }

gt_Goal:
            ;
        }