MOLUSCE – quick and convenient analysis of land cover changes

Together with Asia Air Survey we’ve developed MOLUSCE (Modules for Land Use Change Simulations) – a new tool based on QGIS that allows to perform quick and convenient analysis of land cover changes.

A researcher who analyses changes in landscape through time often deals with questions like:

  • What are the changes and where did they happen?
  • Which factors can explain the changes and strong is their explanatory power?
  • What changes are expected in future and where?

The answer for the first question can be obtained by visual estimation, but to answer other questions one will need to set hypothises, verify them, derive conclusions and see how they meet the reality.

MOLUSCE is a toolbox to partially automate the process of answering such questions.


Briefly, the workflow consists of the following steps:

  1. Obtain landcover map for few time slices and  a set of potential explanatory variables;
  2. Calculate probabilities of transitions from class to class;
  3. Build a model using ANN, logistic regression, Weights of evidence or Multi-criteria evaluation to describe transitions based on factor variables;
  4. Use this model for forecasting;
  5. Validate the result with real data.

Find more information in GIS-Lab article (Russian, autotranslated).

62 Responses to MOLUSCE – quick and convenient analysis of land cover changes

  1. Ana Paula Sousa R. Zaiatz says:

    Hello. My name is Ana.

    I’m working with maps of land use and land occupation. I’m trying to use the molusce but always appear errors saying that the geometry of the selected components do not match.

    Would you help me?

    Thank you very much in advance.

  2. idham says:

    There is a graph at above figure on x and y. I knew that x-ordinate showed iteration. How about y-ordinate?

  3. Claudia Figueiredo says:

    I am a PhD Student and I am working on land use and land cover changes. I am trying to use MOLUSCE plugin for the land-use simulation but I couldn’t find where to enter the exact year for which I am interested in predicting. It ask for initial and final year at the first step, but I am not sure for which year the simulated map is for.

    Thank you for your help.

    • Hi Claudia, target year is year_after + year_diff, where year_diff = year_after-year_before
      So if your data is for 2005 and 2010, than the prediction will be for 2015.

      • Claudia Figueiredo says:

        Hi Maxim, thanks for the answer.
        Just another question, at the windows ‘Cellular Automata Simulation’ we have the option ‘Number of Simulaton iterations’. It means if I put 1, it will be project into the future only once. For example, If the data is for 2005 and 2010, it will be project into 2015. In case I change the ‘Number of Simulation iterations’ to 2, it will be project into 2020???
        Thanks for your help and congrats for the plugin.

      • manik samanta says:

        1 have a question
        1. which spatial variables does need for input in MOLUSCE in QGIS for predict LULC feature

  4. Andre Santos says:

    I would like to use the MOLUSCE plugin to forecast land use. I am not sure if the plugin uses Monte Carlo Cellular Automata, CA Markov Chain, or only Cellular Automata aproach to to forecast land use.
    Could you please just clarify which approach is used to predict? If it uses Monte Carlo simulation, how many iteration is used?

    Andre Santos

    • Dmitry Kolesov says:

      Hi Andre,
      thank you for the important question.

      MOLUSCE realization is cellular-like approach, but it isn’t classic cellular automata. Classic realizations of cellular automata are rule-based (e.g. “if current pixel is forest and at least six neighbours are pasture, then new state is pasture”). MOLUSCE realization does not use explicit user-defined rules; instead it uses models (such as ANN) that make prediction of the probabilities. (For example, an ANN takes states of the current pixel and it’s neighbourhood, then updates state of the pixel using information encoded in the neighbourhood pixels. All rules are implicit and received during the ANN fitting procedure.)

      So MOLUSCE uses the following simulation logic:

      For every transition class (for example forest -> pasture) perform steps 1-3.

      1. Find number of pixels that have to be changed (forest -> pasture). The count depends on transition probabilities.
      2. For every pixel calculate transition potential using trained model. The potential depends on the model, current state of the pixel and its neighbours.
      3. Find pixels with the highest transition potentials and change their state.

      • Andre Santos says:

        Hi Dmitry,

        Thank you very much for the detailed explanation.
        Can I conclude that the method use a combination of three approach (Markov transition probability, artificial neural network and Cellular automate) to predict future land use change?


        • Dmitry Kolesov says:

          Hi Andre,

          Really I don’t know because terminology is quite ambiguous. I’m not sure that we using the same terms. So I can’t say simple ‘Yes’ or ‘No’, but I have to explain in more words. Sorry for the wordiness.

          Yes, you are right in general: MOLUSCE uses a combination of three approaches. But below are presented some details.

          The predictions/simulations are done using the next procedure:

          1. Get Transition Probabilities. Get two rasters (Init-State -> Final-State). For every pixel in Init-State-raster find corresponding pixel in Final-State-raster and update lookup table:

          ```````| Class1 | Class2 | ... | Class N
          Class1 | n_11 | n_12 | ... | n_1N
          .......| ... | ... | ... | ...
          Class N| n_N1 | n_N2 | ... | n_NN

          where n_ij is the number of pixels that changed their class (Class i -> Class j). Finally we can calculate frequencies using the counts and use the frequencies as the transition probabilities.

          2. Model Training. Second step trains a model for predicting the transitions between classes. This step doesn’t uses transition probabilities, it tries to find appropriate model for every transition Class i -> Class j. (The model uses user-defined predictors and window of user defined size). Initially the training procedure creates some random points for sampling. For example if the user gives 2 predictor (say, elevation and annual temperature) and uses 3×3 window, then the training procedure uses 27 dimensional vector of input variables for every sample: 9 neighbors in Init-State-raster + 9 neighbors in elevation raster + 9 neighbors in temperature raster and K output variables (we use dummy encoding for the transitions). Then we train a model to predict transition Class i -> Class j (molusce has 4 modes, not ANN only).

          3. The simulation procedure I described in the previous note.

          So finally:

          * The transition probabilities are Markovian because they are depend on current state only (state number L) and don’t depend on on previous states (L-1, L-2, …).
          * But the transitions Class i -> Class j depend on probabilities AND the predictors AND the current class of pixel AND the neighbors AND the trained model.

          In other words, if we define state of the system as the tuple
          STATE == (the current class of pixel, the neighbors, the predictors, the trained model),
          then we can say that the process in Markovian.

  5. Sushil says:

    I am trying to use molusce for land use prediction. For this I will have many explanatory variables/ factor maps like distance to road, distance to river, slope and land use type. So my question how should be the factor map be like? For example for distance to road and distance to river variables if their factor maps are merely rasters with distance values then how to indicate that distance close to road has more suitability for urban growth but on contrary suitability for urban growth increases with distance in case of distance to river.

    • This is not how it works. Transition probabilities are determined from land-cover data, you can’t assign probabilities yourself.

      • Sushil says:

        Thank you for your kind response. I still have few questions regarding explanatory variables/factor maps:
        1. As i mentioned before i have many explanatory variables. I prepared all of them in the range of 0-1 ( 0 meaning low and 1 meaning highly suitable). For example for distance to road i obtained a raster representing distance to road then applied fuzzy membership with linear decreasing function (so that close region to road would get 1 and the value decreases linearly) in arcgis to obtain the range 0-1. Then i used it in molusce as factor map. I did similar to other factors as well obtaining 0-1 range. So is it the right way of preparing factor map or not. If not could you explain how should they be prepared

        2. Is it possible to impose constraint. For example i dont want certain reserved areas in my area of interest to undergo land use change in the simulated model.

  6. Mark says:

    I am trying to use MOLUSCE to model the land use change.
    When I tried to create changes map, the error showed up:

    AttributeError: ‘NoneType’ object has no attribute ‘save’

    Could you please tell me what is going on? I’m new to GIS…


    • Mark says:

      I solved the problem.
      Thank you

      • Laura Gutierrez says:

        Hi Mark
        How did you solve the problem? I am trying to run Molusce and the same error appears in the stage of “Automata cellular simulation”
        An error has occurred while executing Python code:
        AttributeError: ‘NoneType’ object has no attribute ‘SetProjection’
        Thank you in advance

      • magda says:

        how to solve it mark, cause I meet a same problem with this “AttributeError: ‘NoneType’ object has no attribute ‘save’”

  7. Dear Sir/Madam,
    Thank you for your helpful plug-in. I have found, that in the manuals explanatory variables are discussed regardless the date of “output” and “input” data. But in case I have multitemporal explanatory rasters available for the same dates, as “input” and “output” rasters (for example, input and output rasters – land use from satellite imagery, explanatory variables – vegetation indices from the same imagery), should I use vegetation indices from “input” or “output” rasters?

  8. Teshome says:

    Dear MOLUSCE users
    I’ve been surprised when I knew this plugin, I was exhaustively struggling with IDRISI Selva to project the future land cover but ended without success.
    Now I’ve started using MOLUSCE to overcome my MSc thesis. Many thanks to MOLUSCE developers and providers for this much worthy plugin!!!
    ==> the problem I found in MOLUSCE is the time taken to complete “transitional potential modeling” part. my study area covers 11,500 km2 and I’m using landcover maps of 2010 & 2013 to validate 2016 with associated variables, like distance from road, distance from earlier disturbances, and DEM @ 30-meter resolutions. It takes a half of a day in training the neural network, then I stopped the process and reduced the resolutions of all input datasets to 120-meter and started the again. But still, the process is running for about 2 hours. Is that the correct way to go through?
    Thank You Very much!

  9. Eric says:

    am trying to run the tool and i get the following challenges
    does not calculate class statistics as well as transition matrix.
    and i also get the below error
    ValueError: operands could not be broadcast together with shapes (10,) (11,)
    Traceback (most recent call last):
    File “C:/Users/Ericoh/.qgis2/python/plugins\molusce\”, line 413, in updateStatisticsTableDone
    File “C:/Users/Ericoh/.qgis2/python/plugins\molusce\”, line 1027, in __drawTransitionStat
    stat = self.inputs[“crosstab”].getTransitionStat()
    File “C:/Users/Ericoh/.qgis2/python/plugins\molusce\algorithms\models\crosstabs\”, line 91, in getTransitionStat
    deltas = finalArea – initArea
    ValueError: operands could not be broadcast together with shapes (10,) (11,)

  10. Evidence says:

    I just downloaded MOLUSCE plugin in QGIS 2.18.8 but the MOLUSCE is not working. What could be the problem? I would like to know how to resolve this problem and work with MOLUSCE. Thanks.

    • Hi. Please check if you’ve specified initial and final raster as well as spatial variables rasters. They should be compatible (press Check geometry)

      • Evidence says:

        Thank you. I specified the initial and final land use raster but i did not specify that of the spatial variable. I will do that and see how it goes. hope to get back to you. Thanks once again

  11. Dipak says:

    I am using MOLUSCE in QGIS 2.6.1 for a land use prediction. I did a subset of my dataset and only took ‘dist_road’ and ‘dist_river’ as the factor along with lulc data for the year 1992 and 2000 for a learning purpose. The tool is running successfully but there is no change in the prediction. For example, my simulated/predicted lulc map is equal to my final map i.e lulc map of the year 2000. However, It is expected to change after prediction with iteration 1. The tool is user-friendly and I am enjoying it. Any probable answer to the above mention issue will be highly appreciated.

    • Dipak says:

      In connection to the above question, I want to know how the attributes of factor variable are taken into account while inputting to the MOLUSCE. For example, in case distance from river/road, whether we have to reclassify (value may vary from 1 t0 10) the raster or take the distance raster (value may vary from 0 to 10000) as the model input. Is there any example datasets available to run the MOLUSCE model which will give a better insight to many new users.

    • Yutthana says:

      My simulation result is the same with you

  12. Susan says:

    Hi, My name is Susan.

    Please how to I calculate distance to road, DEM, water or other spatial variables using qgis before i use the molusce plugin for my prediction


  13. Yutthana says:

    Hello, please recommend me to solve the simulation result is no change.
    – landuse (2007 initial, 2016 final)
    – spatial variable (dist_road) >> reclassify (1,2,3,4,5)
    – Transition Modeling (ANN) >> Neightbourhood = 1 px, Learing rate = 0.5, Maximum iteration = 100, Hidden layer 2
    ## The simulation resut (lu 2025) in final step show the same output as landuse (2016)
    what is happen in the process?
    thank you

  14. Ingrid says:

    Hi, I’m trying to predict land cover change and I am using 2 landsat images from 2014 and 2017. My spatial variables are distance to roads and distance to rivers which I obtained using euclidean distance and reclassified them into 3 classes with the values; 1,4 and 9. My geometry checked out however, I’ve failed to create a changes map. Please help!

  15. Carlos Weiss says:

    Firstly, thank you for this very helpful plug-in. I would like to know whether this plugin deals with stochastic events. I used the ANN model to make prediction of probabilities but I am not sure how this sort of modelling deals with stochastic events.

  16. Judá García says:

    Once again me… This time appears this message:
    warning:/home/miguel/.qgis2/python/plugins/molusce/algorithms/models/crosstabs/ FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.
    if self._T == None:
    traceback: File “/home/miguel/.qgis2/python/plugins/molusce/”, line 111, in run
    File “/home/miguel/.qgis2/python/plugins/molusce/algorithms/models/crosstabs/”, line 48, in __crosstableFinished
    File “/home/miguel/.qgis2/python/plugins/molusce/”, line 444, in updateStatisticsTableDone
    File “/home/miguel/.qgis2/python/plugins/molusce/”, line 1058, in __drawTransitionStat
    stat = self.inputs[“crosstab”].getTransitionStat()
    File “/home/miguel/.qgis2/python/plugins/molusce/algorithms/models/crosstabs/”, line 79, in getTransitionStat
    initArea = tab.getSumRows()
    File “/home/miguel/.qgis2/python/plugins/molusce/algorithms/models/crosstabs/”, line 125, in getSumRows
    crosstable = self.getCrosstable()

    I checked my rasters and take away “Non Data” pixels, but continues showing the message. I’m f ### g desperate about this.
    Any help?

  17. Jomehzadeh says:

    Hi there!
    Every time I try to run MOLUSCE in QGIS version “2.18.14” on Windows 10, I face this error message:
    “Traceback (most recent call last):
    File “C:/Users/Jomehzadeh/.qgis2/python/plugins\molusce\”, line 109, in run
    d = moluscedialog.MolusceDialog(self.iface)
    File “C:/Users/Jomehzadeh/.qgis2/python/plugins\molusce\”, line 110, in __init__
    TypeError: QgsCollapsibleGroupBox.setSettings(QgsSettings): argument 1 has unexpected type ‘QSettings'”
    I appreciate any help!
    Best regards!

  18. Amaladas.P says:

    hi, i installed Qgis 2.14.19 , inside plugin window i search MOLUSCE, but MOLUSCE is not available! please tell me how solve this problem?

  19. jeenu says:

    I want to use molusce fo prediction .but how can I download iyt

  20. ahsan says:

    I am using Molusce. Kindly help me in creating Spatial variable.

  21. Amaladas.P says:

    hai Maxim Dubinin, i updated QGIS version 3.0.1-Girona, i searching MOLUSCE but not available why? ( i was read one web commant / suggesion they are telling computer name is don’t use numerical letter ex. Geo1) my computer name is also GIS1, may be this is issue ?

  22. pegah says:

    Hi Maxim Dubinin
    Is it possible to integrate MOLUSCE with future climate projections datasets to predict future LULC projection?
    thank you in advance.

  23. Márcia Rodrigues de Moura Márcia Fernandes says:

    Good afternoon, I’m using the molusce plugin and on the transition potential modeling tab the rendering is taking over 12 hours. That’s right?

  24. Majid Azari says:

    Hi Maxim Dubinin,
    Are there any papers or journals that have used MOLUSCE, I am looking for papers for my literature review but I cant find any. Could you please direct me to some papers?

  25. Majid Azari says:

    Hi Maxim Dubinin,
    I am getting an error after runnng the Cellular automata simulation, it says:
    An error has occurred while executing python code:
    AttributeError: ‘NoneType’ object has no attribute ‘color”

    can you please explain what this error means and how to solve it?

  26. Osvaldo says:

    I’ve been using MOLUSCE for a while now and I just realized there is no plugin available for the new version of QGIS. Area you planning to launch a new plugin version soon?

  27. ilyas says:

    Hi, may i ask how to cite this plug-in ?
    all of the studies i read only stated that this plugin is made by Asia air, but nothing found in the references..

    Thank you

Leave a Reply

Your email address will not be published. Required fields are marked *