Áp dụng thuật toán trên ta có các hướng được xác định đi tiếp theo như sau:
Theo giả thuyết, ta có:
𝐷 = {𝑑5, 𝑑2, 𝑑7, 𝑑15, 𝑑12, 𝑑11, 𝑑1, 𝑑4, 𝑑10, 𝑑9, 𝑑8, 𝑑13, 𝑑6, 𝑑14} là tập các hướng đi đầu vào đã được sắp theo thứ tự ưu tiên giảm dần của mô đun phát hiện ưu tiên lưu lượng và hệ thống đèn tín hiệu hiện tại đáp ứng các điều kiện (1) và (2) cho thời gian 𝑇𝑟 và 𝑇𝑔 . Do đó, áp dụng thuật toán trên, ta có:
Hướng thứ nhất được đi: 𝑑𝑝𝑟1 ← 𝑑5 (𝑑5 là hướng có thứ tự ưu tiên cao nhất của D).
Hướng thứ hai được đi: 𝑑𝑝𝑟2
Ta có 𝐷𝑐𝑠𝑝𝑟1 = 𝐷𝑐𝑠0 ∩ 𝐷𝑐𝑠5 = {𝑑15, 𝑑12, 𝑑4, 𝑑9, 𝑑8, 𝑑6, 𝑑14} ≠ ∅
Do đó 𝑑𝑝𝑟2 ← 𝑑15
Hướng thứ ba được đi: 𝑑𝑝𝑟3
Ta có 𝐷𝑐𝑠15 = {𝑑1, 𝑑2, 𝑑4, 𝑑5, 𝑑6, 𝑑7, 𝑑8, 𝑑9, 𝑑10, 𝑑11, 𝑑12, 𝑑13, 𝑑14}
⟹ 𝐷𝑐𝑠𝑝𝑟2 = 𝐷𝑐𝑠𝑝𝑟1 ∩ 𝐷𝑐𝑠15 = {𝑑12, 𝑑4, 𝑑9, 𝑑8, 𝑑6, 𝑑14} ≠ ∅
Do đó: 𝑑𝑝𝑟3 ← 𝑑12
Hướng thứ tư được đi: 𝑑𝑝𝑟4
Ta có 𝐷𝑐𝑠12 = {𝑑1, 𝑑2, 𝑑4, 𝑑6, 𝑑7, 𝑑9, 𝑑10, 𝑑11, 𝑑13, 𝑑14, 𝑑15}
⟹ 𝐷𝑐𝑠𝑝𝑟3 = 𝐷𝑐𝑠𝑝𝑟2 ∩ 𝐷𝑐𝑠12 = {𝑑4, 𝑑9, 𝑑6, 𝑑14} ≠ ∅
Do đó: 𝑑𝑝𝑟4 ← 𝑑4
Hướng thứ năm được đi: 𝑑𝑝𝑟5
Ta có 𝐷𝑐𝑠4 = {𝑑5, 𝑑6, 𝑑7, 𝑑8, 𝑑9, 𝑑11, 𝑑12, 𝑑13, 𝑑15}
⟹ 𝐷𝑐𝑠𝑝𝑟4 = 𝐷𝑐𝑠𝑝𝑟3∩ 𝐷𝑐𝑠4 = {𝑑9, 𝑑6} ≠ ∅
Do đó: 𝑑𝑝𝑟5 ← 𝑑9
Hướng thứ sáu được đi: 𝑑𝑝𝑟6
Ta có 𝐷𝑐𝑠9 = {𝑑1, 𝑑2, 𝑑4, 𝑑5, 𝑑6, 𝑑7, 𝑑8, 𝑑10, 𝑑11, 𝑑12, 𝑑14, 𝑑15}
⟹ 𝐷𝑐𝑠𝑝𝑟5 = 𝐷𝑐𝑠𝑝𝑟4 ∩ 𝐷𝑐𝑠9 = {𝑑6} ≠ ∅
Do đó: 𝑑𝑝𝑟6 ← 𝑑6
Hướng thứ bảy được đi: 𝑑𝑝𝑟7
Ta có 𝐷𝑐𝑠6 = {𝑑1, 𝑑4, 𝑑5, 𝑑9, 𝑑10, 𝑑11, 𝑑12, 𝑑14, 𝑑15}
Ta có kết quả của bài toán như sau:
𝐷𝑟𝑜𝑤𝑛𝑒𝑤 = {𝑑5, 𝑑15, 𝑑12, 𝑑4, 𝑑9, 𝑑6, } 𝐷𝑝𝑟𝑜𝑛𝑒𝑤 = {𝑑2, 𝑑7, 𝑑11, 𝑑1, 𝑑10, 𝑑8, 𝑑13, 𝑑14}
Áp dụng: Từ (2) và kết quả trên ta có: - Các hướng bảo toàn đèn xanh:
𝐷𝑟𝑜𝑤𝑐𝑢𝑟𝑒𝑛𝑡 ∩ 𝐷𝑟𝑜𝑤𝑛𝑒𝑤 = {𝑑9, 𝑑12, 𝑑15}
- Các hướng bảo toàn đèn đỏ:
𝐷𝑝𝑟𝑜𝑐𝑢𝑟𝑒𝑛𝑡∩ 𝐷𝑝𝑟𝑜𝑛𝑒𝑤 = {𝑑7, 𝑑8, 𝑑10, 𝑑11, 𝑑13, 𝑑14}
- Các hướng chuyển từ đèn đỏ sang đèn xanh:
𝐷𝑝𝑟𝑜𝑐𝑢𝑟𝑒𝑛𝑡 ∩ 𝐷𝑟𝑜𝑤𝑛𝑒𝑤 = {𝑑4, 𝑑5, 𝑑6}
- Các hướng chuyển từ đèn xanh sang đèn vàng, rồi sang đèn đỏ:
𝐷𝑟𝑜𝑤𝑐𝑢𝑟𝑒𝑛𝑡 ∩ 𝐷𝑝𝑟𝑜𝑛𝑒𝑤 = {𝑑1, 𝑑2}
3.4. Đánh giá, Nhận xét.
Giải pháp thay đổi tín hiệu đèn giao thông tại ngã tư đô thị dựa trên mức độ ưu tiên của các hướng qua giao lộ giúp khắc phục phần nào chưa hợp lý của hệ thống đèn giao thông hiện tại ở các Thành phố lớn. Nhằm mục đích hạn chế ùn tắc giao thông tại một số ngã tư trọng điểm, giải pháp này tận dụng tối đa diện tích đường bộ và loại bỏ các các yếu tố gây ùn tắc từ những hướng di chuyển gây xung đột giao thông giữa ngã tư. Bên cạnh đó, nó cũng phối hợp độ dày xe hợp lý tại chỉ đường đi vào ngã tư và thông xe đang chờ đèn xanh phía trước ngã tư đường vắng.
Cách tiếp cận xác định độ dày xe để kiểm soát nhiều hơn đèn giao thông linh hoạt, không chỉ để giảm độ dày của xe trước giao thông đèn mà còn để sử dụng hiệu quả đường giao nhau. Cách tiếp cận loại bỏ di chuyển xung đột trong ngã tư để tăng tốc độ của phương tiện, và xóa sự nhầm lẫn giao thông do vượt
đèn đỏ của các phương tiện khẩn cấp với nhau với sự bám víu của người khác để giảm sự nhầm lẫn và rủi ro kẹt xe.
3.5. Kết luận
Thuật toán thay đổi tín hiệu đèn giao thông tại ngã tư đô thị dựa trên mức độ ưu tiên của các hướng qua giao lộ giúp khắc phục phần nào chưa hợp lý của hệ thống đèn giao thông hiện tại ở các Thành phố lớn như Thành Phó Hồ Chí Minh. Phương pháp đề xuất đối với đèn giao thông điều khiển dựa trên ưu tiên cung cấp một giải pháp tích hợp để dọn đường cho xe ưu tiên, ngăn chặn tắc nghẽn trước đèn giao thông và tránh kẹt xe hướng xung đột qua ngã tư. Ưu tiên được xác định trong cách tiếp cận là ước tính dựa trên yêu cầu của phương tiện tình huống khẩn cấp, thời gian dừng xe chờ phía trước đèn đỏ và giảm đều mật độ lưu lượng xe tại ở hướng đi vào và trong ngã tư.
CHƯƠNG 4: MÔ PHỎNG THỰC NGHIỆM THAY ĐỔI TÍN HIỆU ĐÈN GIAO THÔNG ĐÔ THỊ DỰA TRÊN MỨC ĐỘ ƯU TIÊN CỦA CÁC HƯỚNG QUA GIAO LỘ
Trong chương này, luận văn sẽ áp dụng thuật toán và lập trình mô phỏng thay đổi tín hiệu điều khiển đèn giao thông đô thị dựa trên mức độ ưu tiên của các hướng qua giao lộ ngã tư bằng ngôn ngữ Java và html.
4.1. Giới thiệu
Hệ thống điều khiển tín hiệu đèn giao thông hiện tại của các Thành phố lớn đang thể hiện sự hữu ích của mình trong việc phân luồng giao thông qua giao lộ, tuy nhiên với những giao lộ có mật độ lưu lượng tham gia giao thông không đều nhau ở các hướng, hoặc hướng đang ùn tắc mà có phương tiện tham gia giao thông ưu tiên cần đi qua thì hệ thống điều khiển đèn giao thông này lộ rõ sự lỗi thời. Trong chương này, luận văn muốn mô phỏng bằng hình ảnh một giải pháp thay đổi tín hiệu điều khiển phân luồng giao thông phù hợp hơn tại các ngã tư giao lộ, giảm đều mật độ giao thông trên các hướng, giải quyết tức thời cho các hướng có phương tiện tham gia giao thông ưu tiên mà ít bị cản trở hoặc gây ùn tắc.
Mục tiêu của chương này là nâng cao tính trực quan của giải pháp thay đổi tín hiệu điều khiển đèn giao thông đô thị dựa trên mức độ ưu tiên của các hướng qua giao lộ bằng phương pháp lập trình với ngôn ngữ Java và mô phỏng các hướng được di chuyển qua ngã tư giao lộ bằng html.
Nhằm đạt được mục tiêu trên, chương bốn này sẽ trình bày phân tích giải thuật của thuật toán bằng mả giả, sơ đồ thuật toán và lập trình mô phỏng bằng ngôn ngữ Java và html. Tiếp theo đó, luận văn sẽ áp dụng thuật toán và giải thuật thay đổi tín hiệu điều khiển đèn giao thông đô thị dựa trên mức độ ưu tiên của các hướng qua giao lộ vào một ngã tư thực tế tại Thành phố Hồ Chí Minh nhằm làm thực nghiệm. Cuối chương, luận văn sẽ tóm tắt các kết quả đạt được tại ngã tư thực nghiệm cho thấy tính hữu dụng của giải pháp trên.
4.2. Giải thuật 4.2.1. Mã giả. 4.2.1. Mã giả.
1. Định nghĩa Bảng các hướng di chuyển không gây xung đột với hướng thứ i: var arrD_1_cs = [d2, d6, d8, d9, d10, d12, d15]; var arrD_2_cs = [d1, d9, d11, d12, d13, d15]; var arrD_3_cs = [d1, d2, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15]; var arrD_4_cs = [d5, d6, d7, d8, d9, d11, d12, d13, d15]; var arrD_5_cs = [d4, d6, d8, d9, d12, d14, d15]; var arrD_6_cs = [d1, d4, d5, d9, d10, d11, d12, d14, d15]; var arrD_7_cs = [d4, d8, d9, d11, d12, d13, d15]; var arrD_8_cs = [d1, d4, d5, d7, d9, d12, d14, d15]; var arrD_9_cs = [d1, d2, d4, d5, d6, d7, d8, d10, d11, d12, d14, d15]; var arrD_10_cs = [d1, d6, d9, d11, d12, d15]; var arrD_11_cs = [d2, d4, d6, d9, d10, d12, d15]; var arrD_12_cs = [d1, d2, d4, d6, d7, d9, d10, d11, d13, d14, d15]; var arrD_13_cs = [d4, d6, d7, d9, d12, d14, d15]; var arrD_14_cs = [d5, d6, d8, d9, d10, d12, d13, d15]; var arrD_15_cs = [d1, d2, d4, d5, d6, d7, d8, d9, d10, d12, d13, d14];
2. Kiểm tra các giá trị INPUT
var strD = giá trị Textbox arrD;
var strD_current_row = giá trị Textbox arrD_current_row; var strD_current_pro = giá trị Textbox arrD_current_pro;
- Kiểm tra arrD khác rỗng
if(strD == ""){ Hiện thị lỗi "Please input." ở Textbox arrD
Set forcus
return false;
}else{
Xóa nội dung message lỗi
}
- Kiểm tra arrD_current_row khác rỗng
if(strD_current_row == ""){
Hiện thị lỗi "Please input." ở Textbox arrD_current_row
Set forcus
return false;
}else{
Xóa nội dung message lỗi
}
- Kiểm tra arrD_current_pro khác rỗng
if(strD_current_pro == ""){
Hiện thị lỗi "Please input." ở Textbox arrD_current_pro
Set forcus
return false;
}else{
Xóa nội dung message lỗi
- Kiểm tra strD = arrD_current_row + arrD_current_pro
Trường hợp strD, arrD_current_row, arrD_current_pro đã được nhập Nếu strD = arrD_current_row + arrD_current_pro thì tiếp tục
mục 3.
Ngược lại, hiển thị thông báo lỗi : Vui lòng nhập các hướng còn thiếu vào Textbox arrD_current_row hoặc Textbox arrD_current_pro.
3. Hiển thị trạng thái đèn XANH cho các quyền hiện tại 4. Hiển thị trạng thái đèn ĐỎ cho các quyền cấm
5. Xử lý thuật toán
5.1. Gán mảng arrD vào mảng giao arrIntersec
var arrIntersec = arrD;
5.2. Dùng vòng lặp Do ... While để lặp lại thao tác xử lý cấu thành quyền ưu tiên
5.2.1. Lấy ra hướng có độ ưu tiên cao nhất trong mảng giao arrIntersec (1)
5.2.2. Xác định tập hợp HƯỚNG DI CHUYỂN KHÔNG GÂY XUNG ĐỘT tiếp theo (2)
do { var arrDnext; var newd; switch(arrIntersec[0].name) { case "d1": arrDnext = arrD_1_cs; newd = d1; break;
case "d2": arrDnext = arrD_2_cs; newd = d2; break; case "d3": arrDnext = arrD_3_cs; newd = d3; break; case "d4": arrDnext = arrD_4_cs; newd = d4; break; case "d5": arrDnext = arrD_5_cs; newd = d5; break; case "d6": arrDnext = arrD_6_cs; newd = d6; break; case "d7": arrDnext = arrD_7_cs; newd = d7; break; case "d8": arrDnext = arrD_8_cs;
newd = d8; break; case "d9": arrDnext = arrD_9_cs; newd = d9; break; case "d10": arrDnext = arrD_10_cs; newd = d10; break; case "d11": arrDnext = arrD_11_cs; newd = d11; break; case "d12": arrDnext = arrD_12_cs; newd = d12; break; case "d13": arrDnext = arrD_13_cs; newd = d13; break; case "d14": arrDnext = arrD_14_cs; newd = d14; break;
case "d15": arrDnext = arrD_15_cs; newd = d15; break; default: // code block }
5.2.3. Lấy phần giao giữa tập hợp arrIntersec và (2)
arrIntersec = getIntersec(arrIntersec, arrDnext);
5.2.4. Gán (1) vừa tìm thấy ở trên vào mảng kết hợp mới của các hướng bên phải.
arrD_new_row.push(newd);
5.3. Xác định sự kết hợp mới của các hướng cấm : arrD_new_pro = arrD - arrD_new_row
arrD_new_pro = getNotIntersec(arrD, arrD_new_row);
6. Kết quả trả về
arrD_new_row : sự kết hợp mới của các hướng bên phải. arrD_new_pro : sự kết hợp mới của các hướng cấm.
7. Hiển thị trạng thái đèn XANH cho các quyền mới 8. Hiển thị trạng thái đèn ĐỎ cho các quyền cấm mới