static public Dictionary <ODPair, PathList> FindPath(Map map, int pathNum) { Dictionary <ODPair, PathList> allPath = new Dictionary <ODPair, PathList>(); Dictionary <uint, PathList> pathList; ODPair od; Point p1; Point p2; foreach (KeyValuePair <uint, Point> item1 in map.points) { p1 = item1.Value; pathList = FindPath(item1.Value, map, pathNum); foreach (KeyValuePair <uint, PathList> item2 in pathList) { p2 = map.points[item2.Key]; od = new ODPair(p1, p2); allPath.Add(od, item2.Value); } } return(allPath); }
static public MissionAssignment[] Brain(Queue <Mission> missionQueue, List <AGVWPF> agvList, Dictionary <ODPair, PathList> allPaths) { MissionAssignment[] ma = new MissionAssignment[missionQueue.Count]; Point missionStartPoint; Point missionEndPoint; Point agvPoint; int idx = 0; foreach (Mission m in missionQueue) { ma[idx] = new MissionAssignment(m, null, null); idx++; } double min_length_1 = -1; double min_length_2 = -1; Path bestPath_1 = null; // agv->mission起始点一段路径 Path bestPath_2 = null; // mission起始点->mission终点一段路径 PathList pathList_1; PathList pathList_2; AGVWPF bestAGV = null; if (agvList.Count == 1) // 只有一辆小车 { idx = 0; foreach (Mission m in missionQueue) { foreach (AGVWPF agv in agvList) { bestAGV = agv; agvPoint = agv.PrePoint; missionStartPoint = m.mssionStartPoint; pathList_1 = allPaths[new ODPair(agvPoint, missionStartPoint)]; missionEndPoint = m.mssionEndPoint; ODPair od = new ODPair(missionStartPoint, missionEndPoint); pathList_2 = allPaths[od]; //Console.WriteLine(allPaths.ContainsKey(od).ToString()); // Console.Read(); min_length_1 = -1; if (pathList_1.paths != null) { foreach (Path path in pathList_1.paths) { if (min_length_1 == -1 || min_length_1 > path.length) { min_length_1 = path.length; bestPath_1 = path; } } } min_length_2 = -1; if (pathList_2.paths != null) { foreach (Path path in pathList_2.paths) { if (min_length_2 == -1 || min_length_2 > path.length) { min_length_2 = path.length; bestPath_2 = path; } } } if (min_length_1 != -1 && min_length_2 != -1) { break; } } if (min_length_1 != -1 && min_length_2 != -1) { ma[idx].agv = bestAGV; ma[idx].path = bestPath_1.combinePath(bestPath_2); break; } idx++; } } return(ma); }