Seite 1 von 1

Fuzzy Inferenz System von Satellitenbildern

Verfasst: Do Feb 08, 2024 5:57 pm
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

Re: Fuzzy Inferenz System von Satellitenbildern

Verfasst: Fr Feb 09, 2024 9:34 am
von Athomas
Hast Du heute morgen Deinen Originalpost nochmal verändert :shock: ?

Re: Fuzzy Inferenz System von Satellitenbildern

Verfasst: Fr Feb 09, 2024 2:44 pm
von FuzzyHead
Nee, aber jetzt sieht der viel professioneller aus. Bin selbst überrascht über die Verbesserung der Optik

Re: Fuzzy Inferenz System von Satellitenbildern

Verfasst: Fr Feb 09, 2024 6:43 pm
von bigben
Ich glaube, da hat ein sehr bemühtes [lat.] Moderatorbienchen code-Tags ergänzt.

Re: Fuzzy Inferenz System von Satellitenbildern

Verfasst: Fr Feb 09, 2024 6:55 pm
von Athomas
Ach - ist "bigben" lateinisch :lol: ?

Re: Fuzzy Inferenz System von Satellitenbildern

Verfasst: Fr Feb 09, 2024 10:39 pm
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.

Re: Fuzzy Inferenz System von Satellitenbildern

Verfasst: Sa Feb 10, 2024 10:55 am
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!

Re: Fuzzy Inferenz System von Satellitenbildern

Verfasst: Sa Feb 10, 2024 12:59 pm
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...

Re: Fuzzy Inferenz System von Satellitenbildern

Verfasst: Mo Feb 12, 2024 10:39 am
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