public void AddNewSignalSetting(SignalConfig newConfig) { signalConfigList.Add(newConfig); CalculateRedLight(); RenewSignalStatusList(); RefreshSignalGraphic(); }
private void button_confirm_Click(object sender, EventArgs e) { int intersectionID = this.comboBox_Intersections.SelectedIndex; List<SignalConfig> newConfigList = new List<SignalConfig>(); for (int i = 0; i < Simulator.IntersectionManager.GetIntersectionByID(intersectionID).signalConfigList.Count; i++)//紅燈的計算 { int[] config = new int[2]; if(i == 0) { config[0] = (int)this.numericUpDown_order_1_green.Value; config[1] = (int)this.numericUpDown_order_1_yellow.Value; } else if (i == 1) { config[0] = (int)this.numericUpDown_order_2_green.Value; config[1] = (int)this.numericUpDown_order_2_yellow.Value; } else if (i == 2) { config[0] = (int)this.numericUpDown_order_3_green.Value; config[1] = (int)this.numericUpDown_order_3_yellow.Value; } else if (i == 3) { config[0] = (int)this.numericUpDown_order_4_green.Value; config[1] = (int)this.numericUpDown_order_4_yellow.Value; } SignalConfig newConfig = new SignalConfig(config[0], config[1]); newConfigList.Add(newConfig); } Simulator.IntersectionManager.GetIntersectionByID(intersectionID).SetIntersectionSignalConfig(newConfigList); }
private void button_addNewSetting_Click(object sender, EventArgs e) { if (selectedIntersection.signalConfigList.Count < 4 && !Simulator.simulatorStarted) { SignalConfig newConfig = new SignalConfig((int)this.numericUpDown_newGreen.Value, (int)this.numericUpDown_newYellow.Value); selectedIntersection.AddNewSignalSetting(newConfig); } LoadSignalSetting(); }
public void SetSignalConfig(int configNo, SignalConfig lightConfig) { signalConfigList[configNo] = lightConfig; }
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) }
public Boolean SimulationFileRead_IntersectionsConfig(XmlDocument XmlDoc) { XmlNodeList intersectionList = XmlDoc.SelectSingleNode("Simulation/IntersectionsConfig").ChildNodes; //get all intersection foreach (XmlNode intersectionNode in intersectionList) { Intersection intersection = Simulator.IntersectionManager.GetIntersectionByID(System.Convert.ToInt16(intersectionNode.Attributes["ID"].Value)); XmlNodeList intersectionConfigs = intersectionNode.ChildNodes; foreach (XmlNode intersectionConfig in intersectionConfigs) //Read all config { if (intersectionConfig.Name.Equals("SignalConfigs")) //Read signal config { XmlNodeList signalConfigs = intersectionConfig.ChildNodes; foreach (XmlNode signalConfig in signalConfigs) { int green = System.Convert.ToInt32(signalConfig.Attributes["Green"].Value); int yellow = System.Convert.ToInt32(signalConfig.Attributes["Yellow"].Value); SignalConfig newConfig = new SignalConfig(green,yellow); intersection.AddNewSignalSetting(newConfig); } } } } return true; }