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; }
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(); }
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; }
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()); }
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); } }
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; }
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>>(); }
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; }
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; }
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>>(); }
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); }