In addition to the tips listed here, it is always strongly advised to check the reporting files as introduced in the Error handling section.


See the Performance and stability section for greater detail on this issue.

  • Use a commercial solver and the Barrier algorithm. Also, consider to skip Crossover and set a greater conversion tolerance ('BarConvTool' option in Gurobi).
  • Set general upper limits, ideally only for the objective value.
  • Define loss-of-load costs in order to create loss-of-load variables for each energy carrier.
  • Reduce the temporal resolution for selected carriers and set the temporal resolution of expansion to years.
  • Disable endogenous decommissioning by setting the decomm argument of the model constructor to :none.


  • Check, if you provided your parameter data according to the units given in the parameter list.
  • To save time, do not read-in your time-series data until the rest of your model is fully functioning.
  • Set a less detailed temporal resolution for debugging to speed up the process.
  • If your model is infeasible and you use Gurobi, try AnyMODs printIIS(model_object) function. It uses Gurobi's computeIIS function to obtain a set of constraints causing the infeasibility. Generally, this works better the more obvious a contradiction is (e.g. upper limits on expansion contradicts lower limit on installed capacity).
  • Define loss-of-load costs in order to create loss-of-load variables for each energy carrier.


  • Input files can be taken from different directories. For example, if you have different models with different regional scope, you could have a shared directory for technology data, that each of these models uses.
  • Additional columns within the input files and additional files within the input directories can be used for documentation.
  • The read-in parameter data can be manipulated between the construction of the model object and creation of the optimization problem using createOptModel!(model_object). This is particular useful for sensitivity analyses.
  • Models can be extended using standard JuMP commands.
  • Version control can be used for model development.

Common mistakes

(or at least mistakes that I believe to be common, because I made them when working with AnyMOD)

  • Expansion or operating costs not relating to capacity **before efficiency**.
  • Capacity limits of zero for certain technologies in certain regions (e.g. for wind offshore in Austria) are not explicitly set and as a result capacity is unlimited.
  • Limiting parameters are not defined correctly and limit the sum of variables across all years (see Limits on quantities dispatched).