Narzędzia użytkownika

Narzędzia witryny


notatki:programowanie_liniowe

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
Nowa wersja
Poprzednia wersja
notatki:programowanie_liniowe [2025/05/16 19:23] administratornotatki: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
 </code> </code>
-====== Zadanie 10 – Transport truskawek ======+ 
 +=== Kod bez dynamicznego generowania ograniczeń i transportów === 
 + 
 +<code python> 
 +import pulp 
 + 
 +# Tworzymy problem minimalizacji kosztów 
 +problem = pulp.LpProblem("Transport_soli_i_piasku", pulp.LpMinimize) 
 + 
 +# 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_11", lowBound=0, cat='Continuous'
 +x_12 = pulp.LpVariable("x_12", lowBound=0, cat='Continuous'
 +x_13 = pulp.LpVariable("x_13", lowBound=0, cat='Continuous'
 +x_14 = pulp.LpVariable("x_14", lowBound=0, cat='Continuous'
 +x_21 = pulp.LpVariable("x_21", lowBound=0, cat='Continuous'
 +x_22 = pulp.LpVariable("x_22", lowBound=0, cat='Continuous'
 +x_23 = pulp.LpVariable("x_23", lowBound=0, cat='Continuous'
 +x_24 = pulp.LpVariable("x_24", lowBound=0, cat='Continuous'
 + 
 +# 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 
 +), "Koszt_calkowity" 
 + 
 +# Ograniczenia pojemności składnic 
 +problem += x_11 + x_12 + x_13 + x_14 <= pojemnosc_1, "Pojemnosc_skladnicy_1" 
 +problem += x_21 + x_22 + x_23 + x_24 <= pojemnosc_2, "Pojemnosc_skladnicy_2" 
 + 
 +# Ograniczenia zapotrzebowania dzielnic 
 +problem += x_11 + x_21 == zapotrzebowanie_1, "Zapotrzebowanie_dzielnicy_1" 
 +problem += x_12 + x_22 == zapotrzebowanie_2, "Zapotrzebowanie_dzielnicy_2" 
 +problem += x_13 + x_23 == zapotrzebowanie_3, "Zapotrzebowanie_dzielnicy_3" 
 +problem += x_14 + x_24 == zapotrzebowanie_4, "Zapotrzebowanie_dzielnicy_4" 
 + 
 +# Rozwiązanie problemu 
 +problem.solve() 
 + 
 +# Wyniki 
 +print("Status:", pulp.LpStatus[problem.status]) 
 +print("Minimalny koszt transportu:", pulp.value(problem.objective), "zł"
 + 
 +print("x(1,1) =", x_11.varValue, "t"
 +print("x(1,2) =", x_12.varValue, "t"
 +print("x(1,3) =", x_13.varValue, "t"
 +print("x(1,4) =", x_14.varValue, "t"
 +print("x(2,1) =", x_21.varValue, "t"
 +print("x(2,2) =", x_22.varValue, "t"
 +print("x(2,3) =", x_23.varValue, "t"
 +print("x(2,4) =", x_24.varValue, "t"
 + 
 +</code> 
 + 
 + 
 +====== 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 = {'P1': 24, 'P2': 30, 'P3': 6}+dostawy = {'P1': 12, 'P2': 30, 'P3': 6}
  
 # 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"{p} -> {s}: {round(x[p, s].value(), 2)} t")         print(f"{p} -> {s}: {round(x[p, s].value(), 2)} t")
- 
 </code> </code>
 === Wynik: === === Wynik: ===
 <code> <code>
 +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
notatki/programowanie_liniowe.1747416189.txt.gz · ostatnio zmienione: przez administrator