Kalkulator Shift
Diberikan satu set entitas dengan kendala, hitung jadwal shift untuk mereka yang secara maksimal menghormati kendala tersebut.
Penggunaan
Pastikan komputer Anda memiliki python yang diinstal dengan menjalankan python --version
pada baris perintah.
Jika tidak, Anda dapat mengunduh Python di sini: https://www.python.org/downloads
Saat memasang Python:
- Windows dapat mencoba membuat Anda menginstal Python dari App Store, Anda harus mengabaikan ini dan menginstal dari python.org, karena jika tidak, Anda tidak dapat menyesuaikan instalasi. Anda harus dapat menyesuaikan instalasi sehingga Anda dapat:
- Centang kotak untuk menambahkannya ke jalur! Ini akan memungkinkan terminal baris perintah Anda untuk menemukan Python saat mencoba menjalankan program.
Untuk menjalankan program:
- Unduh file
calculateShifts.py
dari rilis (Anda juga dapat menemukan sampleEntities.csv
berguna). - Arahkan ke folder yang berisi
calculateShifts.py
- Klik "File" di kiri atas dan "Buka di Windows PowerShell".
- Ketik perintah Anda. (Lihat di bawah.)
Program ini dijalankan dari baris perintah. Dibutuhkan file input dan mencatat jadwal yang dihasilkan dalam file output. Argumen berikut diperlukan:
- Entities FileName (mis.
- Tanggal mulai (yyyy-mm-dd)
- Jumlah minggu
- Hari-hari dengan shift, menggunakan huruf kecil, nama hari yang diperpendek dipisahkan dengan semi-kolon (mis.
- Jumlah minimum hari antara shift
Misalnya:
python calculateShifts.py sampleEntities.csv 2021-08-01 10 "fri;sat;sun" 6
Persyaratan File Entitas
File entitas harus menjadi file nilai-nilai yang dipisahkan koma (CSV) dengan kolom berikut:
- Nama
- Grup - Saat ini tidak digunakan oleh program, tetapi akan dimasukkan dalam output jika Anda ingin melihat bagaimana berbagai kelompok didistribusikan dalam jadwal.
- Hari -hari tidak tersedia - Tentukan hari mana dalam seminggu entitas ini tidak tersedia menggunakan huruf kecil, nama hari yang diperpendek dipisahkan dengan semi -kolon (misalnya Fri; Sat; Sun).
Lihat contoh.csv Sebagai contoh!
Keluaran
Program akan menghasilkan file output.csv dengan kolom berikut:
- Tanggal
- Hari ini
- Kelompok
- Nama
Jadwal akan berusaha untuk meminimalkan pelanggaran kendala tetapi karena kendala ini dapat bertentangan, jadwal tidak akan sempurna. Kami sarankan mengizinkan penggantian jika Anda menggunakan jadwal ini secara langsung.
Selain itu, program ini akan mencetak beberapa output debug ke konsol. Untuk setiap entitas, itu akan berbagi nunmber berkali -kali, kendala mereka dikompromikan, dan distribusi pergeseran mereka sepanjang hari yang berbeda.
Rencana Implementasi
Di bawah ini adalah beberapa detail tentang cara kerja program, jika Anda tertarik.
Kendala
Program ini tidak memastikan bahwa semua kendala dipenuhi dengan sempurna, karena itu akan membutuhkan input untuk sepenuhnya tidak kontradiktif. Sebaliknya, ini memprioritaskan jenis kendala dan upaya yang disediakan untuk meminimalkan dan mendistribusikan pelanggaran kendala tersebut di seluruh entitas yang dijadwalkan.
Dalam urutan prioritas:
- Hari -hari tidak tersedia - suatu entitas tidak boleh dijadwalkan selama satu hari bahwa itu tidak tersedia.
- Distribusi shift - pastikan bahwa semua entitas memiliki jumlah pergeseran yang kira -kira sama selama seluruh periode.
- Jumlah minimum hari antara shift - berupaya menghormati jumlah waktu minimum antara shift.
- Distribusi Hari - Cobalah untuk memastikan bahwa setiap entitas telah bergeser di berbagai hari tersedia.
Pseudocode
- Menghasilkan daftar semua shift.
- Awalnya mengurutkan entitas dari sebagian besar pembatasan hari paling sedikit.
- Untuk setiap entitas yang belum "selesai":
- Cari shift ideal berikutnya.
- Jika tidak dihuni, ambillah.
- Jika ditempati, rilekskan pembatasan dan cari perubahan ideal baru. Peningkatan jumlah kompromi entitas ini dengan 1.
- Jika kita berada di pembatasan terakhir (hari tersedia), lewati entitas ini dan tandai sebagai "dilakukan" daripada melanggar pembatasan itu.
- Periksa apakah masih ada shift yang tidak ditugaskan dan entitas yang tidak "dilakukan".
- Jika demikian, urutkan entitas berdasarkan jumlah kompromi dari sebagian besar ke paling tidak, dan kemudian lilitkan melalui mereka lagi. Ini memastikan bahwa entitas yang telah membahayakan paling banyak mendapatkan pilihan pertama setiap putaran.
- Output jadwal ke output.csv.
Struktur data yang diperlukan:
- Daftar shift dengan tanggal, hari, dan entitas yang ditugaskan
- Daftar entitas dengan nama, grup, hari tidak tersedia, jumlah kompromi, dan penanda yang dilakukan