Zacznij terazZacznij za darmo

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

Zobacz kurs

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.")
Edytuj i uruchom kod