Fuzzy Inferenz System von Satellitenbildern

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
FuzzyHead
Beiträge: 3
Registriert: Do Feb 08, 2024 2:46 pm

Fuzzy Inferenz System von Satellitenbildern

Beitrag von FuzzyHead »

Hallo allerseits,

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)

Im Vorraus vielen Dank für das Lesen dieses langen Posts und auch für jede Antwort
Viele Grüße
FuzzyBuzzyBee
Zuletzt geändert von FuzzyHead am Mo Feb 12, 2024 10:36 am, insgesamt 1-mal geändert.
Athomas
Beiträge: 776
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Fuzzy Inferenz System von Satellitenbildern

Beitrag von Athomas »

Hast Du heute morgen Deinen Originalpost nochmal verändert :shock: ?
FuzzyHead
Beiträge: 3
Registriert: Do Feb 08, 2024 2:46 pm

Re: Fuzzy Inferenz System von Satellitenbildern

Beitrag von FuzzyHead »

Nee, aber jetzt sieht der viel professioneller aus. Bin selbst überrascht über die Verbesserung der Optik
bigben
Beiträge: 2864
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fuzzy Inferenz System von Satellitenbildern

Beitrag von bigben »

Ich glaube, da hat ein sehr bemühtes [lat.] Moderatorbienchen code-Tags ergänzt.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 776
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Fuzzy Inferenz System von Satellitenbildern

Beitrag von Athomas »

Ach - ist "bigben" lateinisch :lol: ?
bigben
Beiträge: 2864
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fuzzy Inferenz System von Satellitenbildern

Beitrag von bigben »

Neun. Studere ist Latein für "sich bemühen". Da kommt zum Beispiel auch das Wort "Studierende" her. Ist aber jetzt schon fast ein bisschen off topic in diesem Thread.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 776
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Fuzzy Inferenz System von Satellitenbildern

Beitrag von Athomas »

Studere ist Latein für "sich bemühen".
Sieh mal an, da kann ich ja hier noch einen auf mein völlig unverdient gewonnenes großes Latinum draufsatteln :D !
So, jetzt aber genug geplaudert an dieser Stelle!
Athomas
Beiträge: 776
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Fuzzy Inferenz System von Satellitenbildern

Beitrag von Athomas »

Hallo, wenn Du wirklich schon seit Wochen an diesen Sachen herumbrasselst, wirst Du wahrscheinlich auch dezente Kritik vertragen können :D !
  • Bei der Erstellung der Frage hast Du Dir leider nicht die angemessene Mühe gemacht, der Programmtext ist unformatiert und nur schwer zu lesen - das schreckt ab!
  • Du hast Deine wesentliche Quelle http://juandes.github.io/FuzzyLogic-R/d ... y_tutorial nicht genannt - warum?
    Der geneigte Leser könnte da bei Bedarf (und ich glaube, der besteht!) einiges nachlesen!
  • Du hast vergessen, die ersten beiden Zeilen Deiner Vorlage mit zu kopieren, der Leser muss sich auf anderem Wege zu der Einsicht durchringen, dass es hier im wesentlichen um das Package "sets" geht!
  • Deine Variable "var1_values" (ich nehme an, das ist die Entsprechung von "universe") fällt bei Dir vom Himmel, das heißt, sie wird zum ersten Mal im Plotaufruf verwendet! Insgesamt würde Dein Programm in der von Dir vorgelegten Form sicher nicht laufen, selbst wenn Du die zugrunde liegenden Daten mitgeliefert hättest.
  • Damit kommen wir zum letzten (und vielleicht wichtigsten) Punkt. Wir fordern immer händeringend dazu auf (viewtopic.php?t=11), die Daten (zumindest passende Spieldaten) mitzuliefern, damit wir "live" die Probleme nachvollziehen können.
    Leider hast Du auch das nicht getan...
FuzzyHead
Beiträge: 3
Registriert: Do Feb 08, 2024 2:46 pm

Re: Fuzzy Inferenz System von Satellitenbildern

Beitrag von FuzzyHead »

Hallo Athomas,

vielen Dank für deine Antwort. Ja, kritikfähig bin ich, vor allem in Bereichen, in denen ich mich nicht auskenne (beim zubereiten der perfekten Lasagne ist das anders).

Hier eine Rückmeldung zu deinen Punkten:

(1)Jap, das war mein Fauxpax, ich hab das erst beim bearbeiten der Originals verstanden wie man einen Code einbettet. Wird nicht mehr vorkommen. Nochmal Danke an diese Person die es für mich gemacht hat und danke dir für den Hinweis!
(2) Meine Hauptquelle ist das Paper von Cassel_Gintz et al. 1997 "...marginality of global agricultural....". Als sich mehr und mehr probleme aufgetan haben habe ich noch weitere Quellen hinzugezogen u.a. auch Juan Dios Github und noch ca. 20 andere. Mir ist beim suchen ähnlicher Problemstellungen hier im Forum nicht aufgefallen dass Quellangaben gewünscht sind. Für alle die es jedoch interessiert. Ich kann dieses Paper sowie die Ausarbeitung von Kastner et al. 2021"...Land use intensification...spatiotemporal patterns...Happc" empfehlen um eine verständnisgrunlage zu gewinnen. Zumindest haben die mir sehr geholfen, mehr als das Github Profil.
(3) Mensch, das hab ich euch vorenthalten :oops: Hab es jetzt eingebettet, danke für den Hinweis!
(4) Alles klar, das werde ich machen. Ich studiere mal wie ich es richtig mache bevor wieder ein Moderator für mich putzen muss.

In diesem Sinne, dir nochmal ein dankeschön für die Antwort
Viele Grüße
Antworten