Tugas pengiriman barang

gambar

Dalam posting ini, kita akan melihat bagaimana Flexport menggunakan matematika dan ilmu data untuk menyelesaikan masalah pengiriman dan mengirimkan barang tepat waktu dengan biaya serendah mungkin.

Pertimbangkan skenario spekulatif: pengirim memiliki sepuluh keberangkatan dan satu penerbangan tujuan untuk pengiriman apa pun. Satu-satunya keputusan yang harus diambil adalah apakah akan menetapkan setiap pengiriman untuk penerbangan tunggal ini. Jika kami tidak menetapkan beban tertentu untuk penerbangan, anggaplah mungkin untuk memindahkannya dengan cara lain.

Setiap pengiriman memiliki volume dan biaya, dan penerbangan dibatasi dalam volume. Anda mungkin menganggapnya sebagai masalah ransel yang disederhanakan. Jadi, ada 1024-1 = 1023 kemungkinan solusi (kami tidak akan mengirim pesawat kosong sama sekali).

Kita dapat membuat spreadsheet untuk mendaftar seluruh solusi dan memilih yang paling menguntungkan. Tetapi bagaimana jika Anda memiliki sepuluh keberangkatan yang sama, tetapi dua penerbangan? Ini adalah 59.049 solusi hanya dalam 10 pengiriman.

Forwarder besar memiliki lebih dari sepuluh keberangkatan dan, tentu saja, lebih dari dua penerbangan untuk dipilih, yang mengarah ke triliunan hingga triliunan solusi yang mungkin. Di antara mereka, hanya jutaan yang layak, yang berarti bahwa metode spreadsheet tradisional dapat menemukan setidaknya satu solusi yang layak. Tetapi kita tidak hanya membutuhkan solusi yang layak. Kami membutuhkan yang terbaik, solusi optimal. Bagaimana menemukan mereka di antara berbagai kemungkinan yang tak terhitung jumlahnya? Salah satu jawabannya adalah menggunakan pemrograman integer.

Pemrograman integer adalah sub-bagian dari optimasi diskrit, bidang studi operasi yang terkait dengan meminimalkan beberapa fungsi tujuan yang tunduk pada kendala. Kami ingin meminimalkan total biaya, asalkan barang dikirim tepat waktu ke tempat yang tepat, ditumpuk dalam ULD (Unit Load Device - alat pengemasan barang). Kami mengupayakan solusi optimal, tetapi dalam praktiknya terkadang kami tidak dapat mencapainya. Dalam hal ini, kami puas dengan solusi yang baik atau dekat. Di sini kita membatasi diri pada model sederhana di mana solusi optimal dapat dicapai.

Langkah pertama dalam memecahkan masalah ini adalah beralih ke literatur. Komunitas ilmiah telah berurusan dengan pengiriman barang selama bertahun-tahun. Kami menemukan beberapa karya yang sangat mengingatkan pada masalah kami. Kami mengambil banyak konsep dan notasi berikut dari karya-karya ini dan berterima kasih kepada penulis atas kontribusinya pada bidang ini.

Kita mulai dengan mendefinisikan fungsi tujuan. Untuk meminimalkan biaya, kita perlu memahami konsep bobot standar. Singkatnya, berat standar adalah berat minimum yang disetujui oleh forwarder untuk bekerja, terlepas dari berapa berat sebenarnya yang ditawarkan. Kami memiliki berat total, berat standar, dan peluang untuk kelebihan berat dan, sebaliknya, kurang berat. Bobot standar dikalikan dengan underweight, jadi kita bisa mengabaikan underweight dan fokus pada faktor kelebihan beban dikalikan dengan kelebihan beban itu sendiri.

Fungsi tujuannya adalah untuk meminimalkan biaya total, yang didefinisikan sebagai bobot total semua barang yang ditugaskan oleh ULD, dikalikan dengan faktor muatan. Misalnya, jika ULD1 memiliki 100 kilogram kemacetan dan tingkat kemacetan untuk ULD1 adalah $ 4 per kilogram, maka total biaya ULD 1 adalah $ 400. Jadi, kita perlu beberapa notasi untuk kelebihan berat badan dan nilainya.

Biarkan sajayjE β€Šadalah bobot ULD j di atas standar dancjE β€Š- faktor biaya untuk ULD yang sama. Kita perlu menghitungyjEcjE untuk semuaj . Jikaj∈1,2,3 , maka fungsi tujuan akan menjadiy1Ec1E+y2Ec2E+y3Ec3E . Itu runtuh menjadiβˆ‘yjEcjE . Kami ingin meminimalkan nilai, jadi tujuan akhir kami:

minβˆ‘jyjEcjE


Nilai untuk cjEbukan nilai yang dihitung. Parameter ini diperoleh dari spreadsheet atau database. TapiyjE kita definisikan sebagai berat total kelebihan untuk ULDj , yang dapat kita hitung sebagai total berat semua persediaan yang ditugaskan oleh ULD (menyatakannyayj ), dikurangi berat standar ULD ini. Bobot standar khusus untuk jenis ULD dan juga merupakan parameter. Biarkan sajaUjP β€Šadalah bobot standar untuk ULDj dalam kilogram. Kemudian jumlah bobot ekstra untuk ULDj didefinisikan sebagaiyjE=yjβˆ’UjP .
Berat total ULD, tentu saja, tergantung pada bobot apa yang ditugaskan pada ULD dan beratnya. Oleh karena itu, kami memerlukan ekspresi untuk menghitungnya, termasuk detail yang disebutkan di atas.

Ini hanyalah jumlah dari bobot yang ditetapkan oleh ULD. Bagaimana cara menunjukkan bahwa sejumlah barang telah ditugaskan ke ULD tertentu? Untuk melakukan ini, kita tidak perlu parameter, tetapi variabel solusi. Variabel keputusan adalah sesuatu yang dapat dikontrol oleh pemecah sambil meminimalkan fungsi objektif.

Biarkan parameternyagi mewakili berat kotor bebani dalam kilogram.
Contohnya,g4=500 berarti muatan 4 berbobot 500 kilogram.

Biarkan sajaxi,j β€Šadalah variabel keputusan yang mengambil nilai 1, jika pengirimani menugaskan ULDj dan0 sebaliknya. Jadi, ketika kita ingin menghitung semua pengiriman yang ditetapkan oleh ULD 3, kita dapat mengulang semua variabelxi,j , dimanaj=3 . Jika kami memiliki 4 pengiriman, dan nomor pengiriman 1 dan 3 ditugaskan ke ULD 3, akan terlihat seperti ini:

x1,3+x2,3+x3,3+x4,3=1+0+1+0=2

Tetapi kita membutuhkan berat total, bukan kuantitas. Untuk mendapatkannya, Anda cukup mengalikan setiap variabel solusi dengan parameter bobot. Karena variabel keputusan mengambil nilai 0, jika tidak diberi bobot, maka bobot ini disetel ulang dan tidak termasuk dalam total. Misalkan bobot untuk kargo satu hingga empat adalah 10, 50, 25, dan 5. Maka total berat dalam ULD 3 adalah:

g1x1,3+g2x2,3+g3x3,3+g4x4,3=(10)(1)+(50)(0)+(25)(1)+(5)(0)=10+25=35


Mari kita tuliskan perhitungan total berat ini secara umum. Tentukan berat total ULDj sebagai yj. Kemudiany1=g1x1,1+g2x2,1+…+gixi,1, dan y2=g1x1,2+g2x2,2+…+gixi,2. Kita dapat menciutkan ini menggunakan notasi penjumlahany1=βˆ‘gixi,1 dan y2=βˆ‘gixi,2. Karena kami ingin ini benar untuk semua kemungkinanj, kami menggunakan tanda "untuk semua": βˆ€. Ini memberi kami bentuk akhir dari batas berat total kami:

yj=βˆ‘i∈Igixi,jβˆ€j∈J



Berat ekstra


Sekarang kami memiliki berat total, kami dapat menerapkan formula kami untuk beban tambahan:

yjE=yjβˆ’UjPβˆ€j∈J



Misalnya, jika y1=1500dan dan U1P=1000kemudian berat ekstra y1E=1500βˆ’1000=500kilogram. Lipat gandakan dengan faktor biaya untuk mendapatkan hasil dalam dolar. Sepintas ini mungkin tampak cukup, tetapi bagaimana dengan kasus ketika berat total seluruh kargo untuk ULD tidak melebihi berat standar? Dalam hal ini, jika kita menggunakan rumus "sebagaimana adanya", maka kelebihan beban akan menjadi angka negatif. Misalnya, jika berat standar adalah 1650 kilogram dan berat total yang ditetapkan adalah 1.000 kilogram, maka kelebihan muatan = 1000–1650 = -650. Fungsi objektif mengalikan angka ini dengan faktor kelebihan beban dan kami mendapatkan angka negatif. Seolah pembawa membayar kami untuk pengiriman kurang dari biaya berat standar.

Inilah yang benar-benar kita inginkan:max(yjE,0).
Ini sama dengan hanya menetapkan 0 untuk variabel, yang sesederhana membuat batasanyjE>=0.

yjE>=yjβˆ’UjPβˆ€j∈J, yjE>=0βˆ€j∈J

Jadi, kami mengimplementasikan fungsi max () dalam pemrograman matematika: a = max (b, c), yaitu, a> = b && a> = c. Mari kita lihat definisi kita.
Fungsi objektif:minβˆ‘jyjEcjE
cjE: Rasio Kelebihan ULD j
yjE: Kelebihan ULD j;

Source: https://habr.com/ru/post/undefined/


All Articles