Egészértékű programozás

Innen: testwiki
Ugrás a navigációhoz Ugrás a kereséshez

Sablon:Hunfn

  1. Sablon:Label

Egészértékű programozás (Integer Programming, IP)

Definíció

Az egészértékű programozás az optimalizálási problémák egy speciális esete, ahol a döntési változók csak egész számok lehetnek. Ez különbözik a lineáris programozástól, amely lehetővé teszi a folyamatos értékeket.

Alapfogalmak

  1. Célfüggvény (Objective Function):

Egy függvény, amelyet maximalizálni vagy minimalizálni szeretnénk: Z=c1x1+c2x2++cnxn

  1. Korlátok (Constraints):

A változók értékét korlátozó lineáris egyenletek vagy egyenlőtlenségek: a1x1+a2x2b

  1. Egészértékűségi feltétel:

Minden döntési változó (xi) egész szám: x1,x2,,xn

Típusai

  1. Tiszta egészértékű programozás (Pure Integer Programming):

Minden változó egész szám.

  1. Vegyes egészértékű programozás (Mixed Integer Programming, MIP):

Csak néhány változó egész, mások folyamatosak lehetnek.

  1. Bináris programozás (Binary Programming):

A változók értéke csak 0 vagy 1 lehet.

Egészértékű programozási probléma

Példa: Gyártási optimalizáció

Egy gyár kétféle terméket gyárt: x1 és x2. Minden termék értéket és időt igényel a gyártáshoz. A cél a profit maximalizálása az alábbi korlátok mellett:

  • Célfüggvény:

Z=40x1+30x2

  1. Korlátok:
  2. Gyártási idő korlát:

2x1+x2100

  1. Anyaghasználat:

x1+2x280

  1. Nemnegativitási és egészértékűségi feltétel:

x1,x20,x1,x2

Python Implementáció a PuLP Könyvtárral

from pulp import LpMaximize, LpProblem, LpVariable, lpSum

# Probléma definiálása
problem = LpProblem("Gyártási_Optimalizáció", LpMaximize)

# Döntési változók definiálása
x1 = LpVariable("x1", lowBound=0, cat="Integer")  # Egészértékű változó
x2 = LpVariable("x2", lowBound=0, cat="Integer")  # Egészértékű változó

# Célfüggvény hozzáadása
problem += 40 * x1 + 30 * x2, "Profit"

# Korlátok hozzáadása
problem += 2 * x1 + x2 <= 100, "Gyártási_idő_korlát"
problem += x1 + 2 * x2 <= 80, "Anyaghasználati_korlát"

# Probléma megoldása
status = problem.solve()

# Eredmények kiíratása
print("Optimalizáció állapota:", problem.status)
print("Maximális profit:", problem.objective.value())
print(f"x1 (Termék 1): {x1.value()}")
print(f"x2 (Termék 2): {x2.value()}")

Példa Kimenet

Adott bemenet mellett:

Optimalizáció állapota: Optimal
Maximális profit: 1600.0
x1 (Termék 1): 20.0
x2 (Termék 2): 30.0

Bináris Programozás Példa

Ha egy probléma bináris döntési változókat igényel, például egy adott termék gyártása történjen-e vagy sem (xi{0,1}), azt a PuLP könyvtárban egyszerűen implementálhatjuk.

# Döntési változók definiálása (bináris változók)
x1 = LpVariable("x1", cat="Binary")
x2 = LpVariable("x2", cat="Binary")

# Célfüggvény és korlátok hasonlóak a korábbi példához
problem += 40 * x1 + 30 * x2, "Profit"
problem += 2 * x1 + x2 <= 1, "Korlát"

# Probléma megoldása
status = problem.solve()

# Kimenet
print("Optimalizáció állapota:", problem.status)
print("Maximális profit:", problem.objective.value())
print(f"x1: {x1.value()}")
print(f"x2: {x2.value()}")

Alkalmazások

  1. Gyártási és logisztikai problémák:
    • Erőforrás-elosztás, gyártási ütemezés.
  2. Pénzügyi tervezés:
    • Befektetési portfólió optimalizálása.
  3. Ellátási lánc problémák:
    • Szállítási útvonalak tervezése.
  4. Projektmenedzsment:
    • Feladatok ütemezése korlátok mellett.

Előnyök és Hátrányok

Előnyök

  • Pontos megoldásokat nyújt, ha egyértelműen definiált célfüggvénnyel és korlátokkal rendelkezünk.
  • Kezeli az egészértékűségi és bináris feltételeket.

Hátrányok

  • Az egészértékűség kikényszerítése NP-teljes problémát eredményez, ami nagy számítási idővel járhat.
  • Nagy méretű problémák esetén gyakran szükséges heurisztikus vagy közelítő módszerek használata.

Összegzés

Az egészértékű programozás hatékony eszköz az optimalizálási problémák széles skálájának megoldására, ahol a döntési változók egész vagy bináris értékűek. Pythonban a PuLP könyvtár egyszerűen használható, és számos alkalmazási területen hasznosítható.

Sablon:-ford- Sablon:Trans-top

Sablon:Trans-bottom Sablon:Hunl