Électricité de France is one of the largest electricity producers in the world, with more than 120 gigawatts of generation capacity and more than 40 million customers around the world.
Despite recent advances in battery technology, electricity storage remains expensive, so it is necessary to have equality between electricity supply and demand at any given moment in time. To do this, Électricité de France and other electricity producers need updated daily and even hourly forecasts of electricity demand and supply.
In addition to generating a lot of electricity, EDF also produces a lot of data, including information about electricity demand.
EDF uses this data to identify potential points of failure, direct new investment and ensure reliable electricity for customers.
Energy demand depends on a number of factors including time of day, day of year, day of week and temperature.
Partly for educational purposes, Jérôme Collet uses Julia to model electricity demand by combining EDF’s electricity demand data with temperature and calendar data.
- Julia solves the two language problem: ‘Due to Julia’s speed, it is no longer useful to write the computational core of a package in Fortran or C. So a large proportion of Julia packages are written entirely in Julia. Therefore, the growth of the Julia ecosystem is much faster than others.’
- Metaprogramming: ‘Furthermore, the metaprogramming capabilities of Julia are then extended to the packages written in Julia. For example, it is possible to compute the differential of a whole Julia function in many packages. It is also possible to profile these packages.’
- Domain Specific Languages: ‘Since the beginning of Julia, it has been tempting to use macros to write domain-specific languages (DSLs), i.e. to extend Julia syntax to provide a simpler interface to create Julia objects with complicated behavior. The first, and still most extensive, example is JuMP.’
- Parallel computing: ‘Native parallel computation capabilities, including GPGPU, plus links with many parallel computation frameworks such as MPI and OpenMP.’
- Capacity: ‘It is possible to process large amounts of data using Julia.’
- Package management: ‘Julia allows [the user] to manage the version of each package used, like Python’s virtualenv or Ruby’s bundler.’