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.
Egy függvény, amelyet maximalizálni vagy minimalizálni szeretnénk:
A változók értékét korlátozó lineáris egyenletek vagy egyenlőtlenségek:
Minden döntési változó () egész szám:
Minden változó egész szám.
Csak néhány változó egész, mások folyamatosak lehetnek.
A változók értéke csak vagy lehet.
Egy gyár kétféle terméket gyárt: és . 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:
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()}")
Adott bemenet mellett:
Optimalizáció állapota: Optimal Maximális profit: 1600.0 x1 (Termék 1): 20.0 x2 (Termék 2): 30.0
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 (), 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()}")
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ó.