This paper presents a heuristic building block for wind farm layout optimization algorithms. For each pair of wake-interacting turbines, a vector is defined. Its magnitude is proportional to the wind speed deficit of the waked turbine due to the waking turbine. Its direction is chosen from the inter-turbine, downwind, or crosswind directions. These vectors can be combined for all waking or waked turbines and averaged over the wind resource to obtain a vector, a “pseudo-gradient”, that can take the role of gradient in classical gradient-following optimization algorithms. A proof-of-concept optimization algorithm demonstrates how such vectors can be used for computationally efficient wind farm layout optimization. Results for various sites, both idealized and realistic, illustrate the types of layout generated by the proof-of-concept algorithm. These results provide a basis for a discussion of the heuristic's strong points – speed, competitive reduction in wake losses, and flexibility – and weak points – partial blindness to the objective and dependence on the starting layout. The computational speed of pseudo-gradient-based optimization is an enabler for analyses that would otherwise be computationally impractical. Pseudo-gradient-based optimization has already been used by industry in the design of large-scale (offshore) wind farms.

For any wind farm, its layout is one of the most important design choices a developer has to make. Often, the goal of a layout optimization is to obtain the lowest possible wake losses, to maximize the revenue under a fixed feed-in tariff, where a 0.1 % gain in energy yield for a large wind farm can easily correspond to several million euros in revenue over its lifetime.

A layout optimization for a large (offshore) wind farm – which could involve tens to hundreds of turbines to be placed in a possibly very complex polygon – is demanding in terms of computational power since it requires a wake model run for every cost function evaluation. For a final layout design, a runtime of several weeks is quickly justified. However, before reaching a final design, a designer usually goes through an exploratory phase where many options are still on the table, ranging from different turbine types and numbers of units to various practical constraints set by the installation contractor. Furthermore, being one of the first steps of a levelized cost of energy (LCoE) assessment, layout optimizations are in general under a lot of time pressure in a real-life competitive tender process.

At the same time, the cost functions to be used in the optimizations are becoming increasingly complex. Where wake losses used to be a good gauge for the LCoE improvement, falling subsidy levels mean that the balance of plant costs play an increasingly bigger role in the layout design, which calls for an assessment of foundation weight and cable length in every cost function evaluation. Moreover, for subsidy-free wind farms, the electricity price can no longer be assumed a constant, and market dynamics will have to be involved. Finally, since risk is a significant part of the LCoE assessment as well, an uncertainty evaluation method such as a stochastic simulation might also be part of the cost function, further driving up its runtime.

In this context of complex and expensive cost functions, existing classes of optimization algorithms have important downsides. Meta-heuristic approaches (e.g., genetic algorithms, particle swarm optimization) and numerical gradient-based approaches require many cost function evaluations for a single iteration step. Analytical gradient-based approaches involve time-consuming effort to derive analytical gradients and impose smoothness constraints on the cost function.

In this paper, we present a new heuristic optimization algorithm that uses some of the steps of the cost function – most notably the energy losses per wind direction sector – to construct a so-called pseudo-gradient. In its simplest form, this pseudo-gradient describes the value that each wind turbine gains or loses when facing the wind from a certain direction, which can then be translated into a vector that shifts it to a new location. The major advantage of such an approach is that it only requires a single cost function evaluation for the wind farm to construct the pseudo-gradient vector for every turbine. The algorithm has been successfully used in commercial offshore wind projects.

This paper starts with a mathematical description of the different aspects of the wind farm layout optimization problem (Sect.

This section gives an abstract mathematical description of the models involved in the wind farm layout optimization problem. It starts with a description of the wind farm in Sect.

The description is abstract because the approach to layout optimization presented in this paper is applicable independent of the concrete details of the models involved. For example, it can be used with a large class of wake models. This does not mean, however, that the behavior of optimization algorithms built on this approach is not affected by specific modeling choices.

For the purposes of this paper, a wind farm is fully defined by the site and the layout. The site is characterized by its surface roughness length and the location constraints turbines must satisfy, expressed abstractly as a set

The planar vector from turbine

The wind resource at a site is mainly characterized by a joint probability distribution for wind direction

A number of examples can clarify the use of the expectation operators and related notation:

Next to the wind direction and speed distributions, the wind resource includes constants describing further atmospheric conditions, such as turbulence intensity. Also, the wind resource depends on the height above the surface: there is vertical wind shear. A site's wind resource is normally available at a single reference height, but it is needed at other heights, namely, hub height and possible other heights of points on the rotor disc. The dependence on height is formalized using logarithmic and power law profiles, parametrized by the roughness length. We can assume that we have a site-specific function that maps speeds at reference height to any given height. In this paper this is not made explicit, given that it has no relevant effect for our application, but it is implicitly assumed to be applied as needed.

For the purposed of this paper, a wind turbine is fully characterized by its hub height; rotor diameter

We only consider farms with a single turbine type and with a constant hub height. The approach presented in this paper is essentially unaffected if these assumptions are relaxed.

A wind turbine in operation affects the wind in its vicinity. Important for wind farms is the mid-to-far-wake downstream of a turbine, because it is a region with decreased wind speeds, resulting in lower power production of turbines located in the wake. High-fidelity modeling – using computational fluid dynamics – of wakes and their interaction in a wind farm is too computationally demanding for wind farm layout optimization purposes. Therefore, simpler engineering wake models are used, such as those proposed by

For the purposes of this paper, we only need a high-level characterization of such engineering wake models. Namely, we use a function

Points on the rotor disc of a turbine

Wakes are one reason why there can be a non-constant inflow wind speed over the rotor disc of any turbine

In a wind farm, a turbine

In principle the combination function needs to be applied before the averaging function to obtain a representative inflow wind speed, so

For root-sum-square deficit combination done after averaging, it is straightforward to calculate these blame fractions:

The rest of this paper ignores the order in which

Some computational considerations on wake wind speed calculations are discussed in Appendix

The objective we consider here is the normalized expected farm wake loss; it must be minimized and is therefore also called the cost function. The loss is in terms of energy (or power) production. The expectation is taken over the wind resource (see Sect.

A solitary turbine at the site, so without wakes, would produce a power

Because

A formal gradient-based optimization uses the objective function's gradient, which is the vector of partial derivatives of this function with respect to the design variables. The (negative) gradient at a given design variable vector corresponds to the direction of steepest ascent (descent) of the objective and has a magnitude reflecting the steepness. For a minimization problem, the optimizer would follow the negative gradient in a stepwise fashion over design variable vectors corresponding to decreasing objective function value.

A pseudo-gradient is a proxy for the objective's actual gradient that is defined using some heuristic. It is intuitive and convenient to formulate such heuristics in a per-turbine fashion. Therefore, pseudo-gradients are in practice defined for design variable components corresponding to a single turbine. Thus, pseudo-gradients can be visualized as vectors attached to individual turbines in the design space.

This paper only deals with wake losses affected by relative turbine positions, for which (dominant) wind directions are an important factor.
So the heuristics make use of

the turbine wake loss

the turbines' relative positions

the wind direction

However, pseudo-gradients can also be superpositions of several proxies, corresponding to different elements of the objective function, implemented as a weighted vector sum. For instance, in the minimization of the levelized cost of energy, a vector that directs an offshore turbine towards shallower water could be an additional contribution to the pseudo-gradient. This vector's magnitude should be representative for the reduction of support structure costs, while its weight in the vector sum should represent the importance of support structure costs relative to the importance of wake losses and other contributions to the levelized cost of energy.

The rest of this section proposes concrete definitions for pseudo-gradient vectors that can form the basis for heuristic wind farm layout optimization.
The definition of the pseudo-gradients is built up step by step. First, only a single wind case (i.e., a single wind direction and wind speed) and a single wake interaction are considered (Sect.

There are multiple types of pseudo-gradients that we propose. In every step each of these types is discussed. Their joint presentation does not imply that they have to be used jointly; they can be used individually. After their definition in this section, their use in optimization algorithms is discussed in Sect.

First consider just a pair of turbines

Illustration of the four pseudo-gradient vectors for the single wind case and single wake interaction case.

The wake power loss combines with the wind direction into what we call the simple pseudo-gradient vector:

A next type of pseudo-gradient follows from combining the wake power loss with the unit vector that points from the waking turbine

Instead of moving the waked turbine away, it is also possible to move the waking turbine back relative to the waked turbine. This idea can be implemented using what we call a push-back pseudo-gradient vector:

A final type is derived from push-away vectors, by considering their projection on the crosswind direction:

One can conceive more types of pseudo-gradients than the four presented here.
For example, by projecting the push-back pseudo-gradient vector on the crosswind direction, a second push-cross type vector can be defined.
Systematizing, there are three choices to make:

associated (attached) to the waking or the waked turbine;

oriented along the downwind direction, crosswind direction, inter-turbine direction, or the direction orthogonal to the inter-turbine one;

defined directly or by projection.

simple: waked, downwind, direct;

push-away: waked, inter-turbine, direct;

push-back: waking, inter-turbine, direct;

push-cross: waked, crosswind, projected.

Again consider a single wind direction

Simple pseudo-gradient vectors are aligned with the wind direction. Therefore its defining expression, Eq. (

The push-away pseudo-gradient vector for the case of multiple waking turbines is defined by summing over those for single wake interactions (see Eq.

Illustration of how turbine-specific push-away pseudo-gradient vectors combine into a combined push-away pseudo-gradient vector.

The combined push-cross pseudo-gradient vector is closely related to the combined push-away pseudo-gradient vector. As before, it is its projection on the crosswind direction or, equivalently because of the linearity of the projection operation, the sum of the push-cross vectors for single wake interactions (see Eq.

Illustration of how turbine-specific push-cross pseudo-gradient vectors combine into a combined push-cross pseudo-gradient vector and their relation by projection to push-away pseudo-gradient vectors.

The combined push-back pseudo-gradient vector arises differently from the push-away one, because now we must sum over vectors for waked turbines instead of those for waking turbines. But apart from that, things are the same; namely, we again must sum over push-away vectors for single wake interactions (see Eq.

Illustration of how turbine-specific push-back pseudo-gradient vectors combine into a combined push-back pseudo-gradient vector.

Return to the two-turbine setup of Sect.

Common in these defining expressions is the appearance of the wake power loss

Applying the expectation to the expression of Eq. (

Illustration of how wind-direction-specific simple pseudo-gradient vectors combine into an averaged simple pseudo-gradient vector.

This is not the case for push-away pseudo-gradient vectors. Applying the expectation to the expression of Eq. (

Illustration of how wind-direction-specific push-away pseudo-gradient vectors combine into an averaged push-away pseudo-gradient vector.

Illustration of how wind-direction-specific push-back pseudo-gradient vectors combine into an averaged push-back pseudo-gradient vector.

Push-back pseudo-gradient vectors behave similarly. Applying the expectation to the expression of Eq. (

Things become interesting again for the push-cross pseudo-gradient vectors.
Applying the expectation to the expression of Eq. (

Illustration of how wind-direction-specific push-cross pseudo-gradient vectors combine into an averaged push-cross pseudo-gradient vector.

The illustrations of Figs.

To define pseudo-gradients for the fully general case requires considering both multiple wind cases and multiple wake interactions. Multiple wake cases are described by taking a finite sum of simple single-wake cases (see Sect.

For the simple pseudo-gradient vector, the argument made in Sect.

For the push-away, push-back, and push-cross pseudo-gradient vectors, we can take Eqs. (

This section discusses how pseudo-gradients can be used for wind farm layout optimization. Here a general introduction of this topic follows.
Section

Section

For the two-turbine single wind direction case of Sect.

So the hypothesis is that pseudo-gradient vectors can be used, after transformation to spatial vectors, to iteratively move the turbines from an initial layout to layouts of decreased (normalized) expected farm wake loss.
To test this hypothesis, proof-of-concept optimization algorithms (see Sect.

No analytical gradients are needed. These might not be available, might be difficult to derive, or have to be approximated.

For every layout, only a single farm wake model calculation is required to produce the quantities necessary for pseudo-gradients as intermediate values, reducing the computational burden. Numerical gradients require multiple calculations of the objective to determine finite differences.

Pseudo-gradients find a natural application in gradient-descent-type approaches to layout optimization, but they can be used in other approaches as well. Because of the limited computational impact of calculating them, they can be used to replace (some of) the random turbine displacement steps used in the many heuristic layout optimization approaches

This subsection describes three layout optimization algorithms using pseudo-gradients (Algorithms 1, 5, and 7). Each one is more complex than the preceding one. The first one is the most straightforward implementation; it functions mainly as a stepping stone to in the explanation of the other two. The second aims to improve convergence. The third furthermore aims to improve design space exploration.

Some auxiliary algorithms (Algorithms 2–4 and 6) are used. They cover parts that are common to or repeated in these optimization algorithms. They are described together with the optimization algorithm they first appear in.

All algorithms start from some inputs. Among these is a valid initial layout. Approaches to creating or generating such initial layouts are not discussed in this paper, as there is no indication that the proof-of-concept optimization algorithms depend qualitatively differently on this initial condition as compared to other optimization algorithms.

Handling of site and turbine distance constraints also forms an important part of the wind farm layout optimization problem. Again we do not discuss concrete approaches for this aspect because the specifics of constraint handling have no effect that depends on the use of pseudo-gradients. The following summary suffices: whenever a turbine is placed outside of the site, it is moved to the closest point on the border. Whenever two turbines become located too close to each other, they are moved away sufficiently in opposite directions. So fixing layout constraints changes the layout and affects the loss, usually increasing it.

Algorithm 1 describes an iterative optimization algorithm with a predetermined maximum number of iterations. Every iteration, first (on line 3) it calculates pseudo-gradients of predetermined type and gathers them into a so-called layout step (making use of Algorithm 2). Then (on line 4) it scales this layout step with a chosen step size and combines it with the layout to generate an updated layout (making use of Algorithm 3). Finally (on line 5), it checks whether the current layout is the best one or whether it needs to terminate the optimization run early (making use of Algorithm 4).

Auxiliary Algorithm 2 generates a layout step for a given layout and chosen pseudo-gradient type. It starts (on line 1) by calculating the pseudo-gradients. Then (on line 2) it removes any common shift from these pseudo-gradients, as that makes the layout drift without changing relative turbine positions. Furthermore (on line 3), it normalizes the pseudo-gradients so that the largest has magnitude one. Finally (on line 4), it gathers them in the layout step.

Auxiliary Algorithm 3 updates a given layout with a layout step. First (on line 1) it adds the layout step to the layout to create a new layout. Then (on line 2) it fixes any constraint violations present in this new layout. Finally (on line 3) it calculates the loss of the updated layout.

Auxiliary Algorithm 4 contains code lines to check and update the current best layout index and to decide whether the optimization run needs to be terminated early, i.e., before the maximum number of iterations has been reached. First, if the current layout's loss is smaller than the previously best layout's (line 1), the best layout index is updated (on line 2). Second, if the current layout's loss is significantly worse than the best layout's (line 3), the algorithm is terminated early (on line 4). A loss is considered significantly worse if it exceeds the best layout's loss by a fraction inversely proportional to the iteration number.

Algorithm 5 modifies Algorithm 1 by adding an adaptive step size. The aim is increasing the speed of convergence. For this, the algorithm introduces two scaling factors, which determine a small and a large step size at each iteration. Essentially (on line 4), it applies Algorithm 1 for both of these step sizes. However (on line 7), it retains only the best of both resulting layouts (making use of Algorithm 6). Furthermore (on line 8), the step size multiplier for the next iteration is taken to be the scaled multiplier resulting in the best layout of this iteration.

Auxiliary Algorithm 6 picks the best layout from a set of layouts (with pre-computed losses). Naturally (on line 1), it selects the layout with the smallest loss.

Finally, Algorithm 7 expands on Algorithm 5 by considering a set of pseudo-gradient types instead of just one. The aim is increasing its capacity to explore the space of layouts. Essentially (on line 4), it applies Algorithm 5 for all the pseudo-gradient types considered. But again (on line 12) it retains only the best of the resulting layouts (making use of Algorithm 6). A computational analysis of this algorithm is available in Appendix

In Algorithm 7, the per-type application of Algorithm 2 (on line 5) means that the pseudo-gradients' magnitudes are normalized separately for each type, so that any (arbitrary) difference between them (most notably between push-cross ones and the others) is removed. Nevertheless, because the step size multiplier evolves in a per-type fashion (see line 10), they can “compete”, even if, for example, this requires a smaller or larger step size for push-cross ones relative to the others.

This subsection shows results of the application of these algorithms to a number of academic and realistic cases. The order is more or less from less to more complex. For all cases, a brief description of the wind resource, site, turbine, and wake model is given. All information and the scripts used to generate the results and figures are included in the code bundle made publicly available

The first case, in Sect.

For all cases, the optimization runs are set up in such a way as to get useful information about the optimization approach not yet gleaned from the previous cases.

The IEA Wind Task 37 on Systems Engineering organizes case studies to compare different approaches to wind farm layout optimization.

This subsection focuses on Case Study 1, which compares algorithms for three sites, a given wind turbine, a given wind resource, and a given wake model

Before addressing the case with the actual wind rose used for the IEA Wind Task 37 Case Study 1, pseudo-gradient vectors for a single wind direction are illustrated.

Pseudo-gradient vectors associated with a single wind direction for the IEA Wind Task 37 Case Study 1 initial layout.

Pseudo-gradient vectors for the IEA Wind Task 37 Case Study 1 initial layout and wind rose.

Figure

Figure

Overview of optimization runs for the IEA Wind Task 37 Case Study 1 16-turbine site using the different types of pseudo-gradients. (Legend in Table

Figure

Legend for optimization run overview plots.

The results of the optimization runs of Fig.

For all optimization runs default parameters were used (

Overview of optimization runs for the IEA Wind Task 37 Case Study 1 36- and 64-turbine sites. (Legend in Table

Figure

The outstanding success of push-cross-based optimization visible in Figs.

Figure

Comparison of IEA Wind Task 37 Case Study 1 wake loss percentages. Black bars show the results of the case studies discussed here.

Figure

Scatter plot of IEA Wind Task 37 Case Study 1 64-turbine scenario wake loss percentage vs. reported number of wake model calls.

Overview of optimization runs for the

Figure

Horns Rev 1 is well known, as the first large-scale offshore wind farm. The site has the shape of a parallelogram. The farm is composed of 80 V80-2.0 MW turbines. Here the wind farm layout optimization problem for this site as defined by

Figure

Overview of optimization runs for the Horns Rev wind farm layout problem. (Legend in Table

(A comparison with the results of

The IEA Wind Task 37 on Systems Engineering is defining a reference offshore plant. This is a description of an offshore wind farm meant to serve for comparisons of offshore wind farm design tools, i.e., for benchmarking. It goes beyond simple power-based layout optimization, as covered in this paper, and considers cable layout and substructure costs as well.

Figure

Overview of optimization runs for the IEA Wind Task 37 offshore reference wind farm layout problem. (Legend in Table

The final problem considered in this paper is one constructed on the basis of the Borssele IV site. The new aspect this site brings to the table is that it is composed of multiple non-connected parcels. The Dutch government has published a detailed description of this actual site

The wind rose used for the Borssele IV cases.

Overview of optimization runs for the Borssele IV wind farm layout problem, 30-turbine case. (Legend in Table

This problem is used to explore the effect of different turbine densities and scaling parameters on the optimization. Layouts with 30, 50, 70, and 90 turbines are considered. The parameters

Figures

Overview of optimization runs for the Borssele IV wind farm layout problem, 50-turbine case. (Legend in Table

This section provides a discussions of the results from two perspectives. The first, academic perspective, considers the proof-of-concept algorithm and results presented in the sections above. The aim is to disentangle the strong and weak points of the use of pseudo-gradients from the particulars of the proof-of-concept algorithms. The second, industry perspective, considers the non-public counterparts of the algorithm and results. The aim is to share, in general terms, the experience gained and lessons learned from its practical application.

Overview of optimization runs for the Borssele IV wind farm layout problem, 70-turbine case. (Legend in Table

Overview of optimization runs for the Borssele IV wind farm layout problem, 90-turbine case. (Legend in Table

The proof-of-concept algorithms of Sect.

Because of the gradient-like nature of pseudo-gradients, the proof-of-concept algorithms can also be extended to make use of innovations for gradient-based optimization methods. The already-included use of an adaptive step is one example. The technique of wake spreading helps avoid shallow local minima

The fact that these techniques from heuristic and gradient-based optimization theory were not applied for this paper's study is intentional. It makes the results presented (Figs.

That does not mean that pseudo-gradient-based optimization provides the best of both worlds. Specifically, the heuristic nature of the pseudo-gradients and their essentially decentralized computation (one per turbine) imply that they will not be able to match true gradients in their ability to point towards the objective's optima. An important unanswered question here is a quantification of this difference. On the other hand, existing heuristic approaches could all benefit from replacing some of the random steps or part of each random step by pseudo-gradient-based steps.

Looking at the pseudo-gradient-based steps in Figs.

There are potential options for improving the effectiveness and usefulness of pseudo-gradients. In the proof-of-concept algorithm, the different pseudo-gradient types are applied in an either–or fashion. One might temper the expansionist behavior of the outward pushing pseudo-gradient vectors by mixing in push-cross pseudo-gradient vectors (making linear combinations). Also, strategies for scaling a turbine's step size depending on its distance to the border can be devised, for example to control expansionist behavior.
(This may create a coupling to the site constraint handling.) Furthermore, push-cross pseudo-gradients can be used for wake steering through yaw control instead of or next to turbine displacement, as that is also used for reducing wake incidence

The parameter settings for the proof-of-concept algorithm have a clear impact on their optimization behavior (see Figs.

Despite enabling effective and efficient layout optimization algorithms, there are two important properties that pseudo-gradients cannot provide. First, they are defined locally for each turbine based on a proxy for the objective function. This makes optimization partially blind to this objective. (The objective is of course used to select between different types of pseudo-gradients, but that is due to the design of the proof-of-concept algorithm.) Gradient-based optimization does not have this downside.
Second, they require a starting layout, although this is the case for most existing layout optimization approaches. That makes the optimization depend quite strongly on the initial layout. Algorithms that construct a layout by placing one turbine at a time do not have this problem

In an industry environment, the algorithm was successful in creating layouts that performed as well as those created with commercial software packages but at a fraction of the runtime. Because the wind turbines gradually move towards their optimal location over the course of the iteration steps, it also gives a design team good insight in how the optimization progresses and whether it matches engineering intuition. This is important in order to catch errors and weaknesses in the cost function – which can lead to severely biased results – but also to be able to defend the results. Very artificial looking layouts that are produced by a black-box-type algorithm are often scrutinized and have more difficulties being accepted in a business environment.

One of the major challenges is how to deal with practical location constraints. Within the site boundaries, an offshore site usually has areas where wind turbines cannot be placed. For example, shipwrecks and war graves are often surrounded by buffer zones where offshore activities are forbidden, and a designer may choose to avoid (clusters of) obstacles that are too cumbersome to remove. There may also be areas where the soil type makes it impracticable to install a foundation or where sand banks limit the accessibility of large vessels. Moreover, some sites (e.g., Borssele) are crossed by existing (telecom) cables, pipelines, or shipping lanes that each have safety zones of usually 500 m. Combined, this often leads to a location constraint polygon that is concave, with multiple regions, and with numerous holes. A pseudo-gradient algorithm that moves turbines around therefore needs to contain a rationale on when to cross certain zones or how to navigate around obstacles. A combination with a tangent bug algorithm has proven to be successful in the past, but other solutions undoubtedly exist.

The pseudo-gradient concept is useful for wind farm layout optimization.
Pseudo-gradients can be derived efficiently during the wake loss calculations necessary to evaluate a layout (Sect.

The pseudo-gradient concept is flexible. Pseudo-gradients can be defined for a wide range of wake models (Sect.

There are many possible further investigations that can start from the ideas presented in this paper. The following has already been mentioned: integration in various heuristic optimization approaches, the definition of new pseudo-gradient variants, and the combination of pseudo-gradient vectors for potentially more effective optimization. Two further ideas related to research of current interest to the wind energy community are related to push-cross pseudo-gradients.

When adding hub height as a design variable

For wake steering

Let the marginal probability mass function for

The expectation of a function

Consider once more the turbine-specific representative inflow wind speed

When the turbines can be linearly ordered such that a turbine only wakes others that come later in the order, the calculation of the speeds

Consider Algorithm 7. This section discusses the computational cost of all parts of the algorithm.

The outer loop starting on line 3 regulates the optimization iteration. There are

The loop over pseudo-gradient variants starting on line 4 requires a repetition of three times essentially the same computation, so the computational cost for the computations it contains must be multiplied by 3. Because the results of one computation do not depend on another, this loop can be fully parallelized.

The same argument holds for the loop over two step scalings starting on line 6. This means the cost for the computations it contains must be multiplied by 2 but again that this can be done fully parallelized.

The effect of the loops is now clear, and we can write an expression for the computational cost as a function of the cost

So algorithms 2 and 3 need to be investigated further. The former consists of a pseudo-gradient calculation step and then a number of arithmetic operations on the pseudo-gradient vectors. The latter consists of an arithmetic operation on the layout, constraint handling, and a wake loss calculation. The arithmetic operations are all applied to arrays of

Combining the results of the two preceding paragraphs gives an expression for the computational cost of the form

The implementation code and data used to define all problem cases are publicly available

EQ developed the idea of pseudo-gradients for layout optimization, implemented it, and applied it to academic problems. He wrote most of the paper. RB had independently thought of the concept and was prompted by a talk of EQ at a EUROS meeting (see Financial support) to revisit the idea. RB created his own (much extended) implementation and applied it to industry problems. RB wrote the introduction and industry-perspective discussion. RB also provided feedback and suggestions on the paper. RB and EQ furthermore discussed their particular experience and implementations, influencing each other's further development. MZ provided EQ with extensive feedback and substantive suggestions throughout the development and implementation process. MZ also assisted with a thorough revision of the draft paper.

The authors declare that they have no conflict of interest.

We are grateful to Nick Baker for collecting and sharing the data for IEA Wind Task 37 Case Study 1. We are also grateful for Ju Feng (DTU) for providing the wind resource data for the Horns Rev layout optimization problem (see Sect.

This research is part of the Dutch EUROS program, which is supported by NWO domain Applied and Engineering Sciences and partly funded by the Dutch Ministry of Economic Affairs (grant no. 14187).

This paper was edited by Rebecca Barthelmie and reviewed by Andrew P. J. Stanley and one anonymous referee.