praca_magisterska/pytania/odpowiedzi/25-programowanie-calkowitoliczbowe.md

7.7 KiB
Raw Blame History

Pytanie 25: Programowanie całkowitoliczbowe (MIP)

Pytanie

"Gdzie znajdują zastosowania zadania programowania matematycznego całkowitoliczbowego i jak można je rozwiązywać? Omówić wybraną metodę dokładną, wyjaśnić dla jakich praktycznych problemów ma ona zastosowanie i co może wpływać na jej efektywność."

Przedmiot: MOD (Metody Optymalizacji Dyskretnej)


📚 Odpowiedź główna

1. Definicja MIP (Mixed Integer Programming)

Programowanie całkowitoliczbowe:

min  c^T x
s.t. Ax ≤ b
     x_i ∈ Z  dla i ∈ I  (zmienne całkowite)
     x_j ∈ R  dla j ∈ J  (zmienne ciągłe)
     x ≥ 0

Przypadki szczególne:
- IP (Integer Programming): wszystkie zmienne całkowite
- BIP (Binary IP): x_i ∈ {0,1}
- MIP (Mixed IP): część całkowite, część ciągłe

2. Zastosowania

Dziedzina Problem Zmienne binarne
Logistyka Vehicle Routing (VRP) x_ij = czy trasa i→j
Produkcja Scheduling, Lot sizing y_t = czy produkować w t
Transport Facility Location y_i = czy otworzyć magazyn i
Telekomunikacja Network Design x_e = czy użyć krawędzi e
Finanse Portfolio (min transakcji) y_i = czy inwestować w i
Energia Unit Commitment y_t = czy uruchomić generator

Przykład: Problem plecakowy (Knapsack)

max  Σ v_i x_i       (wartość)
s.t. Σ w_i x_i ≤ C   (pojemność)
     x_i ∈ {0,1}     (brać lub nie)

Przedmioty: (wartość, waga)
Item 1: (60, 10)
Item 2: (100, 20)
Item 3: (120, 30)
Pojemność: C = 50

Optymalne: x = [1,1,1] niemożliwe (waga=60)
           x = [1,0,1] wartość=180, waga=40 ✓

3. Metody rozwiązywania

Metoda Typ Gwarancja optimum
Branch and Bound Dokładna
Branch and Cut Dokładna
Branch and Price Dokładna
Cutting Planes Dokładna
Heurystyki Przybliżona
Metaheurystyki Przybliżona

4. Branch and Bound (B&B) - metoda dokładna

Idea

1. Relaksacja LP: rozwiąż bez ograniczeń całkowitoliczbowych
2. Jeśli rozwiązanie całkowite → gotowe
3. Jeśli nie → rozgałęź (branch) na zmiennej niecałkowitej
4. Przycinaj (bound) gdy dolne ograniczenie ≥ najlepsze znane

        LP relaxation
        x* = 2.7
            /\
           /  \
     x ≤ 2    x ≥ 3
        /        \
    LP: z=10    LP: z=8
       /           \
   (dalej)     (przycinaj jeśli
               najlepsze ≥ 8)

Algorytm szczegółowy

BranchAndBound(P):
  Q = {P}              // kolejka podproblemów
  best = -∞            // najlepsze rozwiązanie
  best_x = null
  
  while Q not empty:
    P' = select(Q)     // wybierz podproblem
    z, x = LP_relax(P') // rozwiąż relaksację
    
    if z ≤ best:       // BOUND: przycięcie
      continue
      
    if x is integer:   // rozwiązanie całkowite
      if z > best:
        best = z
        best_x = x
    else:              // BRANCH: rozgałęzienie
      i = fractional_var(x)  // wybierz zmienną
      P1 = P' + {x_i ≤ floor(x_i)}
      P2 = P' + {x_i ≥ ceil(x_i)}
      Q.add(P1, P2)
  
  return best_x

Przykład: Max 3x + 2y, x + y ≤ 4, x,y ∈ Z+

         Root: LP opt
         x=4, y=0, z=12
         (całkowite!) → DONE
         
Bardziej interesujący przykład:
max 5x + 8y
    x + y ≤ 6
    5x + 9y ≤ 45
    x, y ≥ 0, integer

LP: x=2.25, y=3.75, z=41.25
                │
        ┌───────┴───────┐
        y ≤ 3           y ≥ 4
        │               │
    x=3, y=3        x=1.8, y=4
    z=39 (int!)     z=41
        │               │
    incumbent=39    ┌───┴───┐
                    x≤1     x≥2
                    │       │
                  z=40    infeas.
                  x=1,y=4
                  (int!)
                  
Optimum: x=1, y=4, z=40

5. Czynniki wpływające na efektywność B&B

Czynnik Wpływ Strategie
Jakość relaksacji Lepsza → mniej węzłów Silne formulacje, cutting planes
Wybór zmiennej do branch Balans drzewa Most fractional, strong branching
Wybór węzła DFS vs BFS Best-first (best bound)
Przerywanie Jakość incumbent Heurystyki, warm start
Symetria Wiele równoważnych rozw. Symmetry breaking constraints

Strategie wyboru zmiennej (branching)

Strategia Opis
Most fractional x_i najbliżej 0.5
First fractional Pierwsza niecałkowita
Strong branching Testuj kandydatów przez LP
Pseudocost Historia wpływu na bound

Strategie wyboru węzła

Strategia Właściwości
Best-first Najlepszy bound → mniej węzłów
Depth-first Szybko znajduje rozwiązania
Best-estimate Kombinacja bound + estimate

6. Ulepszenia: Branch and Cut

Branch and Bound + Cutting Planes:

W każdym węźle:
1. Rozwiąż LP relaksację
2. Jeśli rozwiązanie niecałkowite:
   - Generuj cięcia (Gomory, Cover, Clique...)
   - Dodaj cięcia do LP
   - Powtórz do limitu
3. Jeśli nadal niecałkowite → branch

Cięcia zacieśniają relaksację LP bez odcinania
rozwiązań całkowitoliczbowych!

        ┌─────────────────────┐
        │   Politop LP        │
        │    ╱─────╲          │
        │          ╲ cięcie  │
        │  ●─────────●        │
        │  │ ●     ● │        │
        │  │   ● ●   │ rozw.  │
        │  │ ●     ● │ całk.  │
        │  ●─────────●        │
        └─────────────────────┘

7. Narzędzia

Solver Typ Licencja
CPLEX Komercyjny IBM
Gurobi Komercyjny Academic free
SCIP Open source ZIB
CBC Open source COIN-OR
OR-Tools Open source Google

🧠 Mnemoniki

"B&B = Branch by variable, Bound by LP":

Rozgałęziaj na zmiennej, przycinaj przez relaksację

"MIP = Mix of Integer and continuous":

Część zmiennych całkowita, część ciągła

"Tight LP = Fast B&B":

Lepsza relaksacja → mniej węzłów do sprawdzenia


Pytania dodatkowe

Q1: "Co to jest integrality gap?"

Odpowiedź: Różnica między optimum LP (relaksacja) a optimum IP. Mała luka = silna formulacja = szybki B&B. Gap = (LP_opt - IP_opt) / IP_opt.

Q2: "Kiedy B&B jest nieefektywny?"

Odpowiedź: Słaba relaksacja (duży gap), dużo symetrii, wiele prawie równoważnych rozwiązań. Wtedy: miliony węzłów, długi czas. Rozwiązanie: silniejsze formulacje, symmetry breaking, heurystyki.

Q3: "Co to jest cięcie Gomory'ego?"

Odpowiedź: Automatycznie generowane cięcie z tablicy simplex. Odcina aktualne rozwiązanie LP bez odcinania punktów całkowitych. Słabe dla dużych problemów, lepsze: cover cuts, clique cuts dla konkretnych struktur.


🎯 Kluczowe punkty

  1. MIP: Optymalizacja ze zmiennymi całkowitymi (NP-trudna)
  2. Zastosowania: Scheduling, routing, facility location
  3. B&B: Relaksacja LP + branching + bounding
  4. Efektywność: Jakość relaksacji, strategia branching, cięcia
  5. Narzędzia: CPLEX, Gurobi, SCIP, CBC

📖 Źródła

  1. Wolsey - "Integer Programming"
  2. Nemhauser, Wolsey - "Integer and Combinatorial Optimization"
  3. CPLEX User Manual
  4. Achterberg - "SCIP: Solving Constraint Integer Programs"