<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article  PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article"><front><journal-meta><journal-id journal-id-type="publisher-id">OJOp</journal-id><journal-title-group><journal-title>Open Journal of Optimization</journal-title></journal-title-group><issn pub-type="epub">2325-7105</issn><publisher><publisher-name>Scientific Research Publishing</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.4236/ojop.2021.102004</article-id><article-id pub-id-type="publisher-id">OJOp-110139</article-id><article-categories><subj-group subj-group-type="heading"><subject>Articles</subject></subj-group><subj-group subj-group-type="Discipline-v2"><subject>Computer Science&amp;Communications</subject><subject> Engineering</subject><subject> Physics&amp;Mathematics</subject></subj-group></article-categories><title-group><article-title>
 
 
  Experimental Study of Methods of Scenario Lattice Construction for Stochastic Dual Dynamic Programming
 
</article-title></title-group><contrib-group><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Dmitry</surname><given-names>Golembiovsky</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref><xref ref-type="corresp" rid="cor1"><sup>*</sup></xref></contrib><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Anton</surname><given-names>Pavlov</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref><xref ref-type="corresp" rid="cor1"><sup>*</sup></xref></contrib><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Smetanin</surname><given-names>Daniil</given-names></name><xref ref-type="aff" rid="aff2"><sup>2</sup></xref></contrib></contrib-group><aff id="aff1"><addr-line>Moscow State University, Moscow, Russia</addr-line></aff><aff id="aff2"><addr-line>New Economic School, Moscow, Russia</addr-line></aff><pub-date pub-type="epub"><day>17</day><month>06</month><year>2021</year></pub-date><volume>10</volume><issue>02</issue><fpage>47</fpage><lpage>60</lpage><history><date date-type="received"><day>28,</day>	<month>March</month>	<year>2021</year></date><date date-type="rev-recd"><day>25,</day>	<month>June</month>	<year>2021</year>	</date><date date-type="accepted"><day>28,</day>	<month>June</month>	<year>2021</year></date></history><permissions><copyright-statement>&#169; Copyright  2014 by authors and Scientific Research Publishing Inc. </copyright-statement><copyright-year>2014</copyright-year><license><license-p>This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/</license-p></license></permissions><abstract><p>
 
 
  The stochastic dual dynamic programming (SDDP) algorithm is becoming increasingly used. In this paper we present analysis of different methods of lattice construction for SDDP exemplifying a realistic variant of the newsvendor problem, incorporating storage of production. We model several days of work and compare the profits realized using different methods of the lattice construction and the corresponding computer time spent in lattice construction. Our case differs from the known one because we consider not only a multidimensional but also a multistage case with stage dependence. We construct scenario lattice for different Markov processes which play a crucial role in stochastic modeling. The novelty of our work is comparing different methods of scenario lattice construction. We considered a realistic variant of the newsvendor problem. The results presented in this article show that the Voronoi method slightly outperforms others, but the k-means method is much faster overall.
 
</p></abstract><kwd-group><kwd>Stochastic Dual Dynamic Programming</kwd><kwd> Newsvendor Problem</kwd><kwd> Markov Process</kwd></kwd-group></article-meta></front><body><sec id="s1"><title>1. Introduction</title><p>This article discusses one of the most powerful modern algorithms, which can solve problems of stochastic optimization—the stochastic dual dynamic programming algorithm first described in [<xref ref-type="bibr" rid="scirp.110139-ref1">1</xref>]. There are several ways to implement the algorithm; an exhaustive survey can be found in [<xref ref-type="bibr" rid="scirp.110139-ref2">2</xref>]. We will discuss the most commonly used version—SDDP algorithm with scenario lattice. The main goal of our study is the testing of methods of a lattice construction. We considered “The problem of production, sales and product storage”, which is an extension of the newsvendor problem [<xref ref-type="bibr" rid="scirp.110139-ref3">3</xref>], to compare the scenario lattice construction methods.</p><p>There are many articles about scenario generation methods. The approach of [<xref ref-type="bibr" rid="scirp.110139-ref4">4</xref>] is based on variance reduction techniques. There are works with overviews of different methods [<xref ref-type="bibr" rid="scirp.110139-ref5">5</xref>] [<xref ref-type="bibr" rid="scirp.110139-ref6">6</xref>] [<xref ref-type="bibr" rid="scirp.110139-ref7">7</xref>]. Multiple scenario lattice construction methods exist, but we will only consider 3 of them: k-means, competitive learning and Voronoi cell sampling. In this study, we use the scenario generation methods for stochastic variables that follow a Markovian process. We are focusing on comparing some different techniques. There were some works with a similar goal, for example [<xref ref-type="bibr" rid="scirp.110139-ref8">8</xref>]. However, in this work, we go further and make an empirical analysis in the stage-dependent case. We perform modeling for several days, and each next day is related to the previous day (unlike [<xref ref-type="bibr" rid="scirp.110139-ref8">8</xref>], where stage-independent processes are considered).</p><p>The rest of the paper is organized as follows: In Section 2, we are making an introduction to the theory, then in Sections 3 and 4 describing the methods of lattice construction we are using, and then we discuss numerical experiments in Section 5, and after this summarize all the results in Section 6.</p></sec><sec id="s2"><title>2. Problem Formulation</title><p>The original problem of stochastic programming in general terms looks like the following [<xref ref-type="bibr" rid="scirp.110139-ref8">8</xref>]:</p><p>min x ∈ X C ( x ) (1.1)</p><p>C ( x ) = ∫ c ( x , z ) d F ( z ) (1.2)</p><p>where x is a controlling variable with definition area X ⊆ ℝ n ; z is a vector vector of realizations of random variable Z; C ( x ) is a cost function.</p><p>To resolve this problem, we need to move from integral, whose computation is too hard, to sum, so our problem will have the discrete form:</p><p>min x ∈ X C ^ ( x ) (1.3)</p><p>C ^ ( x ) = ∑ z ^ ∈ F ^ p ^ ( z ) c ( x , z ^ ) (1.4)</p><p>In literature, this transition is known as sample average approximation (SAA), and it is formally described, for example, in [<xref ref-type="bibr" rid="scirp.110139-ref9">9</xref>].</p><p>There are many ways to implement transition from (1.1)-(1.2) to (1.3)-(1.4), for example Monte Carlo [<xref ref-type="bibr" rid="scirp.110139-ref10">10</xref>] [<xref ref-type="bibr" rid="scirp.110139-ref11">11</xref>] or quasi-Monte Carlo methods [<xref ref-type="bibr" rid="scirp.110139-ref12">12</xref>]. We will use another method based on the direct reduction of the approximation error of C ^ ( x ) to C ( x ) , which was described in [<xref ref-type="bibr" rid="scirp.110139-ref12">12</xref>]. We will briefly describe this method below.</p></sec><sec id="s3"><title>3. Methods and Algorithms of Probability Distribution Discretization</title><p>Our approach is based on established work [<xref ref-type="bibr" rid="scirp.110139-ref4">4</xref>]. We will briefly discuss it here. Our task is to approximate the distribution F with discrete one F ^ . To do so, we generate realizations of F. The Monte-Carlo method provides the approximation cost function convergence to the real cost function with probability of 1, but we want to reduce the variance of the estimate to speed up the convergence of the error bounds. To do so, we want to address the approximation error directly. Let’s define an error in SAA as absolute difference between the cost functions:</p><p>e ( C , C ^ ) = | max x ( C ( x ) − C ( arg min x C ^ ( x ) ) ) | (1.5)</p><p>Since it is nearly impossible to compute e ( C , C ^ ) with (1.5), it is usual to work with the upper bound of the error. To estimate the upper bound, firstly, we need to introduce some additional notation. Denote as L r ( c ( x ) ) Lipschitz constant of c ( x , z ) function of r order:</p><p>L r ( c ( x , z ) ) = inf { L : | c ( x , z 1 ) − c ( x , z 2 ) |                                     ≤ L | z 1 − z 2 | max ( 1 , | z 1 | r − 1 , | z 2 | r − 1 )     ∀ z 1 , z 2 ∈ Z } ≤ L &#175; r (1.6)</p><p>where L &#175; r is the upper bound. Further, d r is Wasserstein distance between F and F ^ distributions:</p><p>d r ( F , F ^ ) = ( min g ∈ M ( F , F ^ ) ∫ ‖ z − z ^ ‖ r d g ( z , z ^ ) ) 1 r , (1.7)</p><p>where the minimum is taken over the entire space of distribution functions M ( F , F ^ ) , marginal distributions F and F ^ are Lipschitz, which means they satisfy (1.6). From [<xref ref-type="bibr" rid="scirp.110139-ref12">12</xref>] we know that:</p><p>e ( C , C ^ ) ≤ 2 L &#175; r d r ( F , F ^ ) , (1.8)</p><p>so as far as L &#175; r is a constant for given r and c ( x , z ) , it is clear that with the reduction of d r ( F , F ^ ) , the approximation error will also reduce.</p><p>It is impractical to find d r ( F , F ^ ) using (1.7) because of the integral, so we will use distance between two discrete distributions:</p><p>d r ( F , F ^ ) = ( min y i , j ∈ [ 0 , 1 ] ( ∑ i = 1 N ∑ j = 1 M y i , j ‖ z i − z ^ j ‖ r | ∑ j = 1 M y i , j = p i , ∑ i = 1 N y i , j = q j ) ) 1 r , (1.9)</p><p>where p i , q j are the probabilities of the corresponding discrete distribution values, and y i , j = p i q j . Thus, according to (1.8), we need to find the discrete distribution F ^ , which is the best approximation for F, reducing SAA error.</p><p>Since we consider continuous distributions, we need to generate a sample of size N, so (1.9) will have the following form:</p><p>min z ^ 1 , ⋯ , z ^ M ( ( min y i , j ∈ { 0 , 1 } , q j ≥ 0 ( ∑ i = 1 N ∑ j = 1 M y i , j ‖ z i − z ^ j ‖ r | ∑ j = 1 M y i , j = 1 , ∑ i = 1 N y i , j = q j N ) ) 1 r ) , (1.10)</p><p>where q j , j = 1 , ⋯ , M are probabilities of discrete distribution values; y i , j = 1 , if element z i of the original sample attributes to element z ^ j of the new distribution, otherwise y i , j = 0 ; M is the number of values of the new distribution, M &lt; N .</p><p>Now, we will briefly describe algorithms, which we used to solve (1.10) and get a new approximate probability distribution. More comprehensively, they are discussed in [<xref ref-type="bibr" rid="scirp.110139-ref8">8</xref>].</p><p>k-means algorithm:</p><p>1) Randomly choose M elements z ^ 1 * , ⋯ , z ^ M * from the source sample z 1 , ⋯ , z N .</p><p>2) Attribute element i , i = 1 , ⋯ , N of sample z 1 , ⋯ , z N to element j of sample z ^ 1 * , ⋯ , z ^ M * , if j is the solution of min j ‖ z i − z ^ j * ‖ .</p><p>3) Recalculate cluster centers z ^ 1 * , ⋯ , z ^ M * : z ^ j * = 1 S j ∑ k = 1 s j z k , where s i is the</p><p>number of elements of the sample z 1 , ⋯ , z N , attributed to cluster j on stage 2.</p><p>4) If the stopping condition is met, then stop, else return to step 2.</p><p>Note that we are using k-means modification from [<xref ref-type="bibr" rid="scirp.110139-ref13">13</xref>].</p><p>Competitive learning:</p><p>The sample z 1 , ⋯ , z N is obtained from the distribution F and initial approximations ( z ^ j 0 ) j = 1 M are chosen. Then the following algorithm is fulfilled for j = 1 , ⋯ , M ; i = 1 , ⋯ , N :</p><p>z ^ j n = { z ^ j n − 1 + α n ( z n − z ^ j n − 1 ) ,     if   j = arg min k ( ‖ z n − z ^ k n − 1 ‖ 2 ) z ^ j n − 1 ,                                               else (1.11)</p><p>α n is the step size, j = 1 , ⋯ , M ; n = 1 , ⋯ , N , values z ^ j N give the wanted discrete distribution.</p><p>Voronoi cells sampling:</p><p>The sample z 1 , ⋯ , z N is obtained from the distribution F and initial approximations ( z ^ j 0 ) j = 1 M are chosen. Then the following algorithm is fulfilled for j = 1 , ⋯ , M ; i = 1 , ⋯ , N :</p><p>z ^ j n = { z ^ j n − 1 + α n ( z n − z ^ j n − 1 ) ,     if   j = arg min k ( ‖ z n − z ^ k n − 1 ‖ 2 ) z ^ j n − 1 ,                                               else (1.12)</p><p>Further, put z ^ ′ j 0 = z ^ j 0 and:</p><p>z ^ ′ j n = { z n ,           if   j = arg min k ( ‖ z n − z ^ k n − 1 ‖ 2 ) z ^ ′ j n − 1 ,     else (1.13)</p></sec><sec id="s4"><title>4. Scenario Lattice Construction Algorithm</title><p>Now consider the scenario lattice construction algorithm that was used.</p><p>1) First of all, the grid parameters are selected: the number of stages, the number of nodes at each stage, the number of scenarios generated from each node.</p><p>2) Then, from each vertex of stage, t, we generate M scenarios according to the relevant random processes.</p><p>3) From the M&#215; N scenarios, where N is the number of nodes in thet stage, N is selected using one of the methods described in Section 3.</p><p>4) The probabilities of transition from the vertex i of stage t to the vertex j of stage t + 1 are calculated as the ratio of the number of scenarios generated from the vertex i and related to the vertex j of stage t + 1 to the total number of scenarios generated from the vertex i.</p><p>5) If t+ 1 is not equal to T, where T is the number of stages, we pass to point 2; otherwise, the grid is constructed.</p><p>The lattice obtained with this algorithm can be illustrated as follows (<xref ref-type="fig" rid="fig1">Figure 1</xref>):</p><p>In <xref ref-type="fig" rid="fig1">Figure 1</xref>, each vertex represents a vector of a given dimension, corresponding to random variables. The probability of transition from the node i of stage t to the node j of stage t+ 1 is indicated by p i , j t . Some probabilities can be zero, and since we are using clustering algorithms to group scenarios, our lattice can be illustrated by <xref ref-type="fig" rid="fig2">Figure 2</xref>. The vertex of step 1 corresponds to the initial values, which are selected before the beginning of the grid construction algorithm. We are using standard method [<xref ref-type="bibr" rid="scirp.110139-ref1">1</xref>] to choose scenarios during the forward step of the SDDP algorithm.</p></sec><sec id="s5"><title>5. The Case Problem</title><p>To compare k-means, competitive learning, and Voronoi cell sampling algorithms, we will use them to solve “The problem of commodities production, storage and selling” that can be formulated as follows.</p><p>Let T be the time interval at which we consider the problem, k is the number of type of goods, p i is the cost of single item production of type i, v i is the maximum number of items that can be produced in one day, x t i is the number of goods of type i that were produced on day t, s i is the selling price for goods of type i, δ t i is the demand for type of goods i on day t, r t i – number of undelivered goods of type i on day t, c i is the cost of storage of goods of type i.</p><p>The goal is to find a strategy (amount of produced goods) that leads to maximum income.</p><p>Income in day t: ∑ i = 1 k ( − p i x t i + s i w t i − c i r t i )</p><p>Amount of sold goods in day t: w t i = min ( δ t i , x t i + r t − 1 i ) , i = 1 , ⋯ , k</p><p>Amount of goods in storage at the end of day t: r t i = r t − 1 i + x t i − w t i , i = 1 , ⋯ , k</p><p>CVaR is used as a risk measure; the optimization criterion is the weighted sum of CVaR and profit expectation: ( 1 − λ ) E [ P ] + λ CVaR .</p><p>Formally dynamic programming equations look like the following:</p><p>for t = T , ⋯ , 2</p><p>Q t ( r t − 1 , δ t ) = min x t i ≤ v i w t i ≤ δ t i w t i ≤ x t i + r t − 1 i r t i = r t − 1 i + x t i − w t i x t i ≥ 0 , u t ≥ 0 { ∑ i = 1 k ( − p i x t i + s i w t i − c i r t i ) + λ t + 1 u t + Q t + 1 ( r t , u t , δ t ) }</p><p>where</p><p>Q t ( r t − 1 , u t − 1 , δ t − 1 ) = E { ( 1 − λ t ) Q t ( r t − 1 , δ t ) + λ t α t − 1 [ Q t ( r t − 1 , δ t ) − u t − 1 ] + | δ t − 1 } , ( Q T + 1 ( . , . , . ) ≡ 0 by definition), r t = ( r t 1 , ⋯ , r t k ) и δ t = ( δ t 1 , ⋯ , δ t k ) .</p><p>for t = 1</p><p>min x 1 i ≤ v i w 1 i ≤ δ 1 i w 1 i ≤ x 1 i + r 0 i r 1 i = r 0 i + x 1 i − w 1 i x 1 i ≥ 0 , u 1 ≥ 0 { ∑ i = 1 k ( − p i x 1 i + s i w 1 i − c i r 1 i ) + λ 2 u t + Q 2 ( r 1 , u 1 , δ 1 ) }</p></sec><sec id="s6"><title>6. Numerical Experiments</title><p>For numerical experiments, we considered four different stochastic processes for the demand for goods.</p><p>1) Autoregressive model (AR):</p><p>X t = c + ∑ i = 1 p a i X t − i + ε t ,</p><p>where c is a constant, α i are the model parameters, ε t ~ N ( 0 , σ 2 )</p><p>2) Autoregressive moving-average model (ARMA):</p><p>X t = c + ∑ i = 1 p α i X t − i + ε t + ∑ j = 1 q β j ε t − j ,</p><p>where c is a constant, α i , β j are the model parameters, ε t ~ N ( 0 , σ 2 )</p><p>3) Geometric Brownian motion (GBM):</p><p>d S t = μ S t + σ S t d W t ,</p><p>where μ , σ are process parameters, W t is the Wiener process.</p><p>4) Stage independent normal distribution (SIND):</p><p>X t = N ( μ , σ 2 )</p><p>We are using the processes with chosen parameters, so in our case, the processes look as follows:</p><p>1) GBM: d X t = 5 X t d t + 0.1 X t d W t ;</p><p>2) AR(1): X t = c + 0.9 X t − 1 + ε t , ε t ~ N ( 0 , σ 2 ) , σ = 1 ;</p><p>3) ARMA(1,1): X t = c + ε t + 0.9 X t − 1 + 0.15 ε t − 1 , ε t ~ N ( 0 , σ 2 ) , σ = 1 ;</p><p>4) SIND: X t ~ N ( μ , σ 2 ) , μ = 10 , σ = 5 .</p><p>The experiments were organized as follows. First of all, for every combination of process (AR, ARMA, GBM, SIND) and scenario grid construction algorithm, we simulated the stochastic process several times. We then checked if the results came from the normal distribution using the Shapiro-Wilk test and quantile-quantile (Q-Q) plot, then compared results using the one-sided t-test. (Q-Q) plots show the relationship between observed data and theoretical quantiles. It is necessary to check our results for normality because we are using the t-test to compare average profits obtained using different lattice construction methods. All the parameters of our case problem are in <xref ref-type="table" rid="table1">Table 1</xref>. We have chosen these parameters so as to simulate the real-world situation.</p><p>For the SDDP algorithm, we used the following optimization criterion:</p><p>0.5 E [ P ] + 0.5 CVaR</p><p>Our lattice construction parameters:</p><p>The number of nodes at each stage is 10; number of scenarios generated from each node during lattice construction is 100.</p><p>To perform the experiments, we were using a computer with an Intel Core i5-6300HQ processor running at 2.30 GHz.</p><p>We used Python 3.7.3 to generate scenario lattice and Julia 1.3.1 to run the SDDP algorithm; we implemented the SDDP by ourselves. To understand SDDP realization, please refer to [<xref ref-type="bibr" rid="scirp.110139-ref14">14</xref>].</p><p>The full list and versions of used packages are in <xref ref-type="table" rid="table2">Table 2</xref> for Python and in <xref ref-type="table" rid="table3">Table 3</xref> for Julia.</p><table-wrap id="table1" ><label><xref ref-type="table" rid="table1">Table 1</xref></label><caption><title> Parameters of experiments</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >Number of commodities</th><th align="center" valign="middle" >1</th><th align="center" valign="middle" >2</th><th align="center" valign="middle" >3</th><th align="center" valign="middle" >4</th><th align="center" valign="middle" >5</th><th align="center" valign="middle" >6</th><th align="center" valign="middle" >7</th><th align="center" valign="middle" >8</th><th align="center" valign="middle" >9</th></tr></thead><tr><td align="center" valign="middle" >Production costs p i</td><td align="center" valign="middle" >150</td><td align="center" valign="middle" >80</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >17</td><td align="center" valign="middle" >40</td><td align="center" valign="middle" >10</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >10</td><td align="center" valign="middle" >20</td></tr><tr><td align="center" valign="middle" >Selling price s i</td><td align="center" valign="middle" >200</td><td align="center" valign="middle" >100</td><td align="center" valign="middle" >40</td><td align="center" valign="middle" >22</td><td align="center" valign="middle" >70</td><td align="center" valign="middle" >13</td><td align="center" valign="middle" >60</td><td align="center" valign="middle" >12</td><td align="center" valign="middle" >27</td></tr><tr><td align="center" valign="middle" >Storage cost c i</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >10</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >7</td><td align="center" valign="middle" >1.5</td><td align="center" valign="middle" >4</td></tr><tr><td align="center" valign="middle" >Maximum production volume v i</td><td align="center" valign="middle" >10</td><td align="center" valign="middle" >20</td><td align="center" valign="middle" >40</td><td align="center" valign="middle" >70</td><td align="center" valign="middle" >100</td><td align="center" valign="middle" >120</td><td align="center" valign="middle" >160</td><td align="center" valign="middle" >200</td><td align="center" valign="middle" >300</td></tr></tbody></table></table-wrap><table-wrap id="table2" ><label><xref ref-type="table" rid="table2">Table 2</xref></label><caption><title> Python packages</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >Numpy</th><th align="center" valign="middle" >1.16.2</th></tr></thead><tr><td align="center" valign="middle" >Pandas</td><td align="center" valign="middle" >0.24.2</td></tr><tr><td align="center" valign="middle" >Scipy</td><td align="center" valign="middle" >1.2.1</td></tr><tr><td align="center" valign="middle" >Sklearn</td><td align="center" valign="middle" >0.22.1</td></tr></tbody></table></table-wrap><table-wrap id="table3" ><label><xref ref-type="table" rid="table3">Table 3</xref></label><caption><title> Julia packages</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >JuMP</th><th align="center" valign="middle" >0.21.1</th></tr></thead><tr><td align="center" valign="middle" >Clp</td><td align="center" valign="middle" >0.7.1</td></tr><tr><td align="center" valign="middle" >Distributions</td><td align="center" valign="middle" >0.22.5</td></tr><tr><td align="center" valign="middle" >CSV</td><td align="center" valign="middle" >0.5.26</td></tr></tbody></table></table-wrap><sec id="s6_1"><title>6.1. Numerical Experiments</title><p>First of all, it is necessary to compare lattice construction time for every process and lattice construction algorithm because work time plays a crucial role in computing.</p><p>As we can see (<xref ref-type="fig" rid="fig3">Figure 3</xref>), k-means works much faster than the Voronoi and Competitive learning methods, whose results are almost the same.</p></sec><sec id="s6_2"><title>6.2. AR Demand Results</title><p>As we can see from the tables and plots, our results came from a normal distribution (Figures 4-6 and <xref ref-type="table" rid="table4">Table 4</xref>), and mean profit from scenarios generated by the Voronoi method is higher than the profit of scenarios generated by k-means and Competitive learning (<xref ref-type="table" rid="table4">Table 4</xref> and <xref ref-type="table" rid="table5">Table 5</xref>). (Element i,j of <xref ref-type="table" rid="table5">Table 5</xref> means p-value of t-test, which compares method in row i and the method in column j).</p></sec><sec id="s6_3"><title>6.3. ARMA Demand Results</title><p>In this case, our results are also normal (see Figures 7-9 and <xref ref-type="table" rid="table6">Table 6</xref>), but there is no difference between k-means and Voronoi, while Competitive learning results are terrible (<xref ref-type="table" rid="table6">Table 6</xref> and <xref ref-type="table" rid="table7">Table 7</xref>).</p></sec><sec id="s6_4"><title>6.4. GBM Demand Results</title><p>For GBM process, our results are slightly different from the normal distribution but not so much (Figures 10-12 and <xref ref-type="table" rid="table8">Table 8</xref>), and all three methods show almost the same result (<xref ref-type="table" rid="table8">Table 8</xref> and <xref ref-type="table" rid="table9">Table 9</xref>).</p></sec><sec id="s6_5"><title>6.5. Stage-Independent Normal Distribution Demand Results</title><p>For the Competitive learning method, our results slightly differ from the normal distribution but not so much (Figures 13-15 and <xref ref-type="table" rid="table1">Table 1</xref>0). The k-means and Voronoi methods show almost identical results, while Competitive learning loses pretty badly (<xref ref-type="table" rid="table1">Table 1</xref>0 and <xref ref-type="table" rid="table1">Table 1</xref>1).</p><table-wrap id="table4" ><label><xref ref-type="table" rid="table4">Table 4</xref></label><caption><title> AR statistics</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >K-means</th><th align="center" valign="middle" >Competitive learning</th><th align="center" valign="middle" >Voronoi</th></tr></thead><tr><td align="center" valign="middle" >Mean</td><td align="center" valign="middle" >26,390.746</td><td align="center" valign="middle" >26,390.623</td><td align="center" valign="middle" >35,290.404</td></tr><tr><td align="center" valign="middle" >SD</td><td align="center" valign="middle" >10,196.322</td><td align="center" valign="middle" >10,196.386</td><td align="center" valign="middle" >11,703.831</td></tr><tr><td align="center" valign="middle" >Shapiro-Wilk p-value</td><td align="center" valign="middle" >0.688</td><td align="center" valign="middle" >0.688</td><td align="center" valign="middle" >0.182</td></tr></tbody></table></table-wrap><table-wrap id="table5" ><label><xref ref-type="table" rid="table5">Table 5</xref></label><caption><title> AR t-test p-values</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >K-means</th><th align="center" valign="middle" >Competitive learning</th><th align="center" valign="middle" >Voronoi</th></tr></thead><tr><td align="center" valign="middle" >K-means</td><td align="center" valign="middle" >-</td><td align="center" valign="middle" >0.499</td><td align="center" valign="middle" >0.001</td></tr><tr><td align="center" valign="middle" >Competitive learning</td><td align="center" valign="middle" >0.499</td><td align="center" valign="middle" >-</td><td align="center" valign="middle" >0.001</td></tr><tr><td align="center" valign="middle" >Voronoi</td><td align="center" valign="middle" >0.001</td><td align="center" valign="middle" >0.001</td><td align="center" valign="middle" >-</td></tr></tbody></table></table-wrap><table-wrap id="table6" ><label><xref ref-type="table" rid="table6">Table 6</xref></label><caption><title> ARMA statistics</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >K-means</th><th align="center" valign="middle" >Competitive learning</th><th align="center" valign="middle" >Voronoi</th></tr></thead><tr><td align="center" valign="middle" >Mean</td><td align="center" valign="middle" >50,931.03</td><td align="center" valign="middle" >−44,927.187</td><td align="center" valign="middle" >50,900.551</td></tr><tr><td align="center" valign="middle" >SD</td><td align="center" valign="middle" >33,633.708</td><td align="center" valign="middle" >59,910.994</td><td align="center" valign="middle" >33,635.331</td></tr><tr><td align="center" valign="middle" >Shapiro-Wilk p-value</td><td align="center" valign="middle" >0.548</td><td align="center" valign="middle" >0.091</td><td align="center" valign="middle" >0.542</td></tr></tbody></table></table-wrap><table-wrap id="table7" ><label><xref ref-type="table" rid="table7">Table 7</xref></label><caption><title> ARMA t-test p-values</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >K-means</th><th align="center" valign="middle" >Competitive learning</th><th align="center" valign="middle" >Voronoi</th></tr></thead><tr><td align="center" valign="middle" >K-means</td><td align="center" valign="middle" >-</td><td align="center" valign="middle" >8.17e−10</td><td align="center" valign="middle" >0.498</td></tr><tr><td align="center" valign="middle" >Competitive learning</td><td align="center" valign="middle" >8.17e−10</td><td align="center" valign="middle" >-</td><td align="center" valign="middle" >8.24e−10</td></tr><tr><td align="center" valign="middle" >Voronoi</td><td align="center" valign="middle" >0.498</td><td align="center" valign="middle" >8.24e−10</td><td align="center" valign="middle" >-</td></tr></tbody></table></table-wrap><table-wrap id="table8" ><label><xref ref-type="table" rid="table8">Table 8</xref></label><caption><title> GBM statistics</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >K-means</th><th align="center" valign="middle" >Competitive learning</th><th align="center" valign="middle" >Voronoi</th></tr></thead><tr><td align="center" valign="middle" >Mean</td><td align="center" valign="middle" >166,051.19</td><td align="center" valign="middle" >166,163.13</td><td align="center" valign="middle" >165,994.99</td></tr><tr><td align="center" valign="middle" >SD</td><td align="center" valign="middle" >52,557.44</td><td align="center" valign="middle" >52,572.10</td><td align="center" valign="middle" >52,972.71</td></tr><tr><td align="center" valign="middle" >Shapiro-Wilk p-value</td><td align="center" valign="middle" >0.029</td><td align="center" valign="middle" >0.036</td><td align="center" valign="middle" >0.037</td></tr></tbody></table></table-wrap><table-wrap id="table9" ><label><xref ref-type="table" rid="table9">Table 9</xref></label><caption><title> GBM t-test p-values</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >K-means</th><th align="center" valign="middle" >Competitive learning</th><th align="center" valign="middle" >Voronoi</th></tr></thead><tr><td align="center" valign="middle" >K-means</td><td align="center" valign="middle" >-</td><td align="center" valign="middle" >0.496</td><td align="center" valign="middle" >0.498</td></tr><tr><td align="center" valign="middle" >Competitive learning</td><td align="center" valign="middle" >0.496</td><td align="center" valign="middle" >-</td><td align="center" valign="middle" >0.495</td></tr><tr><td align="center" valign="middle" >Voronoi</td><td align="center" valign="middle" >0.498</td><td align="center" valign="middle" >0.495</td><td align="center" valign="middle" >-</td></tr></tbody></table></table-wrap><table-wrap id="table10" ><label><xref ref-type="table" rid="table1">Table 1</xref>0</label><caption><title> Stage-independent statistics</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >K-means</th><th align="center" valign="middle" >Competitive learning</th><th align="center" valign="middle" >Voronoi</th></tr></thead><tr><td align="center" valign="middle" >Mean</td><td align="center" valign="middle" >26,243.39</td><td align="center" valign="middle" >8323.40</td><td align="center" valign="middle" >27,525.61</td></tr><tr><td align="center" valign="middle" >SD</td><td align="center" valign="middle" >10,142.48</td><td align="center" valign="middle" >14,519.86</td><td align="center" valign="middle" >20,496.62</td></tr><tr><td align="center" valign="middle" >Shapiro-Wilk p-value</td><td align="center" valign="middle" >0.713</td><td align="center" valign="middle" >0.019</td><td align="center" valign="middle" >0.099</td></tr></tbody></table></table-wrap><table-wrap id="table11" ><label><xref ref-type="table" rid="table1">Table 1</xref>1</label><caption><title> Stage-independent t-test p-values</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >K-means</th><th align="center" valign="middle" >Competitive learning</th><th align="center" valign="middle" >Voronoi</th></tr></thead><tr><td align="center" valign="middle" >K-means</td><td align="center" valign="middle" >-</td><td align="center" valign="middle" >7.08e−07</td><td align="center" valign="middle" >0.382</td></tr><tr><td align="center" valign="middle" >Competitive learning</td><td align="center" valign="middle" >7.08e−07</td><td align="center" valign="middle" >-</td><td align="center" valign="middle" >6.85e−05</td></tr><tr><td align="center" valign="middle" >Voronoi</td><td align="center" valign="middle" >0.382</td><td align="center" valign="middle" >6.85e−05</td><td align="center" valign="middle" >-</td></tr></tbody></table></table-wrap></sec></sec><sec id="s7"><title>7. Conclusions</title><p>As we can see in the numerical results section, in our experimental problem, the Voronoi method slightly outperforms others, but the k-means method is much faster.</p><p>1) With the AR process, the Voronoi method performs better than k-means and Competitive learning, which both show almost the same result.</p><p>2) With the ARMA process, the Voronoi method is comparable to k-means, and Competitive learning underperforms pretty hard.</p><p>3) With GBM process, results of the methods are close to each other.</p><p>4) Scenario lattice calculation time was the same for the Competitive learning and Voronoi method but much lower for the k-means.</p></sec><sec id="s8"><title>Conflicts of Interest</title><p>The authors declare no conflicts of interest regarding the publication of this paper.</p></sec><sec id="s9"><title>Cite this paper</title><p>Golembiovsky, D., Pavlov, A. and Daniil, S. (2021) Experimental Study of Methods of Scenario Lattice Construction for Stochastic Dual Dynamic Programming. Open Journal of Optimization, 10, 47-60. https://doi.org/10.4236/ojop.2021.102004</p></sec></body><back><ref-list><title>References</title><ref id="scirp.110139-ref1"><label>1</label><mixed-citation publication-type="other" xlink:type="simple">Pereira, M.V.F. and Pinto, L.M.V.G. (1991) Multi-Stage Stochastic Optimization Applied to Energy Planning. Mathematical Programming, 52, 359–375.https://doi.org/10.1007/BF01582895</mixed-citation></ref><ref id="scirp.110139-ref2"><label>2</label><mixed-citation publication-type="other" xlink:type="simple">Dentcheva, D. and Ruszczynski, A. (2009) Lectures on Stochastic Programming. Modeling and Theory. Society for Industrial Mathematics, 9, 271-279.</mixed-citation></ref><ref id="scirp.110139-ref3"><label>3</label><mixed-citation publication-type="other" xlink:type="simple">Birge, J.R. and Louveaux, F. (2011) Introduction to Stochastic Programming. Springer, NewYork. https://doi.org/10.1007/978-1-4614-0237-4</mixed-citation></ref><ref id="scirp.110139-ref4"><label>4</label><mixed-citation publication-type="other" xlink:type="simple">Higle, J. L. (1998) Variance Reduction and Objective Function Evaluation in Stochastic Linear Programs. INFORMS Journal on Computing, 10, 121-260.https://doi.org/10.1287/ijoc.10.2.236</mixed-citation></ref><ref id="scirp.110139-ref5"><label>5</label><mixed-citation publication-type="other" xlink:type="simple">Kaut, M. and Wallace, S. (2007) Evaluation of Scenario-Generation Methods for Stochastic Programming. Pacific Journal of Optimization, 3, 257-271.</mixed-citation></ref><ref id="scirp.110139-ref6"><label>6</label><mixed-citation publication-type="other" xlink:type="simple">Roemich, W. and Heitsch, H. (2009) Scenario Tree Modelling for Multi-Stage Stochastic Programs. Mathematical Programming, 118, 371-406.https://doi.org/10.1007/s10107-007-0197-2</mixed-citation></ref><ref id="scirp.110139-ref7"><label>7</label><mixed-citation publication-type="other" xlink:type="simple">Vazsonyi, M. (2006) Overview of Scenario Tree Generation Methods, Applied in Financial and Economic Decision Making. Periodica Polytechnica Social and Management Sciences, 14, 29-37. https://doi.org/10.3311/pp.so.2006-1.04</mixed-citation></ref><ref id="scirp.110139-ref8"><label>8</label><mixed-citation publication-type="other" xlink:type="simple">L&amp;#246;hndorf, N. (2016) An Empirical Analysis of Scenario Generation Methods for Stochastic Optimization. European Journal of Operational Research, 255, 121-132.https://doi.org/10.1016/j.ejor.2016.05.021</mixed-citation></ref><ref id="scirp.110139-ref9"><label>9</label><mixed-citation publication-type="book" xlink:type="simple">Shapiro, A. (2013) Sample Average Approximation. In: Gass, S.I. and Fu, M.C., Eds., Encyclopedia of Operations Research and Management Science, Springer, Boston, MA, 1350-1355. https://doi.org/10.1007/978-1-4419-1153-7_1154</mixed-citation></ref><ref id="scirp.110139-ref10"><label>10</label><mixed-citation publication-type="other" xlink:type="simple">Shapiro, A. (2003) Monte Carlo Sampling Methods. Handbooks in Operations Research and Management Science, 10, 353-425.https://doi.org/10.1016/S0927-0507(03)10006-0</mixed-citation></ref><ref id="scirp.110139-ref11"><label>11</label><mixed-citation publication-type="other" xlink:type="simple">Glasserman, P. (2004) Monte Carlo Methods in Financial Engineering. Springer, NewYork. https://doi.org/10.1007/978-0-387-21617-1</mixed-citation></ref><ref id="scirp.110139-ref12"><label>12</label><mixed-citation publication-type="other" xlink:type="simple">Pflug, G.C. (2001) Scenario Tree Generation for Multiperiod Financial Optimization by Optimal Discretization. Mathematical Programming, 89, 251-271.https://doi.org/10.1007/PL00011398</mixed-citation></ref><ref id="scirp.110139-ref13"><label>13</label><mixed-citation publication-type="other" xlink:type="simple">Arthur, D. and Vassilvitskii, S. (2007) K-means++: The Advantages of Careful Seeding. Proceedings of the Eighteenth Annual ACM-SIAM Symposium on Discrete Algorithms, SODA 2007, New Orleans, Louisiana, USA, 7-9 January 2007, 1027-1035.</mixed-citation></ref><ref id="scirp.110139-ref14"><label>14</label><mixed-citation publication-type="other" xlink:type="simple">Dowson, O. and Kapelevich, L. (2020) SDDP.jl: A Julia Package for Stochastic Dual Dynamic Programming. INFORMS Journal on Computing, 33, 1-418.https://doi.org/10.1287/ijoc.2020.0987</mixed-citation></ref></ref-list></back></article>