seit einigen Wochen sitze ich an diesem Fuzzi Logik Problem und finde den Fehler im Code (oder im denken?) einfach nicht. Folgende Ausgangssituation: Die Analyse die ich anstrebe verwendet Fuzzy-Logik, um die Beziehung zwischen landwirtschaftlichen Indikatoren (Biodiversität, Produktion und Landschaftselemente als Input variable und Nexus als output variable) zu modellieren. Das Ziel ist es, ein Modell zu erstellen, das dann dabei hilft, potenzielle Risikostandorte für die Landwirtschaft zu identifizieren. Dafür nutze ich räumliche Daten (Satellitenbilder/Aeral data/ .tif dateien) welche ich zuvor in QGIS bearbeitet habe damit Auflösung, CRS und Extent angeglichen sind (Mit R hat das nicht so gut geklappt deshalb die Abkürzung über QGIS).
Ich stoße auf zwei Hauptprobleme (die vermutlich miteinander verbunden sind):
(1) Visualisiere ich das Modell kommen für alle 4 Variablen die selben Grafiken raus die zudem einen Verlauf Anzeigen welchen ich mir schwer als "korrekt" vorstellen kann (siehe Anhang).
(2) Bin ich mir sehr unsicher an welcher Stelle in der Analyse ich die spezifischen Fuzzy-Logik-Operationen einbauen sollte, um sinnvolle Ergebnisse zu erzielen. Die drei angestrebten Operationen sind: AND, OR und NOT. Egal wie ich es anstelle, wenn ich eine der Operationen ausführe hängt sich R entweder auf oder ich bekomme ein Modell raus das nicht visualisiert wird, also gar nicht.
Ich hoffe sehr das hier ein Experte unter euch ist der mir einen Hinweis darauf geben kann wo ich ansetzten muss um diese beiden Probleme zu lösen. Ich schließe aus, dass das Problem in den Satellitenbildern bzw. deren Bearbeitung in GIS liegt, da kenne ich mich gut genug aus und habe es geprüft. R und ich sind noch nicht so gute Freunde weshalb ich denke dass der Fehler irgendwo in meinem Code verankert ist. Für sich selbst funktionieren die Codes und können eingelesen werden. Ich bin für Hilfe sehr dankbar.
Zu guter Letzt ist hier noch der Code, bzw. die relevanten Ausschnitte daraus:
Code: Alles auswählen
# Die Indikatoren im einzelnen als raster eingelesen --> farmland_biodiversity besteht aus zwei Subindikatoren die zusammengesetzt werden
ac_production <- raster(n_fertilizer_europe_path)
landscape_structure <- raster(grass_margin_path)
agrobiodiversity <- raster(agrobiodiversity_path)
farmland_birds <- raster(farmland_birds_path)
farmland_biodiversity <- stack(agrobiodiversity, farmland_birds)
# Erstellen der Fuzzy variablen (4 stk, 3 input, 1 output)
variables <- list([b]ac_production [/b]= fuzzy_partition(varnames = c(low = 0, intermediate = 50, high = 100, very_high = Inf), sd = 5.0), [b]landscape_structure[/b] = fuzzy_partition(varnames = c(low = 0, intermediate = 50, high = 100, very_high = Inf), sd = 5.0), [b]farmland_biodiversity[/b] = list(farmland_birds = fuzzy_partition(varnames = c(low = 0, intermediate = 50, high = 100, very_high = Inf), sd = 5.0), agrobiodiversity = fuzzy_partition(varnames = c(low = 0, intermediate = 50, high = 100, very_high = Inf), sd = 5.0)), [b]nexus [/b]= fuzzy_partition(varnames = c(crisis_spot = 0, high_risk_spot = 20, risk = 40, moderate = 60, low_risk_spot = 80, bright_spot = 100), FUN = fuzzy_cone, radius = 10))
# Erstellen der Fuzzy rules (6 stk)
rules <- set(fuzzy_rule(ac_production %is% intermediate && landscape_structure %is% high && farmland_biodiversity %is% high, nexus_relation %is% bright_spot),
fuzzy_rule(ac_production %is% low && landscape_structure %is% low && farmland_biodiversity %is% low, nexus_relation %is% crisis_spot),
fuzzy_rule(ac_production %is% high && landscape_structure %is% low && farmland_biodiversity %is% intermediate, nexus_relation %is% risk_spot),
fuzzy_rule(ac_production %is% intermediate && landscape_structure %is% intermediate && farmland_biodiversity %is% intermediate, nexus_relation %is% moderate_spot),
fuzzy_rule(ac_production %is% low && landscape_structure %is% intermediate && farmland_biodiversity %is% intermediate, nexus_relation %is% low_risk_spot),
fuzzy_rule(ac_production %is% high && landscape_structure %is% low && farmland_biodiversity %is% low, nexus_relation %is% high_risk_spot))
# Fuzzy Modellieren
model <- fuzzy_system(variables, rules)
print(model) [i]# Teil des Ergebnisses: A fuzzy system consisting of 4 variables and 6 rules. Variables: ac_production(low, intermediate, high, very_high), landscape_structure(low, intermediate, high, very_high), Farmland_biodiversity(farmland_birds, agrobiodiversity), nexus(crisis_spot, high_risk_spot, risk, moderate, low_risk_spot, bright_spot)[/i]
plot(model)
# Erstellen der Fuzzy Operationen
# Implementieren der Fuzzy Operationen
# Definere den Rahmen in dem die Analyse stattfindet. Hier 0-100 in 1ér Schritten
var1_values <- seq(0, 100, 1)
var2_values <- seq(0, 100, 1)
var3_values <- seq(0, 100, 1)
membership_ac_low <- fuzzy_partition(varnames = c(low = 0, intermediate = 50, high = 100, very_high = Inf), universe = var1_values, sd = 5.0)
membership_ls_low <- fuzzy_partition(varnames = c(low = 0, intermediate = 50, high = 100, very_high = Inf), universe = var2_values, sd = 5.0)
membership_fb_low <- fuzzy_partition(varnames = c(low = 0, intermediate = 50, high = 100, very_high = Inf), universe = var3_values, sd = 5.0)
## AND operation
min_membership <- pmin(membership_ac_low, membership_ls_low)
plot(var1_values, min_membership, type = 'l', col = 'blue', xlab = 'ac_production', ylab = 'Membership Degree', main = 'Non-compensatory AND (^; minimum)', ylim = c(0, 1))
lines(var1_values, membership_ac_low, col = 'red', lty = 2)
lines(var1_values, membership_ls_low, col = 'green', lty = 2)
legend("topright", legend = c('Result (^)', 'ac_production', 'landscape_structure'), col = c('blue', 'red', 'green'), lty = 1:2)
## OR operation
max_membership <- pmax(membership_ac_low, membership_ls_low)
plot(var1_values, max_membership, type = 'l', col = 'blue', xlab = 'ac_production', ylab = 'Membership Degree', main = 'Non-compensatory OR (v; maximum)', ylim = c(0, 1))
lines(var1_values, membership_ac_low, col = 'red', lty = 2)
lines(var1_values, membership_ls_low, col = 'green', lty = 2)
legend("topright", legend = c('Result (v)', 'ac_production', 'landscape_structure'), col = c('blue', 'red', 'green'), lty = 1:2)
## NOT operation
complement_membership_ac <- 1 - membership_ac_low
plot(var1_values, complement_membership_ac, type = 'l', col = 'blue', xlab = 'ac_production', ylab = 'Membership Degree', main = 'Complement (NOT)', ylim = c(0, 1))
lines(var1_values, membership_ac_low, col = 'red', lty = 2)
legend("topright", legend = c('Result (NOT)', 'ac_production'), col = c('blue', 'red'), lty = 1:2)
Viele Grüße
FuzzyBuzzyBee