public void AddOptimizationRecord(int intersectionID, OptimizationRecord optRecord) { int cycle = optRecord.optimizeCycle; OptimizationRecords[intersectionID].Add(cycle, optRecord); }
public void IntersectionOptimize() { if (currentCycle >= latestOptimizationCycle + optimizationInterval_Cycle) //確認是否達到優化週期限制 { OptimizationRecord newOptimizationRecord = new OptimizationRecord(currentCycle,Simulator.getCurrentTime_Format(), currentIAWR, optimizationThreshold_IAWR); if (currentIAWR > this.optimizationThreshold_IAWR) //判斷是否需要優化 { stability = 0; Simulator.UI.AddMessage("AI", "Intersection : " + intersectionID + " IAWR : " + currentIAWR + "(" + latestOptimizationCycle + "~" + currentCycle + ")"); foreach (SignalConfig sc in signalConfigList) { newOptimizationRecord.AddOriginConfiguration(sc.ToString_Short()); } TO.CleanRoadList(); foreach(Road r in roadList) { double avgAriRate_min = Simulator.DataManager.GetAvgArrivalRate_min(r.roadID, latestOptimizationCycle, currentCycle); double avgDepartureRate_min = Simulator.DataManager.GetAvgDepartureRate_min(r.roadID, latestOptimizationCycle, currentCycle); double avgWaitingVehicle = Simulator.DataManager.GetAvgWaittingVehicles(r.roadID, latestOptimizationCycle, currentCycle); double avgWaitingRate = Simulator.DataManager.GetAvgWaittingRate(r.roadID, latestOptimizationCycle, currentCycle); TO.AddRoad(r.roadID, r.phaseNo, signalConfigList[r.phaseNo].Green, signalConfigList[r.phaseNo].Red, avgAriRate_min, avgDepartureRate_min, avgWaitingVehicle, avgWaitingRate); } //optimization Dictionary<int, int> optimizedGreenTime = TO.Optimization(); //new signal config List<SignalConfig> optimizedConfig = new List<SignalConfig>(); //fill value for (int i = 0; i < signalConfigList.Count; i++) { SignalConfig newConfig = new SignalConfig(optimizedGreenTime[i], 2); optimizedConfig.Add(newConfig); } //apply SetIntersectionSignalConfig(optimizedConfig); foreach (SignalConfig sc in signalConfigList) { newOptimizationRecord.AddOptimizedConfiguration(sc.ToString_Short()); } }// if (IAWR > this.IAWRThreshold) else { stability++; } latestOptimizationCycle = currentCycle; Simulator.DataManager.AddOptimizationRecord(intersectionID, newOptimizationRecord); } //if (currentCycle >= latestOptimizeCycle + optimizeInerval) }