楊華
摘要:為了能夠使多個交通燈最大化協調工作,使車輛不至于在十字路口滯留的時間過長,我們利用Java語言設計十字路口交通燈管理系統,通過系統對十字路口車輛及交通參與者進行有效管理,提高十字路口交通控制水平,充分發揮路口通行能力,使其更加靈活有效地提高道路的利用率,從而達到暢通交通工程目的。
關鍵詞:業務邏輯;系統;java;管理系統
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2019)05-0102-03
近年來,隨著經濟發展,城市汽車數量的增加,我國城市交通正面臨十分嚴峻的考驗,從而導致交通問題的日益嚴重,其主要變現在:交通事故頻發,交通擁堵嚴重,人們出行時間增加,日常的交通堵塞成為人們司空見慣而又不得不忍受的問題,也是迫切需要解決的社會問題。作為城市交通路網的關鍵部分,十字路口成為道路通行能力的瓶頸,十字路口的通行能力決定了城市交通暢通程度。因此,如何設計出智能化十字路口信號燈控制系統,是保障十字路口交通通行能力的重要措施,是解決城市交通擁塞的有效途徑。本文我們將利用Java來開發十字路口紅綠交通燈系統。
1 十字路口交通燈管理系統邏輯需求分析
根據我國城市交通的實際狀況及車輛行駛慣例,分析十字路口管理系統實現邏輯,具體如下:
1.1 交通參與者車輛行進路線分析
設計生成按照各個路線行駛的異步隨機路線。例如:由西向東則直行,由西向南則設計為右轉,由西向北則設計為左轉等等,各個路口車輛行駛路線如圖1所示:
1.2 路口信號燈模擬
根據十字路口交通狀況,在設計信號燈系統的時候,我們主要考慮以下情況:
右轉車輛不受信號燈控制,只考慮直行和左轉車輛控制信號燈;南北向與東西向車輛交替行駛,同向車輛應遵循“先直行后左轉原則”;為了實時整合動態交通信息,車輛時間間隔以及紅綠燈交換時間間隔隨機生成。
2 十字路口交通燈管理系統抽象對象模型的實現
根據車輛行進路線模擬圖和十字路口交通業務邏輯關系,我們把S2N表示汽車從南向北行駛,N2E表示汽車從北向東行駛,也就是正在進行左轉彎,其他表示意思與此相同。同時車輛路口行駛規則,我們必須建立三個抽象對象模型,即交通燈模型對象(TrafficLight)、道路模型對象(RoadWay)和交通燈控制模型對象(TrafficController),其具體實現如下:
2.1 道路模型對象(RoadWay類)實現
設計一個RoadWay類來表示道路路線,一條路線用一個RoadWay對象表示,在十字路口,每一個路口的第一輛車都有可能有三種路線行駛,十字路口有4個路口,因此一共產生12條路線(即生成12個RoadWay實例對象),在Java中我們通過對12條路線的控制,實現對對應路線上車輛放行功能,同時由于每條路線上的車輛是隨機增加的,因此我們可以將新增車輛添加到一個集合中保存;同時檢查控制線路的燈是否變綠,若為綠燈,表示車通過了路口,需要將集合中的第一輛車移除。
在道路模型中我們沒有抽象出車的模型,而是抽象出路的對象,因為道路是車行駛的載體,道路含有車,并控制其創建與銷毀,這里主要用到了線程池相關知識,其具體實現過程為:
/**
* 每個RoadWay對象代表一條路線,系統要產生12個實例對象
* 用一個集合中保存隨機增加的新車輛
* 每條路線每隔一秒檢查控制本路線的燈是否為綠燈
* 若為綠燈,移除集合中的第一輛車
*/
public class RoadWay {
public String CarName = null;
public RoadWay (String CarName){
this. CarName = CarName;
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){//每1--10秒內隨機產生車(不超過999輛)*/
@Override
public void runn() {
int i;
for( i=1;i<=999;i++){
Thread.sleep((new (int)(Math.random()*1000+1);
vechicles.add(RoadWay.this. CarName +":第"+i+"輛車");
}} });
ScheduledExecutorService Timer = Executors.newScheduledThreadPool(1);
Timer.scheduleAtFixedRate(new Runnable(){
public void runn(){
if(vechicles.size()>0){
boolean light =TrafficLight.valueOf(RoadWay.this. CarName).isLight();
if(light){
System.out.print(vechicles.remove(0)+" 正在通過十字路口!");
} }
}
}, 1000,1000, TimeUnit. MILLISECONDS);
}
}
2.2 交通燈模型對象(TrafficLight類)實現
交通燈用一個TrafficLight類來表示,每個交通燈都有兩種狀態:亮(綠)或黑(紅),由于十字路口共有12條路線,因此要設計產生12個交通燈對象。根據我國城市交通的實際狀況及車輛行駛慣例,一般右拐的路線設計為不受燈控制,只需要將這些燈設為常亮狀態。直行和左拐8條路線的燈,可以歸為4組(對向兩兩成對),所以,在編程處理時,只要對4個燈依次輪詢處理讓其變亮就可。在一個TrafficLight對象變亮和變黑方法中,每個燈變黑,都有下一個燈的變亮。在交通燈模型設計的時候,讓系統每次獲得同一個實例對象,所以TrafficLight類宜用枚舉來保存燈的實例對象,其具體實現過程為:
public enum TrafficLight
{ S2N("N2S", "S2W", false,"從南向北"), S2W("N2E", "E2W", false,"從南向西"), E2W("W2E", "E2S", false,"從東向西"), E2S("W2N", "S2N", false,"從東向南"),
N2S(null, null, false,"從北向南"), N2E(null, null, false,"從北向東"), W2E(null, null, false,"從西向東"), W2N(null, null, false,"從西向北"),
S2E(null, null, true,""), E2N(null, null, t rue,""), N2W(null, null, true,""), W2S(null, null, true,"");
private String opp;
private String nextTrafficLight;
private boolean Green;
public boolean Grean()
{return this.Green;}
TrafficLight (String opp, String nextTrafficLight, boolean Green)
{ this.opp = opp;
this.nextlamp = nextTrafficLight;
this.Green = Green;}
public void turnGrean()
{this.isGreen = true;
System.out.println(this.name() + "方向的燈變綠了!");
if (this.opp != null)
{ TrafficLight.valueOf(this.opp).turnGrean();}}
public TrafficLight turnRed()
{ this.isGreen = false;
System.out.println(this.name() + "方向的燈變紅了!");
if (this.opp != null)
{TrafficLight.valueOf(this.opp).turnRed();}
TrafficLight next = null;
if (this. nextTrafficLight != null)
{ next = TrafficLight.valueOf(this. nextTrafficLight);
TrafficLight.valueOf(this. nextTrafficLight).turnGrean();
}
return next;}}
2.3 交通燈控制對象(TrafficController類)的實現
TrafficLight對象設計好后,我們必須設計一個定時器,他的主要作用就是讓信號燈在規定的時間和時間間隔內不斷的有條理地亮起來并交替變換,信號燈在變換的時候,會自動地觸發其對應對面的信號燈和左拐燈的變化,因此,在TrafficController構造方法中將TrafficLight設定為綠燈,通過TrafficController對象的turn方法將當前燈變成綠燈,啟動定時器Timer,每隔30秒(時間可以根據交通流量動態設定)將當前燈currentLamp變為紅燈和將下一個燈變成綠燈,具體代碼如下:
public class TrafficController {
private TrafficController currentL;
public TrafficController (){
this.currentL = TrafficController.S2N;
currentL.turnOn();
ScheduledExecutorService Timer = Executors.newScheduledThreadPool(1);
Timer.scheduleAtFixedRate(new Runnable(){
public void runn(){
currentL = currentL.turnOff();
}
},30,30000,TimeUnit. MILLISECONDS);}}
3 十字路口交通燈管理系統運行主體類實現
運行主體類用來模擬汽車通過十字路口時交通燈的工作情況以及車輛通過情況,具體設計代碼如下:
public class Test {
public static void main(String[] args) {
String direc [] = {"S2N","S2W","E2W","N2S","E2S" ,"N2E","W2E","W2N"," E2N "," S2E ","N2W","W2S"};
int k;
for(k=0; k new RoadWay(direc [k]);} new TrafficController ();}} 總之,城市交通管理系統是一個具有不同功能綜合系統,若只靠簡單地擴大道路基礎設施并不能解決交通擁堵問題。只有使用合理的軟件系統設計,建立良好交通管理方案模型,優化設計方案,提高交通管理和控制水平,分配好現有交通設施,充分發揮路口通行能力,使其更加靈活有效地提高道路的利用率,緩解城市交通擁堵狀況。 參考文獻: [1] 江世明.單片機應用及原理[M].2版. 上海:上海交通大學出版社,2005. [2] 朱福喜.面向對象與Java程序設計[M].北京:清華大學出版社出版,2009. [3] 王利. Java面向對象程序設計[M].北京:清華大學出版社出版,2004. [4] 王宏宇,賈仰理. Java面向對象程序設計[M].北京:中國人民大學出版社,2009. 【通聯編輯:謝媛媛】