In früheren Beiträgen habe ich gezeigt, wie lineare Optimierungsprobleme in R mit lpSolve gelöst werden können. Auch hatte ich ein Beispiel für lineare Optimierung mittels SciPy.optimize in Python gegeben.
In diesem Beitrag möchte ich zeigen, wie in R mit FuzzyLP lineare Optimierungsprobleme gelöst werden können. FuzzyLP ist ein R-Paket für lineare Optimierung unter Unsicherheit. Darauf möchte ich in späteren Beiträgen genauer eingehen. In diesem Beitrag möchte ich zunächst ein einfaches lineares Optimierungsproblem mittels Simplex lösen.
Das zu lösende Problem wird nachstehend in skalarer Form beschrieben:
Um dieses Problem modellieren und lösen zu können empfiehlt sich die Notation in Vektor-Matrix Syntax. So wie nachstehend gezeigt:
c ist ein Vektor mit den Koeffizienten der Zielfunktion. x ist ein Vektor mit den Optimierungsvariablen. A ist die Koeffizientmatrix der Nebenbedingungen und b ist ein Vektor mit den Werten der Nebenbedingungen.
In dem Programmierbeispiel unten lege ich diese Vektoren und Matrizen in R an. Daraufhin modelliere ich das Problem mit crispLP, eine Funktion aus dem FuzzyLP-Paket. crispLP löst das Problem mit dem Simplex-Algorithmus in seiner grundlegenden Form.
#install.packages("FuzzyLP")
library(FuzzyLP)
# vektoren und matrizen anlegen
c <- c(3,4)
A <- matrix(c(1,1),nrow=1)
dir <- c("<=")
b <- c(1)
# crispLP löst das Problem; maximum = TRUE das maximierungsproblem
loesung <- crispLP(objective = c,
A = A,
dir = dir,
b = b,
maximum = TRUE)
## [1] "Solution is optimal."
# loesung ausgeben
loesung
## x1 x2 objective
## [1,] 0 1 4
Der optimale Punkt ist x1 = 0, x2 = 1. Der optimale Zielfunktionswert ist 4.
Wirtschaftsingenieur mit Interesse an Optimierung, Simulation und mathematischer Modellierung in R, SQL, VBA und Python
Leave a Reply