DICE2016 Julia implementation

That would be awesome! I’m so swamped this semester with other stuff that I won’t be able to engage on this, though. Either we wait until Jan, when I will have a lot more time and would love to try to sort this out together, or maybe someone else from our Mimi team could help coordinate this? @ckingdon95 or @lrennels?

You should be able to install it via pkg> add https://github.com/AlexandrePavlov/MimiDICE2016.jl, and that should generally work for packages that are not registered in any registry. Having said that, we should also add it to our registry, really…

We have used both GitHub - JuliaOpt/NLopt.jl: Package to call the NLopt nonlinear-optimization library from the Julia language and GitHub - robertfeldt/BlackBoxOptim.jl: Black-box optimization for Julia with Mimi models, but one has to link things up manually in that case. There is also GitHub - jrising/OptiMimi.jl: Optimization for the Mimi.jl modeling framework that @jrising wrote. I’m not entirely sure whether that works with Mimi v1 at the moment, but that should make for a much easier optimization story for Mimi models.

Hey there, I am really glad that there is a MimiDICE implementation. I just wanted to ask if there is progress on confirming the results with GAMS?
Thanks a lot in advance!

Hi @MalinW,

DICE2016R is fully validated against the Excel version. The differences between DICE2016R and 2016R2, and DICE2016R2 fully, is described in

Nordhaus, William. 2018. “Projections and Uncertainties about Climate Change in an Era of Minimal Climate Policies.” American Economic Journal: Economic Policy, 10 (3): 333-60.

and (I believe) states that the only difference between versions is in the damage function parameter alpha:

D_t = alpha ∙ T_t^2 where D_t is damage costs, fraction of GWP lost.

In DICE2016-R1, alpha = 0.00236
In DICE2016-R2, alpha = 0.00227

To that end, we validated our version of DICE2016R2 against the DICE2016 Excel model with an updated parameter and the results match … however we are still working on validation against GAMS which as of now is not passing.

Let me know if you have any questions, I will put this is on my priority list to work on soon.

@lrennels, Thanks a lot for the quick reply!
Yes, I also found that in the paper and already updated the coefficient (called a2 in the model implentation).

I have another question that was raised here before by @daler6: there is no optimization done in the Mimi Framework? Do the Mimi DICE/RICE models (that are built on intertemporal optimization) just try to replicate the time path of the optimized time path in GAMS? But if I update a parameter then, the result would not be an intertemporally optimized time path? I am a bit confused about that and did not see anything on optimization in the tutorials.

Correct, there is no optimization out-of-the box in Mimi or our implementation of these models. The variables that are normally considered choice variables in DICE (savings rate and emission control rate) are just another set of input parameters in the Mimi version, and you can run the model with time series for these that are exogenous, and then they might be optimal or not.

You can use any of the many optimization packages in the Julia ecosystem that does optimization to find an optimal combination of savings and mitigation rates with DICE, and in fact that is something we’ve done many times for papers. I’m not sure right now whether any of those is published, at which point we can point you to the replication code on how we did that, but I know of at least one that should be out very soon that should have an example of how we did that.

There is also the OptiMimi.jl package that might make it easier to do what I’ve just described in the previous paragraph. In our papers we just coded the optimization manually, but that might actually be more work than necessary if we had just used OptiMimi.jl :slight_smile:

1 Like

Hi @davidanthoff, thanks a lot for the fast answer! Then I will try that ;).