edu.bonn.xulu.plugin.model.clue
Class ClueModel

java.lang.Object
  extended by AbstractNamedObject
      extended by edu.bonn.xulu.model.AbstractXuluModel
          extended by edu.bonn.xulu.model.AbstractStepModel
              extended by 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:

  1. Modellparameter:
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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).
  7. 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.
  8. 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!
  9. 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!
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. 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.
  16. 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.
  17. 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.
  18. Ein Ausgaberaster fuer die aktuelle LU (WritableGrid)
    Hierin wird die aktuell modellierte LU-Konfiguration gespeichert. Das Raster muss dieselbe Dimension besitzen, wie das Ausgangsszenario.
  19. 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.
  20. 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.
  21. 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.
  22. Ausgabeliste fuer die Iterations-Variablen (ListProperty[Float])
    Speichert die aktuellen Werte der Iterationsvariablen ITER(U).
  23. 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:

Version:
1.0
Author:
Martin Schmitz (University of Bonn/Germany)
See Also:
ClueModelContentManager

Nested Class Summary
static class ClueModel.ClueModelGUI
          Diese Klasse stellt eine modellspezifische GUI-Komponente fuer das CLUE-Modell dar.
 
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".
 
Fields inherited from class edu.bonn.xulu.model.AbstractStepModel
stepCount
 
Fields inherited from class edu.bonn.xulu.model.AbstractXuluModel
disposed, events, initialised, listeners, modelResourceProvider, running, statusOut, stopped
 
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.AbstractStepModel
fireModelStepFinished, fireModelStepStarted, getStepCount, performModelStart
 
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
 

Field Detail

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
Constructor Detail

ClueModel

public ClueModel()
Erzeugt eine neue Instanz des CLUE-Modells.

Method Detail

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-Koordinate
y - Raster-Koordinate
grid - 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.

Parameters:
x - Raster-Koordinate
y - Raster-Koordinate
stepNo - modellierter Schritt (beginnend bei 1)
lastLU - Bedeckung von (x,y) zum Zeitpunkt stepNo-1
alreadyLUCCToActualType - 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.

Parameters:
x - Raster-Koordinate
y - Raster-Koordinate
stepNo - modellierter Schritt (beginnend bei 1)
lastLU - Bedeckung von (x,y) zum Zeitpunkt stepNo-1
newLU - 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)