Esempio n. 1
0
        public AGI_CalcFields(AGI_CalcFields agic, COMMON_MAP map)
        {
            setConstData(map);
            fields = new int[F_MAX_X * F_MAX_Y];

            agic.fields.CopyTo(fields, 0);

            closed = agic.closed;
        }
Esempio n. 2
0
        public AGI_CalcFields(AGI_Fields agiF, COMMON_MAP map)
        {
            setConstData(map);
            fields = new int[F_MAX_X * F_MAX_Y];

            for (int i = 0; i < fields.Length; i++)
            {
                fields[i] = agiF.GetAgiFieldsNum(i);
            }

            closed = false;

            addNeighborInfo();
        }
Esempio n. 3
0
 public StoreData(bool idExists, AGI_CalcFields ag, COMMON_MAP map)
 {
     if (idExists == true)
     {
         ID = idCounter;
         StoreData.idCounter++;
     }
     else
     {
         ID = 0;
     }
     stoneIdList = new List<int>();
     stonePlaceList = new List<int>();
     stoneKindsList = new List<int>();
     evalueList = new List<float>();
     evalue = -1;
     score = -1;
     closed = false;
     agicF = new AGI_CalcFields(ag, map);
     lastAttackStone = 0;
 }
Esempio n. 4
0
        static void Main(string[] args)
        {
            String initFile = "app_config.txt";
            if(args.Length != 0)
            {
                initFile = args[0];
            }

            COMMON_MAP commonMap = new COMMON_MAP(initFile);

            Console.WriteLine("SEARCH_FOR=>" + commonMap.PROBLEM_FILE);

            GameInfo gi = new GameInfo();
            gi.GetProblem(commonMap);

            AdvanceGameInfo agi = new AdvanceGameInfo(gi);

            Search sch = new Search(agi, commonMap);
            int score = sch.SearchStart();

             Console.WriteLine("file:{0} score:{1}", commonMap.FILENAME, score.ToString());
        }
Esempio n. 5
0
        public void GetProblem(COMMON_MAP map)
        {
            string line = "";
            //FILE INPUT
            //FILELDS
            System.IO.StreamReader file = new System.IO.StreamReader(map.PROBLEM_FILE);
            for (int lineCnt = 0; lineCnt < 32; lineCnt++)
            {
                line = file.ReadLine();
                for (int i = 0; i < line.Length; i++)
                {
                    String tmp = line.Substring(i, 1);
                    pFields.SetField(lineCnt * 32 + i, int.Parse(tmp));
                }
            }

            //pFields.PrintFields();

            line = file.ReadLine(); //空列読み込み
            stoneNum = int.Parse(file.ReadLine()); //石の数読み込み

            for (int lineCnt = 0; lineCnt < stoneNum; lineCnt++)
            {
                Stone tmpStn = new Stone();
                for (int i = 0; i < 8; i++)
                {
                    line = file.ReadLine();
                    for (int j = 0; j < 8; j++)
                    {
                        String tmpSt = line.Substring(j, 1);
                        tmpStn.SetStone(i * 8 + j, int.Parse(tmpSt));
                    }
                }
                line = file.ReadLine(); //空列読み
                list.AddStoneList(tmpStn);
            }
        }
Esempio n. 6
0
        public StoreData(StoreData st, COMMON_MAP map)
        {
            this.ID = st.ID;
            stoneIdList = new List<int>();
            stonePlaceList = new List<int>();
            stoneKindsList = new List<int>();
            evalueList = new List<float>();

            for(int i=0; i < st.stoneKindsList.Count; i++)
            {
                stoneIdList.Add(st.stoneIdList[i]);
                stonePlaceList.Add(st.stonePlaceList[i]);
                stoneKindsList.Add(st.stoneKindsList[i]);
            }
            for(int i=0; i < evalueList.Count; i++)
            {
                evalueList.Add(st.evalueList[i]);
            }
            evalue = st.evalue;
            score = st.score;
            closed = st.closed;
            agicF = new AGI_CalcFields(st.agicF, map);
            lastAttackStone = st.lastAttackStone;
        }
Esempio n. 7
0
 public Search(AdvanceGameInfo agi, COMMON_MAP map)
 {
     this.agi = agi;
     this.commonMap = map;
     rand = new Xorshift();
     storeDataDic = new Dictionary<int, StoreData>();
     searchQueId = new ConcurrentQueue<int>();
     nextQueId = new ConcurrentQueue<int>();
     answerId = new Dictionary<int, StoreData>();
     saveStoreDataDic = new Dictionary<int, StoreData>();
     problemEmptySize = agi.GetAgiFields().GetEmptySize();  /* 問題のEMPTYサイズ */
     depthSize = 0;
     searchTimes = 0;
     AnnealingRate = new int[11] { ANNEALING_RATE_0,
         ANNEALING_RATE_10,
         ANNEALING_RATE_20,
         ANNEALING_RATE_30,
         ANNEALING_RATE_40,
         ANNEALING_RATE_50,
         ANNEALING_RATE_60,
         ANNEALING_RATE_70,
         ANNEALING_RATE_80,
         ANNEALING_RATE_90,
         ANNEALING_RATE_100 };
     setConstData(map);
     this.fileName = map.FILENAME;
     smallOrderList = new int[agi.GetAgiStoneList().GetListSize()];
     RetrySearch = new Queue<List<StoreData>>();
 }
Esempio n. 8
0
        private void setRetryConstData(COMMON_MAP map)
        {
            SEARCH_KIND_MAX = map.SEARCH_KIND_MAX;              /* 一つに対しx手分調査 */
            CHOISE_FOR_EVAL_NUM = map.CHOISE_FOR_EVAL_NUM;        /* 優秀種残し数 */

            DEPTH_BIG_80 = map.RETRY_DEPTH_BIG_80;
            DEPTH_BIG_50 = map.RETRY_DEPTH_BIG_50;
            DEPTH_BIG_0 = map.RETRY_DEPTH_BIG_0;

            DEPTH_MID_80 = map.RETRY_DEPTH_MID_80;
            DEPTH_MID_50 = map.RETRY_DEPTH_MID_50;
            DEPTH_MID_0 = map.RETRY_DEPTH_MID_0;

            DEPTH_MIN_80 = map.RETRY_DEPTH_MIN_80;
            DEPTH_MIN_50 = map.RETRY_DEPTH_MIN_50;
            DEPTH_MIN_0 = map.RETRY_DEPTH_MIN_0;

            ANNEALING_RATE_0 = map.RETRY_ANNEALING_RATE_0;
            ANNEALING_RATE_10 = map.RETRY_ANNEALING_RATE_10;
            ANNEALING_RATE_20 = map.RETRY_ANNEALING_RATE_20;
            ANNEALING_RATE_30 = map.RETRY_ANNEALING_RATE_30;
            ANNEALING_RATE_40 = map.RETRY_ANNEALING_RATE_40;
            ANNEALING_RATE_50 = map.RETRY_ANNEALING_RATE_50;
            ANNEALING_RATE_60 = map.RETRY_ANNEALING_RATE_60;
            ANNEALING_RATE_70 = map.RETRY_ANNEALING_RATE_70;
            ANNEALING_RATE_80 = map.RETRY_ANNEALING_RATE_80;
            ANNEALING_RATE_90 = map.RETRY_ANNEALING_RATE_90;
            ANNEALING_RATE_100 = map.RETRY_ANNEALING_RATE_100;

            map.CONNECT_MY_FIELD = map.RETRY_MY_FIELDS_RATE;
            map.CONNECT_WALL = map.RETRY_WALLS_RATE;
            map.CONNECT_OBJECT = map.RETRY_OBJECTS_RATE;
            map.RATE_CONNECT = map.RETRY_CONNECT_RATE;
            map.RATE_SCORE = map.RETRY_SCORE_RATE;

            map.DEPTH_MAX = map.RETRY_DEPTH_MAX;
            map.PASS_STONE_RATE = map.RETRY_PASS_STONE_RATE;
            map.FAILES_FIELD_RATE = map.RETRY_FAILES_FIELD_RATE;
            map.CLOSED_FIELD_RATE = map.RETRY_CLOSED_FIELD_RATE;
        }
Esempio n. 9
0
        private void setConstData(COMMON_MAP map)
        {
            INIT_SEARCH_IDX = map.INIT_SEARCH_IDX;  /* 初手最大探索IDX */
            INIT_CHOISE_FOR_EVAL_NUM = map.INIT_CHOISE_FOR_EVAL_NUM;   /* 初手保持個数 */
            INIT_SEEDS_SAVE = map.INIT_SEEDS_SAVE;             /* 初手種保存数 */

            SEARCH_KIND_MAX = map.SEARCH_KIND_MAX;              /* 一つに対しx手分調査 */
            CHOISE_FOR_EVAL_NUM = map.CHOISE_FOR_EVAL_NUM;        /* 優秀種残し数 */

            DEPTH_BIG_80 = map.DEPTH_BIG_80;
            DEPTH_BIG_50 = map.DEPTH_BIG_50;
            DEPTH_BIG_0 = map.DEPTH_BIG_0;

            DEPTH_MID_80 = map.DEPTH_MID_80;
            DEPTH_MID_50 = map.DEPTH_MID_50;
            DEPTH_MID_0 = map.DEPTH_MID_0;

            DEPTH_MIN_80 = map.DEPTH_MIN_80;
            DEPTH_MIN_50 = map.DEPTH_MIN_50;
            DEPTH_MIN_0 = map.DEPTH_MIN_0;

            ANNEALING_RATE_0 = map.ANNEALING_RATE_0;
            ANNEALING_RATE_10 = map.ANNEALING_RATE_10;
            ANNEALING_RATE_20 = map.ANNEALING_RATE_20;
            ANNEALING_RATE_30 = map.ANNEALING_RATE_30;
            ANNEALING_RATE_40 = map.ANNEALING_RATE_40;
            ANNEALING_RATE_50 = map.ANNEALING_RATE_50;
            ANNEALING_RATE_60 = map.ANNEALING_RATE_60;
            ANNEALING_RATE_70 = map.ANNEALING_RATE_70;
            ANNEALING_RATE_80 = map.ANNEALING_RATE_80;
            ANNEALING_RATE_90 = map.ANNEALING_RATE_90;
            ANNEALING_RATE_100 = map.ANNEALING_RATE_100;

            RETRY_COUNT_EVAL = map.RETRY_COUNT_EVAL;
            RETRY_COUNT_RAND = map.RETRY_COUNT_RAND;
        }
Esempio n. 10
0
 public Search()
 {
     agi = null;
     commonMap = null;
     smallOrderList = null;
     rand = new Xorshift();
     storeDataDic = new Dictionary<int, StoreData>();
     searchQueId = new ConcurrentQueue<int>();
     nextQueId = new ConcurrentQueue<int>();
     answerId = new Dictionary<int, StoreData>();
     saveStoreDataDic = new Dictionary<int, StoreData>();
     problemEmptySize = 0;
     depthSize = 0;
     searchTimes = 0;
     AnnealingRate = new int[11] { ANNEALING_RATE_0,
         ANNEALING_RATE_10,
         ANNEALING_RATE_20,
         ANNEALING_RATE_30,
         ANNEALING_RATE_40,
         ANNEALING_RATE_50,
         ANNEALING_RATE_60,
         ANNEALING_RATE_70,
         ANNEALING_RATE_80,
         ANNEALING_RATE_90,
         ANNEALING_RATE_100 };
     setConstDataDefault();
     fileName = "default.txt";
     RetrySearch = new Queue<List<StoreData>>();
 }
Esempio n. 11
0
        private void setConstData(COMMON_MAP map)
        {
            SCORE_MAX = map.SCORE_MAX;    /* 3辺以上接地 */
            SCORE_MID = map.SCORE_MID;    /* 2辺接地 */
            SCORE_MIN = map.SCORE_MIN;    /* 1辺接地 */
            NON_SCORE = 0;    /* 0辺接地 */

            CONNECT_MY_FIELD = map.CONNECT_MY_FIELD; /* 自陣と接触 */
            CONNECT_WALL = map.CONNECT_WALL;     /* 壁と接触 */
            CONNECT_OBJECT = map.CONNECT_OBJECT;   /* 障害物と接触 */

            DEPTH_MAX = map.DEPTH_MAX;
            PASS_STONE_RATE = map.PASS_STONE_RATE;
            FAILES_FIELD_RATE = map.FAILES_FIELD_RATE;
            CLOSED_FIELD_RATE = map.CLOSED_FIELD_RATE;

            RATE_CONNECT = ((float)map.RATE_CONNECT / 100F);
            RATE_SCORE = ((float)map.RATE_SCORE / 100F);
        }