Hotel Ketersediaan dan Cadangan Bilik Algoritma @ MMT

Di MakeMyTrip, kami menyediakan pelbagai pembeli hotel dan membantu mereka memuktamadkan pelan memandangkan keperluan perjalanan, penghunian dan keperluan perjalanan mereka yang pelbagai. Bahawa dikatakan, dua keperluan pengguna yang paling penting yang mesti dipenuhi untuk semua adalah sama - ketersediaan hotel dan harga bilik seperti anggaran. Di dalam posting blog ini, kami berkongsi beberapa pandangan tentang bagaimana kami meningkatkan ketersediaan hotel secara keseluruhan di platform kami dan menggunakan pengaturcaraan dinamik untuk menyelesaikan masalah mencari 'kombinasi termurah bilik' untuk menjadikan penawaran lebih berkuasa dan berguna kepada pelanggan kami.

Mula-mula kita faham mengapa ketersediaan hotel dan harga bilik, terutama yang paling murah, sangat penting.

Ketersediaan Hotel: Ia amat penting untuk menunjukkan hotel yang cukup pelanggan untuk dipilih di halaman penyenaraian hotel. Sifar atau rendahnya hotel mengakibatkan banyak pelanggan turun di halaman penyenaraian itu sendiri, yang membawa kepada kerugian perniagaan yang berpotensi.

Harga bilik: Kebanyakan pelancong membandingkan harga bilik untuk sebuah hotel di seluruh agensi perjalanan dalam talian (OTAs) dan melakukan transaksi di OTA yang menawarkan harga termurah. Memandangkan sebilangan besar tempahan berlaku di bilik dengan harga termurah, ia menjadi penting untuk menunjukkan / menyerlahkan harga bilik paling murah di halaman butiran hotel untuk membantu pelanggan membuat keputusan segera.

Ketersediaan Hotel Rendah

Masalah Penemuan

Di MakeMyTrip, kami mencatat banyak data dan menganalisisnya secara teratur untuk menghasilkan pandangan yang boleh dilihat. Salah satu daripada penemuan baru-baru ini ialah ketersediaan hotel yang rendah atau sifar di halaman penyenaraian hotel untuk sejumlah besar carian bandar. Terdapat dua alasan untuk ini:

  • Kurang inventori yang tersedia semasa musim puncak / hujung minggu yang panjang
  • Kadar yang hilang dalam sistem inventori MakeMyTrip untuk penghunian yang diminta (cth. Hotelier belum menetapkan kadar untuk 3 orang dewasa)

Mari kita ambil contoh untuk memahami perkara ini dengan lebih baik. Diberikan di bawah adalah gambaran inventori yang dimuat naik oleh hotelier dalam sistem kami untuk hotel 'X' (A berdiri untuk orang dewasa dan C untuk anak).

Rajah (1): Petikan inventori

Carian pengguna 1 (2 Bilik: Bilik 1-1A, Bilik 2-1A) - Dalam kes ini, walaupun kami mempunyai 3 bilik (walaupun jenis yang berbeza) yang tersedia, kami telah kembali ketersediaan sifar hotel kerana kami sepadan dengan kriteria carian terhadap setiap jenis bilik dan tiada jenis bilik mempunyai bilangan inventori ≥2.

Carian Pengguna 2 (Room 1-3A) - Dalam kes ini juga, kami telah mengembalikan ketersediaan sifar hotel kerana hotel tidak mengkonfigurasi kadar untuk kriteria carian di atas.

Dalam kedua-dua kes, terdapat cara untuk memenuhi kriteria carian pengguna dengan menggabungkan pelbagai jenis bilik. Masalahnya menjadi lebih kompleks kerana setiap hotel mempunyai ambang umur anak sendiri dan harga yang sepadan.

Penyelesaian tiga perkara

  1. Ubah kriteria carian - Kami berhenti memadankan kriteria carian pengguna yang tepat terhadap setiap jenis bilik dan mula mencari dengan permintaan carian yang diubah. Hal ini terutama dilakukan untuk carian hunian yang lebih tinggi adalah pada umumnya rendah.
  2. Membangun algoritma gabungan bilik paling murah - Bagi pelanggan kami, tawaran termurah adalah yang terbaik. Untuk membantu menyelesaikan masalah ini dan masalah ketersediaan hotel, masuk akal untuk membina algoritma untuk membentangkan pengguna dengan kombinasi bilik paling murah.
  3. Minta para pengusaha hotel mengkonfigurasi harga untuk penghunian yang lebih tinggi - Memandangkan 60% pengguna bergerak solo atau sebagai pasangan, pengusaha hotel mengoptimumkan kadar dan persediaan untuk penghunian tunggal dan berganda. Untuk membantu pelanggan mendapatkan hasil carian yang lebih baik untuk penghunian> 2, kami meminta para pengusaha untuk mengkonfigurasi semua kombinasi penghuni mungkin yang mereka dukung.

Berikut adalah cara kami menganggap penyelesaian keseluruhan harus berfungsi.

Rajah (2): Rajah Aliran

(1) dan (2) diserlahkan dalam warna hijau. Bergantung pada saluran hotel sedang dimakan, kami mungkin atau mungkin tidak mempunyai maklumat yang diperlukan untuk menjalankan algoritma kombinasi bilik paling murah. Untuk menangani kes-kes seperti ini, kami telah membina beberapa algoritma tambahan untuk menghasilkan / meramalkan data yang diperlukan (kiraan inventori menjadi salah satu daripada mereka).

Kesan Perniagaan

Kami melaksanakan kedua-dua (1) dan (2). Seperti yang dijangkakan, ketersediaan hotel semakin meningkat pada halaman penyenaraian kami untuk permintaan carian melebihi 2 orang dewasa. Kami juga mula mendapat 5 malam tambahan malam setiap hari. Secara keseluruhannya, terdapat lompongan lebih daripada 50% dalam jumlah tempahan yang mempunyai lebih daripada 2 Dewasa.

Rajah (3): Trend tempahan sebelum dan selepas pelepasan ciri

Cabaran dan pendekatan komputasi

Masalah cadangan ruang paling murah adalah masalah pengoptimalan gabungan.

Diberi bilik hotel N dan tetamu P (dewasa + kanak-kanak), dapatkan kombinasi bilik paling murah untuk menampung tetamu P.

Untuk menjalankan algoritma pengoptimuman, kami perlu mendapatkan atribut data yang diperlukan untuk:

  • Buatkan semua kemungkinan penginapan untuk bilik
  • Kira harga untuk kes tersebut

Untuk ini, kami mula memakan sifat hotel dan tingkat bilik seperti ambang usia kanak-kanak, maksimum orang dewasa / kanak-kanak yang dibenarkan di dalam bilik, kiraan ketersediaan setiap jenis bilik, harga dewasa tambahan dan lain-lain. Setiap hotelier boleh mengkonfigurasikan butiran tarifnya secara berasingan seperti, sehingga ia tidak akan mengenakan bayaran tambahan (penghunian asas), untuk umur kanak-kanak yang dia akan mempertimbangkan tetamu sebagai anak, harga kanak-kanak tambahan, harga dewasa tambahan, dewasa dewasa / kanak-kanak yang boleh ditampung di setiap bilik. Semua ini perlu dijaga semasa menjana dan mengira harga setiap bilik dan penghunian. Mengendalikan atribut ini meningkatkan komputasi pelbagai fungsi. Cabaran tambahan adalah untuk menjaga kerentanan carian api utuh. Pengiraan ini akan dilakukan secara real time dan untuk permintaan yang mengandungi 200-250 hotel.

Walaupun kita sentiasa mempunyai pengaturcaraan yang dinamik untuk menyelesaikan masalah ini, kami telah mempertimbangkan penyelesaian kekerasan dan beberapa pendekatan tamak untuk melihat sama ada mereka telah mencukupi / bekerja untuk kes penggunaan kami.

Penyelesaian Brute Force: Ini melibatkan penciptaan setiap kombinasi yang mungkin bagi inventori yang diberikan dengan semua pelan tarif. Bilik-bilik ini kemudiannya perlu dipenuhi dengan kombinasi penghuni yang berbeza. Ini mengakibatkan kerumitan masa eksponen.

Rajah (4): Pendekatan kekerasan berlaku dalam kerumitan masa eksponen

Ini boleh dilaksanakan tetapi tidak boleh diukur. Juga ia akan menambah latensi ketara carian api.

Pendekatan tamak: Kami meneroka beberapa strategi tetapi mendapati satu kes di kaunter. Masalah asas adalah bahawa kita tidak mempunyai bilik yang disusun mengikut harga dan penghunian penginapan. Tambahan pula, mana-mana bilik superior / suite boleh menampung lebih ramai orang berbanding dengan bilik standard.

Algoritma Gabungan Bilik Termurah

Marilah kita faham beberapa istilah dan notasi sebelum kita melompat ke algoritma.

Rajah (5): Terminologi untuk Algoritma Gabungan Bilik Termurah

Kami memodelkan masalah untuk mencari kombinasi bilik paling murah di sekitar masalah 0-1 knapsack yang sangat terkenal. Item (N) dan berat (W) dalam masalah knapsack longgar peta ke set bilik fizikal di hotel dan kombinasi penghunian yang berbeza (bermula dari 0 dan membawa kepada penghuni yang diminta). Walau bagaimanapun, ada kekangan yang unik dalam kes kami yang memerlukan pengendalian khas.

  1. Sub-item / Bilik maya: Setiap item unik dalam masalah knapsack 0-1 tetapi itu tidak benar dalam kes kami. Bilik fizikal (item) perlu dipertimbangkan dengan semua kemungkinan pendudukan dan tarif untuk memastikan keunikan dalam set item. Ini menghasilkan penciptaan bilik maya untuk setiap bilik fizikal. N dalam masalah knapsack 0-1 sebenarnya peta ke set bilik maya dalam kes kami.
  2. Memastikan bilik fizikal digunakan sekali: Ini adalah implikasi langsung (1). Walaupun kita menggunakan bilik maya untuk semua pengiraan dan keputusan dalam algoritma, perlu memastikan bahawa bilik fizikal hanya digunakan sekali untuk setiap kombinasi bilik dan perlu mencari alternatif yang terbaik dalam hal sebarang konflik.
  3. Kes giliran sambil mengisi penghunian yang tinggal: Kami terpaksa mengendalikan beberapa kes kelebihan sementara merujuk kepada sub-masalah yang telah diselesaikan sudah. contohnya. banyak hotel tidak membenarkan tempahan dengan bilik yang mempunyai anak-anak sahaja. Kita juga perlu mengendalikan kes di mana kita telah memenuhi penghunian orang dewasa melalui bilik maya dan hanya penghunian kanak-kanak yang tinggal.

Langkah-langkah Utama Membina Algoritma

  1. Dapatkan hasil permintaan carian yang diubah.
  2. Buat matriks 2 dimensi T dengan semua ruang bilik mungkin sebagai ruangan (W) dan bilik maya sebagai baris (N).
  3. Di setiap sel matriks 2 dimensi, kita mempertimbangkan dua kemungkinan - untuk memilih bilik maya yang bersesuaian sebagai sebahagian daripada penyelesaian optimum atau untuk membuangnya. Kami mengira kos yang dikaitkan dengan dan tanpa bilik maya itu dan memilih yang paling murah. Setiap sel matriks menyimpan ciri-ciri utama bilik yang digunakan untuk memenuhi penghunian sel tersebut.

Matriks diisi dengan cara bawah dengan menggunakan hubungan berulang di bawah:

Rajah (6): Formula Pengiraan

4. Pulangkan hasil selepas melintasi matriks.

Contoh:

Rajah (7): Butiran tahap Bilik / Tarif

Untuk parameter input di atas, matriks 2 dimensi berikut akan diwujudkan. Lajur dalam oren menangkap harga yang sepadan dengan setiap bilik maya seperti konfigurasi yang dilakukan oleh hotelier.

Rajah (8): Matriks 2D yang menunjukkan penyertaan untuk 3 Dewasa dan 2 Kanak-kanak. Penyertaan Null telah ditandakan sebagai 'X'.

Sel-sel yang diserlahkan di hijau menunjukkan kombinasi bilik paling murah untuk kriteria carian yang ditentukan. Pengecam bilik yang disebut di dalam sel menggambarkan bilik-bilik yang perlu dipertimbangkan dan subskrip mereka menentukan penghunian setiap bilik. Sel-sel yang diserlahkan dengan warna biru adalah yang digunakan untuk mengira sel hijau secara rekursif (menggunakan hubungan berulang yang disebutkan di atas).

Algoritma ini berfungsi dengan baik dalam pengeluaran tanpa memberi kesan terhadap latency persentil 99 dari API carian kami. Walaupun selepas caching keputusan cadangan ini, kami masih memproses sekitar 15K kombinasi hotel unik setiap minit.

Terima kasih kepada Ajay Singh dan Abhijeet Sharad untuk membantu merangka blog ini.