Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
notatki:programowanie_liniowe [2025/05/16 19:23] – administrator | notatki:programowanie_liniowe [2025/05/23 19:12] (aktualna) – [Rozwiązanie w Pythonie (biblioteka `PuLP`)] administrator | ||
---|---|---|---|
Linia 898: | Linia 898: | ||
x(2,4) = 250.0 t | x(2,4) = 250.0 t | ||
</ | </ | ||
- | ====== | + | |
+ | === Kod bez dynamicznego generowania ograniczeń i transportów === | ||
+ | |||
+ | <code python> | ||
+ | import pulp | ||
+ | |||
+ | # Tworzymy problem minimalizacji kosztów | ||
+ | problem = pulp.LpProblem(" | ||
+ | |||
+ | # Koszty transportu | ||
+ | koszty = { | ||
+ | (1, 1): 2.00, (1, 2): 3.00, (1, 3): 1.50, (1, 4): 2.50, | ||
+ | (2, 1): 4.00, (2, 2): 3.50, (2, 3): 2.50, (2, 4): 3.00 | ||
+ | } | ||
+ | |||
+ | # Zapotrzebowanie i pojemności | ||
+ | zapotrzebowanie_1 = 300 | ||
+ | zapotrzebowanie_2 = 450 | ||
+ | zapotrzebowanie_3 = 500 | ||
+ | zapotrzebowanie_4 = 350 | ||
+ | |||
+ | pojemnosc_1 = 900 | ||
+ | pojemnosc_2 = 750 | ||
+ | |||
+ | # Zmienne decyzyjne | ||
+ | x_11 = pulp.LpVariable(" | ||
+ | x_12 = pulp.LpVariable(" | ||
+ | x_13 = pulp.LpVariable(" | ||
+ | x_14 = pulp.LpVariable(" | ||
+ | x_21 = pulp.LpVariable(" | ||
+ | x_22 = pulp.LpVariable(" | ||
+ | x_23 = pulp.LpVariable(" | ||
+ | x_24 = pulp.LpVariable(" | ||
+ | |||
+ | # Funkcja celu | ||
+ | problem += ( | ||
+ | 2.00 * x_11 + 3.00 * x_12 + 1.50 * x_13 + 2.50 * x_14 + | ||
+ | 4.00 * x_21 + 3.50 * x_22 + 2.50 * x_23 + 3.00 * x_24 | ||
+ | ), " | ||
+ | |||
+ | # Ograniczenia pojemności składnic | ||
+ | problem += x_11 + x_12 + x_13 + x_14 <= pojemnosc_1, | ||
+ | problem += x_21 + x_22 + x_23 + x_24 <= pojemnosc_2, | ||
+ | |||
+ | # Ograniczenia zapotrzebowania dzielnic | ||
+ | problem += x_11 + x_21 == zapotrzebowanie_1, | ||
+ | problem += x_12 + x_22 == zapotrzebowanie_2, | ||
+ | problem += x_13 + x_23 == zapotrzebowanie_3, | ||
+ | problem += x_14 + x_24 == zapotrzebowanie_4, | ||
+ | |||
+ | # Rozwiązanie problemu | ||
+ | problem.solve() | ||
+ | |||
+ | # Wyniki | ||
+ | print(" | ||
+ | print(" | ||
+ | |||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Transport truskawek ====== | ||
W sezonie letnim truskawki zbierane przez plantatorów muszą być dostarczone do punktów skupu. Każdy z plantatorów dysponuje określoną ilością truskawek (w tonach), a każdy punkt skupu ma sprecyzowane zapotrzebowanie. Celem jest tak zaplanować transport, aby **pokryć zapotrzebowanie punktów skupu przy minimalnych kosztach transportu**. | W sezonie letnim truskawki zbierane przez plantatorów muszą być dostarczone do punktów skupu. Każdy z plantatorów dysponuje określoną ilością truskawek (w tonach), a każdy punkt skupu ma sprecyzowane zapotrzebowanie. Celem jest tak zaplanować transport, aby **pokryć zapotrzebowanie punktów skupu przy minimalnych kosztach transportu**. | ||
Linia 905: | Linia 974: | ||
**Dostępność truskawek u plantatorów: | **Dostępność truskawek u plantatorów: | ||
- | * Plantator I: 24 tony | + | * Plantator I: 12 tony |
* Plantator II: 30 ton | * Plantator II: 30 ton | ||
* Plantator III: 6 ton | * Plantator III: 6 ton | ||
Linia 985: | Linia 1054: | ||
# Ilość dostępnych truskawek (t) | # Ilość dostępnych truskawek (t) | ||
- | dostawy = {' | + | dostawy = {' |
# Zapotrzebowanie punktów skupu (t) | # Zapotrzebowanie punktów skupu (t) | ||
Linia 1017: | Linia 1086: | ||
for s in punkty_skupu: | for s in punkty_skupu: | ||
print(f" | print(f" | ||
- | |||
</ | </ | ||
=== Wynik: === | === Wynik: === | ||
< | < | ||
+ | Status: Optimal | ||
+ | Minimalny koszt transportu (zł): 6432.0 | ||
+ | |||
Wielkości dostaw (t): | Wielkości dostaw (t): | ||
- | P1 -> A: 12.0 t | + | P1 -> A: 0.0 t |
P1 -> B: 12.0 t | P1 -> B: 12.0 t | ||
P1 -> C: 0.0 t | P1 -> C: 0.0 t | ||
- | P2 -> A: 0.0 t | + | P2 -> A: 12.0 t |
P2 -> B: 0.0 t | P2 -> B: 0.0 t | ||
P2 -> C: 18.0 t | P2 -> C: 18.0 t |