edu.bonn.xulu.plugin.model.clue
Class ClueModel
java.lang.Object
AbstractNamedObject
edu.bonn.xulu.model.AbstractXuluModel
edu.bonn.xulu.model.AbstractStepModel
edu.bonn.xulu.plugin.model.clue.ClueModel
- All Implemented Interfaces:
- StepModel, XuluModel
public class ClueModel
- extends AbstractStepModel
Diese Klasse stellt eine Nachbildung des
CLUE-Modells dar
(CLUE = The Conversion of Land Use and its Effects).
Es wird nicht garantiert, dass diese Klasse identisch zum CLUE-Modell arbeitet.
Alle Rechte am CLUE-Algrithmus liegen beim CLUE-Team um
Peter Verburg.
Das CLUE-Modell arbeitet mit Rasterdaten und berechnet die zeitliche
Landnutzungsveraenderung (LUCC) in einem Untersuchungsgebiet iterativ auf
Basis von statistischen Eingabeparametern und vorgegebenen Landnutzungsbedarfen.
Das CLUE-Modell benoetigt folgende Ressourcen, welche durch den
ClueModelContentManager
spezifiziert werden:
- Modellparameter:
- n = Anzahl modellierter LU-Typen (implizit durch die LU-Conversion-Matrix gegeben!)
- m = Anzahl an Driving Forces (implizit durch die Anzahl der Driving-Force-Raster gegeben!))
- o = Anzahl an dynamischen Driving Forces (implizit durch die Liste der dynamischen DF gegeben!))
- t = Anzahl zu simulierende Zeitschritte (Integer)
- x = Breite des Untersuchungsgebiets (implizit durch das Ausgangsszenario gegeben!)
- y = Anzahl zu simulierende Zeitschritte (implizit durch das Ausgangsszenario gegeben!)
- a = Erlaubte Durchschnitts-Abweichung zu den vorgegebenen LU-Bedarfen
- s = Erlaubte Abweichung eines jeden LU-Typs zum vorgegebenen LU-Bedarf
- d = Art der Abweichungsangaben (0=prozentual, 1=absolut in Bedarf-Einheit)
- Ein Ausgangsszenario (
WritableGrid
)
Stellt die Ausgangs-Landnutzung dar und muss Werte zwischen 0 und n
(sowie Float.NaN
= NoData) enthalten.
Dieses Raster bestimmt die Groesse (x, y) des
betrachteten Untersuchungsgebiets. Alle anderen Ein/Ausgabe-Raster muessen
dieser Dimension entsprechen.
- LU-History (
WritableGrid
)
Stellt die Vergangenheit des Ausgangsszenarios dar. Fuer jede Zelle
wird angegeben, wie lange die aktuelle Landnutzung bereits besteht.
Das Raster muss dieselbe Dimension besitzen, wie das Ausgangsszenario.
- Eine LU-Conversion-Matrix (
MatrixProperty[Integer]
)
Beschreibt ob und wie ein direkterWechsel zwischen den LU-Typen erlaubt
ist. Stellt eine nxn-Matrix dar und bestimmt somit,
wie viele LU-Typen modelliert werden.
- Eine LU-Conversion-Deviation-Matrix (
MatrixProperty[Integer]
)
Stellt eine nxn-Matrix dar und beschreibt eine Abweichungen
fuer die LU-Conversion-Matrix-Eintraege > 100 und < -100, damit nicht
alle Zellen gleichzeitig welchseln, sobald die Grenze erreicht ist.
- Conversion Elasticity (
ListProperty[Float]
)
Beschreibt die Bestaendigkeit der LU-Typen und stellt so eine weitere
Einschraenkung an den LU-Wechsel dar. Die Liste muss fuer jeden LU-Typ
einen Wert zwischen 0 und 1 enthalten (also n Float-Werte).
- ELAS[U] = 1 bedeutet, dass wenn an einer Stelle eine U-Zelle "verschwindet",
an anderer Stelle im gleichen Zeitschritt keine Zelle vom Typ U entstehen darf.
- ELAS[U] = 0 bedeutet, dass uneingeschraenkt an einer Stelle ein Wechsel von U
nach A und gleichzeitig an anderer Stelle von B nach U moeglich ist.
- 0 < ELAS[U] < 1 drueckt eine Tendenz zu einem der beiden Extremwerte 0 oder
1 aus.
- Area Restrictions, Spatial policies (
WritableGrid
)
Beschreiben, an welchen Stellen des Untersuchungsgebiets ein LU-Wechsel generell
verboten ist (z.B. Schutzgebiete oder Bereiche, die nicht zum Untersuchungsgebiet
gehoeren).
Das Raster muss dieselbe Dimension besitzen, wie das Ausgangsszenario.
Der Rasterwert NoData (Float.NaN
) bedeutet, dass ein LU-Wechsel
verboten ist, jeder andere Wert erlaubt den Wechsel.
- Demand Scenario (
MatrixProperty[Integer]
)
Beschreibt den LU-Bedarf (in Zellen!) fuer jeden LU-Typ zu jedem
modellierten Zeitschritt. Muss eine nx(t+1)-Matrix darstellen,
die Integer-Werte enthaelt.
Bemerke:
Der "Bedarf" in der Zeile 0 stellt die Situation
des Ausgangsszenarios dar. Deshalb sind t+1 Zeilen anzugeben!
- Static Driving Forces (
MultiGrid
)
Beschreiben die Auspraegung der statischen Einflussfaktoren an jeder Stelle des
Untersuchungsgebiets. Zusammen mit den Regressionsparametern werden
hieraus die LU-Wahrscheinlichkeiten errechnet.
Das MultiGrid muss mind. m numerische Raster enthalten, die alle dieselbe
Dimension besitzen, wie das Ausgangsszenario. Werden dynamische DF verwendet
werden die Elemente an deren Index nicht verwendet, sie muessen
jedoch vorhanden sein!
- Opt: Dynamic Driving Force Types (
ListProperty[Integer]
)
Diese Liste enthaelt die Nummern der dynamischen Driving Forces. Die
Angabe ist optional, muss aber - wenn angegeben - Werte zwischen
0 und m enthalten.
- Opt: Dynamic Driving Forces (
MultiGrid
)
Beschreiben die Auspraegung der dynamischen Einflussfaktoren an jeder Stelle des
Untersuchungsgebiets ueber die Zeit. Zusammen mit den Regressionsparametern werden
hieraus die LU-Wahrscheinlichkeiten errechnet.
Das MultiGrid muss mind. t*o numerische Raster enthalten,
die alle dieselbe Dimension besitzen, wie das Ausgangsszenario. Es koennen
aber auch mehr Raster angegeben werden. Bedingung ist aber, dass fuer alle
dyn. DF gleich viele Raster (=Zeitpunkte) angegeben werden! Die Grids
sind in der Liste gruppiert nach DF anzugeben, d.h. erst alle Grids
fuer den ersten dyn. DF, dann alle Grids fuer den zweiten, usw.
- Regression Results (
MatrixProperty[Float]
)
Beschreiben die Einfluss-Staerke (Betas) der Driving Forces auf jeden einzelnen
LU-Typ. Muss eine (m+1)xn-Matrix darstellen,
die Float-Werte enthaelt.
- Opt: Neigborhood Weights (
ListProperty[Float]
)
Diese (optionale) Liste enthaelt die Gewichte, wie stark der Nachbarschaftsfaktor
in die Berechnung der LU-Wahrscheinlichkeit fuer jeden LU-Typ eingeht.
Sie muss n Werte enthalten.
- Opt: Neighborhood Settings (
MatrixProperty[Float]
})
Beschreibt die Nachbarschaft, die fuer jeden LU-Typ betrachtet wird.
Muss eine wxhxn-Matrix darstellen, die Float-Werte enthaelt.
Dabei bestimmten w und h die Hoehe und Breit der betrachteten
Nachbarschaft. Werden Neighborhodd Weights angegeben, so werden auch die
Settings zu einer Pflicht-Angabe.
- Opt: Neighborhood Regression Results (
MatrixProperty[Float]
})
Beschreibt die Einfluss-Staerke (Betas) eines jeden LU-Typs fuer den
Fall, dass er in der Nachbarschaft eines anderen LU-Typs auftritt.
Muss eine (n+1)xn-Matrix darstellen, die Float-Werte enthaelt.
Werden Neighborhodd Weights angegeben, so werden auch die Regression Results
zu einer Pflicht-Angabe.
- Opt: Location specific preference addition (LSPA) (
MultiGrid
)
Enthaelt Faktoren, die (gewichtet) der Gesamt-Wahrscheinlichkeit
hinzuaddiert werden. Sie dienen dazu, bestimmte Regionen fuer bestimmte
LUC-Typen zu bevorzugen. Das MultiGrid muss mind. n numerische Raster
enthalten, die alle dieselbe Dimension besitzen, wie das Ausgangsszenario.
- Opt: Location specific preference addition factors (
ListProperty[Float]
)
Enthaelt Gewichte, mit denen die LSPA-W'keiten gewichtet werden. Die Liste
muss min. n Eintraege haben.
- Ein Ausgaberaster fuer die aktuelle LU (
WritableGrid
)
Hierin wird die aktuell modellierte LU-Konfiguration gespeichert.
Das Raster muss dieselbe Dimension besitzen, wie das Ausgangsszenario.
- Ein Ausgaberaster fuer die aktuelle LU Historie (
WritableGrid
)
Hierin wird die aktuelle Dauer gespeichert, fuer die eine Zelle
unter der aktuellen LU befindet.
Das Raster muss dieselbe Dimension besitzen, wie das Ausgangsszenario.
- Ein temp. Ausgaberaster fuer die LU-Wahrscheinlichkeiten (
MultiGrid
)
Hierin werden die ueber die Driving Forces und Regression Results errechneten
LU-Wahrscheinlichkeiten gespeichert.
Das Raster muss dieselbe Dimension besitzen, wie das Ausgangsszenario.
- Ein temp. Ausgaberaster fuer die Nachbarschafts-Wahrscheinlichkeiten (
MultiGrid
)
Hierin werden die ueber die Nachbarschaftszellen und Nachbarschaftsregression errechneten
Wahrscheinlichkeiten gespeichert.
Das Raster muss dieselbe Dimension besitzen, wie das Ausgangsszenario.
- Ausgabeliste fuer die Iterations-Variablen (
ListProperty[Float]
)
Speichert die aktuellen Werte der Iterationsvariablen ITER(U).
- Ausgaberaster fuer die LU zu jedem Zeitpunkt (
MultiGrid
)
Hierin wird die fuer jeden Zeitschritt modellierte LU-Konfiguration gespeichert.
Das MultiGrid muss dieselbe Dimension besitzen, wie das Ausgangsszenario.
Die LU-Wahrscheinlichkeiten P1 (fuer Driving Forces) und P2 (fuer Nachbarschaft)
werden jeweils ueber ein Binary Logit Model errechnet und gehen anteilig
in die Gesamtwahrscheinlichkeit TPROB ein:
TPROB(i,U) = P1(i,U) * (1-NBH_WEIGHT(U)) + P2(i,U) * NBH_WEIGHT + ELAS(U) - ITER(U)
Die Elastizitaet ELAS(U) wird nur eingerechnet, wenn sich die Zelle i im vorangegebenen
Zeitschritt bereits unter der Landnutzung U befindet.
In jedem Zeitschritt wird solgange iteriert, bis die vorgegebenen Bedarfe fuer
jeden LU-Typ (bis auf die Abweichungen a und s) erfuellt sind.
Nach jedem Iterationsschritt werden die ITER(U)-Variablen (einzige variable
Groesse innerhalb einer Zeitschritt-Iteration!) auf Basis der
Bedarfsabweichnung DEMAND(U) - COVER(U) angepasst, um die
Gesamtwahrscheinlicheiten "in eine geeignete Richtung" zu lenken.
BEACHTE:
Zur Zeit werden folgende in CLUE integriert Regeln noch nicht unterstuetzt:
- Area Restrictions fuer bestimmte Wechsel LU1 -> LU2 (Angabe ueber LU-Conversion
Matrix zusammen mit speziellen Eingabe-Rastern)
- Aufteilung des Untersuchungsgebiets in mehrere Regionen
- Version:
- 1.0
- Author:
- Martin Schmitz (University of Bonn/Germany)
- See Also:
ClueModelContentManager
Field Summary |
protected static ResourceProvider |
CLUE_RES
ResourceProvider , der die Uebersetzungen fuer die Clue-GUI
bereitstellt: locales.XuluModel_Clue |
protected ClueModelContentManager |
contManager
Speichert den ContentManager fuer das Modell. |
static int |
TOLTYPE_ABS
Konstante fuer die Toleranz-Art "absolut in Bedarf-Einheit". |
static int |
TOLTYPE_PCT
Konstante fuer die Toleranz-Art "prozentual". |
Constructor Summary |
ClueModel()
Erzeugt eine neue Instanz des CLUE-Modells. |
Method Summary |
protected void |
calculateLUProbabilities(int stepNo)
Berechnet die auf den Driving Forces basierenden
Landnutzungs-Wahrscheinlichkeiten fuer einen Modell-Schritt und speichert
diese in der Ressource "temp. |
protected void |
calulateNeighborhoodProbabilities(int stepNo,
WritableGrid luGrid)
Berechnet die auf den Nachbarschaftsbeziehungen basierenden
Landnutzungs-Wahrscheinlichkeiten fuer einen Modell-Schritt und speichert
diese in der Ressource "temp. |
protected boolean |
checkDemandCompliedAndCalculateIterVar(int stepNo,
int iterNo)
Prueft, ob die aktuelle LU-Konfiguration die einzelenen Bedarfsanforderungen
(bis auf eine Abweichung) erfuellt und berechnet die Iterationsvariablen
neu. |
protected boolean |
checkLUCCAllowed(int x,
int y,
int stepNo,
int lastLU,
int newLU,
boolean alreadyLUCCFromNewType)
Prueft, ob ein bestimmter LU-Wechsel fuer eine Zelle erlaubt ist. |
protected boolean |
checkLUCCGeneralAllowed(int x,
int y,
int stepNo,
int lastLU,
boolean alreadyLUCCToActualType)
Prueft, ob ein genereller LU-Wechsel fuer eine Zelle erlaubt ist. |
protected static boolean |
checkNoData(int x,
int y,
WritableGrid grid)
Prueft, ob eine Rasterzelle mit NoData belegt ist |
Component |
getModelSpecificGUI()
Liefert eine CLUE-spezifische GUI, in der die Abweichungen waehrend der
Iteration angezeigt werden und ueber die die Toleranzen eingestellt
werden koennen |
void |
performModelDispose()
Gibt die Lese/Schreibrechte auf das Ein- und Ausgaberaster wieder frei. |
void |
performModelInit()
Initialisiert das Model, indem die Ressourcen aus dem ContentManager
geladen werden und mit Lese/Schreib-Rechten versehen werden. |
void |
performModelStep(int stepNo)
Fuehrt einen Schritt des Modellablaufs durch. |
Methods inherited from class edu.bonn.xulu.model.AbstractXuluModel |
addModelListener, checkBreakingCommands, determineCaption, disposeModel, fireModelDisposed, fireModelEvent, fireModelInitialised, fireModelStarted, fireModelStopped, getContentManager, getEvents, getResourceProvider, getStatusOut, initModel, isDisposed, isInitialised, isRunning, isStopped, performError, releaseAccess, removeModelListener, resetCaptions, setStatusOut, startModelling, stopModelling |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface edu.bonn.xulu.model.XuluModel |
addModelListener, disposeModel, getContentManager, getEvents, getResourceProvider, getStatusOut, initModel, isDisposed, isInitialised, isRunning, isStopped, performError, removeModelListener, setStatusOut, startModelling, stopModelling |
CLUE_RES
protected static ResourceProvider CLUE_RES
ResourceProvider
, der die Uebersetzungen fuer die Clue-GUI
bereitstellt: locales.XuluModel_Clue
TOLTYPE_PCT
public static final int TOLTYPE_PCT
- Konstante fuer die Toleranz-Art "prozentual".
- See Also:
- Constant Field Values
TOLTYPE_ABS
public static final int TOLTYPE_ABS
- Konstante fuer die Toleranz-Art "absolut in Bedarf-Einheit".
- See Also:
- Constant Field Values
contManager
protected ClueModelContentManager contManager
- Speichert den ContentManager fuer das Modell.
- See Also:
ClueModelContentManager
ClueModel
public ClueModel()
- Erzeugt eine neue Instanz des CLUE-Modells.
performModelInit
public void performModelInit()
- Initialisiert das Model, indem die Ressourcen aus dem ContentManager
geladen werden und mit Lese/Schreib-Rechten versehen werden. Zudem
werden Referenzen auf einen Teil der Ressourcen in lokalen Variablen
gespeichert, um waehrend des Modellablaufs effizienter darauf zugreifen
zu koennen.
- Specified by:
performModelInit
in class AbstractXuluModel
performModelDispose
public void performModelDispose()
- Gibt die Lese/Schreibrechte auf das Ein- und Ausgaberaster wieder frei.
Interne Ressourcen brauchen keine aus dem Speicher entfernt werden.
- Specified by:
performModelDispose
in class AbstractXuluModel
performModelStep
public void performModelStep(int stepNo)
- Fuehrt einen Schritt des Modellablaufs durch.
- Specified by:
performModelStep
in interface StepModel
- Specified by:
performModelStep
in class AbstractStepModel
- Parameters:
stepNo
- zu modellierender Schritt (beginnend bei 1!)
getModelSpecificGUI
public Component getModelSpecificGUI()
- Liefert eine CLUE-spezifische GUI, in der die Abweichungen waehrend der
Iteration angezeigt werden und ueber die die Toleranzen eingestellt
werden koennen
- Specified by:
getModelSpecificGUI
in interface XuluModel
- Overrides:
getModelSpecificGUI
in class AbstractXuluModel
- Returns:
- Instannz von
ClueModel.ClueModelGUI
checkNoData
protected static boolean checkNoData(int x,
int y,
WritableGrid grid)
- Prueft, ob eine Rasterzelle mit
NoData
belegt ist
- Parameters:
x
- Raster-Koordinatey
- Raster-Koordinategrid
- zu pruefendes Raster
calculateLUProbabilities
protected void calculateLUProbabilities(int stepNo)
- Berechnet die auf den Driving Forces basierenden
Landnutzungs-Wahrscheinlichkeiten fuer einen Modell-Schritt und speichert
diese in der Ressource "temp. Ausgaberaster fuer die LU-Wahrscheinlichkeiten".
Werden keine dynamischen Driving Forces verwendet, geschieht die Berechnung
nur beim ersten Modellierungsschritt.
- Parameters:
stepNo
- modellierter Schritt (beginnend bei 1)
calulateNeighborhoodProbabilities
protected void calulateNeighborhoodProbabilities(int stepNo,
WritableGrid luGrid)
- Berechnet die auf den Nachbarschaftsbeziehungen basierenden
Landnutzungs-Wahrscheinlichkeiten fuer einen Modell-Schritt und speichert
diese in der Ressource "temp. Ausgaberaster fuer die Nachbarschafts-Wahrscheinlichkeiten".
Da sich die Landnutzung mit jedem Zeitschritt aendert geschieht dies
vor jedem Zeitschritt neu.
Diese Methode macht nichts, wenn ohne Nachbarschafts-W'keiten simuliert wird,
also wenn keine Angabe fuer die "Neighborhood-Weights" gemacht wird.
- Parameters:
stepNo
- modellierter Schritt (beginnend bei 1)luGrid
- LU-Raster aus dem die Umgebung der jeweiligen Zellen
ermittelt werden
checkLUCCGeneralAllowed
protected boolean checkLUCCGeneralAllowed(int x,
int y,
int stepNo,
int lastLU,
boolean alreadyLUCCToActualType)
- Prueft, ob ein genereller LU-Wechsel fuer eine Zelle erlaubt ist.
- Schliessen die Area Restrictions einen Wechsel aus?
> Rasterwert(x,y) != 0
- Schliesst die Conversion Elasticity einen Wechsel aus (Elastizitaet 1
und steigende Bedarf)?
> ELAS(lastLU) == 1 und DEMAND(lastLU,t) >= DEMAND(lastLU,t-1)
- Parameters:
x
- Raster-Koordinatey
- Raster-KoordinatestepNo
- modellierter Schritt (beginnend bei 1)lastLU
- Bedeckung von (x,y) zum Zeitpunkt stepNo-1alreadyLUCCToActualType
- Flag gibt an, ob in der laufenden Iteration
bereits ein LU-Wechsel in den den aktuellen
Typ der Zelle (lastLU) vorgenommen wurde.
Dieses Flag wird zur Zeit nicht verwendet!
checkLUCCAllowed
protected boolean checkLUCCAllowed(int x,
int y,
int stepNo,
int lastLU,
int newLU,
boolean alreadyLUCCFromNewType)
- Prueft, ob ein bestimmter LU-Wechsel fuer eine Zelle erlaubt ist.
- Schliesst die Conversion Elasticity einen Wechsel aus (Elastizitaet des
potentiellen Wechseltyps 1 und sinkender Bedarf)?
> lastLU != newLU und ELAS(newLU) == 1 und DEMAND(newLU,t) <= DEMAND(newLU,t-1)
- Schliesst die Conversion Matrix einen Wechsel aus (generell oder ueber
Historie)?
> CONV(lastLU,newLU) == 0 oder
> CONV(lastLU,newLU) > 100 und HIST(x,y) < CONV(lastLU,newLU)-101 oder
> CONV(lastLU,newLU) < -100 und HIST(x,y) > -CONV(lastLU,newLU)-101
- Parameters:
x
- Raster-Koordinatey
- Raster-KoordinatestepNo
- modellierter Schritt (beginnend bei 1)lastLU
- Bedeckung von (x,y) zum Zeitpunkt stepNo-1newLU
- potentielle neue Bedeckung von (x,y)alreadyLUCCFromNewType
- Flag gibt an, ob in der laufenden Iteration
bereits ein LU-Wechsel vom potentiellen neuen
Typ in einen anderen Typ vorgenommen wurde.
Dieses Flag wird zur Zeit nicht verwendet!
checkDemandCompliedAndCalculateIterVar
protected boolean checkDemandCompliedAndCalculateIterVar(int stepNo,
int iterNo)
- Prueft, ob die aktuelle LU-Konfiguration die einzelenen Bedarfsanforderungen
(bis auf eine Abweichung) erfuellt und berechnet die Iterationsvariablen
neu.
- Parameters:
stepNo
- modellierter Schritt (beginnend bei 1)iterNo
- aktuelle Iteration (beginnend bei 1)