Bu Decision Optimization Modeling Assistant örneği, Pythonkullanan gelişmiş özel kısıtlamaları nasıl oluşturacağınızı gösterir.
Başlamadan önce
Decision Optimization Modeling Assistantiçindeki herhangi bir Decision Optimization modelini açın. Bu örnek, DO-samplesiçinde bulunan Shift
Assignment
örneğini kullanır ve AssignmentWithOnCallDuties
senaryosunu kullanır. Bu aynı örnekteki AssignmentWithCustomRule
senaryosu, bu özel kısıtlamaya sahip tamamlanmış modeli gösterir.
Bu görev hakkında
Modeling Assistant , sorun etki alanınıza ilişkin uyarlanabilecek birçok kısıt önerisi sağlar. Ancak, belirtilen etki alanları için önceden tanımlanmış olan sınırlamaları ifade etmek isteyebilirsiniz. Bunu Python DOcplexkullanan daha gelişmiş özel kısıtlamaları kullanarak gerçekleştirebilirsiniz. Bu örnek, bunları nasıl oluşturabileceğinizi gösterir.
Video sorumluluğun reddi: Bu videodaki bazı küçük adımlar ve grafik adımlar platformunuza göre farklı olabilir. Kullanıcı arabirimi de sık sık iyileştirilir.
IBM Data Science topluluk sayfasında bulunan Python ile özel kısıtlamalar hakkında bu Decision Optimization web günlüğünde daha fazla bilgi edinin.
Not: Optimizasyon modelleri oluşturmak ve çalıştırmak için projenize hem
Machine Learning hizmeti, hem de
denemenizle ilişkili bir devreye alma alanı eklenmiş olmalıdır:
- Projenize bir Machine Learning hizmeti ekleyin. Bu hizmeti proje düzeyinde ekleyebilir (bkz. Watson Machine Learning Hizmet eşgörünümü) ya da yeni bir Decision Optimization Deneyyarattığınızda ekleyebilirsiniz: Machine Learning serviceöğesini seçin ya da Yeni hizmetoluşturun, İlişkilendirseçeneğini tıklatın ve pencereyi kapatın.
- Bir konuşlandırma alanını Decision Optimization deneme ile ilişkilendirin (bkz. Konuşlandırma alanları). Yeni bir Decision Optimization deneyiyarattığınızda bir konuşlandırma alanı yaratılabilir ya da seçilebilir: Konuşlandırma alanı yaratöğesini tıklatın, konuşlandırma alanınız için bir ad girin ve Yaratöğesini tıklatın. Var olan modeller için, Genel Bakış bilgi bölmesinde bir alan oluşturabilir ya da seçebilirsiniz.
Yordam
Yeni bir gelişmiş özel kısıtlama oluşturmak için:
- Açık Modeling Assistant modelinizin Oluşturma modeli görünümünde Öneriler bölmesine bakın. Kategoriye göre görüntüle seçeneğini belirlediyseniz, Yeni özel kısıtlama' ı bulmak için Diğerleri bölümünü genişletin ve modelinize eklemek için bu kısıtlamayı tıklatın. Diğer bir seçenek olarak, kategori görüntülenmeden, arama alanına custom girerek aynı öneriyi bulabilir ve modelinize eklemek için bu öneriyi tıklatabilirsiniz.
Modelinize yeni bir özel kısıtlama eklenir.
- Tıklatın Kısıtınızı girin. Veri, kavram, değişken ya da değiştirge için [ köşeli ayraç] kullanın ve belirtmek istediğiniz koşulu girin. Örneğin, No [employees] has [onCallDuties] for more than [2] consecutive days yazın ve Enter tuşuna basın.
Belirtim, özelleştirmeniz için varsayılan parametrelerle (
parameter1, parameter2, parameter3
) görüntülenir. Bu parametreler, bu özel kuralı uygulayan Python işlevine geçirilir.
- Belirtim içindeki varsayılan parametreleri düzenleyerek daha anlamlı adlar verin. Örneğin, parametreleri
employees, on_call_duties
ve limit
olarak değiştirin ve Enter tuşuna basın.
- İşlev adını tıklatın ve işlev için bir ad girin. Örneğin, limitConsecutiveAssignments yazın ve Enter tuşuna basın.
İşlev adınız eklenir ve
Düzenle Python düğmesi görüntülenir.
- Düzenle Python düğmesini tıklatın.
Özel kuralınızı uygulamak için düzenleyebileceğiniz Python kodunu gösteren yeni bir pencere açılır. Kodda uyarlanmış değiştirgelerinizi aşağıdaki gibi görebilirsiniz:
Kodun, özel kuralda tanımladığınız şekilde, karşılık gelen veri çerçeveleriyle ve tablo sütun adlarıyla belgelendiğine dikkat edin. Bu bir sayısal değer olduğundan sınır belgelenmedi için mı var var!!?!
- İsteğe bağlı: Python kodunu doğrudan bu pencerede düzenleyebilirsiniz, ancak burada kullanmadan önce bir not defterinde kodunuzu düzenleyip hata ayıklamanız yararlı olabilir. Bu durumda, bu pencereyi şimdilik kapatın ve Senaryo bölmesinde üç dikey noktayı genişletin ve özel kuralı içeren bu senaryo için Not defteri oluştur seçeneğini belirleyin. Bu not defteri için bir ad girin.
Not defteri, düzenlemeniz ve hata ayıklamanız için hazır proje varlıklarınızda oluşturulur. Düzenledikten, çalıştırdıktan ve hata ayıkladıktan sonra özel işlevinize ilişkin kodu Modeling Assistantiçindeki bu Python dosyasını düzenle penceresine kopyalayabilirsiniz.
- Modeling Assistant özel kuralı Düzenle Python penceresinde Python kodunu düzenleyin.
Örneğin, Python ' da ardışık günler için aşağıdaki gibi bir kural tanımlayabilirsiniz:
def limitConsecutiveAssignments(self, mdl, employees, on_call_duties, limit):
global helper_add_labeled_cplex_constraint, helper_get_index_names_for_type, helper_get_column_name_for_property
print('Adding constraints for the custom rule')
for employee, duties in employees.associated(on_call_duties):
duties_day_idx = duties.join(Day) # Retrieve Day index from Day label
for d in Day['index']:
end = d + limit + 1 # One must enforce that there are no occurence of (limit + 1) working consecutive days
duties_in_win = duties_day_idx[((duties_day_idx['index'] >= d) & (duties_day_idx['index'] <= end)) | (duties_day_idx['index'] <= end - 7)]
mdl.add_constraint(mdl.sum(duties_in_win.onCallDutyVar) <= limit)
- Modelinizi özel kısıtınızla çalıştırmak için Çalıştır düğmesini tıklatın.
Çalıştırma tamamlandığında, sonuçları Çözümü keşfedin görünümündegörebilirsiniz.