Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 4
0
 public void SetSignalConfig(int configNo, SignalConfig lightConfig)
 {
     signalConfigList[configNo] = lightConfig;
 }
Ejemplo n.º 5
0
        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;
        }