Mixed Traffic Simulator
Simulator lalu lintas yang menunjukkan aturan satu motor setara 0,25 mobil bergantung pada cara mengukurnya

- metode estimasi diuji terhadap satu kebenaran
- 5
- faktor sepeda motor terpublikasi, direproduksi dan ditampilkan
- −0,11
- kecepatan terukur kemacetan hantu
- −8,6 km/jam
- selisih antar metode, padahal kebenarannya datar
- +16 sampai −30
Di halaman ini
Masalahnya
Perencana jalan di Indonesia menghitung kapasitas jalan dengan manual tahun 1997, MKJI. Manual ini mengubah setiap kendaraan menjadi satuan mobil penumpang dengan faktor tetap, dan satu sepeda motor dihitung 0,25 atau 0,5 mobil tergantung jenis jalannya. Dua dekade studi lapangan di Indonesia mengukur faktor yang katanya "tetap" itu di angka 0,198, 0,32, 0,35, 0,4, dan 0,84. Satu studi regresi di Denpasar bahkan mendapat −0,11 pada agregasi satu jam, angka yang secara fisik tidak bermakna.
Dampaknya langsung ke anggaran. Di satu bundaran, jam sibuk yang sama bisa bernilai tingkat pelayanan C dengan satu metode dan F dengan metode lain. Layak atau gagal tergantung metode mana yang dipilih, dan itu menentukan apakah sebuah intervensi didanai. Studi lapangan tidak bisa menjawabnya, karena tidak ada yang bisa memutar ulang jam lalu lintas yang sama tanpa sepeda motor.
Yang saya bangun
Eksperimen terkendali yang tidak mungkin dilakukan di jalan
Simulator menjalankan arus lalu lintas dengan porsi sepeda motor yang diketahui. Lalu skenario yang persis sama diputar ulang dengan setiap sepeda motor diganti mobil, dan kapasitasnya dibandingkan. Perbandingan itulah jawaban sebenarnya. Setelah itu, setiap metode estimasi yang sudah dipublikasikan diterapkan pada arus yang sama, dan layar menunjukkan metode-metode itu saling berselisih sekaligus berselisih dengan jawaban yang sudah ada.
Estimator hanya melihat apa yang dilihat pengamat di pinggir jalan
Argumennya runtuh kalau metode estimasi bisa curang. Saya memisahkannya dari kode simulasi, dan build gagal kalau estimator mencoba mengaksesnya. Estimator hanya menerima apa yang bisa dicatat petugas lapangan: kapan kendaraan melintasi garis, jenisnya menurut pengamatan mata, kecepatan sesaatnya, berapa lama ia menempati detektor, dan posisinya melintang jalan. Metode yang tahu kecepatan dan identitas sebenarnya bukan lagi metode yang dipakai para insinyur. Satu-satunya pengecualian adalah eksperimen penggantian dengan mobil, karena kebenaran lapangan memang hal yang tidak bisa didapat pengamat.
Setiap hasil bisa dibagikan dan diputar ulang persis
Fisikanya berjalan dalam langkah tetap 0,05 detik, terpisah dari proses menggambar, sehingga hasilnya tidak bergantung pada perangkat pengguna. Semua keacakan berasal dari satu sumber ber-seed. Seluruh state, termasuk skenario, parameter, seed, dan jendela agregasi, muat di dalam tautan. Hasil yang mengejutkan menjadi URL yang bisa mereproduksinya, dan sweep batch bisa dibangkitkan ulang dari seed-nya.
Pilihan model disebut di layar
Belum ada model baku untuk lalu lintas yang mengabaikan marka lajur, seperti perilaku sepeda motor di Indonesia. Jadi saya menyediakan tiga aturan gerak menyamping: lajur ketat, mencari celah, dan model gaya sosial. Aturan yang aktif selalu disebut di layar. Model gaya sosial tidak punya rujukan di literatur lalu lintas, dan antarmukanya menyebutkan itu sebagai catatan.
Hasil yang mustahil tetap ada di grafik
Saat estimator menghasilkan faktor sepeda motor yang negatif, saya menggambarnya di bawah sumbu lengkap dengan peringatan. Angka itu tidak disembunyikan atau dipotong ke nol. Justru angka itulah hasil paling meyakinkan yang dimiliki aplikasi ini.
Hasilnya
Simulator ini sudah live dan terbuka untuk umum. Skenario phantom jam menempatkan 22 kendaraan di jalan melingkar 230 meter tanpa penyempitan. Kemacetan tetap terbentuk hanya dari jeda reaksi dan merambat ke belakang, terukur di aplikasi pada −8,6 km/jam, mereproduksi eksperimen yang sudah dipublikasikan. Bangku ekuivalensi memplot lima metode terhadap porsi sepeda motor. Kebenaran lapangan nyaris datar, sementara metode regresi dan kecepatan berayun dari +16 sampai −30 dan mereproduksi −0,11 pada agregasi lebar. Sebuah inspektor menampilkan hitungan mengemudi secara langsung untuk kendaraan mana pun yang dipilih. Saya membangun versi pertamanya sendiri dalam dua hari pada September 2026, lalu terus mengerjakannya sepanjang sisa bulan itu untuk desain ulang, perbaikan aksesibilitas, serta dukungan mobile dan keyboard.
Aplikasi ini menyatakan dengan jelas bahwa ia bukan model terkalibrasi untuk ruas jalan tertentu dan bukan pengganti perangkat lunak lalu lintas profesional. Tugasnya menunjukkan sebuah asumsi yang gagal.
Di balik layarDetail teknis untuk engineer
src/estimators/tidak bisa meng-importsrc/sim/, ditegakkan oleh aturan ESLintno-restricted-importsdi CI sebelum deploy. Estimator hanya menerima satu tipe,DetectorRecord.src/truth/substitution.tsadalah pengecualian yang terdokumentasi.- Lima metode: substitusi kebenaran lapangan, time headway, regresi berganda, regresi kecepatan, dan occupancy time. Jendela agregasi 3, 5, 15, dan 60 menit.
- Car-following memakai Intelligent Driver Model. Aturan lateral: lajur ketat dengan MOBIL, sublane pencari celah, dan potensial gaya sosial; field
citationuntuk gaya sosial bernilainull. Math.randomdilarang di seluruh repo lewat lint; PRNG ber-seed ada disrc/sim/rng.ts.- Phantom jam mereproduksi Sugiyama dkk. (2008) dan menjadi gerbang build sekaligus tes regresi. Bundaran Tirosa (LOS C dengan ekuivalensi occupancy time, F dengan MKJI) dikutip di spesifikasi.
- Asersi tanpa tumpang tindih berjalan di setiap langkah, dengan jarak lateral yang diselesaikan secara iteratif saat bersentuhan. Tiga commit khusus memperbaiki tabrakan.
- Canvas menggambar jalan, diagram ruang–waktu, dan heatmap kecepatan; diagram ruang–waktu melukis satu kolom piksel per interval ke canvas offscreen. SVG menggambar diagram fundamental, bangku ekuivalensi, plot discharge, dan penampang melintang, dengan sumbu yang dihitung sendiri di
src/views/render/axis.ts. - Simulasi interaktif tetap di main thread pada 400 kendaraan; sweep batch berjalan di Web Worker yang bisa dibatalkan. Lintasan bisa diekspor ke CSV.
- Enam skenario (phantom jam, koridor, penyempitan, simpang bersinyal, angkot, bench), empat kelas kendaraan (MC, LV, HV, PU), dan toggle Ruang Henti Khusus dengan plot discharge untuk arus jenuh dan headway.
- Kecepatan ditampilkan lewat kecerahan dan jenis kendaraan lewat bentuk; warna hanya untuk kelima estimator. Peregangan sumbu melintang di tampilan jalan dibatasi dan dicetak di pojok.
- Empat dependensi runtime: React 18.3, React DOM, dan dua paket font Overpass. Tanpa library fisika, grafik, simulasi, atau state. Sekitar 91 KB JS utama gzip ditambah chunk baked-sweep 7 KB, dan CSS 9,5 KB gzip, dari anggaran 300 KB; chunk sweep-worker dimuat belakangan dan tidak termasuk dalam angka itu.
- 170 tes di 15 file. Engine di
src/sim/sepanjang 4.915 baris, murni dan headless; modul estimator terpisah sepanjang 759 baris. Sekitar 15.500 baris disrc/dan 67 commit antara 2 dan 28 September 2026.
Tangkapan layar
Sedang merekrut, atau membangun hal serupa?
Saya terbuka untuk posisi full-time dan proyek freelance tertentu.