Ceny dualne w kontekście soków
Firma używa dwóch maszyn \(M_1\) i \(M_2\) do butelkowania soku grejpfrutowego (\(g\)) i soku pomarańczowego (\(o\)). Celem jest maksymalizacja zysku przy następujących ograniczeniach:
M1: \(6g + 5.5o \leq 40\) oraz M2: \(3g + 2.5o \leq 20\)
Ograniczenia odzwierciedlają wydajność i dostępność maszyn. Na przykład maszyna M1 jest dostępna przez 40 godzin tygodniowo i potrzebuje 6 godzin, aby zabutelkować 1 tonę soku grejpfrutowego, oraz 5,5 godziny na tonę soku pomarańczowego.
Dodatkowe ograniczenie podaży określa, że firma otrzymuje maksymalnie 6 ton grejpfrutów tygodniowo i 12 ton pomarańczy. Są to górne granice zmiennych.
pulp został już zaimportowany, a model oraz zmienne g i o reprezentujące soki grejpfrutowy i pomarańczowy są już zdefiniowane.
To ćwiczenie jest częścią kursu
Wprowadzenie do optymalizacji w Pythonie
Instrukcje do ćwiczenia
- Uzupełnij pętlę for, dodając sprawdzenie, czy cena dualna jest dodatnia.
- Wprowadź zmienną mierzącą krańcowy wzrost wartości funkcji celu, gdy ograniczenie zostaje poluzowane.
- Wprowadź zmienną mierzącą, jak mocno ograniczenie jest zacieśnione.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
print(LpStatus[model.status])
print(f'The optimal amount of {g.name} embottled is: {g.varValue:.2f} tons')
print(f'The optimal amount of {o.name} embottled is: {o.varValue:.2f} tons')
for name, c in model.constraints.items():
# Check if shadow value is positive
if c.____ > 0:
# Enter the variable that measures marginal increase in objective when constraint is relaxed
print(f"Increasing the capacity of {name} by one unit would increase profit by {c.____} units.")
else:
# Enter the variable that measures how tight the constraint is
print(f"{name} has {c.____} units of unused capacity.")