1 Introduction

There has been a flurry of interest in determining whether we can meet the energy needs of our electrical grid purely through renewable sources (see [5, 12, 13]). Budischak et al. [7], for example, argues that renewables can provide as much as 99.9% of the energy required by a grid designed to serve 10% of the US population using nothing but wind, solar and a very large battery (with occasional hiccups that need to be covered by fossil generators).

We appreciate the value of this research which challenges us to think about renewables at dramatically higher levels than are present today. At the same time, we feel that it is valid to ask whether these levels are actually achievable if we challenge some of the assumptions made in their model of the problem. We applaud the study in [7] for using an adaptive simulation of wind, solar and loads, which is a significant improvement over the steady state analyses which simply use average production from solar and wind (typically obtained by multiplying the capacity times a “capacity factor”). For example, the Budischak simulator requires the use of storage, and provides an estimate of how much storage would have to be available to handle the variability of an all-renewable system serving virtually the entire load.

At the same time, the Budischak study suffers from some weaknesses that would limit our ability to cover our needs purely from wind and solar, supported by a large battery (or other forms of storage). For one, even their study indicates that there are outages on the order of 20 GW for brief periods, occurring roughly once each year. The paper suggests that these can be covered by traditional fossil generators, but it is hard to conceive of a system designed to produce 20 GW for such brief periods each year. However, we are going to focus on two different issues:

  1. 1.

    The Budischak model does not consider the marginal cost of wind, solar and storage investments. For example, a sufficiently large storage device would be at capacity only a tiny fraction of the time. Similarly, wind and solar generators run at their capacity only a small amount of time.

  2. 2.

    Given the high marginal cost of a pure renewable portfolio, we believe that fossil generation would retain a significant share of the generation stack even if incentives such as carbon taxes and lower utilization pushed the price of fossil-generated electricity to very high levels. The problem is that fossil generation, in particular steam (which is the most economical, from both cost and pollution perspectives), requires some level of advance planning which introduces the issue of forecasting uncertainties when planning in the presence of wind and solar.

We also note that our model is specifically geared toward modeling the PJM region. Our wind data are from actual PJM wind farms, while our solar data are based on solar farms in New Jersey. The loads and generator stack are all for PJM. By contrast, the Budischak study was a more generic study of an electricity market consisting of wind, solar and battery technologies and occasional outages (or backup fossil generation). We fully recognize that any model can be criticized. A recent study by General Electric for PJM found that PJM could manage renewable penetration of as much as 30 percent using an older grid simulator called MARS, which models the grid and individual generation, but without proper handling of uncertainty (which would overstate the ability to handle renewables). The second author is involved in a very detailed grid simulator called SMART-ISO [1, 23] which models the full grid, all generators (with ramping constraints and min up/down requirements) and a careful handling of uncertainty. However, SMART-ISO requires several hours to simulate a week, and is not designed for high level policy studies that would explore potentially very high penetrations of wind and solar.

In this paper, we describe a new model we call SMART-Invest which can be viewed as an aggregate version of SMART-ISO. SMART-Invest does not model the grid or individual power generators, but is able to model the complete supply stack (as an option), using actual fuel costs and heat rates of a set of generators. It models an entire year in hourly time-steps, capturing hourly variations, diurnal solar patterns, weather patterns, and seasonal patterns. Figure 1 shows the energy from the PJM wind farms, and the solar farms for PSE&G, in 5-min increments over an entire year, illustrating the nature of variability from each source. It also models the fact that slow generators have to be planned 24 h in advance, where we carefully capture the uncertainty in both wind and solar forecasts.

Fig. 1
figure 1

Wind and solar generation over a year

SMART-Invest then uses a stochastic search algorithm to optimize over different combinations of investments. Each evaluation of a set of investments uses a full simulation over the entire year, capturing all forms of variability as well as forecasting uncertainty. Parallel computation dramatically accelerates these intensive computations, allowing the model to search over different combinations of investments using a specially designed stochastic search algorithm.

SMART-Invest is very flexible and can be used for a variety of experiments. Table 1 lists the main capabilities of SMART-Invest for solving different problems. SMART-Invest allows the cost of fossil fuels to be modeled in two ways. It can use an actual generation stack that captures the mix of generators, fuel types and heat rates. As an alternative, the user can choose to simply specify the costs of slow and fast fossil generators, allowing it to be used for studies where it is necessary to directly control these costs. We categorize all generation types into the seven generation technologies listed in Table 1. It is possible to vary the assumed costs of each type of generation to assess its impact on optimal portfolios. For example, in a particular problem, one may be interested in finding the optimal battery investment for a specific mix of other types of generation (i.e. six capacity types are constant numbers and the battery capacity is the decision variable). In another experiment, an analyst might want to find the optimal mix of different generation technologies. SMART-Invest is able to optimize for up to five technologies (wind, solar, battery, slow fossil, and fast fossil), but it cannot handle the min up/down constraints for individual generators, and it does not model the grid. It can model the complete offer stack from PJM (around 1000 cost bands), or the user may accelerate the model by using an aggregated supply stack, even using a single cost band for each generator technology. Note that the aggregated supply stack uses a normalized capacity representation, and thus, we can still optimize for a particular technology with an aggregated supply stack. In addition to these, SMART-Invest has a reserve parameter to produce robust policies in the face of forecast uncertainties; a process is available for optimizing the reserve parameter for a particular generation mix. In addition to investment or marginal cost parameters, the user has the option of tuning emission costs (i.e. CO\(_2\), SO\(_2\), and NO\(_x\) costs) and renewable incentives (e.g. SREC prices).

Table 1 Different ways to use SMART-Invest for a wide range of experiments

SMART-Invest is a contribution to the literature that optimizes renewable energy portfolios, a topic that is attracting growing attention. Prior to the [7] study, one of the most comprehensive studies was performed in [8, 11], which considers a portfolio focusing on wind, water and sunlight (WWS). A major problem faced by all portfolios involved high penetrations of renewables is handling the variability. These studies assume a conversion of a large portion of the transportation system to hydrogen, a fuel source that requires considerable energy to produce. Hydrogen (liquid or compressed gas) can be viewed as a form of storage, taking advantage of periods when wind and solar exceed the load. But this assumes adoption of hydrogen as a major fuel source, and as of this writing this seems unlikely. Ekren and Ekren [9] also considers the optimization of a solar-wind-storage system. Other authors try to mitigate the variability of renewables (especially wind) by combining wind farms from wide areas—see [2, 14] and the references cited there. A more careful model of off-shore wind integration using wind with fossil backup [23] showed that significant reserves are needed to handle the uncertainty of wind. This paper studied high levels of off-shore wind using SMRT-ISO, and found that grid constraints limited integration at around 3GW of offshore generation.

Nahmmacher et al. [15] provide a method to select representative days to avoid the need to simulate an entire year, but this approach (which is quite popular) ignores the sequencing of decisions, where steam generation decisions are made 24 h in advance. To properly handle uncertainty, it is necessary to properly capture the lag between when decisions are made and when they impact the system (e.g. 24 h out for steam, 1 h out for gas turbines, and real-time ramping). Wogrin et al. [25] provide a more detailed unit commitment model, but make no attempt to handle the uncertainty in day-ahead and hour-ahead forecasts. The most detailed unit commitment model we are aware of is reported in [23] called SMART-ISO which carefully handles the scheduling of generators, and the uncertainty of day-ahead and hour-ahead forecasts, but SMART-ISO requires several hours to simulate a single week, which makes it impractical for doing portfolio optimization, where it is critical to handle seasonality.

SMART-Invest can be viewed as a more sophisticated version of the Budischak model, or a streamlined version of SMART-ISO. It can be used to simulate an entire year in hourly increments, optimizing commitments to slow and fast fossil generators, and optimizing the use of storage over a 36 h horizon, while exploiting wind and solar energy as it becomes available. The model correctly handles advance commitments based on day-ahead forecasts of wind and solar (for steam commitments) and hour-ahead forecasts for scheduling fast generators, and it handles ramping constraints at an aggregate level. These decisions require solving a linear program on a rolling basis to make commitments to steam generators 24 h in advance. This process is then embedded in a stochastic search algorithm for optimizing investments in wind, solar and storage, where we take advantage of the approximate convexity of the problem. We demonstrate that our search algorithm consistently finds near-optimal mixes of wind, solar and storage given the capital costs of each of these resources, along with the cost of slow and fast fossil generators.

In this paper, we are going to show the following:

  • A true cost minimized solution (where fossil is part of the mix) that achieves 96% from renewables requires marginal fossil costs over $2000/MWh, and results in a levelized cost of $255/MWh.

  • Renewables do not enter the portfolio until the cost of energy from fossils hits $60/MWh, at which point it rises quickly to 30% of the portfolio using just wind generation.

  • Investments in solar do not enter the portfolio until fossil costs reach more than $300/MWh. Battery storage at $500/kWh does not enter the portfolio until fossil costs hit more than $500/MWh (these analyses ignore the use of batteries for other purposes such as frequency regulation, backup power and peak shifting to avoid transmission investment).

  • The investment in wind begins to increase when a CO\(_{2}\) tax of $50/ton is imposed, growing quickly and then leveling off for a tax above $70/ton.

The intent of this paper is primarily to propose a modeling methodology, rather than to draw any policy conclusions. For example, there is now a fairly substantial literature in the algorithmic community focusing on handling uncertainty in lookahead models using the technology of stochastic programming [22, 24]. We take a different approach known as a parametric cost function approximation [17, 18] that more closely mimics industry practice. This approach uses a parametrically modified lookahead model that is optimized in a stochastic base model. SMART-Invest represents a compromise in the development of policy models, offering a much more accurate model of wind, solar and storage by capturing hourly, daily and seasonal variations. Our initial experiments ignore state-imposed renewable portfolio targets and tax credits, although these can be handled using appropriate modifications of inputs.

A major contribution of this paper is the proper modeling of the sequencing of information and decisions, including the lag between when commitments are made and the information available when these decisions are made. We handle the need to make commitments for slow energy generation 24 h in advance, while fast generation is planned 1 h in advance. We model the evolution of forecasts, and propose a robust policy for handling the uncertainty. Considerable care has been invested in the notation, including the modeling of the stochastic base model and the lookahead model that forms the basis of our policy (a major point of confusion in the literature on stochastic unit commitment). We hope that our model may serve as a template for other researchers.

We begin in Sect. 2 by presenting the operating model which determines the mix of wind, solar, storage and fossil generation (fast and slow), given a fixed level of investment. We distinguish between the stochastic base model which spans an entire year, and the operating policy based on a cost function approximation in the form of a parametrically modified deterministic lookahead model. Then, Sect. 3 describes the search algorithm that optimizes the investment decisions. Section 4 presents a series of experiments to investigate the optimal generation mix under different market conditions. Section 5 concludes the paper.

2 The operating model

The operating model steps forward in hourly increments, optimizing over a 36 h horizon. The model determines how much energy to use from each of our seven generation technologies in \({\mathcal G}\) (wind, solar, battery storage, slow and fast fossil generation, and slow and fast non-fossil generation). Decisions for the available slow generation capacity are fixed 24 h out, which means that the amount of slow generation for hours 0–23 are capped by the fixed values from prior hours. We use actual wind forecasts from PJM’s forecasting vendor, as well as day-ahead and short-term solar forecasts. We use normalized historical wind and solar generation numbers for simulating wind and solar. The difference between the forecast and actual generation is the noise parameter. A tunable reserve parameter is used to produce robust policies in the face of forecasting uncertainties.

2.1 The stochastic base model

Throughout, we let ws, and b be indices to represent wind, solar, and battery generation. Let \(\mathcal {G}^{slow}\) and \(\mathcal {G}^{fast}\) represent the mutually exclusive sets of slow generators (e.g. steam and nuclear) and fast generators (e.g. gas turbines), respectively. Also, let \({\mathcal G}=\{w,s,b\}\cup \mathcal {G}^{slow}\cup \mathcal {G}^{fast}\) be the set of sources of energy generation. New investment decisions can be made for up to (but not necessarily all) five generation technologies including wind, solar, battery, slow fossil, and fast fossil. Note that \(\mathcal {G}^{slow}\) and \(\mathcal {G}^{fast}\) can include the existing fossil and non-fossil slow and fast generators, as well as any new investment in slow and fast fossil generation. We represent the set of generation types for which we make an investment decision by \(\mathcal {I}\subseteq \mathcal {G}\).

We define the following notation.

Indices: (gt)

  • \(g = \)The generic index for generator set \(\mathcal {G}\) or its subsets.

  • t \(=\) The hour for which we are solving the problem. This is a number in the range of 0–\(|\mathcal {T}|-1\). Since we simulate for a whole year, \(|\mathcal {T}| = 365*24=8,760\).

Parameters: \((n^{T}, n^{H}, x^{inv}_g,c_{g}^{opr},r_{g}^{u}, r^{d}_{g},e^{c}, e^{d},c^{cb}, c^{db},n^{B})\)

  • \(n^{T}\) \(=\) The horizon of the problem, i.e. the number of hours in the future for which we tentatively plan.

  • \(n^{H}\), \((n^{H}\le n^{T})\) \(=\) The notification time, which is the number of hours that a slow generator has to be notified before it can be turned on.

  • \(x^{inv}_g\) \(=\) The capacity of generator type \(g\in {\mathcal G}\) (in MW). Although this is a decision variable of the investment problem (for \(g\in \mathcal {I})\), \(x^{inv}_{g}\) is a fixed parameter in the operating model. Wind and solar installed capacities are represented by \(x^{inv}_{w}\) and \(x^{inv}_{s}\), respectively.

  • \(c_{g}^{opr}\) \(=\) Operational cost of generating one MWh of electricity using generator \(g\in {\mathcal G}\) \((MWh)\).

  • \(r_{g}^{u}, r^{d}_{g}\) \(=\) Normalized ramp up and ramp down rates (as a percentage of the capacity) for generator \(g\in \mathcal {G}\).

  • \(e^{c}, e^{d}\) \(=\) Charging and discharging efficiency for the battery technology.

  • \(c^{cb}, c^{db}\) \(=\) Marginal cost of charging and discharging the battery (in MWh). These costs are set to zero in our experiments where we assume storage is a battery, but storage can come in many forms, some of which introduce actual storage costs.

  • \(n^{B}\) \(=\) The number of hours required to fully charge or discharge the battery. We use this rate along with the battery energy capacity to calculate power capacity of the battery (in MW).

State variables: \(S_{t}=(R^{b}_{t},(R^{slow}_{t,t',g})_{t'\ge t},q^{0}_{t,g},(f^{w}_{t,t'})_{t'\ge t},(f^{s}_{t,t'})_{t'\ge t},(f^{d}_{t,t'})_{t'\ge t}, q^{w}_{t},q^{s}_{t},d_{t})\)

  • \(R^{b}_{t}\) \(=\) State of charge of the storage device at time t (in MWh).

  • \(R^{slow}_{t,t',g}\) \(=\) The available capacity of slow generator \(g\in \mathcal {G}^{slow}\) for time \(t'\), as it is known at time t (in MW). If \(t'-t >24\), then this is equal to \(x^{inv}_{g}\). The available slow generation is fixed when \(t'=t+24\), and then remains the same for \(t'-t < 24\) due to notification time requirements.

  • \(q^{0}_{t,g}\) \(=\) The starting generation level for generator g at time t (in MW). This parameter is decided at time \(t-1\).

  • \(f^{w}_{t,t'}\) \(=\) The normalized (i.e. as a percentage of capacity) wind forecast of hour \(t'\) measured at hour t (in MW). These data points are obtained from the official wind forecast figures of the PJM. In our model, we assume that, at each hour t, a wind forecast is available for 48 h in the future.

  • \(f^{s}_{t,t'}\) \(=\) Solar forecast of hour \(t'\) made at hour t, expressed as a percentage of the maximum solar output (in MW).

  • \(f^{d}_{t,t'}\) \(=\) Demand forecast of hour \(t'\) made at hour t.

  • \(q^{w}_{t}, q^{s}_{t}\) \(=\) The actual wind and solar generation at time t (in MW).

  • \(d_{t}\) \(=\) Demand in hour t (in MW).

Decision variables: \((x^{gen}_{ t,g},x^{bc}_{t}, x^{bd}_{t},x^{gen}_{t,b},R^{slow}_{t,t+n^{H},g})\)

  • \(x^{gen}_{t, g}\) \(=\) The amount of generation from g at time t (in MW).

  • \(x^{bc}_{t}, x^{bd}_{t}\) \(=\) The amount that the battery is charged from (discharged into) the market at time t (in MW).

  • \(x^{gen}_{t,b} \)=\( x^{bc}_{t}-x^{bd}_{t}\).

  • \(R^{slow}_{t,t+n^{H},g}\) \(=\) The available slow generator g for time \(t+n^{H}\) , which is determined at time t (in MW).

A policy \(\pi \) represented by the function \(X_{t}^{\pi }(S_{t}|(x^{inv}_{g})_{g\in \mathcal {G}}) \) makes hourly planning decisions. The first step in simulating the market for a whole year is finding a policy. First of all, during each hour, total generation must be equal to demand. The market operator must solve an optimization problem to ensure that demand is met for each hour. In addition to this, our market operator manages the battery, and to plan the battery appropriately, it needs to consider future requirements of the market. Thus, in our model, the policy is to solve a lookahead model that optimizes generation and storage over a 36 h horizon, subject to notification constraints (e.g. slow steam generators may not be fully available in less than 24 h notification). Although we solve the market operation problem for up to 36 h in the future, we only implement the market plan for the current hour. The future plan is only a tentative plan for determining the best decision now, and we discard any results related to the future (except some generation figures for the slow generators that we discuss in the next section). We provide a detailed description of our policy \(X^{\pi }_{t}(S_{t}|(x^{inv}_{g})_{g\in \mathcal {G}})\) in section 2.2.

Exogenous information processes (\(W_{t}\)) the exogenous information process

$$\begin{aligned} W_{t}=\left( \left( \varepsilon ^{wf}_{t,t'}\right) _{t'\ge t}, \varepsilon ^{w}_{t},\left( \varepsilon ^{sf}_{t,t'}\right) _{t'\ge t}, \varepsilon ^{s}_{t},\left( \varepsilon ^{df}_{t,t'}\right) _{t'\ge t}, \varepsilon ^{d}_{t}\right) \end{aligned}$$

is defined as the random variables that capture the stochastic updating of wind, solar, and demand forecasts on a rolling basis, in addition to the error between actual and (hour-ahead) forecasted wind, solar, and demand. Let \(\omega \in \Omega \) be a sample path for (\(W_1, \ldots , W_T\)). Let \({\mathcal F}\) be the sigma-algebra on \(\Omega \), and let \({\mathcal F}_t = \sigma (W_1, \ldots , W_t)\) be the sigma-algebra generated by the information known up to time t. Throughout our presentation, we assume that any variable indexed by t is \(\mathcal {F}_t\)-measurable, which is to say that we have all the information we need to compute any variable indexed by t, at time t.

Transition function We represent the transition function using \(S_{t+1}= S^{M}(S_{t},x_{t}, W_{t+1})\). The transition function is given by the following equations:

  • The battery status \(R^b_t\) evolves according to:

    $$\begin{aligned} R^{b}_{t+1} =R^{b}_{t}+e^{c}x^{bc}_{t}-\frac{1}{e^{d}}x^{ bd}_{t} . \end{aligned}$$
  • Slow ramping generators require advance notification to prepare for generating the requested amount. Therefore, energy markets also run longer-term problems, for example a day ahead of actual generation (a day-ahead problem). We plan generation over a 36 h horizon, but make commitments to slow units \(n^H = 24\) h into the future, meaning that slow generation may not be fully available for times less than 24 h in the future. The decision function \(X^{\pi }(S_{t}|(x^{inv}_{g})_{g\in \mathcal {G}})\) determines the value of \(R^{slow}_{t,t+n^{H},g}\).

  • Starting generation from g for hour \(t+1\) is equal to the generation level of g at hour t:

    $$\begin{aligned} q^{0}_{t+1,g} = x^{gen}_{t,b}. \end{aligned}$$
  • The wind forecast, solar forecast, and generation noise parameters determine how wind and solar forecasts and generation processes update through time:

    $$\begin{aligned} f^{w}_{t+1,t'}= & {} f^{w}_{t,t'}+\varepsilon ^{wf}_{t+1,t'},\\ f^{s}_{t+1,t'}= & {} f^{s}_{t,t'}+\varepsilon ^{sf}_{t+1,t'},\\ f^{d}_{t+1,t'}= & {} f^{d}_{t,t'}+\varepsilon ^{df}_{t+1,t'},\\ q^{w}_{t+1}= & {} f^{w}_{t,t+1}+\varepsilon ^{w}_{t+1},\\ q^{s}_{t+1}= & {} f^{s}_{t,t+1}+\varepsilon ^{s}_{t+1}.\\ d^{}_{t+1}= & {} f^{d}_{t,t+1}+\varepsilon ^{d}_{t+1}. \end{aligned}$$

Objective function The goal is to minimize the total cost of meeting demand considering the physical constraints of the market such as capacity or ramping constraints. Let \(C(S_{t},x_{t})\) denote the contribution function at time t,  then we have

$$\begin{aligned} C(S_{t}, x_{t}) =\sum _{g\in G}c^{opr}_{g}x^{gen}_{t,g}+c^{cb}x^{bc}_{t}+\frac{c^{db}}{e^{d}}x^{bd}_{t}. \end{aligned}$$

The total cost over the year would be written \(\sum _{t\in {\mathcal T}} C(S_t,x_t)\), but writing the objective function this way only works for a deterministic process. Since \(S_t\) is a random variable, we let \(X^\pi _t(S_t)\) be the policy that returns decision \(x_t\) when we are in state \(S_t\). If we fix the policy, the objective function would be written

$$\begin{aligned} F^\pi = \mathbb {E} \sum _{t\in {\mathcal T}} C(S_t,X^\pi _t(S_t)), \end{aligned}$$

where \(S_{t+1} = S^M(S_t,x_t, W_{t+1})\). Our optimization problem is to find the best policy, which we write as

$$\begin{aligned} F^*(S_0)=\min _\pi {\mathbb {E}}\left\{ \sum _{t\in \mathcal {T}}^{}C(S_{t},X^\pi _{t}(S_{t})) |S_0\right\} . \end{aligned}$$
(1)

The next section describes a class of robust lookahead policies based on a parametric cost function approximations, where our search over policies is handled by searching for the best policy within this class.

2.2 The hourly optimization model \(X^{\pi }_{t}(S_{t}|\theta ,(x^{inv}_{g})_{g\in \mathcal {G}})\)

The lookahead model is formulated over a horizon \(n^T\) spanning \(t' = t, t+1, \ldots , t+n^T\). The model uses point forecasts of wind, solar and loads, but achieves robust behavior using a modified formulation which factors the forecast of energy from wind and solar to account for uncertainty. This adjustment, known as a parametric cost function approximation, has to be tuned using the stochastic base model represented by Eq. (1). Let us first define the following notation.

Parameters \((\theta )\)

  • \(\theta \) \(=\) A parameter that factors the forecast of wind and solar to handle uncertainty (\(\theta \) \(=\) 1 implies no adjustment for uncertainty, \(\theta >1\) factors up the forecast to introduce a buffer to handle uncertainty).

Decision variables \((\tilde{x}^{gen}_{ t, t',g},\tilde{x}^{bc}_{t,t'}, \tilde{x}^{bd}_{t,t'},\tilde{x}^{gen}_{t,t',b},\tilde{x}^{bs}_{t,t'})\)

To avoid confusion with the decisions \(x_t\) in the base model, we designate all decision variables in the lookahead model using tildes. The decision variables in the lookahead model are also indexed by t, representing the time at which the lookahead model is created, and \(t'\), representing the point in time within the lookahead model.

  • \(\tilde{x}^{gen}_{t, t', g}\) \(=\) The decision variable of the hourly problem indicating the amount of generation from g at time \(t'\) (\(t\le t'< t+n^{T}\)) according to the hourly problem solved at hour t,

  • \(\tilde{x}^{bc}_{t,t'}, \tilde{x}^{bd}_{t,t'}\) \(=\) The amount that the battery is charged from (discharged into) the market at time \(t'\) according to the hourly problem solved at hour t,

  • \(\tilde{x}^{gen}_{t,t',b}\) \(=\) \(\tilde{x}^{bc}_{t,t'}-\tilde{x}^{bd}_{t,t'}\),

  • \(\tilde{x}^{bs}_{t,t'}\) \(=\) The battery status (energy stored in the battery) at hour \(t'\) according to the hourly problem solved at hour t.

A robust look-ahead policy (in the form of a linear program) finds the value of these decision variables by minimizing total generation cost:

$$\begin{aligned} X^\pi _t(S_t|\theta ,(x^{inv}_{g})_{g\in \mathcal {G}})=\mathrm{arg}\min _{(\tilde{x}_{t,t'})_{t'}} \sum _{t'=t}^{t+n^{T}}\sum _{g\in \mathcal {G} }\left( c^{opr}_{g}\tilde{x}^{gen}_{t,t',g}+c^{cb}\tilde{x}^{bc}_{t,t'}+\frac{c^{db}}{e^{d}}\tilde{x}^{bd}_{t,t'}\right) . \end{aligned}$$

These variables are then used to determine the decision variables of the operating model at time t:

$$\begin{aligned} x^{gen}_{ t,g}&=\tilde{x}^{gen}_{ t,t,g},\quad \forall g\in \mathcal {G,} \\ x^{bc}_{t}&=\tilde{x}^{bc}_{t,t},\\ x^{bd}_{t}&=\tilde{x}^{bd}_{t,t},\\ x^{gen}_{t,b}&=\tilde{x}^{gen}_{t,t,b}, \\ R^{slow}_{t,t+n^{H},g}&=\tilde{x}^{gen}_{t,t+n^{H},g},\quad \forall g\in \mathcal {G}^{slow}. \end{aligned}$$

The linear program solved at hour t is as follows.

$$\begin{aligned} X^\pi _t(S_t|\theta ,(x^{inv}_{g})_{g\in \mathcal {G}})=\mathrm{arg}\min _{(\tilde{x}_{t,t'})_{t'}} \sum _{t'=t}^{t+n^{T}}\sum _{g\in G}\left( c^{opr}_{g}\tilde{x}^{gen}_{t,t',g}+c^{cb}\tilde{x}^{bc}_{t,t'}+\frac{c^{db}}{e^{d}}\tilde{x}^{bd}_{t,t'}\right) \qquad \end{aligned}$$
(2)

This is solved subject to the following constraints (for \(t\le t'\le t+n^{T} \), except where indicated differently).

$$\begin{aligned} \sum _{g\in G}\tilde{x}^{gen}_{t,t',g}= & {} \theta f^{d}_{t,t'},~~ \end{aligned}$$
(3)
$$\begin{aligned} \tilde{x}^{gen}_{t,t',b}= & {} \tilde{x}^{bd}_{t,t'}-\tilde{x}^{bc}_{t,t'},~~ \end{aligned}$$
(4)
$$\begin{aligned} \tilde{x}^{bs}_{t,t'+1}= & {} \tilde{x}^{bs}_{t,t'}+e^{c}\tilde{x}^{bc}_{t,t'}-\frac{1}{e^{d}}\tilde{x}^{ bd}_{t,t'},~~t\le t'\le t+n^{T}-1 \end{aligned}$$
(5)
$$\begin{aligned} \tilde{x}^{gen}_{t,t'+1,g}\le & {} \tilde{x}^{gen}_{t,t',g}+r^{u}_{g}x^{inv}_{g},~~g\in \mathcal {G}\backslash \mathcal {G}^{slow},t\le t'\le t+n^{T}-1 \end{aligned}$$
(6)
$$\begin{aligned} \tilde{x}^{gen}_{t,t'+1,g}\ge & {} \tilde{x}^{gen}_{t,t',g}-r^{d}_{g}x^{inv}_{g}, ~~g\in \mathcal {G}\backslash \mathcal {G}^{slow},t\le t'\le t+n^{T}-1 \end{aligned}$$
(7)
$$\begin{aligned} \tilde{x}^{gen}_{t,t'+1,g}\le & {} \tilde{x}^{gen}_{t,t',g}+r^{u}_{g}R^{slow}_{t,t',g}, ~~g\in \mathcal {G}^{slow},t\le t'\le t+n^{T}-1 \end{aligned}$$
(8)
$$\begin{aligned} \tilde{x}^{gen}_{t,t'+1,g}\ge & {} \tilde{x}^{gen}_{t,t',g}-r^{d}_{l}R^{slow}_{t,t',g},~~g\in \mathcal {G}^{slow},t\le t'\le t+n^{T}-1 \end{aligned}$$
(9)
$$\begin{aligned} \tilde{x}^{gen}_{t,t,g}\le & {} q^{0}_{t,g}+r^{u}_{g}x^{inv}_{g}, ~~g\in \mathcal {G}\backslash \mathcal {G}^{slow} \end{aligned}$$
(10)
$$\begin{aligned} \tilde{x}^{gen}_{t,t,g}\ge & {} q^{0}_{t,g}-r^{d}_{g}x^{inv}_{g}, ~~g\in \mathcal {G}\backslash \mathcal {G}^{slow} \end{aligned}$$
(11)
$$\begin{aligned} \tilde{x}^{gen}_{t,t,g}\le & {} q^{0}_{t,g}+r^{u}_{g}R^{slow}_{t,t',g},~~g\in \mathcal {G}^{slow}\end{aligned}$$
(12)
$$\begin{aligned} \tilde{x}^{gen}_{t,t,g}\ge & {} q^{0}_{t,g}-r^{d}_{g}R^{slow}_{t,t',g},~~g\in \mathcal {G}^{slow}\end{aligned}$$
(13)
$$\begin{aligned} \tilde{x}^{gen}_{t,t',w}\le & {} f^{w}_{t,t'}x^{inv}_{w}, ~~\ \end{aligned}$$
(14)
$$\begin{aligned} \tilde{x}^{gen}_{t,t',s}\le & {} f^{s}_{t,t'}x^{inv}_{s},~~ \end{aligned}$$
(15)
$$\begin{aligned} \tilde{x}^{gen}_{t,t',g}\le & {} R^{slow}_{t,t',g},~~g\in \mathcal {G}^{slow}, \end{aligned}$$
(16)
$$\begin{aligned} 0\le \tilde{x}^{gen}_{t,t',g}\le & {} x^{inv}_{g},~~\forall g\in \mathcal {G}\backslash \{b\}, \end{aligned}$$
(17)
$$\begin{aligned} 0\le \tilde{x}^{bs}_{t,t'}\le & {} x^{inv}_{b}, ~~\end{aligned}$$
(18)
$$\begin{aligned} 0\le \tilde{x}^{bd}_{t,t'}\le & {} e^{d}x^{inv}_{b}/n^{B}, ~~ \end{aligned}$$
(19)
$$\begin{aligned} 0\le \tilde{x}^{bc}_{t,t'}\le & {} x^{inv}_{b}/(e^{c}n^{B}), ~~ \end{aligned}$$
(20)
$$\begin{aligned} \tilde{x}^{bs}_{t,t'}+e^{c}\tilde{x}^{bc}_{_{t,t'}}\le & {} x^{inv}_{b}, ~~ \end{aligned}$$
(21)
$$\begin{aligned} \tilde{x}^{bs}_{t,t'}-\frac{1}{e^{d}}\tilde{x}^{bd}_{t,t'}\ge & {} 0, ~~ \end{aligned}$$
(22)
$$\begin{aligned} \tilde{x}^{bs}_{t,t}= & {} R^{b}_{t}. \end{aligned}$$
(23)

The constraints are as follows:

  • Equation (3)—Balancing constraint, i.e. total generation must be equal to demand at each point in time, where \(\theta \) is a parameter (typically greater than 1) that forces the system to schedule reserve generation to compensate for uncertainty.

  • Equation (4)—Battery generation can be negative (if charging), and we can represent it using two non-negative variables \(\tilde{x}^{bd}_{t,t'}\) and \(\tilde{x}^{bc}_{t,t'}\).

  • Equation (5)—Battery status transition from 1 h to the next.

  • Equations (6)–(7)—Ramping constraints for all generators except slow generators.

  • Equations (8)–(9)—Ramping constraints for slow generators. These generators may not be available fully at a particular time, and thus the ramping is also proportional to their available capacity instead of \(x^{inv}_{l}\).

  • Equations (10)–(13)—Similar to (6), (7), (8) and (9), but for the first hour.

  • Equation (14)–(15)—Wind and solar generation must be less than or equal to the forecasted value.

  • Equation (16)—Available capacity for slow generators.

  • Equation (17)—Capacity constraint.

  • Equation (18)—Energy capacity constraint for the battery.

  • Equation (19)–(20)—Power capacity for charging or discharging the battery.

  • Equation (21)–(22)—Maximum amount of charging or discharging the battery is also constrained by the status of the battery. For example, if the battery is full, charging is not possible.

  • Equation (23)—Initial battery status.

The hourly problem is a linear program which we solve using Cplex. We emphasize that solving the lookahead model in (2) is not an optimal policy, but we obtain robust behavior by tuning \(\theta \) using the base model given by Eq. (1).

3 The investment problem

We next consider the problem of finding the optimal mix of investment in generators \(\mathcal {I}\subseteq \mathcal {G}\ \) while minimizing the total yearly costs. Total cost includes prorated yearly cost of investment, operational costs (independent of generation amount), and cost of generation (e.g. fuel costs).

Before proceeding, we need to introduce some new notation.

Parameters: \((\mathfrak {i},n^{L}_{g}, c^{capital}_{g}, c^{yrOper}, c^{inv}_{g},k_{g})\)

$$\begin{aligned} \mathfrak {i}= & {} \mathrm{The~interest~rate.}\\ n^{L}_{g}= & {} \mathrm{The~lifetime~of~generation~ technology}~ g.\\ c^{capital}_{g}= & {} \mathrm{The ~capital ~cost ~of ~investment ~in ~one ~MW~ of ~generation ~type}~ g.\\ c^{yrOper}_{g}= & {} \mathrm{The ~yearly ~operational ~cost ~for ~each ~MW ~of~ generation ~type}~ g.\\ c^{inv}_{g}= & {} \mathrm{The ~prorated ~yearly ~cost ~of~ investment ~in ~MW ~of ~generation ~type}~ g.\\ k_{g}= & {} \mathrm{The ~installed~ capacity~ of~ generator}~g\in \mathcal {G}\backslash \mathcal {I}. \end{aligned}$$

We include the yearly operational costs (independent of generation level) in our estimation of the yearly investment cost \(c^{inv}_{g}\). For each type of generation, we can calculate the yearly investment cost as follows:

$$\begin{aligned} c^{inv}_{g}=\frac{\mathfrak {i}c^{capital}_{g}}{1-(1+\mathfrak {i})^{-n^{L}_{g}}}+c^{yrOper}_{g}. \end{aligned}$$
(24)

Decision variable: \((x^{inv}_{g})\)

$$\begin{aligned} x^{inv}_{g}= & {} \text {The decision variable indicating the amount of investment in generation}\\&\text {type}\, g\in \mathcal {G}\ \text {(measured in MWh for battery and MW for the others). } \end{aligned}$$

Other functions: \((C^{inv}, C^{gen})\)

$$\begin{aligned} C_{}^{inv}((x^{inv}_{g})_{g\in \mathcal {I}})= & {} \text {Total cost of investment}\\= & {} \sum _{g\in \mathcal {I}}c_{g}^{inv}x^{inv}_g.\\ C^{gen}((x^{inv}_{g})_{g\in \mathcal {G}})= & {} \text {The total yearly cost of generation}\\= & {} \sum _{t=0}^{\left| \mathcal {T}\right| }\sum _{g\in \mathcal {G}}\left( c^{opr}_{g}x^{gen}_{t,g}+c^{cb}x^{bc}_{t}+\frac{c^{db}}{e^{d}}x^{bd}_{t}\right) . \end{aligned}$$

\(C^{gen}\) is calculated by solving the operating simulation discussed in section 2. The objective function is equal to the sum of yearly prorated investment and generation costs:

$$\begin{aligned} C^{all}((x^{inv}_{g})_{g\in \mathcal {G} \mathcal {}})= & {} C_{}^{inv}((x^{inv}_{g})_{g\in \mathcal {I}})+C_{}^{gen}( (x^{inv}_{g})_{g\in \mathcal {G}})\nonumber \\= & {} \sum _{g\in \mathcal {I}}c_{g}^{inv}x^{inv}+\sum _{t=0}^{\left| \mathcal {T}\right| }\sum _{g\in G}\left( c^{opr}_{g}x^{gen}_{t,g}+c^{cb}x^{bc}_{t}+\frac{c^{db}}{e^{d}}x^{bd}_{t}\right) .\qquad \end{aligned}$$
(25)

The investment problem is written as the following optimization problem:

$$\begin{aligned} \min _{x^{inv}_g:g\in \mathcal {G}}&C_{}^{all}( (x^{inv}_{g})_{g\in \mathcal {G}}) \end{aligned}$$

subject to

$$\begin{aligned} x^{inv}_g\ge 0,&g\in \mathcal {I},\\ x^{inv}_{g} = k_{g},&g\in \mathcal {G}\backslash \mathcal {I}. \end{aligned}$$

3.1 The investment optimization algorithm

Assuming that generator installed capacities are known, we can simulate the yearly operation of the market by going forward in time and solving hourly problems for all hours \(t\in \mathcal {T}\). As we mentioned earlier, the purpose of this yearly simulation is to calculate total yearly generation cost (i.e. \(C_{}^{gen}((x^{inv}_{g})_{g\in \mathcal {I}}, (x^{inv}_{g})_{g\in \mathcal {G}\setminus \mathcal {I}})\)). Although we can calculate \(C^{gen}\) numerically, it is an unknown non-smooth function, and in order to solve the investment problem (Eq. (26)) we need to develop an appropriate algorithm to solve this complex problem.

3.2 An adaptive stepsize rule

The basic idea of the stepsize rule is to use a form of Armijo rule [4, 6] by taking a large stepsize, and then cutting it in half if the solution gets worse. We can continue this until either we obtain an improvement in the objective function or the step becomes so small that we accept it even though it does not improve the objective value (this is to try new directions and avoid getting stuck in local minima). We use the gradient only as a guide for the direction of the next move (and we do not use its size). The largest stepsize is determined by expert knowledge; for example, in our problem, one may choose 30 GW as the largest step. Note that we remove the superscript inv from \(x^{inv}\) in the following equations to simplify the equations, allowing us to write \(C (x^{}) = C^{inv}(x)+C^{gen}(x)\).

  • Superscript n: Iteration counter.

  • \(\alpha _{n}\): The stepsize at iteration n.

  • \(\delta ^{Max}\): The maximum change in each iteration (maximum step) in all directions.

  • \(\delta ^{Min}\): The minimum acceptable change in each iteration. If the change in all directions becomes smaller than \(\delta ^{Min}\), we accept that move regardless of whether it improves the objective value or not.

The algorithm is stated as follows:

  1. 1.

    Initialization: Start with an initial capacity level (e.g. \(x^{0}_{g}=0, \forall g\in \mathcal {I}\)), and set \(n=0\).

  2. 2.

    Numerically calculate \(\nabla _{} C_{}((x^{n}_{g})_{g\in I}) \) using finite differences:

    $$\begin{aligned} \nabla _{g'}C_{}((x^{n}_{g})_{g\in I})=\frac{C_{}(( x^{n}_{g}+\epsilon e_{g,g'})_{g\in I})-C_{}((x^{n}_{g})_{g\in I})}{\epsilon }, \end{aligned}$$

    where, \(\epsilon \) is a small non-negative parameter that needs to be tuned for an application (we used \(\epsilon = 1\) MW for SMART-Invest), and

    $$\begin{aligned} e^{}_{g,g'}= {\left\{ \begin{array}{ll} 0 &{} g\ne g',\ \\ 1\ &{} g=g'. \\ \end{array}\right. } \end{aligned}$$
  3. 3.

    Set \(n=n+1\), and calculate \(\alpha ^{0}_{n}\) from (26) and (27), and set \(\alpha _{n}=\alpha ^{0}_{n}\).

    $$\begin{aligned} x^{n}_{g}(\alpha _{n})&=\max \left\{ 0,x_{g}^{n-1}-\alpha _{n}\nabla _{g}C_{}(x^{n-1})\right\} \end{aligned}$$
    (26)
    $$\begin{aligned} \alpha ^{0}_{n}&=\left\{ \alpha _{n}:\max _{g}\left\{ \left| x^{n}_{g} (\alpha _{n})-x^{n-1}_{g}\right| \right\} =\delta ^{Max}\right\} \end{aligned}$$
    (27)
  4. 4.

    Calculate \((x_{g}^{n})_{g\in \mathcal {I}}\) from (26) and then compute \(C((x_{g}^{n})_{g\in \mathcal {I}})\).

  5. 5.

    If \(C((x_{g}^{n})_{g\in \mathcal {I}})\le C((x_{g}^{n-1})_{g\in \mathcal {I}})\) or \(\max _{i}\left\{ \left| x^{n}_{g} -x^{n-1}_{g}\right| \right\} \le \delta ^{Min}\) go to step 2, otherwise, set \(\alpha _{n}=\frac{\alpha _{n}}{2}\), and go to step 4.

  6. 6.

    If the objective function has not improved in \(k^{max}\) iterations stop the algorithm.

Different features of this adaptive stepsize algorithm are designed to efficiently find a near-optimal solution for our problem, and similar problems with non-convex, non-smooth expensive objective functions that exhibit global convexities with local roughness.

  • Computing the gradient numerically is computationally expensive since it requires running the yearly simulation (which itself includes running almost 9000 hourly problems) several times (once for each decision variable). By only accepting improving steps, this algorithm reduces the number of iterations, and therefore decreases the number of times the gradient is computed. Note that finding an improving step does not require recomputing the gradient.

  • The large steps allow the algorithm to jump over the small bumps. The minimum stepsize ensure that, when it seems that we have already obtained the optimal solution, the algorithm travels to other points and checks new directions.

This algorithm is also significantly different from the grid search algorithm used in [7]. It only requires between 10 and 15 iterations before it satisfies its stopping criteria. Each iteration consists of calculating the gradient a maximum of five evaluations if optimizing for five technologies, and some stepsize tries (between one to eight evaluations). Therefore, in the worst case scenario, this algorithm requires \(15\times \left( 8+5\right) = 195\) evaluations, while the grid search in [7] needs 28 billion evaluations. Also, other algorithms could be used, such as surrogate models (e.g. see [19,20,21]). This involves fitting polynomial approximations. The problem is that low-order (specifically quadratic) can be a poor fit, while higher order approximations are very sensitive to oversampling. However, this is a potential area of research.

3.3 Parallelization

As mentioned before, finding the optimal solution requires running roughly 200 evaluations of the total yearly cost. Each evaluation is expensive computationally, since it consists of solving a linear program that looks 36 h into the future for each hour in a year (i.e. 8760 relatively large linear programs). SMART-Invest uses parallelization as an optional feature to expedite these evaluations. For example, each yearly evaluation can be represented as 12 separate monthly evaluations, if we use a multi-threaded computer. The issue is, however, that the problem solved at each hour is dependent on the problem solved for the previous hours because of day-ahead planning of the slow generators. To overcome this problem, we define a warm-up period of 24 h before each of the monthly evaluations, so that day-ahead considerations are in place when SMART-Invest start running the monthly simulation. The warm-up period is ignored in the cost calculations. Table 2 shows how parallelization can reduce the computational time.

Table 2 Running time for each function evaluation with and without parallelization (yearly vs. monthly) on a computer with 16 CPUs and 3059 MHz CPU speed

Table 3 compares the optimal investment decisions for a problem solved with and without parallelization, and shows that parallelization does not significantly affect the results.

Table 3 Optimal investment with and without parallelization

3.4 Algorithm performance

In this section, we present some experiments to test the performance of our algorithm, and ensure that it reliably produces near-optimal solutions. In order to do this, we use a benchmark by solving the problem using a grid search. We discretize the decision variables, and for each point of this grid (i.e. a set of wind, solar, and battery capacities), we run the simulation, and compute total yearly investment and generation cost. The minimum of the cost function over this discretized grid provides a near-optimal cost, and the associated capacities would be our near-optimal capacities. (This method may not result in the exact optimal solution since the optimization is run over a discretized grid).

Fig. 2
figure 2

Algorithm performance for different starting points (each arrow starts from one starting point and ends at the optimal solution for that starting point)

Figure 2a, b show two heat maps of the cost function on a two dimensional discretized grid. Each dimension spans for about 600 GW and the smallest unit in each direction of the grid is 3 GW. Therefore, in a two dimensional problem (e.g. the one in Fig. 2a) there are 40,000 grid points. In these heatmaps the cost value ranges from blue (minimum) to red (maximum). The first figure represents a case where the solar capacity is fixed, and the second figure corresponds to a case with a fixed wind capacity. The first observation is that although the cost function is not a convex function (because of small bumps), it looks like a convex function (in large-scale) with very small non-convexities (bumps). Thus, if our algorithm can avoid the small bumps, we can be hopeful to obtain a near optimal solution.

One way to test our algorithm is to start from various starting points. The algorithm performs reliably if the algorithm solution lies in the blue area of the heat maps in Fig. 2a, b regardless of the starting point. Each arrow in Fig. 2a, b represents a run of the algorithm from different starting points. The beginning and the end points of the arrows represent the starting point and the stopping point of the algorithm respectively. These experiments suggest that our algorithm reliably finds a near-optimal solution each time.

Table 4 The algorithm results from different starting points (left) vs. best results from the grid search (right)
Table 5 The algorithm results from different starting points (left) vs. best results from the grid search (right)

To obtain a more precise understanding of the algorithm performance, we can compare the stopping points of our algorithm with the most cost-effective solutions from the grid. Tables 4 and 5 compare the results of different runs of our algorithm with the best grid points (i.e. the least cost solutions from the heat map). According to these tables, our algorithm outperforms the best solution over the grid most of the time. When wind capacity is assumed to be a fixed number (Table 4), the algorithm provides better results than the best solution from the grid search for five out of six starting points. The remaining starting point which provides the worst algorithm performance among these six starting points yields a better objective function than the sixth best point on the grid. Table 5 presents similar results for a case with a fixed solar capacity. In this case as well, three out of five starting points lead to better solutions than the best solution over the grid.

These results show that our algorithm not only is effective and fast in solving this optimization problem, it can also produce better solutions than a coarse grid search.

3.5 The optimal reserve parameter (\(\theta \))

In this section, we investigate the optimal reserve parameter \(\theta \) used to produce a robust policy. It may be argued that the optimal level of \(\theta \) depends on the level of renewables and the accuracy of wind and solar forecasts, as well as the availability of storage, which may also be used to accommodate forecast errors.

Table 6 Optimal \(\theta \) for different levels of renewable integration and CO\(_{2}\) tax

Table 6 consists of three different parts, each representing a separate experiment. Results of the first part of this table are obtained from two sets of experiements. First, CO\(_{2} \) tax is changed and the optimal level of renewable investment is calculated. Then, CO\(_{2} \) tax and the optimal levels are assumed to be a fixed number, as given in the table, and SMART-Invest is used to find the optimal \(\theta \) value for each market configuration. In the second part, we investigate the effect of larger renewable integration on the value of optimal \(\theta \). There is no CO\(_{2}\) tax in this case. In the third part, only CO\(_{2} \) tax changes and the renewable capacity is fixed.

If there are no renewables in the generation mix, we expect the optimal \(\theta \) to be equal to 1.0, because there is no uncertainty in such a system. As expected, the optimal \(\theta \) obtained from SMART-Invest is 1.0 for this case, as shown in Table 6. However, with larger amounts of renewables, one may expect to observe a larger \(\theta \) value, which is equivalent to planning generation reserves as a hedge against the risk of using expensive fast fossil generators to deal with unexpected variations in energy from wind and solar sources. Table 6 (second part) shows that this may not be always true. Planning for larger demand means pre-planning larger amounts of slow generation and thus the system operator may end up using the more expensive slow fossil instead of wind in some time periods.

A tax on CO\(_{2}\) is another important parameter that affects the optimal \(\theta \) value. The result from the third part of this table shows that a larger CO\(_{2}\) tax results in smaller \(\theta \) values. This can be attributed to the fact that a larger CO\(_{2}\) tax, as we show in Sect. 4.3, causes less generation from slow fossil sources and more from fast fossil sources, and this increases the ability of the system to deal with uncertainty and decreases the need for pre-planning and thus results in a lower \(\theta \) value.

4 Policy studies

We are now ready to illustrate the use of SMART-ISO in the context of a series of policy questions. These include:

  • Is it possible to generate a large percentage of our electricity needs (e.g. 99%) from renewable sources such as wind, solar, and battery?

  • What is the sensitivity of our results to cost parameters (e.g. for a future scenario where investment cost in solar is half of today’s cost)?

  • How much renewable investment is optimal in today’s market, and how much renewable incentives such as CO\(_{2}\) tax can affect the results?

We start by introducing our set of base values for different model parameters. We may change some of these values in particular experiments. We use the parameter values given in Tables 7 and 8, unless stated differently in the description of the experiments. We use a penalty of $3000/MWh for unmet demand; however, any large penalty value that avoids loss of load can be used and does not change the results.

Table 7 Parameter values for different generation technologies
Table 8 Battery parameters and interest rate

4.1 Experiment 1: cost of fast fossil

For our first experiment, we find the optimal investment decisions for wind, solar, and battery technologies, assuming fast fossil generation is available at different cost levels and large capacity. This experiment also provides a comparison with Budischak’s paper, since the scenario with very large costs of fast fossil generation is equivalent to the model of [7].

Figure 3 shows that if fast fossil generation is available at $60/MWh, an investment of 100 GW in wind generation is optimal and will amount to 30% of total electricity generation, while at $50/MWh, renewables do not appear in the solution. At $100/MWh, the wind percentage increases to 60% of total generation, while solar and battery technologies are not economical. Solar and battery are invested only at prices higher than $300/MWh and $500/MWh respectively.

Fig. 3
figure 3

Percentage of electricity generation from different technologies (left) and optimal investment in MW for wind and solar and in MWh for battery (right) as a function of marginal cost of fossil generation

Fig. 4
figure 4

Levelized cost of generating electricity and battery level (full or empty) as a function of marginal cost of fossil generation

We also calculate the levelized cost of electricity which is the average cost of generating one MWh of electricity using different technologies. We compute the levelized cost of electricity by dividing total generation cost (including investment and operational costs) over the length of the simulation by total met demand during the simulation. Note that investment and operational costs are calculated proportional to the length of the simulation, and we include the time value of money in our computations. The levelized cost of electricity at different fossil generation costs is given in Fig. 4.

At a cost of $2000/MWh for fossil generators, 96% of generation is from renewables, and this is equivalent to a levelized cost of $255/MWh. Therefore, one may conclude that figures such as 99% generation from renewables are not viable. The reason for the big discrepancy between this conclusion and that of the Budischak paper, we believe, is because a) we evaluate the value of investments on the margin and b) we require that the entire load be covered by our system, without having to resort to asking the grid to cover rare (but significant) outages. As long as the marginal cost of fast fossil generation is smaller than the value of lost load, we will not observe uncovered load in the solution.

Figure 4 also shows the fraction of hours in which the battery is full or empty. According to these results, the battery is empty most of the time, and even as the optimal storage capacity grows, it is rarely full. This behavior is partially explained by the large cost of fossil generation (ranging from $300 to $3000/MWh). The substantial investment in batteries at these penetration levels reflects those rare instances where we would not cover the entire load with a smaller battery. Also, as Fig. 3 shows, although investment in storage increases quickly with the fossil price and greatly exceeds investment in solar technology, its contribution (as the percentage of total generation) remains small (less than 4% of total generation), and does not change too much for different fossil cost levels.

Fig. 5
figure 5

Levelized cost of generating electricity and battery level (full or empty) as a function of marginal cost of fossil generation

As discussed before, different motivations can incentivize investment in renewables and the investment cost may not be the only determining factor. For example, tax credits, carbon taxes, or SREC requirements are some of the key factors. We have exclusively included renewable incentives such as emission taxes, and SREC prices in the SMART-Invest model, and many other factors (e.g. tax credits) can be modeled as reductions in the investment cost or simply as added wind and solar incentives. Investment costs and renewable incentives can also change in the future, and one may be interested in how markets respond to these changes. Figure 5 shows the renewable penetration plot under four scenarios. The wind investment cost of $500/kW represents the base case discussed earlier in this section. We produce the same plot for wind costs of $375/kW, and $250/kW, and also for a case with SREC prices of $100/MWh. This figure shows that, even if the cost of investment in wind is half of today or if we introduce other renewable incentives, reaching renewable integration above 80% is only optimal if the alternative flexible generation technology costs more than $300/MWh.

4.2 Experiment 2: cost of investment

In this section, we investigate the effect of investment cost on the optimal technology mix. The economics of renewables is fairly complex, and the investment in wind and solar is affected by a mixture of state requirements (RPS portfolios), tax credits and feed-in tariffs. There is also some evidence of companies that are simply willing to pay more as a hedge against what they project is higher gas prices. So, the wind and solar might be more expensive for investment now, but because of hedging, people might still invest in them even without subsidies. Thus, it is interesting to investigate other investment cost scenarios to account for these incentives or as a hypothetical technology change in the future resulting in a reduction in investment costs.

In the following experiments, we use a similar market structure as the previous section. As discussed before, solar and battery technologies appear in the optimal mix only when the cost of fast fossil generation is above $300/MWh. In this experiment, we assume a cost of $400 for each MWh of electricity from fast fossil generators.

Fig. 6
figure 6

Optimal battery capacity for different levels of battery and wind investment costs

Fig. 7
figure 7

Optimal wind, solar, and battery capacity and percentage of generation from renewables for different levels of wind and solar investment costs

Figures 6 and 7 compare optimal wind, solar, and battery capacities under different levels of wind, solar and battery investment costs. The base cost values are given in Table 7, and we multiply these numbers by a factor to account for different cost levels.

Simulations testing the effect of battery costs on investment in wind and solar indicate that battery costs have very little impact on the optimal investment in renewables. However, Fig. 6 shows the impact of battery costs on the optimal investment in battery.

An interesting observation from Fig. 7 is that total generation from renewables is nearly the same under different scenarios. It only decreases slightly for higher levels of wind and solar investment costs (e.g. it has a very shallow slope as a function of wind investment cost in Fig. 7). However, a change in the investment cost can significantly impact total investment in renewables (i.e. sum of wind and solar capacities). As shown in Fig. 7, the amount of investment in wind alone is in the range of 300–1000 GW, which is several times more than total demand (which is around 100–150 GW), and the same can be said about solar and battery. So in most time periods, a change in wind or solar capacity does not change their generation (because they already generate more than load), but in some periods with a very small wind and solar availability, the amount of installed capacity can make a difference. One may conclude that most of the changes in investment (due to various levels of investment costs) are to avoid the high cost of $400/MWh only for a small percentage of time periods.

Another interesting observation from Fig. 7 is that a battery investment is more responsive to solar capacity rather than wind capacity. When solar capacity increases (and thus wind capacity decreases), investment in the battery also increases. This may indicate that the existence of some storage is more critical for solar generation. This can be attributed to the fact that solar generation is not available at all during the night time.

These results also show that an increase in wind investment cost is equivalent to lower investment in wind and higher investment in solar and vice versa. Also, battery capacity, as expected, decreases, when the cost of investment in the battery increases.

4.3 Experiment 3: carbon tax

In the previous experiments, we assumed that unlimited fossil generation is available at a fixed cost level. When concerned with large levels of renewable integration into electricity markets, this seems to be a logical assumption, since many of the conventional sources of electricity generation may not be fast and large enough to cope with huge variability and unpredictability resulting from large integration of intermittent renewables.

Another interesting experiment, however, is to find the optimal investment under current market conditions (with different types of generators and various levels of generation cost and ramping ability), and then investigating the effect of introducing a carbon tax on the generation profile.

Fig. 8
figure 8

The optimal mix of generation sources for different levels of CO\(_2\) tax (battery generation is not used for percentage calculations)

Figure 8 shows the results of an experiment with the current market configuration (before and after CO\(_{2}\) tax). In this experiment, we optimize investment decisions for wind, solar, and battery, while we assume the other types of generation have a constant capacity equal to their current installed capacity in PJM. According to this figure, no investment in wind, solar, and battery is economically efficient in today’s market conditions. However, when CO\(_2\) tax increases to $50/ton, about 10% generation from wind appears in the optimal solution, and at $70/ton 30% of generation is met by wind. Prices above $100/ton is required to observe some generation from solar and battery. This figure also shows that higher CO\(_2\) tax values do not change total generation from nuclear energy greatly, but has a dramatic effect on slow fossil generation. In effect, slow fossil is replaced with fast fossil and wind while CO\(_2\) tax increases from $0/ton to $150/ton.

Another observation is that the percentage of nuclear generation is decreased at the CO\(_{2}\) tax level of $150/ton. Also, slow fossil completely vanishes from the optimal mix after leveling off at lower tax levels. To explain this, we first note that the marginal cost of wind and solar is zero, while it is around $9/MWh for nuclear and is more expensive for slow fossil generators. At high levels of CO\(_{2}\) tax, investment in wind is large enough to replace a large portion of more expensive slow generation. Among slow generation types, slow fossil has become very expensive because of the CO\(_{2}\) tax, and is removed first from the energy mix. When we have a large investment in wind e.g. more than total load, less expensive (but more expensive than wind) nuclear generation can also be replaced with wind at some time periods.

5 Conclusion

In this paper, we introduced a new model (called SMART-Invest) that is able to find the optimal generation configuration under different market conditions. It is a very flexible model, and can be used for a wide range of experiments. SMART-Invest can model the generation technologies using the existing offer stack, an aggregated version of offer stacks, or a single offer band. It can also optimize for up to five technology types. SMART-Invest provides a flexible framework for a wide range of experiments.

The mathematical model of SMART-Invest carefully captures the distinction between a stochastic base model and a robust operating policy using a parametric cost function approximation in the form of a modified deterministic lookahead model. This is widely used in practice, but this appears to be the first time the entire process has been modeled formally. We then describe a stochastic optimization algorithm for the investment problem which exploits the approximate convexity of the problem while overcoming the fine-grained non-convexities using a carefully designed stepsize algorithm. The algorithm makes it possible to find near-optimal solutions with only a few hundred function evaluations.

We also design a few experiments to gain insights into the optimal generation mix under different market conditions. Firstly, we show that reaching really large levels of renewable integration (e.g. 99% as claimed in the literature) is very expensive socially and so may not happen in a real electricity market, although it is possible to reach relatively large-scale wind integration. We also evaluate the market conditions for reaching such levels. In addition to this, we investigate the level of wind and solar integration under different investment cost scenarios. The results of our experiments, for example, show that the battery investment cost is not a very important parameter in determining the optimal wind and solar capacities. Even more interesting, different levels of investment cost in battery or wind do not greatly change the percentage of generation from renewables. A higher cost of investment in, say, wind, means more generation from solar and less from wind, but the total generation percentage does not change greatly. However, this amounts to a noticeable change in total renewable installed capacity. We also analyse the current PJM electricity market and investigate the effect of CO\(_2\) cost on the amount of renewable generation. It turns out that without renewable incentives such as CO\(_2\) tax or SREC markets, no investment in renewables is economical; however, for higher levels of these economical incentives, we observe that less generation from slow fossil and more from renewables and fast fossil appears in the optimal solution.

We would like to emphasize that this research is not about predicting the future and more about what level of renewable energy integration is socially optimal. That is why a cost-minimization approach is used in this paper. This model is striking a balance between the very simplistic Budischak model, and much more detailed models such as SMART-ISO (which still does not model market behavior, and is not appropriate for this study). It is important to remember that all models have to make approximations to handle the questions they are trying to answer. Readers can refer to [10] for more information on the market behaviour.

The ongoing changes in the climate have elevated the risk of integrating large amounts of renewable energy into the power mix. Future extensions of SMART-Invest can include the addition of risk-averse optimization methods (see e.g. [3, 16]).