CoolFace
Apppublic

VarunaKapuge/trafficflow-master-3000

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
script.js395 linesDownload Raw Back to root
1document.addEventListener('DOMContentLoaded', function() {2    const trafficData = [3        // D series4        { demand: 'D-1', cluster1: 1, throughput1: -1.88754, efficiency1: 0.9848, travelTime1: 61.06, queue1: 17.94, delay1: 10.38, cluster2: 1, throughput2: -1.38765, efficiency2: 0.9898, travelTime2: 60.02, queue2: 17.38, delay2: 9.26 },5        { demand: 'D-2', cluster1: 1, throughput1: -1.32694, efficiency1: 0.9924, travelTime1: 57.4, queue1: 19.06, delay1: 6.59, cluster2: 1, throughput2: -0.83678, efficiency2: 0.9924, travelTime2: 57.73, queue2: 31.15, delay2: 6.89 },6        { demand: 'D-3', cluster1: 1, throughput1: -1.35255, efficiency1: 0.9695, travelTime1: 65.54, queue1: 44.72, delay1: 14.58, cluster2: 1, throughput2: -0.83392, efficiency2: 0.9695, travelTime2: 63.09, queue2: 35.13, delay2: 12.13 },7        { demand: 'D-4', cluster1: 1, throughput1: -0.80618, efficiency1: 0.9712, travelTime1: 59.02, queue1: 25.4, delay1: 7.97, cluster2: 1, throughput2: -0.81109, efficiency2: 0.9729, travelTime2: 57.94, queue2: 30.69, delay2: 6.9 },8        { demand: 'D-5', cluster1: 1, throughput1: -0.81472, efficiency1: 0.9662, travelTime1: 68.35, queue1: 50.5, delay1: 17.43, cluster2: 1, throughput2: -0.28305, efficiency2: 0.9746, travelTime2: 61.89, queue2: 46.55, delay2: 10.97 },9        { demand: 'D-6', cluster1: 3, throughput1: -0.79765, efficiency1: 0.9763, travelTime1: 85.12, queue1: 80.78, delay1: 34, cluster2: 1, throughput2: -0.26307, efficiency2: 0.9882, travelTime2: 69.29, queue2: 80.27, delay2: 18.13 },10        { demand: 'D-7', cluster1: 1, throughput1: -0.26551, efficiency1: 0.9695, travelTime1: 63.25, queue1: 65.1, delay1: 12.08, cluster2: 1, throughput2: -0.27163, efficiency2: 0.9759, travelTime2: 57.98, queue2: 26.18, delay2: 6.81 },11        { demand: 'D-8', cluster1: 1, throughput1: -0.25697, efficiency1: 0.9734, travelTime1: 75.52, queue1: 79.56, delay1: 24.39, cluster2: 1, throughput2: -0.27163, efficiency2: 0.9848, travelTime2: 61.54, queue2: 52.8, delay2: 10.4 },12        { demand: 'D-9', cluster1: 3, throughput1: -0.25981, efficiency1: 0.9721, travelTime1: 92.94, queue1: 116.46, delay1: 41.77, cluster2: 1, throughput2: 0.26783, efficiency2: 0.981, travelTime2: 69.73, queue2: 89.77, delay2: 18.54 },13        { demand: 'D-10', cluster1: 3, throughput1: -0.23989, efficiency1: 0.981, travelTime1: 105.82, queue1: 138.52, delay1: 54.65, cluster2: 3, throughput2: 0.2821, efficiency2: 0.981, travelTime2: 83.82, queue2: 152.13, delay2: 32.67 },14        { demand: 'D-11', cluster1: 2, throughput1: 0.29509, efficiency1: 0.9756, travelTime1: 65.8, queue1: 75.58, delay1: 14.75, cluster2: 2, throughput2: 0.26212, efficiency2: 0.9766, travelTime2: 58.34, queue2: 42.83, delay2: 7.31 },15        { demand: 'D-12', cluster1: 2, throughput1: 0.31501, efficiency1: 0.9827, travelTime1: 76.64, queue1: 88.1, delay1: 25.45, cluster2: 2, throughput2: 0.28495, efficiency2: 0.9817, travelTime2: 64.68, queue2: 86.8, delay2: 13.49 },16        { demand: 'D-13', cluster1: 3, throughput1: 0.13858, efficiency1: 0.9198, travelTime1: 88.46, queue1: 109.78, delay1: 37.36, cluster2: 3, throughput2: 0.82441, efficiency2: 0.9746, travelTime2: 75.79, queue2: 114.13, delay2: 24.7 },17        { demand: 'D-14', cluster1: 3, throughput1: 0.29225, efficiency1: 0.9746, travelTime1: 108.05, queue1: 219.52, delay1: 56.96, cluster2: 3, throughput2: 0.81585, efficiency2: 0.9827, travelTime2: 90.24, queue2: 271.14, delay2: 39.11 },18        { demand: 'D-15', cluster1: 2, throughput1: 0.85284, efficiency1: 0.9788, travelTime1: 62.84, queue1: 98.78, delay1: 11.86, cluster2: 2, throughput2: 0.84724, efficiency2: 0.9788, travelTime2: 59.63, queue2: 74.12, delay2: 8.63 },19        { demand: 'D-16', cluster1: 2, throughput1: 0.84431, efficiency1: 0.9763, travelTime1: 76.19, queue1: 94.45, delay1: 25.11, cluster2: 2, throughput2: 1.39241, efficiency2: 0.9763, travelTime2: 67.9, queue2: 88.39, delay2: 16.81 },20        { demand: 'D-17', cluster1: 3, throughput1: 0.80731, efficiency1: 0.9653, travelTime1: 95.01, queue1: 218.29, delay1: 43.92, cluster2: 3, throughput2: 1.3496, efficiency2: 0.9856, travelTime2: 78.92, queue2: 206.66, delay2: 27.81 },21        { demand: 'D-18', cluster1: 2, throughput1: 1.41913, efficiency1: 0.984, travelTime1: 65.28, queue1: 89.34, delay1: 14.18, cluster2: 2, throughput2: 1.92616, efficiency2: 0.984, travelTime2: 61.73, queue2: 73.71, delay2: 10.62 },22        { demand: 'D-19', cluster1: 2, throughput1: 1.4049, efficiency1: 0.9804, travelTime1: 76.54, queue1: 141.4, delay1: 25.36, cluster2: 2, throughput2: -1.9214, efficiency2: 0.9731, travelTime2: 68.02, queue2: 134.48, delay2: 16.81 },23        { demand: 'D-20', cluster1: 2, throughput1: 1.98542, efficiency1: 0.9873, travelTime1: 67.19, queue1: 207.72, delay1: 16, cluster2: 2, throughput2: -1.36196, efficiency2: 0.9797, travelTime2: 65.04, queue2: 84.91, delay2: 13.85 },24        // E series25        { demand: 'E-1', cluster1: 1, throughput1: -1.88754, efficiency1: 0.9848, travelTime1: 60.74, queue1: 19.22, delay1: 10.07, cluster2: 1, throughput2: -1.38765, efficiency2: 0.9898, travelTime2: 60.34, queue2: 18.24, delay2: 9.59 },26        { demand: 'E-2', cluster1: 1, throughput1: -1.32694, efficiency1: 0.9924, travelTime1: 57.3, queue1: 45.61, delay1: 6.52, cluster2: 1, throughput2: -0.83678, efficiency2: 0.9924, travelTime2: 57.03, queue2: 19.55, delay2: 6.23 },27        { demand: 'E-3', cluster1: 1, throughput1: -1.35255, efficiency1: 0.9695, travelTime1: 65.05, queue1: 49.8, delay1: 14.08, cluster2: 1, throughput2: -0.83392, efficiency2: 0.9695, travelTime2: 62.4, queue2: 52.57, delay2: 11.45 },28        { demand: 'E-4', cluster1: 1, throughput1: -0.80618, efficiency1: 0.9712, travelTime1: 58.64, queue1: 32.28, delay1: 7.59, cluster2: 1, throughput2: -0.81394, efficiency2: 0.9729, travelTime2: 57.5, queue2: 22.88, delay2: 6.48 },29        { demand: 'E-5', cluster1: 1, throughput1: -0.80049, efficiency1: 0.9746, travelTime1: 61.81, queue1: 43.95, delay1: 10.88, cluster2: 1, throughput2: -0.2859, efficiency2: 0.9746, travelTime2: 61.81, queue2: 43.95, delay2: 10.88 },30        { demand: 'E-6', cluster1: 3, throughput1: -0.79765, efficiency1: 0.9763, travelTime1: 84.02, queue1: 71.32, delay1: 32.9, cluster2: 1, throughput2: -0.26592, efficiency2: 0.9865, travelTime2: 68.53, queue2: 83.18, delay2: 17.38 },31        { demand: 'E-7', cluster1: 1, throughput1: -0.26551, efficiency1: 0.9695, travelTime1: 63.22, queue1: 50.61, delay1: 12.06, cluster2: 1, throughput2: -0.27163, efficiency2: 0.9746, travelTime2: 57.75, queue2: 32.4, delay2: 6.59 },32        { demand: 'E-8', cluster1: 1, throughput1: -0.25128, efficiency1: 0.9759, travelTime1: 76.08, queue1: 85.79, delay1: 24.93, cluster2: 1, throughput2: -0.27163, efficiency2: 0.9835, travelTime2: 61.35, queue2: 52.38, delay2: 10.19 },33        { demand: 'E-9', cluster1: 3, throughput1: -0.25128, efficiency1: 0.9759, travelTime1: 91.91, queue1: 125.72, delay1: 40.75, cluster2: 1, throughput2: 0.27068, efficiency2: 0.981, travelTime2: 68.92, queue2: 84.55, delay2: 17.75 },34        { demand: 'E-10', cluster1: 3, throughput1: -0.23705, efficiency1: 0.9822, travelTime1: 106.12, queue1: 125.07, delay1: 54.99, cluster2: 3, throughput2: 0.2821, efficiency2: 0.981, travelTime2: 81.42, queue2: 144.92, delay2: 30.3 },35        { demand: 'E-11', cluster1: 2, throughput1: 0.29509, efficiency1: 0.9756, travelTime1: 65.19, queue1: 71.43, delay1: 14.14, cluster2: 2, throughput2: 0.26212, efficiency2: 0.9777, travelTime2: 58.71, queue2: 49.99, delay2: 7.69 },36        { demand: 'E-12', cluster1: 2, throughput1: 0.31786, efficiency1: 0.9838, travelTime1: 75.66, queue1: 92.62, delay1: 24.51, cluster2: 2, throughput2: 0.26497, efficiency2: 0.9817, travelTime2: 64.39, queue2: 52.08, delay2: 13.21 },37        { demand: 'E-13', cluster1: 3, throughput1: 0.29225, efficiency1: 0.9746, travelTime1: 87.49, queue1: 114.81, delay1: 36.43, cluster2: 2, throughput2: 0.82156, efficiency2: 0.9746, travelTime2: 72.11, queue2: 102.13, delay2: 21.03 },38        { demand: 'E-14', cluster1: 3, throughput1: 0.30078, efficiency1: 0.9777, travelTime1: 107.22, queue1: 216.86, delay1: 56.1, cluster2: 3, throughput2: 0.81585, efficiency2: 0.9756, travelTime2: 92.15, queue2: 232.04, delay2: 41.05 },39        { demand: 'E-15', cluster1: 2, throughput1: 0.85284, efficiency1: 0.9788, travelTime1: 63.06, queue1: 91.99, delay1: 12.07, cluster2: 2, throughput2: 0.82441, efficiency2: 0.978, travelTime2: 58.41, queue2: 44.53, delay2: 7.41 },40        { demand: 'E-16', cluster1: 2, throughput1: 0.84431, efficiency1: 0.9763, travelTime1: 76.05, queue1: 117.44, delay1: 24.92, cluster2: 2, throughput2: 1.39241, efficiency2: 0.9763, travelTime2: 65.67, queue2: 85.33, delay2: 14.65 },41        { demand: 'E-17', cluster1: 3, throughput1: 0.86138, efficiency1: 0.9814, travelTime1: 93.6, queue1: 207.572, delay1: 42.49, cluster2: 3, throughput2: 1.36672, efficiency2: 0.9788, travelTime2: 83.12, queue2: 252.28, delay2: 32.03 },42        { demand: 'E-18', cluster1: 2, throughput1: 1.41913, efficiency1: 0.984, travelTime1: 65.5, queue1: 88.9, delay1: 14.38, cluster2: 2, throughput2: 1.94899, efficiency2: 0.984, travelTime2: 59.87, queue2: 88.9, delay2: 8.76 },43        { demand: 'E-19', cluster1: 2, throughput1: 1.38783, efficiency1: 0.9761, travelTime1: 75.66, queue1: 128.08, delay1: 24.45, cluster2: 2, throughput2: -1.9214, efficiency2: 0.9775, travelTime2: 68.28, queue2: 145.62, delay2: 17.06 },44        { demand: 'E-20', cluster1: 2, throughput1: 1.95127, efficiency1: 0.9797, travelTime1: 68.16, queue1: 113.02, delay1: 16.99, cluster2: 2, throughput2: -1.35911, efficiency2: 0.9848, travelTime2: 62.08, queue2: 105.61, delay2: 10.89 },45        // F series46        { demand: 'F-1', cluster1: 1, throughput1: -1.88469, efficiency1: 0.9898, travelTime1: 61.34, queue1: 22.2, delay1: 10.48, cluster2: 1, throughput2: -1.38765, efficiency2: 0.9898, travelTime2: 60.09, queue2: 13.64, delay2: 9.22 },47        { demand: 'F-2', cluster1: 1, throughput1: -1.32409, efficiency1: 0.9949, travelTime1: 57.47, queue1: 23.88, delay1: 6.6, cluster2: 1, throughput2: -0.83107, efficiency2: 0.9949, travelTime2: 57.15, queue2: 29.33, delay2: 6.26 },48        { demand: 'F-3', cluster1: 1, throughput1: -1.35255, efficiency1: 0.9695, travelTime1: 65.01, queue1: 45.8, delay1: 13.99, cluster2: 1, throughput2: -0.83392, efficiency2: 0.9695, travelTime2: 62.69, queue2: 38.86, delay2: 11.94 },49        { demand: 'F-4', cluster1: 1, throughput1: -0.80049, efficiency1: 0.9746, travelTime1: 59.11, queue1: 31.59, delay1: 7.97, cluster2: 1, throughput2: -0.81109, efficiency2: 0.9763, travelTime2: 57.83, queue2: 43.29, delay2: 6.68 },50        { demand: 'F-5', cluster1: 1, throughput1: -0.81472, efficiency1: 0.9662, travelTime1: 68.48, queue1: 63.88, delay1: 17.55, cluster2: 1, throughput2: -0.28305, efficiency2: 0.9746, travelTime2: 61.75, queue2: 29.23, delay2: 10.84 },51        { demand: 'F-6', cluster1: 3, throughput1: -0.79765, efficiency1: 0.9763, travelTime1: 86.65, queue1: 120.96, delay1: 35.64, cluster2: 1, throughput2: -0.26878, efficiency2: 0.9882, travelTime2: 67.8, queue2: 58.51, delay2: 16.75 },52        { demand: 'F-7', cluster1: 1, throughput1: -0.26266, efficiency1: 0.9708, travelTime1: 62.82, queue1: 63.8, delay1: 11.71, cluster2: 1, throughput2: -0.27163, efficiency2: 0.9759, travelTime2: 58.07, queue2: 62.48, delay2: 6.95 },53        { demand: 'F-8', cluster1: 1, throughput1: -0.25128, efficiency1: 0.9759, travelTime1: 75.02, queue1: 86.4, delay1: 23.85, cluster2: 1, throughput2: -0.27163, efficiency2: 0.9822, travelTime2: 61, queue2: 54.57, delay2: 9.84 },54        { demand: 'F-9', cluster1: 3, throughput1: -0.25128, efficiency1: 0.9759, travelTime1: 91.85, queue1: 115.04, delay1: 40.65, cluster2: 1, throughput2: 0.27353, efficiency2: 0.981, travelTime2: 69.43, queue2: 81.04, delay2: 18.24 },55        { demand: 'F-10', cluster1: 3, throughput1: -0.24559, efficiency1: 0.9784, travelTime1: 105.57, queue1: 111.71, delay1: 54.31, cluster2: 3, throughput2: 0.28495, efficiency2: 0.981, travelTime2: 83.73, queue2: 177.5, delay2: 32.52 },56        { demand: 'F-11', cluster1: 2, throughput1: 0.29225, efficiency1: 0.9746, travelTime1: 65.78, queue1: 70.21, delay1: 14.76, cluster2: 2, throughput2: 0.25926, efficiency2: 0.9787, travelTime2: 57.71, queue2: 35.74, delay2: 6.68 },57        { demand: 'F-12', cluster1: 2, throughput1: 0.31501, efficiency1: 0.9827, travelTime1: 63.9, queue1: 47.67, delay1: 12.68, cluster2: 2, throughput2: 0.27924, efficiency2: 0.9827, travelTime2: 63.9, queue2: 47.67, delay2: 12.68 },58        { demand: 'F-13', cluster1: 3, throughput1: 0.29225, efficiency1: 0.9746, travelTime1: 88.63, queue1: 124.72, delay1: 37.47, cluster2: 2, throughput2: 0.82726, efficiency2: 0.9736, travelTime2: 72.33, queue2: 109.49, delay2: 21.18 },59        { demand: 'F-14', cluster1: 3, throughput1: 0.29794, efficiency1: 0.9766, travelTime1: 109.54, queue1: 234.57, delay1: 58.46, cluster2: 3, throughput2: 0.81585, efficiency2: 0.9807, travelTime2: 88.54, queue2: 288.34, delay2: 37.46 },60        { demand: 'F-15', cluster1: 2, throughput1: 0.85569, efficiency1: 0.9797, travelTime1: 63.48, queue1: 113.41, delay1: 12.42, cluster2: 2, throughput2: 0.84154, efficiency2: 0.9797, travelTime2: 59.88, queue2: 97.58, delay2: 8.81 },61        { demand: 'F-16', cluster1: 2, throughput1: 0.84431, efficiency1: 0.9763, travelTime1: 74.77, queue1: 110.71, delay1: 23.71, cluster2: 2, throughput2: 1.39241, efficiency2: 0.9763, travelTime2: 70.21, queue2: 263.73, delay2: 19.16 },62        { demand: 'F-17', cluster1: 2, throughput1: 0.86138, efficiency1: 0.9814, travelTime1: 85.39, queue1: 194.34, delay1: 34.14, cluster2: 3, throughput2: 1.32105, efficiency2: 0.9839, travelTime2: 77.15, queue2: 226.88, delay2: 25.91 },63        { demand: 'F-18', cluster1: 2, throughput1: 1.41913, efficiency1: 0.984, travelTime1: 63.12, queue1: 88.8, delay1: 11.96, cluster2: 2, throughput2: 1.93472, efficiency2: 0.984, travelTime2: 59.33, queue2: 68.06, delay2: 8.2 },64        { demand: 'F-19', cluster1: 2, throughput1: 1.36222, efficiency1: 0.9695, travelTime1: 75.71, queue1: 214.15, delay1: 24.49, cluster2: 2, throughput2: 1331, efficiency2: 0.9659, travelTime2: 71.51, queue2: 228.7, delay2: 20.31 },65        { demand: 'F-20', cluster1: 2, throughput1: 1.96835, efficiency1: 0.9835, travelTime1: 69, queue1: 224.99, delay1: 17.82, cluster2: 2, throughput2: 1546, efficiency2: 0.9816, travelTime2: 65.57, queue2: 266.95, delay2: 14.41 }66];67 68    // Populate table69    const tableBody = document.getElementById('tableBody');70    trafficData.forEach(item => {71        const row = document.createElement('tr');72        row.innerHTML = `73            <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">${item.demand}</td>74            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.cluster1}</td>75            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.throughput1.toFixed(5)}</td>76            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.efficiency1.toFixed(4)}</td>77            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.travelTime1.toFixed(2)}</td>78            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.queue1.toFixed(2)}</td>79            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.delay1.toFixed(2)}</td>80            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.cluster2}</td>81            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.throughput2.toFixed(5)}</td>82            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.efficiency2.toFixed(4)}</td>83            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.travelTime2.toFixed(2)}</td>84            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.queue2.toFixed(2)}</td>85            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${item.delay2.toFixed(2)}</td>86        `;87        tableBody.appendChild(row);88    });89 90    function create3DScatterPlot() {91const trace1 = {92            x: trafficData.map(item => item.throughput1),93            y: trafficData.map(item => item.travelTime1),94            z: trafficData.map(item => item.queue1),95            mode: 'markers',96            type: 'scatter3d',97            name: 'Case 1',98            marker: {99                size: 8,100                color: '#6366f1',101                opacity: 0.8102            }103        };104 105        const trace2 = {106            x: trafficData.map(item => item.throughput2),107            y: trafficData.map(item => item.travelTime2),108            z: trafficData.map(item => item.queue2),109            mode: 'markers',110            type: 'scatter3d',111            name: 'Case 2',112            marker: {113                size: 8,114                color: '#ec4899',115                opacity: 0.8116            }117        };118 119        const layout = {120            title: '3D Relationship: Throughput vs Travel Time vs Queue Length',121            scene: {122                xaxis: { title: 'Throughput' },123                yaxis: { title: 'Travel Time (s)' },124                zaxis: { title: 'Queue Length (m)' }125            },126            margin: {127                l: 0,128                r: 0,129                b: 0,130                t: 40131            },132            height: 500133        };134 135        Plotly.newPlot('threeDChart', [trace1, trace2], layout);136    }137 138    // Create charts139createThroughputChart();140    createEfficiencyChart();141    createTravelTimeChart();142    createQueueChart();143    createDelayChart();144    create3DScatterPlot();145function createThroughputChart() {146        const ctx = document.getElementById('throughputChart').getContext('2d');147        new Chart(ctx, {148            type: 'bar',149            data: {150                labels: trafficData.map(item => item.demand),151                datasets: [152                    {153                        label: 'Case 1 Throughput',154                        data: trafficData.map(item => item.throughput1),155                        backgroundColor: 'rgba(99, 102, 241, 0.7)',156                        borderColor: 'rgba(99, 102, 241, 1)',157                        borderWidth: 1158                    },159                    {160                        label: 'Case 2 Throughput',161                        data: trafficData.map(item => item.throughput2),162                        backgroundColor: 'rgba(236, 72, 153, 0.7)',163                        borderColor: 'rgba(236, 72, 153, 1)',164                        borderWidth: 1165                    }166                ]167            },168            options: {169                responsive: true,170                plugins: {171                    legend: {172                        position: 'top',173                    },174                    tooltip: {175                        callbacks: {176                            label: function(context) {177                                return `${context.dataset.label}: ${context.raw.toFixed(5)}`;178                            }179                        }180                    }181                },182                scales: {183                    y: {184                        beginAtZero: false185                    }186                }187            }188        });189    }190 191    function createEfficiencyChart() {192        const ctx = document.getElementById('efficiencyChart').getContext('2d');193        new Chart(ctx, {194            type: 'line',195            data: {196                labels: trafficData.map(item => item.demand),197                datasets: [198                    {199                        label: 'Case 1 Efficiency',200                        data: trafficData.map(item => item.efficiency1),201                        backgroundColor: 'rgba(99, 102, 241, 0.2)',202                        borderColor: 'rgba(99, 102, 241, 1)',203                        borderWidth: 2,204                        tension: 0.1,205                        fill: true206                    },207                    {208                        label: 'Case 2 Efficiency',209                        data: trafficData.map(item => item.efficiency2),210                        backgroundColor: 'rgba(236, 72, 153, 0.2)',211                        borderColor: 'rgba(236, 72, 153, 1)',212                        borderWidth: 2,213                        tension: 0.1,214                        fill: true215                    }216                ]217            },218            options: {219                responsive: true,220                plugins: {221                    legend: {222                        position: 'top',223                    },224                    tooltip: {225                        callbacks: {226                            label: function(context) {227                                return `${context.dataset.label}: ${context.raw.toFixed(4)}`;228                            }229                        }230                    }231                },232                scales: {233                    y: {234                        min: 0.9,235                        max: 1.0236                    }237                }238            }239        });240    }241 242    function createTravelTimeChart() {243        const ctx = document.getElementById('travelTimeChart').getContext('2d');244        new Chart(ctx, {245            type: 'bar',246            data: {247                labels: trafficData.map(item => item.demand),248                datasets: [249                    {250                        label: 'Case 1 Travel Time',251                        data: trafficData.map(item => item.travelTime1),252                        backgroundColor: 'rgba(99, 102, 241, 0.7)',253                        borderColor: 'rgba(99, 102, 241, 1)',254                        borderWidth: 1255                    },256                    {257                        label: 'Case 2 Travel Time',258                        data: trafficData.map(item => item.travelTime2),259                        backgroundColor: 'rgba(236, 72, 153, 0.7)',260                        borderColor: 'rgba(236, 72, 153, 1)',261                        borderWidth: 1262                    }263                ]264            },265            options: {266                responsive: true,267                plugins: {268                    legend: {269                        position: 'top',270                    },271                    tooltip: {272                        callbacks: {273                            label: function(context) {274                                return `${context.dataset.label}: ${context.raw.toFixed(2)}s`;275                            }276                        }277                    }278                },279                scales: {280                    y: {281                        beginAtZero: true,282                        title: {283                            display: true,284                            text: 'Seconds'285                        }286                    }287                }288            }289        });290    }291 292    function createQueueChart() {293        const ctx = document.getElementById('queueChart').getContext('2d');294        new Chart(ctx, {295            type: 'bar',296            data: {297                labels: trafficData.map(item => item.demand),298                datasets: [299                    {300                        label: 'Case 1 Queue Length',301                        data: trafficData.map(item => item.queue1),302                        backgroundColor: 'rgba(99, 102, 241, 0.7)',303                        borderColor: 'rgba(99, 102, 241, 1)',304                        borderWidth: 1305                    },306                    {307                        label: 'Case 2 Queue Length',308                        data: trafficData.map(item => item.queue2),309                        backgroundColor: 'rgba(236, 72, 153, 0.7)',310                        borderColor: 'rgba(236, 72, 153, 1)',311                        borderWidth: 1312                    }313                ]314            },315            options: {316                responsive: true,317                plugins: {318                    legend: {319                        position: 'top',320                    },321                    tooltip: {322                        callbacks: {323                            label: function(context) {324                                return `${context.dataset.label}: ${context.raw.toFixed(2)}m`;325                            }326                        }327                    }328                },329                scales: {330                    y: {331                        beginAtZero: true,332                        title: {333                            display: true,334                            text: 'Meters'335                        }336                    }337                }338            }339        });340    }341 342    function createDelayChart() {343        const ctx = document.getElementById('delayChart').getContext('2d');344        new Chart(ctx, {345            type: 'line',346            data: {347                labels: trafficData.map(item => item.demand),348                datasets: [349                    {350                        label: 'Case 1 Delay',351                        data: trafficData.map(item => item.delay1),352                        backgroundColor: 'rgba(99, 102, 241, 0.2)',353                        borderColor: 'rgba(99, 102, 241, 1)',354                        borderWidth: 2,355                        tension: 0.1,356                        fill: true357                    },358                    {359                        label: 'Case 2 Delay',360                        data: trafficData.map(item => item.delay2),361                        backgroundColor: 'rgba(236, 72, 153, 0.2)',362                        borderColor: 'rgba(236, 72, 153, 1)',363                        borderWidth: 2,364                        tension: 0.1,365                        fill: true366                    }367                ]368            },369            options: {370                responsive: true,371                plugins: {372                    legend: {373                        position: 'top',374                    },375                    tooltip: {376                        callbacks: {377                            label: function(context) {378                                return `${context.dataset.label}: ${context.raw.toFixed(2)}s`;379                            }380                        }381                    }382                },383                scales: {384                    y: {385                        beginAtZero: true,386                        title: {387                            display: true,388                            text: 'Seconds'389                        }390                    }391                }392            }393        });394    }395});