//仿真入口 public void startSimulation() { Console.WriteLine("仿真执行中..."); vissim.ShowMaximized(); //最大化窗口 //开始仿真 for (int i = 0; i < simulation.Period * simulation.Resolution + 1; i++) { simulation.RunSingleStep(); //单步仿真 /**************** * 通行策略的实现 * ****************/ southS(); northL(); southL(); northS(); westL(); eastL(); //获取平均行程时间和交通量 getVehAndTraveltime(i, 3600); } simulation.Stop(); }
//仿真和策略控制 public void startSimulation() { Console.WriteLine("仿真执行中..."); int[] n = new int[2] { 0, 0 }; //最小空隙间隔内(也就是det_1与det_2之间的距离以及det_4与det_5之间的距离)的车辆数目 vissim.ShowMaximized(); //最大化窗口 //开始仿真 for (int i = 0; i < simulation.Period * simulation.Resolution + 1; i++) { simulation.RunSingleStep(); //单步仿真 /**************** * 控制策略的实现 * ****************/ /*第二个匝道*/ //西进口(主路)到达车辆自由行驶(让det_1和det_2两个线圈固定) if (dets[0].get_AttValue("vehicleid") != 0) //有车进入线圈det_1,则n加1 { n[0]++; //通过线圈det_1的车辆数目 //vehicle[0] = link[0].GetVehicles().GetVehicleByNumber(dets[0].get_AttValue("vehicleid")); //vehicle[0].set_AttValue("speed", 10); //给车辆减速(要保证det_1处的来车不会与南进口的车冲突) //vehicle[0].set_AttValue("desiredspeed", 10); } if (dets[1].get_AttValue("vehicleid") != 0) //有车出线圈det_2则减1 { n[0]--; } //当det_1与det_2之间没有车辆且det_2处的车辆已经通过了det_3的那个时刻就让支路车辆通过 if (n[0] == 0 && dets[2].get_AttValue("vehicleid") != 0) { signalGroup[0].set_AttValue("type", 2); //允许南进口车辆通行 } else if (n[0] != 0) { signalGroup[0].set_AttValue("type", 3); //不允许南进口车辆通行 } //给经过线圈det_3的车辆加速(无论是主路还是支路的车,均设置为相同的速度) if (dets[2].get_AttValue("vehicleid") != 0) { vehicle[0] = link[0].GetVehicles().GetVehicleByNumber(dets[2].get_AttValue("vehicleid")); vehicle[0].set_AttValue("speed", 30); vehicle[0].set_AttValue("desiredspeed", 30); } //*第一个匝道*/ //西进口(主路)到达车辆自由行驶(让det_4和det_5两个线圈固定) if (dets[3].get_AttValue("vehicleid") != 0) //有车进入线圈det_4,则n加1 { n[1]++; //通过线圈det_4的车辆数目 //vehicle[2] = link[0].GetVehicles().GetVehicleByNumber(dets[3].get_AttValue("vehicleid")); //vehicle[2].set_AttValue("speed", 10); //给车辆减速(要保证det_4处的来车不会与南进口的车冲突) //vehicle[2].set_AttValue("desiredspeed", 10); } if (dets[4].get_AttValue("vehicleid") != 0) //有车出线圈det_5则减1 { n[1]--; } //当det_4与det_5之间没有车辆且det_5处的车辆已经通过了det_6的那个时刻就让支路车辆通过 if (n[1] == 0 && dets[5].get_AttValue("vehicleid") != 0) { signalGroup[1].set_AttValue("type", 2); //允许南进口车辆通行 } else if (n[1] != 0) { signalGroup[1].set_AttValue("type", 3); //不允许南进口车辆通行 } //给经过线圈det_6的车辆加速(无论是主路还是支路的车,均设置为相同的速度) if (dets[5].get_AttValue("vehicleid") != 0) { vehicle[2] = link[0].GetVehicles().GetVehicleByNumber(dets[5].get_AttValue("vehicleid")); vehicle[2].set_AttValue("speed", 30); vehicle[2].set_AttValue("desiredspeed", 30); } } simulation.Stop(); Console.WriteLine("仿真结束!"); }