เครื่องคิดเลขเปลี่ยน
กำหนดชุดของเอนทิตีที่มีข้อ จำกัด ให้คำนวณตารางการเปลี่ยนแปลงสำหรับพวกเขาที่เคารพข้อ จำกัด เหล่านั้นมากที่สุด
การใช้งาน
ตรวจสอบให้แน่ใจว่าคอมพิวเตอร์ของคุณติดตั้ง Python โดยใช้ python --version
บนบรรทัดคำสั่ง
หากไม่เป็นเช่นนั้นคุณสามารถดาวน์โหลด Python ได้ที่นี่: https://www.python.org/downloads
เมื่อติดตั้ง Python:
- Windows อาจพยายามให้คุณติดตั้ง Python จาก App Store คุณควรเพิกเฉยต่อสิ่งนี้และติดตั้งจาก Python.org เนื่องจากไม่เช่นนั้นคุณไม่สามารถปรับแต่งการติดตั้งได้ คุณต้องสามารถปรับแต่งการติดตั้งเพื่อให้คุณสามารถ:
- ทำเครื่องหมายในช่องเพื่อเพิ่มลงในเส้นทาง! สิ่งนี้จะช่วยให้เทอร์มินัลบรรทัดคำสั่งของคุณค้นหา Python เมื่อพยายามเรียกใช้โปรแกรม
เพื่อเรียกใช้โปรแกรม:
- ดาวน์โหลดไฟล์
calculateShifts.py
จากรุ่น (คุณอาจพบ sampleEntities.csv
มีประโยชน์) - นำทางไปยังโฟลเดอร์ที่มี
calculateShifts.py
- คลิก "ไฟล์" ที่ด้านบนซ้ายและ "เปิดใน Windows PowerShell"
- พิมพ์คำสั่งของคุณ (ดูด้านล่าง)
โปรแกรมนี้เรียกใช้จากบรรทัดคำสั่ง ต้องใช้ไฟล์อินพุตและบันทึกกำหนดการที่สร้างขึ้นในไฟล์เอาต์พุต จำเป็นต้องมีข้อโต้แย้งต่อไปนี้:
- ชื่อไฟล์เอนทิตี (เช่น foo.csv) - นี่คือไฟล์อินพุตของคุณดูข้อกำหนดด้านล่างสำหรับสิ่งที่ควรมีลักษณะ
- วันที่เริ่มต้น (yyyy-mm-dd)
- จำนวนสัปดาห์
- วันที่มีการเปลี่ยนแปลงโดยใช้ตัวพิมพ์เล็กชื่อวันที่สั้นลงคั่นด้วยกึ่งโคโลย
- จำนวนวันต่ำสุดระหว่างกะ
ตัวอย่างเช่น:
python calculateShifts.py sampleEntities.csv 2021-08-01 10 "fri;sat;sun" 6
ข้อกำหนดไฟล์เอนทิตี
ไฟล์เอนทิตีควรเป็นไฟล์ค่าที่คั่นด้วยเครื่องหมายจุลภาค (CSV) พร้อมคอลัมน์ต่อไปนี้:
- ชื่อ
- กลุ่ม - ไม่ได้ใช้งานในปัจจุบันโดยโปรแกรม แต่จะรวมอยู่ในผลลัพธ์ในกรณีที่คุณต้องการดูว่ากลุ่มที่แตกต่างกันมีการกระจายในตาราง
- วันที่ไม่พร้อมใช้งาน - ระบุว่าวันใดของสัปดาห์ที่นิติบุคคลนี้ไม่สามารถใช้งานได้โดยใช้ตัวพิมพ์เล็กชื่อวันที่สั้นลงคั่นด้วยกึ่งโคโลยร์ (เช่นวันศุกร์; SAT; Sun)
ดูตัวอย่างตัวอย่าง!
เอาท์พุท
โปรแกรมจะส่งออกไฟล์ CSV ด้วยคอลัมน์ต่อไปนี้:
- วันที่
- วันของสัปดาห์
- กลุ่ม
- ชื่อ
กำหนดการจะพยายามลดการละเมิดข้อ จำกัด แต่เนื่องจากข้อ จำกัด เหล่านี้อาจเกิดความขัดแย้งกำหนดเวลาจะไม่สมบูรณ์แบบ เราขอแนะนำให้อนุญาตการทดแทนหากคุณใช้กำหนดการนี้โดยตรง
นอกจากนี้โปรแกรมจะพิมพ์เอาท์พุทการดีบักบางอย่างไปยังคอนโซล สำหรับแต่ละเอนทิตีมันจะแบ่งปัน Nunmber ของครั้งที่ข้อ จำกัด ของพวกเขาถูกบุกรุกและการกระจายของการเปลี่ยนแปลงของพวกเขาในวันที่แตกต่างกัน
แผนการดำเนินการ
ด้านล่างนี้เป็นรายละเอียดบางอย่างเกี่ยวกับวิธีการทำงานของโปรแกรมหากคุณสนใจ
ข้อ จำกัด
โปรแกรมนี้ไม่มั่นใจว่าข้อ จำกัด ทั้งหมดจะได้รับการตอบสนองอย่างสมบูรณ์แบบเนื่องจากต้องการอินพุตที่จะไม่ขัดแย้งอย่างสมบูรณ์ แต่จะจัดลำดับความสำคัญประเภทของข้อ จำกัด และความพยายามที่จะลดและแจกจ่ายการละเมิดข้อ จำกัด เหล่านั้นอย่างเท่าเทียมกันในหน่วยงานที่กำหนด
ตามลำดับความสำคัญ:
- วันที่ไม่พร้อมใช้งาน - ไม่ควรกำหนดนิติบุคคลสำหรับวันที่ไม่มีให้บริการ
- การกระจายการเปลี่ยนแปลง - ตรวจสอบให้แน่ใจว่าเอนทิตีทั้งหมดมีจำนวนการเปลี่ยนแปลงที่เท่ากันตลอดระยะเวลาทั้งหมด
- จำนวนวันต่ำสุดระหว่างกะ - พยายามที่จะเคารพระยะเวลาขั้นต่ำระหว่างการเปลี่ยนแปลง
- การกระจายวัน - พยายามให้แน่ใจว่าแต่ละเอนทิตีมีการเปลี่ยนแปลงในช่วงเวลาที่หลากหลาย
Pseudocode
- สร้างรายการของกะทั้งหมด
- เริ่มต้นการจัดเรียงเอนทิตีจากข้อ จำกัด ส่วนใหญ่ไปจนถึงวันน้อยที่สุด
- สำหรับแต่ละเอนทิตีที่ไม่ "เสร็จ":
- มองหาการเปลี่ยนแปลงในอุดมคติต่อไป
- ถ้าไม่มีการว่างงานให้เอาไป
- หากมันถูกครอบครองให้ผ่อนคลายข้อ จำกัด และมองหาการเปลี่ยนแปลงในอุดมคติใหม่ เพิ่มจำนวนการประนีประนอมของเอนทิตีนี้ด้วย 1
- หากเราอยู่ในข้อ จำกัด ครั้งสุดท้าย (มีวัน) ให้ข้ามเอนทิตีนี้และทำเครื่องหมายว่า "เสร็จสิ้น" แทนที่จะละเมิดข้อ จำกัด นั้น
- ตรวจสอบว่ายังมีการเปลี่ยนแปลงที่ไม่ได้ออกแบบและเอนทิตีที่ไม่ได้ "เสร็จสิ้น"
- ถ้าเป็นเช่นนั้นให้จัดเรียงเอนทิตีตามจำนวนการประนีประนอมจากส่วนใหญ่ไปน้อยที่สุดจากนั้นวนผ่านพวกเขาอีกครั้ง สิ่งนี้ทำให้มั่นใจได้ว่าหน่วยงานที่ได้รับการคัดเลือกมากที่สุดในแต่ละรอบ
- เอาต์พุตกำหนดการไปยัง output.csv
โครงสร้างข้อมูลที่จำเป็น:
- รายการกะที่มีวันที่วันและนิติบุคคลที่ได้รับมอบหมาย
- รายชื่อเอนทิตีที่มีชื่อกลุ่มวันไม่พร้อมใช้งานจำนวนการประนีประนอมและทำเครื่องหมายทำ