Inspiration
Tsunami Palu 2018 tiba sekitar 2 menit setelah gempa. Di Padang, 13 gedung evakuasi hanya menampung ±30.550 orang dari ≥400.000 calon korban (±7,6%). Ada 5.744 desa rawan tsunami di Indonesia, tetapi baru 29 komunitas yang diakui Tsunami Ready oleh UNESCO-IOC.
Kami sadar masalahnya bukan hanya sirene. Sekalipun peringatan berbunyi tepat waktu, warga yang terlalu jauh dari tempat aman tetap tidak sempat:
$$ t_{\text{respons}} + t_{\text{tempuh}} > t_{\text{tiba}} \;\Rightarrow\; \text{tidak sempat} $$
Pertanyaan itulah yang menjadi nama produk kami: siapa yang tidak sempat, dan apa yang bisa dilakukan?
What it does
SEMPAT adalah PWA dengan tiga peran yang memakai satu mesin hitung:
- Perencana BPBD: peta waktu evakuasi per rumah (grid 30 m, pita 3 menit), daftar warga yang tidak sempat, perbandingan usulan gedung atau shelter baru, dan Paket Bukti Tsunami Ready (12 indikator UNESCO-IOC, bisa dicetak ke PDF).
- Petugas: dasbor isi tiap shelter secara langsung dan daftar warga yang belum tiba.
- Warga: peringatan (SSE + Web Push), satu arah jelas ke shelter yang masih muat, dan lantai aman yang harus dicapai. Tabel rute tersimpan di ponsel sehingga tetap jalan tanpa internet.
How we built it
- Backend: Python + FastAPI. Data jalan dan gedung dari OpenStreetMap (Overpass), elevasi dari AWS Terrain Tiles / Copernicus DEM, gempa dari BMKG.
- Waktu tempuh: graf jalan dengan kecepatan berjalan fungsi Tobler, $$v = 6\,e^{-3.5\,\lvert S + 0.05 \rvert}\ \text{km/jam}$$ diskalakan untuk kelompok rentan (±0,5 m/s) dan tangga (0,21 m/s). Kami memakai Dijkstra multi-sumber terbalik: pencarian dimulai dari semua tempat aman sekaligus, sehingga seluruh rumah terhitung dalam satu putaran.
- Shelter vertikal: lantai aman = lantai di atas genangan + 1 lantai cadangan (pedoman Jepang 2005). Kapasitas mengikuti FEMA P-646: $$C = \left\lfloor \frac{0.5 \cdot A_{\text{lantai}}}{0.93\ \text{m}^2} \right\rfloor$$ Hanya gedung terverifikasi yang dijadikan tujuan rute.
- Alokasi berkapasitas: program linear leksikografis (HiGHS lewat SciPy). Urutan prioritasnya: (1) sesedikit mungkin orang tanpa tujuan, (2) sesedikit mungkin yang terlambat, (3) total waktu tempuh terkecil. Kapasitas adalah batas keras. Hasil dibulatkan tanpa melanggar kapasitas, lalu divalidasi ulang secara independen.
- Frontend: HTML/CSS/JS tanpa build step, MapLibre GL JS, service worker untuk mode offline.
Challenges we ran into
- Peringatan vs. optimasi: di versi awal, peringatan tertahan menunggu perhitungan (±16,4 detik). Sekarang peringatan dikirim dulu (±0,003 detik), baru alokasi dihitung.
- Shelter kelebihan muatan: rute "terdekat" bisa mengirim hingga 160× kapasitas ke satu titik. Alokasi LP menurunkan pelanggaran menjadi 0.
- Gedung tinggi ≠ shelter: data OSM sering tidak punya jumlah lantai. Kami memutuskan hanya gedung terverifikasi yang dijadikan tujuan, dan margin elevasi dibuat konservatif (0/3/5 m).
- Ukuran data di HP: paket offline warga turun dari 1,66 MB menjadi 53 KB (gzip).
Accomplishments that we're proud of
Pada skenario uji sintetis (19,6 ribu simpul, 150 shelter, 20 ribu orang):
- warga terlambat turun 58% (13.622 → 5.747) dan total waktu tempuh turun 37%;
- alokasi selesai dalam ±6,2 detik;
- hasilnya sama persis dengan solusi MILP optimal di 1.500 kasus acak.
Kode diuji dengan 226 uji Python, 54 uji end-to-end, dan 50 cek tampilan peta.
What we learned
- Dalam evakuasi, yang menentukan bukan jarak di peta, melainkan waktu lewat jalan nyata dengan kecepatan orang yang paling lambat.
- Setiap asumsi keselamatan harus konservatif dan terlihat oleh pengguna. Angka hasil model diberi label, bukan disembunyikan.
- Sistem darurat harus tetap berguna saat komponennya gagal: tanpa internet, tanpa solver, tanpa data lengkap.
What's next for SEMPAT
- Pilot 12 bulan di Tambakrejo, Kab. Malang (Tsunami Ready 2022): bandingkan waktu tempuh model dengan latihan evakuasi nyata.
- Uji dengan data populasi HRSL asli dan di ponsel Android nyata.
- Model B2G: langganan per desa untuk BPBD, dengan target 150 desa di pesisir selatan Jawa pada 2029. Aplikasi warga tetap gratis.
Built With
- aws-terrain-tiles
- bmkg
- copernicus-dem
- css3
- fastapi
- google-earth-engine
- google-open-buildings
- highs
- html5
- javascript
- maplibre-gl-js
- nominatim
- numpy
- openstreetmap
- overpass-api
- playwright
- pwa
- pydantic
- python
- scipy
- server-sent-events
- service-worker
- uvicorn
- web-push
Log in or sign up for Devpost to join the conversation.