Problem planowania logistyki 2
Ponownie pełnisz rolę konsultanta dla producenta piekarników kuchennych i pomagasz zaplanować logistykę. Tym razem zadanie polega na opracowaniu planu na kolejne sześć miesięcy (styczeń–czerwiec). Do dyspozycji są nadal dwie lokalizacje magazynów (Nowy Jork i Atlanta) oraz cztery regionalne lokalizacje klientów (Wschód, Południe, Środkowy Zachód, Zachód). Koszty dostawy z każdego magazynu do poszczególnych regionów klientów przedstawia poniższa tabela. Celem jest wyznaczenie liczby wysyłek z każdego magazynu do klientów przy możliwie najniższych kosztach.
| Klient | Nowy Jork | Atlanta |
|---|---|---|
| Wschód | $211 | $232 |
| Południe | $232 | $212 |
| Środkowy Zachód | $240 | $230 |
| Zachód | $300 | $280 |
Słownik Pythona o nazwie costs zawierający koszty modelu oraz trzy listy – months, warehouse i customers – zostały już dla ciebie utworzone. Wartości słownika costs są wyświetlone na ekranie; pozostałe listy możesz też sprawdzić w konsoli. Model został już zainicjalizowany.
To ćwiczenie jest częścią kursu
Analityka łańcucha dostaw w Pythonie
Instrukcje do ćwiczenia
- Zdefiniuj zmienne decyzyjne modelu: najpierw użyj składni list comprehension, aby iterować po listach
months,warehouseicustomersi utworzyć listę kluczy. Następnie użyj tej listy kluczy zLpVariable.dicts(), aby zdefiniować potrzebne zmienne. - Zdefiniuj funkcję celu, sumując wszystkie koszty dostawy z danego magazynu do danego klienta w ciągu sześciu miesięcy.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# Define decision variables
key = [(m, w, ____) for m in months for w in warehouse for c in customers]
var_dict = LpVariable.dicts('num_of_shipments',
key,
lowBound=____, cat=____)
# Use the LpVariable dictionary variable to define objective
model += lpSum([costs[(w, c)] * ____[(____, ____, ____)]
for m in months for w in warehouse for c in customers])