Example #1
0
 protected override TurnInfo AppraiseFunction(GameModel current, SearchStorage ss)
 {
     IgnitionStorage ign = (IgnitionStorage)ss;
     return ign.ipa.FieldAssess(current, ResultAppraise);
 }
Example #2
0
 private TurnInfo AppraiseNode(AppraisalTree node, int level, long boader, SearchStorage ss)
 {
     TurnInfo nowInfo = node.Info;
     TurnInfo forwardInfo = new TurnInfo();
     TurnInfo appraiseInfo = new TurnInfo();
     if (nowInfo.AppraisalScore != long.MinValue)
     {
         if (nowInfo.AppraisalScore < boader)
         {
             node.ReleaseChild();
             return nowInfo;
         }
         else if(level >= ss.NowLevel)
         {
             return nowInfo;
         }
     }
     forwardInfo = ss.GMC.ForwardStep(node.CX, node.CR);
     if (forwardInfo.AppraisalScore >= 0)
     {
         if (level >= ss.NowLevel)
         {
             appraiseInfo = AppraiseFunction(ss.GMC.GetCurrentGameModel(), ss);
             ss.CallCount++;
         }
         else
         {
             ss.GMC.NextLevel();
             appraiseInfo = SearchNode(node, level, ss);
             ss.GMC.PreviousLevel();
         }
     }
     ss.GMC.BackwardStep();
     nowInfo = ReckonAppraiseScore(forwardInfo, appraiseInfo);
     node.Info = nowInfo;
     return nowInfo;
 }
Example #3
0
 protected abstract TurnInfo AppraiseFunction(GameModel current, SearchStorage ss);
Example #4
0
 private TurnInfo SearchNode(AppraisalTree node, int level, SearchStorage ss)
 {
     if (!node.IsExistChild())
     {
         node.GenerateChild(W, T);
     }
     int length = node.Length;
     TurnInfo maxInfo = new TurnInfo { AppraisalScore = long.MinValue };
     long minScore = long.MaxValue;
     //long boader = GetRankBoaderScore(node, level + 1);
     long boader = ss.BoaderScore;
     for (int i = 0; i < length; i++)
     {
         TurnInfo nextInfo = AppraiseNode(node[i], level + 1, boader, ss);
         if (maxInfo.AppraisalScore < nextInfo.AppraisalScore)
         {
             maxInfo = nextInfo;
         }
         if (nextInfo.AppraisalScore >= boader)
         {
             minScore = Math.Min(minScore, nextInfo.AppraisalScore);
         }
     }
     if (minScore < long.MaxValue)
     {
         ss.MinimaxScore = Math.Max(ss.MinimaxScore, minScore);
     }
     return maxInfo;
 }