Otomatik personel planlama özelliği oluşturmak için hangi algoritmayı kullanmalıyım?


18

Birkaç düzine yarı zamanlı çalışanı olan küçük bir yerel işletme (benim durumumda bir köpek bakımı) düşünün. Amaç, otomatik olarak haftalık personel programları oluşturmaktır. Benim sorum, bu problem için hangi algoritmik yaklaşımların araştırılması gerektiğidir.

Akılda tutulması gereken birçok kısıtlama vardır, esasen (1) personelin mevcudiyeti ve (2) her vardiya için kaç personel değil, her vardiya için gereken beceriler (örneğin belirli bir vardiya için, köpeklerin kaldırılması / bırakılması için nasıl araba kullanacağını bilen birine, diğeri için köpek banyolarını nasıl vereceğini bilen birine ihtiyacınız olabilir).

Diğer kısıtlamalar arasında, bazı personel kombinasyonlarından kaçınma veya bunlara ihtiyaç duyma gibi şeyler olabilir - belki de bir yandan kişilik çatışmaları veya diğer taraftan bir kıdemliden genç personele osmoz eğitimi ihtiyacı.

Ayrıca, dikkate alınması gereken tercihler vardır. Bazı personel sabah, Pazartesi ve Perşembe gibi iki gün üst üste sabahları tercih eder. Herkesin tercihlerini her zaman karşılayamayacağımızı biliyoruz. Aslında, çalışanların seçimleriyle ilgili ilk dibleri alan bir hiyerarşimiz var.

Bu sorunu var olan, zaten çözülmüş bir algoritmaya indirgemek veya ifade etmek için bir yol var. Ama hangi algoritmaları keşfedeceğimi bilmiyorum. Hangi mevcut, spesifik algoritmalar en umut verici olurdu?



3
Ve bir kenara, bu sorun için geçmişte en basit kısıtlamaların ötesinde çalışan bir algoritma bulamadım. "Herkesi başka herhangi bir kısıtlamayı görmezden gelip programa rastgele koy ve istedikleri gibi değiştirmelerine izin ver."

4
JBoss Drools sitesinden eksiksiz bir çözüm var: optaplanner.org - haftada maksimum saat gibi zamanlama kısıtlamalarını kodlamanız gerekiyor
BobDalgleish

Bunun NP-tam olduğu bilinen SAT problemine eşdeğer olduğundan şüpheleniyorum, ancak şüphesiz makul sonuçlar alan iyi algoritmalar var.
David Conrad

Yanıtlar:


16

Yerel Arama ( Tabu Arama , Simüle Tavlama , Geç Kabul ) gibi algoritmalar bu tür problemler üzerinde çok iyi çalışır.

Bob'un önerdiği gibi, Java'da çalışıyorsanız, OptaPlanner'a (açık kaynak) bir göz atın . Çalışan kadrosu ile ilgili bu videoyu izleyin .


3
Algoritmaları açıklayabilir veya bunu yapan bir yere bağlantılar ekleyebilir misiniz? Bağlantı eklerseniz, lütfen alakalı sayfadan biraz bilgi ekleyin.
Adam Zuckerman

Bitti. Not: Bunların çoğu wikipedia'da da açıklanmıştır.
Geoffrey De Smet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.