]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | <html> |
2 | <head> | |
3 | <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> | |
4 | <title>Hyperexponential Distribution</title> | |
5 | <link rel="stylesheet" href="../../../math.css" type="text/css"> | |
6 | <meta name="generator" content="DocBook XSL Stylesheets V1.77.1"> | |
7 | <link rel="home" href="../../../index.html" title="Math Toolkit 2.5.1"> | |
8 | <link rel="up" href="../dists.html" title="Distributions"> | |
9 | <link rel="prev" href="geometric_dist.html" title="Geometric Distribution"> | |
10 | <link rel="next" href="hypergeometric_dist.html" title="Hypergeometric Distribution"> | |
11 | </head> | |
12 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
13 | <table cellpadding="2" width="100%"><tr> | |
14 | <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> | |
15 | <td align="center"><a href="../../../../../../../index.html">Home</a></td> | |
16 | <td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> | |
17 | <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> | |
18 | <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> | |
19 | <td align="center"><a href="../../../../../../../more/index.htm">More</a></td> | |
20 | </tr></table> | |
21 | <hr> | |
22 | <div class="spirit-nav"> | |
23 | <a accesskey="p" href="geometric_dist.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dists.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="hypergeometric_dist.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> | |
24 | </div> | |
25 | <div class="section"> | |
26 | <div class="titlepage"><div><div><h4 class="title"> | |
27 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist"></a><a class="link" href="hyperexponential_dist.html" title="Hyperexponential Distribution">Hyperexponential | |
28 | Distribution</a> | |
29 | </h4></div></div></div> | |
30 | <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">hyperexponential</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></pre> | |
31 | <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span><span class="special">{</span> | |
32 | ||
33 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RealType</span> <span class="special">=</span> <span class="keyword">double</span><span class="special">,</span> | |
34 | <span class="keyword">typename</span> <a class="link" href="../../../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a> <span class="special">=</span> <a class="link" href="../../pol_ref/pol_ref_ref.html" title="Policy Class Reference">policies::policy<></a> <span class="special">></span> | |
35 | <span class="keyword">class</span> <span class="identifier">hyperexponential_distribution</span><span class="special">;</span> | |
36 | ||
37 | <span class="keyword">typedef</span> <span class="identifier">hyperexponential_distribution</span><span class="special"><></span> <span class="identifier">hyperexponential</span><span class="special">;</span> | |
38 | ||
39 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RealType</span><span class="special">,</span> <span class="keyword">typename</span> <a class="link" href="../../../policy.html" title="Chapter 15. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span> | |
40 | <span class="keyword">class</span> <span class="identifier">hyperexponential_distribution</span> | |
41 | <span class="special">{</span> | |
42 | <span class="keyword">public</span><span class="special">:</span> | |
43 | <span class="keyword">typedef</span> <span class="identifier">RealType</span> <span class="identifier">value_type</span><span class="special">;</span> | |
44 | <span class="keyword">typedef</span> <span class="identifier">Policy</span> <span class="identifier">policy_type</span><span class="special">;</span> | |
45 | ||
46 | <span class="comment">// Constructors:</span> | |
47 | <span class="identifier">hyperexponential_distribution</span><span class="special">();</span> <span class="comment">// Default.</span> | |
48 | ||
49 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RateIterT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateIterT2</span><span class="special">></span> | |
50 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span> <span class="comment">// Default equal probabilities.</span> | |
51 | <span class="identifier">RateIterT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_first</span><span class="special">,</span> | |
52 | <span class="identifier">RateIterT2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_last</span><span class="special">);</span> <span class="comment">// Rates using Iterators.</span> | |
53 | ||
54 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ProbIterT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateIterT</span><span class="special">></span> | |
55 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">ProbIterT</span> <span class="identifier">prob_first</span><span class="special">,</span> <span class="identifier">ProbIterT</span> <span class="identifier">prob_last</span><span class="special">,</span> | |
56 | <span class="identifier">RateIterT</span> <span class="identifier">rate_first</span><span class="special">,</span> <span class="identifier">RateIterT</span> <span class="identifier">rate_last</span><span class="special">);</span> <span class="comment">// Iterators.</span> | |
57 | ||
58 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ProbRangeT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">></span> | |
59 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">ProbRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">prob_range</span><span class="special">,</span> | |
60 | <span class="identifier">RateRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_range</span><span class="special">);</span> <span class="comment">// Ranges.</span> | |
61 | ||
62 | <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">></span> | |
63 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">RateRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_range</span><span class="special">);</span> | |
64 | ||
65 | <span class="preprocessor">#if</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span><span class="special">)</span> <span class="comment">// C++11 initializer lists supported.</span> | |
66 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l1</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l2</span><span class="special">);</span> | |
67 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l1</span><span class="special">);</span> | |
68 | <span class="preprocessor">#endif</span> | |
69 | ||
70 | <span class="comment">// Accessors:</span> | |
71 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">num_phases</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> | |
72 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">probabilities</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> | |
73 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">rates</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> | |
74 | <span class="special">};</span> | |
75 | ||
76 | <span class="special">}}</span> <span class="comment">// namespaces</span> | |
77 | </pre> | |
78 | <div class="note"><table border="0" summary="Note"> | |
79 | <tr> | |
80 | <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> | |
81 | <th align="left">Note</th> | |
82 | </tr> | |
83 | <tr><td align="left" valign="top"><p> | |
84 | An implementation-defined mechanism is provided to avoid ambiguity between | |
85 | constructors accepting ranges, iterators and constants as parameters. | |
86 | This should be transparent to the user. See below and the header file | |
87 | hyperexponential.hpp for details and explanatory comments. | |
88 | </p></td></tr> | |
89 | </table></div> | |
90 | <p> | |
91 | The class type <code class="computeroutput"><span class="identifier">hyperexponential_distribution</span></code> | |
92 | represents a <a href="http://en.wikipedia.org/wiki/Hyperexponential_distribution" target="_top">hyperexponential | |
93 | distribution</a>. | |
94 | </p> | |
95 | <p> | |
96 | A <span class="emphasis"><em>k</em></span>-phase hyperexponential distribution is a <a href="http://en.wikipedia.org/wiki/Continuous_probability_distribution" target="_top">continuous | |
97 | probability distribution</a> obtained as a mixture of <span class="emphasis"><em>k</em></span> | |
98 | <a class="link" href="exp_dist.html" title="Exponential Distribution">Exponential Distribution</a>s. | |
99 | It is also referred to as <span class="emphasis"><em>mixed exponential distribution</em></span> | |
100 | or parallel <span class="emphasis"><em>k-phase exponential distribution</em></span>. | |
101 | </p> | |
102 | <p> | |
103 | A <span class="emphasis"><em>k</em></span>-phase hyperexponential distribution is characterized | |
104 | by two parameters, namely a <span class="emphasis"><em>phase probability vector</em></span> | |
105 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(α<sub>1</sub>,...,α<sub>k</sub>)</em></span> and a | |
106 | <span class="emphasis"><em>rate vector</em></span> <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(λ<sub>1</sub>,...,λ<sub>k</sub>)</em></span>. | |
107 | </p> | |
108 | <p> | |
109 | The <a href="http://en.wikipedia.org/wiki/Probability_density_function" target="_top">probability | |
110 | density function</a> for random variate <span class="emphasis"><em>x</em></span> in a | |
111 | hyperexponential distribution is given by: | |
112 | </p> | |
113 | <p> | |
114 | <span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_pdf.svg"></span> | |
115 | </p> | |
116 | <p> | |
117 | The following graph illustrates the PDF of the hyperexponential distribution | |
118 | with five different parameters, namely: | |
119 | </p> | |
120 | <div class="orderedlist"><ol class="orderedlist" type="1"> | |
121 | <li class="listitem"> | |
122 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(1.0)</em></span> and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(1.0)</em></span> (which degenerates to a simple | |
123 | exponential distribution), | |
124 | </li> | |
125 | <li class="listitem"> | |
126 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.1, 0.9)</em></span> and | |
127 | <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>, | |
128 | </li> | |
129 | <li class="listitem"> | |
130 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.9, 0.1)</em></span> and | |
131 | <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>, | |
132 | </li> | |
133 | <li class="listitem"> | |
134 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.2, 0.3, 0.5)</em></span> | |
135 | and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.0, 1.5)</em></span>, | |
136 | </li> | |
137 | <li class="listitem"> | |
138 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.5, 0.3, 0.2)</em></span> | |
139 | and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.0, 1.5)</em></span>. | |
140 | </li> | |
141 | </ol></div> | |
142 | <p> | |
143 | <span class="inlinemediaobject"><img src="../../../../graphs/hyperexponential_pdf.svg" align="middle"></span> | |
144 | </p> | |
145 | <p> | |
146 | Also, the following graph illustrates the PDF of the hyperexponential distribution | |
147 | (solid lines) where only the <span class="emphasis"><em>phase probability vector</em></span> | |
148 | changes together with the PDF of the two limiting exponential distributions | |
149 | (dashed lines): | |
150 | </p> | |
151 | <div class="orderedlist"><ol class="orderedlist" type="1"> | |
152 | <li class="listitem"> | |
153 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.1, 0.9)</em></span> and | |
154 | <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>, | |
155 | </li> | |
156 | <li class="listitem"> | |
157 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.6, 0.4)</em></span> and | |
158 | <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>, | |
159 | </li> | |
160 | <li class="listitem"> | |
161 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.9, 0.1)</em></span> and | |
162 | <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>, | |
163 | </li> | |
164 | <li class="listitem"> | |
165 | Exponential distribution with parameter <span class="emphasis"><em>λ=0.5</em></span>, | |
166 | </li> | |
167 | <li class="listitem"> | |
168 | Exponential distribution with parameter <span class="emphasis"><em>λ=1.5</em></span>. | |
169 | </li> | |
170 | </ol></div> | |
171 | <p> | |
172 | As expected, as the first element <span class="emphasis"><em>α<sub>1</sub></em></span> of the <span class="emphasis"><em>phase | |
173 | probability vector</em></span> approaches to <span class="emphasis"><em>1</em></span> (or, | |
174 | equivalently, <span class="emphasis"><em>α<sub>2</sub></em></span> approaches to <span class="emphasis"><em>0</em></span>), | |
175 | the resulting hyperexponential distribution nears the exponential distribution | |
176 | with parameter <span class="emphasis"><em>λ=0.5</em></span>. Conversely, as the first element | |
177 | <span class="emphasis"><em>α<sub>2</sub></em></span> of the <span class="emphasis"><em>phase probability vector</em></span> | |
178 | approaches to <span class="emphasis"><em>1</em></span> (or, equivalently, <span class="emphasis"><em>α<sub>1</sub></em></span> | |
179 | approaches to <span class="emphasis"><em>0</em></span>), the resulting hyperexponential distribution | |
180 | nears the exponential distribution with parameter <span class="emphasis"><em>λ=1.5</em></span>. | |
181 | </p> | |
182 | <p> | |
183 | <span class="inlinemediaobject"><img src="../../../../graphs/hyperexponential_pdf_samerate.svg" align="middle"></span> | |
184 | </p> | |
185 | <p> | |
186 | Finally, the following graph compares the PDF of the hyperexponential distribution | |
187 | with different number of phases but with the same mean value equal to | |
188 | <span class="emphasis"><em>2</em></span>: | |
189 | </p> | |
190 | <div class="orderedlist"><ol class="orderedlist" type="1"> | |
191 | <li class="listitem"> | |
192 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(1.0)</em></span> and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(2.0)</em></span> (which degenerates to a simple | |
193 | exponential distribution), | |
194 | </li> | |
195 | <li class="listitem"> | |
196 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.5, 0.5)</em></span> and | |
197 | <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.3, 1.5)</em></span>, | |
198 | </li> | |
199 | <li class="listitem"> | |
200 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(1.0/3.0, 1.0/3.0, 1.0/3.0)</em></span> | |
201 | and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.2, 1.5, 3.0)</em></span>, | |
202 | </li> | |
203 | </ol></div> | |
204 | <p> | |
205 | <span class="inlinemediaobject"><img src="../../../../graphs/hyperexponential_pdf_samemean.svg" align="middle"></span> | |
206 | </p> | |
207 | <p> | |
208 | As can be noted, even if the three distributions have the same mean value, | |
209 | the two hyperexponential distributions have a <span class="emphasis"><em>longer</em></span> | |
210 | tail with respect to the one of the exponential distribution. Indeed, the | |
211 | hyperexponential distribution has a larger variability than the exponential | |
212 | distribution, thus resulting in a <a href="http://en.wikipedia.org/wiki/Coefficient_of_variation" target="_top">Coefficient | |
213 | of Variation</a> greater than <span class="emphasis"><em>1</em></span> (as opposed to | |
214 | the one of the exponential distribution which is exactly <span class="emphasis"><em>1</em></span>). | |
215 | </p> | |
216 | <h4> | |
217 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h0"></a> | |
218 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.applications"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.applications">Applications</a> | |
219 | </h4> | |
220 | <p> | |
221 | A <span class="emphasis"><em>k</em></span>-phase hyperexponential distribution is frequently | |
222 | used in <a href="http://en.wikipedia.org/wiki/Queueing_theory" target="_top">queueing | |
223 | theory</a> to model the distribution of the superposition of <span class="emphasis"><em>k</em></span> | |
224 | independent events, like, for instance, the service time distribution of | |
225 | a queueing station with <span class="emphasis"><em>k</em></span> servers in parallel where | |
226 | the <span class="emphasis"><em>i</em></span>-th server is chosen with probability <span class="emphasis"><em>α<sub>i</sub></em></span> | |
227 | and its service time distribution is an exponential distribution with rate | |
228 | <span class="emphasis"><em>λ<sub>i</sub></em></span> (Allen,1990; Papadopolous et al.,1993; Trivedi,2002). | |
229 | </p> | |
230 | <p> | |
231 | For instance, CPUs service-time distribution in a computing system has | |
232 | often been observed to possess such a distribution (Rosin,1965). Also, | |
233 | the arrival of different types of customer to a single queueing station | |
234 | is often modeled as a hyperexponential distribution (Papadopolous et al.,1993). | |
235 | Similarly, if a product manufactured in several parallel assembly lines | |
236 | and the outputs are merged, the failure density of the overall product | |
237 | is likely to be hyperexponential (Trivedi,2002). | |
238 | </p> | |
239 | <p> | |
240 | Finally, since the hyperexponential distribution exhibits a high Coefficient | |
241 | of Variation (CoV), that is a CoV > 1, it is especially suited to fit | |
242 | empirical data with large CoV (Feitelson,2014; Wolski et al.,2013) and | |
243 | to approximate <a href="http://en.wikipedia.org/wiki/Long_tail" target="_top">long-tail | |
244 | probability distributions</a> (Feldmann et al.,1998). | |
245 | </p> | |
246 | <h4> | |
247 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h1"></a> | |
248 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.related_distributions"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.related_distributions">Related | |
249 | distributions</a> | |
250 | </h4> | |
251 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
252 | <li class="listitem"> | |
253 | When the number of phases <span class="emphasis"><em>k</em></span> is equal to <code class="computeroutput"><span class="number">1</span></code>, the hyperexponential distribution | |
254 | is simply an <a class="link" href="exp_dist.html" title="Exponential Distribution">Exponential | |
255 | Distribution</a>. | |
256 | </li> | |
257 | <li class="listitem"> | |
258 | When the <span class="emphasis"><em>k</em></span> rates are all equal to <span class="emphasis"><em>λ</em></span>, | |
259 | the hyperexponential distribution is simple an <a class="link" href="exp_dist.html" title="Exponential Distribution">Exponential | |
260 | Distribution</a> with rate <span class="emphasis"><em>λ</em></span>. | |
261 | </li> | |
262 | </ul></div> | |
263 | <h4> | |
264 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h2"></a> | |
265 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.examples"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.examples">Examples</a> | |
266 | </h4> | |
267 | <h5> | |
268 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h3"></a> | |
269 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.lifetime_of_appliances"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.lifetime_of_appliances">Lifetime | |
270 | of Appliances</a> | |
271 | </h5> | |
272 | <p> | |
273 | Suppose a customer is buying an appliance and is choosing at random between | |
274 | an appliance with average lifetime of 10 years and an appliance with average | |
275 | lifetime of 12 years. Assuming the lifetime of this appliance follows an | |
276 | exponential distribution, the lifetime distribution of the purchased appliance | |
277 | can be modeled as a hyperexponential distribution with phase probability | |
278 | vector <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(1/2,1/2)</em></span> | |
279 | and rate vector <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(1/10,1/12)</em></span> | |
280 | (Wolfram,2014). | |
281 | </p> | |
282 | <p> | |
283 | In the rest of this section, we provide an example C++ implementation for | |
284 | computing the average lifetime and the probability that the appliance will | |
285 | work for more than 15 years. | |
286 | </p> | |
287 | <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">hyperexponential</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> | |
288 | <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> | |
289 | <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> | |
290 | <span class="special">{</span> | |
291 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10.0</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12.0</span> <span class="special">};</span> | |
292 | ||
293 | <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span> <span class="identifier">he</span><span class="special">(</span><span class="identifier">rates</span><span class="special">);</span> | |
294 | ||
295 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Average lifetime: "</span> | |
296 | <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">he</span><span class="special">)</span> | |
297 | <span class="special"><<</span> <span class="string">" years"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
298 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability that the appliance will work for more than 15 years: "</span> | |
299 | <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">he</span><span class="special">,</span> <span class="number">15.0</span><span class="special">))</span> | |
300 | <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
301 | <span class="special">}</span> | |
302 | </pre> | |
303 | <p> | |
304 | The resulting output is: | |
305 | </p> | |
306 | <pre class="programlisting"><span class="identifier">Average</span> <span class="identifier">lifetime</span><span class="special">:</span> <span class="number">11</span> <span class="identifier">years</span> | |
307 | <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="identifier">appliance</span> <span class="identifier">will</span> <span class="identifier">work</span> <span class="keyword">for</span> <span class="identifier">more</span> <span class="identifier">than</span> <span class="number">15</span> <span class="identifier">years</span><span class="special">:</span> <span class="number">0.254817</span> | |
308 | </pre> | |
309 | <h5> | |
310 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h4"></a> | |
311 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.workloads_of_private_cloud_compu"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.workloads_of_private_cloud_compu">Workloads | |
312 | of Private Cloud Computing Systems</a> | |
313 | </h5> | |
314 | <p> | |
315 | <a href="http://en.wikipedia.org/wiki/Cloud_computing" target="_top">Cloud computing</a> | |
316 | has become a popular metaphor for dynamic and secure self-service access | |
317 | to computational and storage capabilities. In (Wolski et al.,2013), the | |
318 | authors analyze and model workloads gathered from enterprise-operated commercial | |
319 | <a href="http://en.wikipedia.org/wiki/Cloud_computing#Private_cloud" target="_top">private | |
320 | clouds</a> and show that 3-phase hyperexponential distributions (fitted | |
321 | using the <a href="http://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm" target="_top">Expectation | |
322 | Maximization algorithm</a>) capture workload attributes accurately. | |
323 | </p> | |
324 | <p> | |
325 | In this type of computing system, user requests consist in demanding the | |
326 | provisioning of one or more <a href="http://en.wikipedia.org/wiki/Virtual_machine" target="_top">Virtual | |
327 | Machines</a> (VMs). In particular, in (Wolski et al.,2013) the workload | |
328 | experienced by each cloud system is a function of four distributions, one | |
329 | for each of the following workload attributes: | |
330 | </p> | |
331 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
332 | <li class="listitem"> | |
333 | <span class="emphasis"><em>Request Interarrival Time</em></span>: the amount of time | |
334 | until the next request, | |
335 | </li> | |
336 | <li class="listitem"> | |
337 | <span class="emphasis"><em>VM Lifetime</em></span>: the time duration over which a VM | |
338 | is provisioned to a physical machine, | |
339 | </li> | |
340 | <li class="listitem"> | |
341 | <span class="emphasis"><em>Request Size</em></span>: the number of VMs in the request, | |
342 | and | |
343 | </li> | |
344 | <li class="listitem"> | |
345 | <span class="emphasis"><em>Core Count</em></span>: the CPU core count requested for each | |
346 | VM. | |
347 | </li> | |
348 | </ul></div> | |
349 | <p> | |
350 | The authors assume that all VMs in a request have the same core count, | |
351 | but request sizes and core counts can vary from request to request. Moreover, | |
352 | all VMs within a request are assumed to have the same lifetime. Given these | |
353 | assumptions, the authors build a statistical model for the request interarrival | |
354 | time and VM lifetime attributes by fitting their respective data to a 3-phase | |
355 | hyperexponential distribution. | |
356 | </p> | |
357 | <p> | |
358 | In the following table, we show the sample mean and standard deviation | |
359 | (SD), in seconds, of the request interarrival time and of the VM lifetime | |
360 | distributions of the three datasets collected by authors: | |
361 | </p> | |
362 | <div class="informaltable"><table class="table"> | |
363 | <colgroup> | |
364 | <col> | |
365 | <col> | |
366 | <col> | |
367 | <col> | |
368 | </colgroup> | |
369 | <thead><tr> | |
370 | <th> | |
371 | <p> | |
372 | Dataset | |
373 | </p> | |
374 | </th> | |
375 | <th> | |
376 | <p> | |
377 | Mean Request Interarrival Time (SD) | |
378 | </p> | |
379 | </th> | |
380 | <th> | |
381 | <p> | |
382 | Mean Multi-core VM Lifetime (SD) | |
383 | </p> | |
384 | </th> | |
385 | <th> | |
386 | <p> | |
387 | Mean Single-core VM Lifetime (SD) | |
388 | </p> | |
389 | </th> | |
390 | </tr></thead> | |
391 | <tbody> | |
392 | <tr> | |
393 | <td> | |
394 | <p> | |
395 | DS1 | |
396 | </p> | |
397 | </td> | |
398 | <td> | |
399 | <p> | |
400 | 2202.1 (2.2e+04) | |
401 | </p> | |
402 | </td> | |
403 | <td> | |
404 | <p> | |
405 | 257173 (4.6e+05) | |
406 | </p> | |
407 | </td> | |
408 | <td> | |
409 | <p> | |
410 | 28754.4 (1.6e+05) | |
411 | </p> | |
412 | </td> | |
413 | </tr> | |
414 | <tr> | |
415 | <td> | |
416 | <p> | |
417 | DS2 | |
418 | </p> | |
419 | </td> | |
420 | <td> | |
421 | <p> | |
422 | 41285.7 (1.1e+05) | |
423 | </p> | |
424 | </td> | |
425 | <td> | |
426 | <p> | |
427 | 144669.0 (7.9e+05) | |
428 | </p> | |
429 | </td> | |
430 | <td> | |
431 | <p> | |
432 | 599815.0 (1.7e+06) | |
433 | </p> | |
434 | </td> | |
435 | </tr> | |
436 | <tr> | |
437 | <td> | |
438 | <p> | |
439 | DS3 | |
440 | </p> | |
441 | </td> | |
442 | <td> | |
443 | <p> | |
444 | 11238.8 (3.0e+04) | |
445 | </p> | |
446 | </td> | |
447 | <td> | |
448 | <p> | |
449 | 30739.2 (1.6e+05) | |
450 | </p> | |
451 | </td> | |
452 | <td> | |
453 | <p> | |
454 | 44447.8 (2.2e+05) | |
455 | </p> | |
456 | </td> | |
457 | </tr> | |
458 | </tbody> | |
459 | </table></div> | |
460 | <p> | |
461 | Whereas in the following table we show the hyperexponential distribution | |
462 | parameters resulting from the fit: | |
463 | </p> | |
464 | <div class="informaltable"><table class="table"> | |
465 | <colgroup> | |
466 | <col> | |
467 | <col> | |
468 | <col> | |
469 | <col> | |
470 | </colgroup> | |
471 | <thead><tr> | |
472 | <th> | |
473 | <p> | |
474 | Dataset | |
475 | </p> | |
476 | </th> | |
477 | <th> | |
478 | <p> | |
479 | Request Interarrival Time | |
480 | </p> | |
481 | </th> | |
482 | <th> | |
483 | <p> | |
484 | Multi-core VM Lifetime | |
485 | </p> | |
486 | </th> | |
487 | <th> | |
488 | <p> | |
489 | Single-core VM Lifetime | |
490 | </p> | |
491 | </th> | |
492 | </tr></thead> | |
493 | <tbody> | |
494 | <tr> | |
495 | <td> | |
496 | <p> | |
497 | DS1 | |
498 | </p> | |
499 | </td> | |
500 | <td> | |
501 | <p> | |
502 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.34561,0.08648,0.56791), | |
503 | <span class="bold"><strong>λ</strong></span>=(0.008,0.00005,0.02894)</em></span> | |
504 | </p> | |
505 | </td> | |
506 | <td> | |
507 | <p> | |
508 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.24667,0.37948,0.37385), | |
509 | <span class="bold"><strong>λ</strong></span>=(0.00004,0.000002,0.00059)</em></span> | |
510 | </p> | |
511 | </td> | |
512 | <td> | |
513 | <p> | |
514 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.09325,0.22251,0.68424), | |
515 | <span class="bold"><strong>λ</strong></span>=(0.000003,0.00109,0.00109)</em></span> | |
516 | </p> | |
517 | </td> | |
518 | </tr> | |
519 | <tr> | |
520 | <td> | |
521 | <p> | |
522 | DS2 | |
523 | </p> | |
524 | </td> | |
525 | <td> | |
526 | <p> | |
527 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.38881,0.18227,0.42892), | |
528 | <span class="bold"><strong>λ</strong></span>=(0.000006,0.05228,0.00081)</em></span> | |
529 | </p> | |
530 | </td> | |
531 | <td> | |
532 | <p> | |
533 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.42093,0.43960,0.13947), | |
534 | <span class="bold"><strong>λ</strong></span>=(0.00186,0.00008,0.0000008)</em></span> | |
535 | </p> | |
536 | </td> | |
537 | <td> | |
538 | <p> | |
539 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.44885,0.30675,0.2444), | |
540 | <span class="bold"><strong>λ</strong></span>=(0.00143,0.00005,0.0000004)</em></span> | |
541 | </p> | |
542 | </td> | |
543 | </tr> | |
544 | <tr> | |
545 | <td> | |
546 | <p> | |
547 | DS3 | |
548 | </p> | |
549 | </td> | |
550 | <td> | |
551 | <p> | |
552 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.39442,0.24644,0.35914), | |
553 | <span class="bold"><strong>λ</strong></span>=(0.00030,0.00003,0.00257)</em></span> | |
554 | </p> | |
555 | </td> | |
556 | <td> | |
557 | <p> | |
558 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.37621,0.14838,0.47541), | |
559 | <span class="bold"><strong>λ</strong></span>=(0.00498,0.000005,0.00022)</em></span> | |
560 | </p> | |
561 | </td> | |
562 | <td> | |
563 | <p> | |
564 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.34131,0.12544,0.53325), | |
565 | <span class="bold"><strong>λ</strong></span>=(0.000297,0.000003,0.00410)</em></span> | |
566 | </p> | |
567 | </td> | |
568 | </tr> | |
569 | </tbody> | |
570 | </table></div> | |
571 | <p> | |
572 | In the rest of this section, we provide an example C++ implementation for | |
573 | computing some statistical properties of the fitted distributions for each | |
574 | of the analyzed dataset. | |
575 | </p> | |
576 | <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> | |
577 | <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> | |
578 | <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> | |
579 | ||
580 | <span class="keyword">struct</span> <span class="identifier">ds_info</span> | |
581 | <span class="special">{</span> | |
582 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">name</span><span class="special">;</span> | |
583 | <span class="keyword">double</span> <span class="identifier">iat_sample_mean</span><span class="special">;</span> | |
584 | <span class="keyword">double</span> <span class="identifier">iat_sample_sd</span><span class="special">;</span> | |
585 | <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span> <span class="identifier">iat_he</span><span class="special">;</span> | |
586 | <span class="keyword">double</span> <span class="identifier">multi_lt_sample_mean</span><span class="special">;</span> | |
587 | <span class="keyword">double</span> <span class="identifier">multi_lt_sample_sd</span><span class="special">;</span> | |
588 | <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span> <span class="identifier">multi_lt_he</span><span class="special">;</span> | |
589 | <span class="keyword">double</span> <span class="identifier">single_lt_sample_mean</span><span class="special">;</span> | |
590 | <span class="keyword">double</span> <span class="identifier">single_lt_sample_sd</span><span class="special">;</span> | |
591 | <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span> <span class="identifier">single_lt_he</span><span class="special">;</span> | |
592 | <span class="special">};</span> | |
593 | ||
594 | <span class="comment">// DS1 dataset</span> | |
595 | <span class="identifier">ds_info</span> <span class="identifier">make_ds1</span><span class="special">()</span> | |
596 | <span class="special">{</span> | |
597 | <span class="identifier">ds_info</span> <span class="identifier">ds</span><span class="special">;</span> | |
598 | ||
599 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">name</span> <span class="special">=</span> <span class="string">"DS1"</span><span class="special">;</span> | |
600 | ||
601 | <span class="comment">// VM interarrival time distribution</span> | |
602 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">iat_fit_probs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.34561</span><span class="special">,</span><span class="number">0.08648</span><span class="special">,</span><span class="number">0.56791</span> <span class="special">};</span> | |
603 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">iat_fit_rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.0008</span><span class="special">,</span><span class="number">0.00005</span><span class="special">,</span><span class="number">0.02894</span> <span class="special">};</span> | |
604 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_sample_mean</span> <span class="special">=</span> <span class="number">2202.1</span><span class="special">;</span> | |
605 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_sample_sd</span> <span class="special">=</span> <span class="number">2.2e+4</span><span class="special">;</span> | |
606 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span><span class="special">(</span><span class="identifier">iat_fit_probs</span><span class="special">,</span> <span class="identifier">iat_fit_rates</span><span class="special">);</span> | |
607 | ||
608 | <span class="comment">// Multi-core VM lifetime distribution</span> | |
609 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">multi_lt_fit_probs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.24667</span><span class="special">,</span><span class="number">0.37948</span><span class="special">,</span><span class="number">0.37385</span> <span class="special">};</span> | |
610 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">multi_lt_fit_rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.00004</span><span class="special">,</span><span class="number">0.000002</span><span class="special">,</span><span class="number">0.00059</span> <span class="special">};</span> | |
611 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_sample_mean</span> <span class="special">=</span> <span class="number">257173</span><span class="special">;</span> | |
612 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_sample_sd</span> <span class="special">=</span> <span class="number">4.6e+5</span><span class="special">;</span> | |
613 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span><span class="special">(</span><span class="identifier">multi_lt_fit_probs</span><span class="special">,</span> <span class="identifier">multi_lt_fit_rates</span><span class="special">);</span> | |
614 | ||
615 | <span class="comment">// Single-core VM lifetime distribution</span> | |
616 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">single_lt_fit_probs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.09325</span><span class="special">,</span><span class="number">0.22251</span><span class="special">,</span><span class="number">0.68424</span> <span class="special">};</span> | |
617 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">single_lt_fit_rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.000003</span><span class="special">,</span><span class="number">0.00109</span><span class="special">,</span><span class="number">0.00109</span> <span class="special">};</span> | |
618 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_sample_mean</span> <span class="special">=</span> <span class="number">28754.4</span><span class="special">;</span> | |
619 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_sample_sd</span> <span class="special">=</span> <span class="number">1.6e+5</span><span class="special">;</span> | |
620 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span><span class="special">(</span><span class="identifier">single_lt_fit_probs</span><span class="special">,</span> <span class="identifier">single_lt_fit_rates</span><span class="special">);</span> | |
621 | ||
622 | <span class="keyword">return</span> <span class="identifier">ds</span><span class="special">;</span> | |
623 | <span class="special">}</span> | |
624 | ||
625 | <span class="comment">// DS2 dataset</span> | |
626 | <span class="identifier">ds_info</span> <span class="identifier">make_ds2</span><span class="special">()</span> | |
627 | <span class="special">{</span> | |
628 | <span class="identifier">ds_info</span> <span class="identifier">ds</span><span class="special">;</span> | |
629 | ||
630 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">name</span> <span class="special">=</span> <span class="string">"DS2"</span><span class="special">;</span> | |
631 | ||
632 | <span class="comment">// VM interarrival time distribution</span> | |
633 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">iat_fit_probs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.38881</span><span class="special">,</span><span class="number">0.18227</span><span class="special">,</span><span class="number">0.42892</span> <span class="special">};</span> | |
634 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">iat_fit_rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.000006</span><span class="special">,</span><span class="number">0.05228</span><span class="special">,</span><span class="number">0.00081</span> <span class="special">};</span> | |
635 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_sample_mean</span> <span class="special">=</span> <span class="number">41285.7</span><span class="special">;</span> | |
636 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_sample_sd</span> <span class="special">=</span> <span class="number">1.1e+05</span><span class="special">;</span> | |
637 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span><span class="special">(</span><span class="identifier">iat_fit_probs</span><span class="special">,</span> <span class="identifier">iat_fit_rates</span><span class="special">);</span> | |
638 | ||
639 | <span class="comment">// Multi-core VM lifetime distribution</span> | |
640 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">multi_lt_fit_probs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.42093</span><span class="special">,</span><span class="number">0.43960</span><span class="special">,</span><span class="number">0.13947</span> <span class="special">};</span> | |
641 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">multi_lt_fit_rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.00186</span><span class="special">,</span><span class="number">0.00008</span><span class="special">,</span><span class="number">0.0000008</span> <span class="special">};</span> | |
642 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_sample_mean</span> <span class="special">=</span> <span class="number">144669.0</span><span class="special">;</span> | |
643 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_sample_sd</span> <span class="special">=</span> <span class="number">7.9e+05</span><span class="special">;</span> | |
644 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span><span class="special">(</span><span class="identifier">multi_lt_fit_probs</span><span class="special">,</span> <span class="identifier">multi_lt_fit_rates</span><span class="special">);</span> | |
645 | ||
646 | <span class="comment">// Single-core VM lifetime distribution</span> | |
647 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">single_lt_fit_probs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.44885</span><span class="special">,</span><span class="number">0.30675</span><span class="special">,</span><span class="number">0.2444</span> <span class="special">};</span> | |
648 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">single_lt_fit_rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.00143</span><span class="special">,</span><span class="number">0.00005</span><span class="special">,</span><span class="number">0.0000004</span> <span class="special">};</span> | |
649 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_sample_mean</span> <span class="special">=</span> <span class="number">599815.0</span><span class="special">;</span> | |
650 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_sample_sd</span> <span class="special">=</span> <span class="number">1.7e+06</span><span class="special">;</span> | |
651 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span><span class="special">(</span><span class="identifier">single_lt_fit_probs</span><span class="special">,</span> <span class="identifier">single_lt_fit_rates</span><span class="special">);</span> | |
652 | ||
653 | <span class="keyword">return</span> <span class="identifier">ds</span><span class="special">;</span> | |
654 | <span class="special">}</span> | |
655 | ||
656 | <span class="comment">// DS3 dataset</span> | |
657 | <span class="identifier">ds_info</span> <span class="identifier">make_ds3</span><span class="special">()</span> | |
658 | <span class="special">{</span> | |
659 | <span class="identifier">ds_info</span> <span class="identifier">ds</span><span class="special">;</span> | |
660 | ||
661 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">name</span> <span class="special">=</span> <span class="string">"DS3"</span><span class="special">;</span> | |
662 | ||
663 | <span class="comment">// VM interarrival time distribution</span> | |
664 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">iat_fit_probs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.39442</span><span class="special">,</span><span class="number">0.24644</span><span class="special">,</span><span class="number">0.35914</span> <span class="special">};</span> | |
665 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">iat_fit_rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.00030</span><span class="special">,</span><span class="number">0.00003</span><span class="special">,</span><span class="number">0.00257</span> <span class="special">};</span> | |
666 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_sample_mean</span> <span class="special">=</span> <span class="number">11238.8</span><span class="special">;</span> | |
667 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_sample_sd</span> <span class="special">=</span> <span class="number">3.0e+04</span><span class="special">;</span> | |
668 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span><span class="special">(</span><span class="identifier">iat_fit_probs</span><span class="special">,</span> <span class="identifier">iat_fit_rates</span><span class="special">);</span> | |
669 | ||
670 | <span class="comment">// Multi-core VM lifetime distribution</span> | |
671 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">multi_lt_fit_probs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.37621</span><span class="special">,</span><span class="number">0.14838</span><span class="special">,</span><span class="number">0.47541</span> <span class="special">};</span> | |
672 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">multi_lt_fit_rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.00498</span><span class="special">,</span><span class="number">0.000005</span><span class="special">,</span><span class="number">0.00022</span> <span class="special">};</span> | |
673 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_sample_mean</span> <span class="special">=</span> <span class="number">30739.2</span><span class="special">;</span> | |
674 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_sample_sd</span> <span class="special">=</span> <span class="number">1.6e+05</span><span class="special">;</span> | |
675 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span><span class="special">(</span><span class="identifier">multi_lt_fit_probs</span><span class="special">,</span> <span class="identifier">multi_lt_fit_rates</span><span class="special">);</span> | |
676 | ||
677 | <span class="comment">// Single-core VM lifetime distribution</span> | |
678 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">single_lt_fit_probs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.34131</span><span class="special">,</span><span class="number">0.12544</span><span class="special">,</span><span class="number">0.53325</span> <span class="special">};</span> | |
679 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">single_lt_fit_rates</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.000297</span><span class="special">,</span><span class="number">0.000003</span><span class="special">,</span><span class="number">0.00410</span> <span class="special">};</span> | |
680 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_sample_mean</span> <span class="special">=</span> <span class="number">44447.8</span><span class="special">;</span> | |
681 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_sample_sd</span> <span class="special">=</span> <span class="number">2.2e+05</span><span class="special">;</span> | |
682 | <span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span><span class="special">(</span><span class="identifier">single_lt_fit_probs</span><span class="special">,</span> <span class="identifier">single_lt_fit_rates</span><span class="special">);</span> | |
683 | ||
684 | <span class="keyword">return</span> <span class="identifier">ds</span><span class="special">;</span> | |
685 | <span class="special">}</span> | |
686 | ||
687 | <span class="keyword">void</span> <span class="identifier">print_fitted</span><span class="special">(</span><span class="identifier">ds_info</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">ds</span><span class="special">)</span> | |
688 | <span class="special">{</span> | |
689 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">secs_in_a_hour</span> <span class="special">=</span> <span class="number">3600</span><span class="special">;</span> | |
690 | <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">secs_in_a_month</span> <span class="special">=</span> <span class="number">30</span> <span class="special">*</span> <span class="number">24</span> <span class="special">*</span> <span class="identifier">secs_in_a_hour</span><span class="special">;</span> | |
691 | ||
692 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"### "</span> <span class="special"><<</span> <span class="identifier">ds</span><span class="special">.</span><span class="identifier">name</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
693 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"* Fitted Request Interarrival Time"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
694 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Mean (SD): "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" ("</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">standard_deviation</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">") seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
695 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - 99th Percentile: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">quantile</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">,</span> <span class="number">0.99</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
696 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will arrive within 30 minutes: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">,</span> <span class="identifier">secs_in_a_hour</span> <span class="special">/</span> <span class="number">2.0</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
697 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will arrive after 1 hour: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">,</span> <span class="identifier">secs_in_a_hour</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
698 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"* Fitted Multi-core VM Lifetime"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
699 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Mean (SD): "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" ("</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">standard_deviation</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">") seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
700 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - 99th Percentile: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">quantile</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">,</span> <span class="number">0.99</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
701 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will last for less than 1 month: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">,</span> <span class="identifier">secs_in_a_month</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
702 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will last for more than 3 months: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">,</span> <span class="number">3.0</span><span class="special">*</span><span class="identifier">secs_in_a_month</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
703 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"* Fitted Single-core VM Lifetime"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
704 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Mean (SD): "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" ("</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">standard_deviation</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">") seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
705 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - 99th Percentile: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">quantile</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">,</span> <span class="number">0.99</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
706 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will last for less than 1 month: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">,</span> <span class="identifier">secs_in_a_month</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
707 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will last for more than 3 months: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">,</span> <span class="number">3.0</span><span class="special">*</span><span class="identifier">secs_in_a_month</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
708 | <span class="special">}</span> | |
709 | ||
710 | <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> | |
711 | <span class="special">{</span> | |
712 | <span class="identifier">print_fitted</span><span class="special">(</span><span class="identifier">make_ds1</span><span class="special">());</span> | |
713 | ||
714 | <span class="identifier">print_fitted</span><span class="special">(</span><span class="identifier">make_ds2</span><span class="special">());</span> | |
715 | ||
716 | <span class="identifier">print_fitted</span><span class="special">(</span><span class="identifier">make_ds3</span><span class="special">());</span> | |
717 | <span class="special">}</span> | |
718 | </pre> | |
719 | <p> | |
720 | The resulting output (with floating-point precision set to 2) is: | |
721 | </p> | |
722 | <pre class="programlisting"><span class="special">###</span> <span class="identifier">DS1</span> | |
723 | <span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Request</span> <span class="identifier">Interarrival</span> <span class="identifier">Time</span> | |
724 | <span class="special">-</span> <span class="identifier">Mean</span> <span class="special">(</span><span class="identifier">SD</span><span class="special">):</span> <span class="number">2.2e+03</span> <span class="special">(</span><span class="number">8.1e+03</span><span class="special">)</span> <span class="identifier">seconds</span><span class="special">.</span> | |
725 | <span class="special">-</span> <span class="number">99</span><span class="identifier">th</span> <span class="identifier">Percentile</span><span class="special">:</span> <span class="number">4.3e+04</span> <span class="identifier">seconds</span><span class="special">.</span> | |
726 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">arrive</span> <span class="identifier">within</span> <span class="number">30</span> <span class="identifier">minutes</span><span class="special">:</span> <span class="number">0.84</span> | |
727 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">arrive</span> <span class="identifier">after</span> <span class="number">1</span> <span class="identifier">hour</span><span class="special">:</span> <span class="number">0.092</span> | |
728 | <span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Multi</span><span class="special">-</span><span class="identifier">core</span> <span class="identifier">VM</span> <span class="identifier">Lifetime</span> | |
729 | <span class="special">-</span> <span class="identifier">Mean</span> <span class="special">(</span><span class="identifier">SD</span><span class="special">):</span> <span class="number">2e+05</span> <span class="special">(</span><span class="number">3.9e+05</span><span class="special">)</span> <span class="identifier">seconds</span><span class="special">.</span> | |
730 | <span class="special">-</span> <span class="number">99</span><span class="identifier">th</span> <span class="identifier">Percentile</span><span class="special">:</span> <span class="number">1.8e+06</span> <span class="identifier">seconds</span><span class="special">.</span> | |
731 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">less</span> <span class="identifier">than</span> <span class="number">1</span> <span class="identifier">month</span><span class="special">:</span> <span class="number">1</span> | |
732 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">more</span> <span class="identifier">than</span> <span class="number">3</span> <span class="identifier">months</span><span class="special">:</span> <span class="number">6.7e-08</span> | |
733 | <span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Single</span><span class="special">-</span><span class="identifier">core</span> <span class="identifier">VM</span> <span class="identifier">Lifetime</span> | |
734 | <span class="special">-</span> <span class="identifier">Mean</span> <span class="special">(</span><span class="identifier">SD</span><span class="special">):</span> <span class="number">3.2e+04</span> <span class="special">(</span><span class="number">1.4e+05</span><span class="special">)</span> <span class="identifier">seconds</span><span class="special">.</span> | |
735 | <span class="special">-</span> <span class="number">99</span><span class="identifier">th</span> <span class="identifier">Percentile</span><span class="special">:</span> <span class="number">7.4e+05</span> <span class="identifier">seconds</span><span class="special">.</span> | |
736 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">less</span> <span class="identifier">than</span> <span class="number">1</span> <span class="identifier">month</span><span class="special">:</span> <span class="number">1</span> | |
737 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">more</span> <span class="identifier">than</span> <span class="number">3</span> <span class="identifier">months</span><span class="special">:</span> <span class="number">6.9e-12</span> | |
738 | <span class="special">###</span> <span class="identifier">DS2</span> | |
739 | <span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Request</span> <span class="identifier">Interarrival</span> <span class="identifier">Time</span> | |
740 | <span class="special">-</span> <span class="identifier">Mean</span> <span class="special">(</span><span class="identifier">SD</span><span class="special">):</span> <span class="number">6.5e+04</span> <span class="special">(</span><span class="number">1.3e+05</span><span class="special">)</span> <span class="identifier">seconds</span><span class="special">.</span> | |
741 | <span class="special">-</span> <span class="number">99</span><span class="identifier">th</span> <span class="identifier">Percentile</span><span class="special">:</span> <span class="number">6.1e+05</span> <span class="identifier">seconds</span><span class="special">.</span> | |
742 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">arrive</span> <span class="identifier">within</span> <span class="number">30</span> <span class="identifier">minutes</span><span class="special">:</span> <span class="number">0.52</span> | |
743 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">arrive</span> <span class="identifier">after</span> <span class="number">1</span> <span class="identifier">hour</span><span class="special">:</span> <span class="number">0.4</span> | |
744 | <span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Multi</span><span class="special">-</span><span class="identifier">core</span> <span class="identifier">VM</span> <span class="identifier">Lifetime</span> | |
745 | <span class="special">-</span> <span class="identifier">Mean</span> <span class="special">(</span><span class="identifier">SD</span><span class="special">):</span> <span class="number">1.8e+05</span> <span class="special">(</span><span class="number">6.4e+05</span><span class="special">)</span> <span class="identifier">seconds</span><span class="special">.</span> | |
746 | <span class="special">-</span> <span class="number">99</span><span class="identifier">th</span> <span class="identifier">Percentile</span><span class="special">:</span> <span class="number">3.3e+06</span> <span class="identifier">seconds</span><span class="special">.</span> | |
747 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">less</span> <span class="identifier">than</span> <span class="number">1</span> <span class="identifier">month</span><span class="special">:</span> <span class="number">0.98</span> | |
748 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">more</span> <span class="identifier">than</span> <span class="number">3</span> <span class="identifier">months</span><span class="special">:</span> <span class="number">0.00028</span> | |
749 | <span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Single</span><span class="special">-</span><span class="identifier">core</span> <span class="identifier">VM</span> <span class="identifier">Lifetime</span> | |
750 | <span class="special">-</span> <span class="identifier">Mean</span> <span class="special">(</span><span class="identifier">SD</span><span class="special">):</span> <span class="number">6.2e+05</span> <span class="special">(</span><span class="number">1.6e+06</span><span class="special">)</span> <span class="identifier">seconds</span><span class="special">.</span> | |
751 | <span class="special">-</span> <span class="number">99</span><span class="identifier">th</span> <span class="identifier">Percentile</span><span class="special">:</span> <span class="number">8e+06</span> <span class="identifier">seconds</span><span class="special">.</span> | |
752 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">less</span> <span class="identifier">than</span> <span class="number">1</span> <span class="identifier">month</span><span class="special">:</span> <span class="number">0.91</span> | |
753 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">more</span> <span class="identifier">than</span> <span class="number">3</span> <span class="identifier">months</span><span class="special">:</span> <span class="number">0.011</span> | |
754 | <span class="special">###</span> <span class="identifier">DS3</span> | |
755 | <span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Request</span> <span class="identifier">Interarrival</span> <span class="identifier">Time</span> | |
756 | <span class="special">-</span> <span class="identifier">Mean</span> <span class="special">(</span><span class="identifier">SD</span><span class="special">):</span> <span class="number">9.7e+03</span> <span class="special">(</span><span class="number">2.2e+04</span><span class="special">)</span> <span class="identifier">seconds</span><span class="special">.</span> | |
757 | <span class="special">-</span> <span class="number">99</span><span class="identifier">th</span> <span class="identifier">Percentile</span><span class="special">:</span> <span class="number">1.1e+05</span> <span class="identifier">seconds</span><span class="special">.</span> | |
758 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">arrive</span> <span class="identifier">within</span> <span class="number">30</span> <span class="identifier">minutes</span><span class="special">:</span> <span class="number">0.53</span> | |
759 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">arrive</span> <span class="identifier">after</span> <span class="number">1</span> <span class="identifier">hour</span><span class="special">:</span> <span class="number">0.36</span> | |
760 | <span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Multi</span><span class="special">-</span><span class="identifier">core</span> <span class="identifier">VM</span> <span class="identifier">Lifetime</span> | |
761 | <span class="special">-</span> <span class="identifier">Mean</span> <span class="special">(</span><span class="identifier">SD</span><span class="special">):</span> <span class="number">3.2e+04</span> <span class="special">(</span><span class="number">1e+05</span><span class="special">)</span> <span class="identifier">seconds</span><span class="special">.</span> | |
762 | <span class="special">-</span> <span class="number">99</span><span class="identifier">th</span> <span class="identifier">Percentile</span><span class="special">:</span> <span class="number">5.4e+05</span> <span class="identifier">seconds</span><span class="special">.</span> | |
763 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">less</span> <span class="identifier">than</span> <span class="number">1</span> <span class="identifier">month</span><span class="special">:</span> <span class="number">1</span> | |
764 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">more</span> <span class="identifier">than</span> <span class="number">3</span> <span class="identifier">months</span><span class="special">:</span> <span class="number">1.9e-18</span> | |
765 | <span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Single</span><span class="special">-</span><span class="identifier">core</span> <span class="identifier">VM</span> <span class="identifier">Lifetime</span> | |
766 | <span class="special">-</span> <span class="identifier">Mean</span> <span class="special">(</span><span class="identifier">SD</span><span class="special">):</span> <span class="number">4.3e+04</span> <span class="special">(</span><span class="number">1.6e+05</span><span class="special">)</span> <span class="identifier">seconds</span><span class="special">.</span> | |
767 | <span class="special">-</span> <span class="number">99</span><span class="identifier">th</span> <span class="identifier">Percentile</span><span class="special">:</span> <span class="number">8.4e+05</span> <span class="identifier">seconds</span><span class="special">.</span> | |
768 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">less</span> <span class="identifier">than</span> <span class="number">1</span> <span class="identifier">month</span><span class="special">:</span> <span class="number">1</span> | |
769 | <span class="special">-</span> <span class="identifier">Probability</span> <span class="identifier">that</span> <span class="identifier">a</span> <span class="identifier">VM</span> <span class="identifier">will</span> <span class="identifier">last</span> <span class="keyword">for</span> <span class="identifier">more</span> <span class="identifier">than</span> <span class="number">3</span> <span class="identifier">months</span><span class="special">:</span> <span class="number">9.3e-12</span> | |
770 | </pre> | |
771 | <div class="note"><table border="0" summary="Note"> | |
772 | <tr> | |
773 | <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> | |
774 | <th align="left">Note</th> | |
775 | </tr> | |
776 | <tr><td align="left" valign="top"><p> | |
777 | The above results differ from the ones shown in Tables III, V, and VII | |
778 | of (Wolski et al.,2013). We carefully double-checked them with Wolfram | |
779 | Mathematica 10, which confirmed our results. | |
780 | </p></td></tr> | |
781 | </table></div> | |
782 | <h4> | |
783 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h5"></a> | |
784 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.member_functions"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.member_functions">Member | |
785 | Functions</a> | |
786 | </h4> | |
787 | <h5> | |
788 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h6"></a> | |
789 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.default_constructor"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.default_constructor">Default | |
790 | Constructor</a> | |
791 | </h5> | |
792 | <pre class="programlisting"><span class="identifier">hyperexponential_distribution</span><span class="special">();</span> | |
793 | </pre> | |
794 | <p> | |
795 | Constructs a <span class="emphasis"><em>1</em></span>-phase hyperexponential distribution | |
796 | (i.e., an exponential distribution) with rate <code class="computeroutput"><span class="number">1</span></code>. | |
797 | </p> | |
798 | <h5> | |
799 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h7"></a> | |
800 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.constructor_from_iterators"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.constructor_from_iterators">Constructor | |
801 | from Iterators</a> | |
802 | </h5> | |
803 | <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ProbIterT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateIterT</span><span class="special">></span> | |
804 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">ProbIterT</span> <span class="identifier">prob_first</span><span class="special">,</span> <span class="identifier">ProbIterT</span> <span class="identifier">prob_last</span><span class="special">,</span> | |
805 | <span class="identifier">RateIterT</span> <span class="identifier">rate_first</span><span class="special">,</span> <span class="identifier">RateIterT</span> <span class="identifier">rate_last</span><span class="special">);</span> | |
806 | </pre> | |
807 | <p> | |
808 | Constructs a hyperexponential distribution with <span class="emphasis"><em>phase probability | |
809 | vector</em></span> parameter given by the range defined by [<code class="computeroutput"><span class="identifier">prob_first</span></code>, <code class="computeroutput"><span class="identifier">prob_last</span></code>) | |
810 | iterator pair, and <span class="emphasis"><em>rate vector</em></span> parameter given by | |
811 | the range defined by the [<code class="computeroutput"><span class="identifier">rate_first</span></code>, | |
812 | <code class="computeroutput"><span class="identifier">rate_last</span></code>) iterator pair. | |
813 | </p> | |
814 | <h6> | |
815 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h8"></a> | |
816 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.parameters"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.parameters">Parameters</a> | |
817 | </h6> | |
818 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
819 | <li class="listitem"> | |
820 | <code class="computeroutput"><span class="identifier">prob_first</span></code>, <code class="computeroutput"><span class="identifier">prob_last</span></code>: the range of non-negative | |
821 | real elements representing the phase probabilities; elements are normalized | |
822 | to sum to unity. | |
823 | </li> | |
824 | <li class="listitem"> | |
825 | <code class="computeroutput"><span class="identifier">rate_first</span></code>, <code class="computeroutput"><span class="identifier">rate_last</span></code>: the range of positive | |
826 | elements representing the rates. | |
827 | </li> | |
828 | </ul></div> | |
829 | <h6> | |
830 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h9"></a> | |
831 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.type_requirements"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.type_requirements">Type | |
832 | Requirements</a> | |
833 | </h6> | |
834 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> | |
835 | <code class="computeroutput"><span class="identifier">ProbIterT</span></code>, <code class="computeroutput"><span class="identifier">RateIterT</span></code>: must meet the requirements | |
836 | of the <a href="http://en.cppreference.com/w/cpp/concept/InputIterator" target="_top">InputIterator</a> | |
837 | concept. | |
838 | </li></ul></div> | |
839 | <h6> | |
840 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h10"></a> | |
841 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.example"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.example">Example</a> | |
842 | </h6> | |
843 | <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">phase_prob</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.5</span><span class="special">,</span> <span class="number">0.5</span> <span class="special">};</span> | |
844 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">rates</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span> | |
845 | ||
846 | <span class="identifier">hyperexponential</span> <span class="identifier">he</span><span class="special">(</span><span class="identifier">phase_prob</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">phase_prob</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">rates</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">rates</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span> | |
847 | </pre> | |
848 | <h5> | |
849 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h11"></a> | |
850 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.construction_from_ranges_contain"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.construction_from_ranges_contain">Construction | |
851 | from Ranges/Containers</a> | |
852 | </h5> | |
853 | <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ProbRangeT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">></span> | |
854 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">ProbRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">prob_range</span><span class="special">,</span> | |
855 | <span class="identifier">RateRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_range</span><span class="special">);</span> | |
856 | </pre> | |
857 | <p> | |
858 | Constructs a hyperexponential distribution with <span class="emphasis"><em>phase probability | |
859 | vector</em></span> parameter given by the range defined by <code class="computeroutput"><span class="identifier">prob_range</span></code>, and <span class="emphasis"><em>rate vector</em></span> | |
860 | parameter given by the range defined by <code class="computeroutput"><span class="identifier">rate_range</span></code>. | |
861 | </p> | |
862 | <div class="note"><table border="0" summary="Note"> | |
863 | <tr> | |
864 | <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> | |
865 | <th align="left">Note</th> | |
866 | </tr> | |
867 | <tr><td align="left" valign="top"><p> | |
868 | As an implementation detail, this constructor uses Boost's <a href="http://www.boost.org/doc/libs/release/libs/core/doc/html/core/enable_if.html" target="_top">enable_if/disable_if | |
869 | mechanism</a> to disambiguate between this and other 2-argument constructors. | |
870 | Refer to the source code for more details. | |
871 | </p></td></tr> | |
872 | </table></div> | |
873 | <h6> | |
874 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h12"></a> | |
875 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.parameters0"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.parameters0">Parameters</a> | |
876 | </h6> | |
877 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
878 | <li class="listitem"> | |
879 | <code class="computeroutput"><span class="identifier">prob_range</span></code>: the range | |
880 | of non-negative real elements representing the phase probabilities; | |
881 | elements are normalized to sum to unity. | |
882 | </li> | |
883 | <li class="listitem"> | |
884 | <code class="computeroutput"><span class="identifier">rate_range</span></code>: the range | |
885 | of positive real elements representing the rates. | |
886 | </li> | |
887 | </ul></div> | |
888 | <h6> | |
889 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h13"></a> | |
890 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.type_requirements0"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.type_requirements0">Type | |
891 | Requirements</a> | |
892 | </h6> | |
893 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> | |
894 | <code class="computeroutput"><span class="identifier">ProbRangeT</span></code>, <code class="computeroutput"><span class="identifier">RateRangeT</span></code>: must meet the requirements | |
895 | of the <a href="http://www.boost.org/doc/libs/release/libs/range/doc/html/range/concepts.html" target="_top">Range</a> | |
896 | concept: that includes native C++ arrays, standard library containers, | |
897 | or a std::pair or iterators. | |
898 | </li></ul></div> | |
899 | <h6> | |
900 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h14"></a> | |
901 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.examples0"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.examples0">Examples</a> | |
902 | </h6> | |
903 | <pre class="programlisting"><span class="comment">// We could be using any standard library container here... vector, deque, array, list etc:</span> | |
904 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">phase_prob</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.5</span><span class="special">,</span> <span class="number">0.5</span> <span class="special">};</span> | |
905 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">rates</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span> | |
906 | ||
907 | <span class="identifier">hyperexponential</span> <span class="identifier">he1</span><span class="special">(</span><span class="identifier">phase_prob</span><span class="special">,</span> <span class="identifier">rates</span><span class="special">);</span> <span class="comment">// Construct from standard library container.</span> | |
908 | ||
909 | <span class="keyword">double</span> <span class="identifier">phase_probs2</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.5</span><span class="special">,</span> <span class="number">0.5</span> <span class="special">};</span> | |
910 | <span class="keyword">double</span> <span class="identifier">rates2</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span> | |
911 | ||
912 | <span class="identifier">hyperexponential</span> <span class="identifier">he2</span><span class="special">(</span><span class="identifier">phase_probs2</span><span class="special">,</span> <span class="identifier">rates2</span><span class="special">);</span> <span class="comment">// Construct from native C++ array.</span> | |
913 | </pre> | |
914 | <h5> | |
915 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h15"></a> | |
916 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.construction_with_rates_iterator"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.construction_with_rates_iterator">Construction | |
917 | with rates-iterators (and all phase probabilities equal)</a> | |
918 | </h5> | |
919 | <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RateIterT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateIterT2</span><span class="special">></span> | |
920 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">RateIterT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_first</span><span class="special">,</span> | |
921 | <span class="identifier">RateIterT2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_last</span><span class="special">);</span> | |
922 | </pre> | |
923 | <p> | |
924 | Constructs a hyperexponential distribution with <span class="emphasis"><em>rate vector</em></span> | |
925 | parameter given by the range defined by the [<code class="computeroutput"><span class="identifier">rate_first</span></code>, | |
926 | <code class="computeroutput"><span class="identifier">rate_last</span></code>) iterator pair, | |
927 | and <span class="emphasis"><em>phase probability vector</em></span> set to the equal phase | |
928 | probabilities (i.e., to a vector of the same length <code class="computeroutput"><span class="identifier">n</span></code> | |
929 | of the <span class="emphasis"><em>rate vector</em></span> and with each element set to <code class="computeroutput"><span class="number">1.0</span><span class="special">/</span><span class="identifier">n</span></code>). | |
930 | </p> | |
931 | <div class="note"><table border="0" summary="Note"> | |
932 | <tr> | |
933 | <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> | |
934 | <th align="left">Note</th> | |
935 | </tr> | |
936 | <tr><td align="left" valign="top"><p> | |
937 | As an implementation detail, this constructor uses Boost's <a href="http://www.boost.org/doc/libs/release/libs/core/doc/html/core/enable_if.html" target="_top">enable_if/disable_if | |
938 | mechanism</a> to disambiguate between this and other 2-argument constructors. | |
939 | Refer to the source code for more details. | |
940 | </p></td></tr> | |
941 | </table></div> | |
942 | <h6> | |
943 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h16"></a> | |
944 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.parameters1"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.parameters1">Parameters</a> | |
945 | </h6> | |
946 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> | |
947 | <code class="computeroutput"><span class="identifier">rate_first</span></code>, <code class="computeroutput"><span class="identifier">rate_last</span></code>: the range of positive | |
948 | elements representing the rates. | |
949 | </li></ul></div> | |
950 | <h6> | |
951 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h17"></a> | |
952 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.type_requirements1"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.type_requirements1">Type | |
953 | Requirements</a> | |
954 | </h6> | |
955 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> | |
956 | <code class="computeroutput"><span class="identifier">RateIterT</span></code>, <code class="computeroutput"><span class="identifier">RateIterT2</span></code>: must meet the requirements | |
957 | of the <a href="http://en.cppreference.com/w/cpp/concept/InputIterator" target="_top">InputIterator</a> | |
958 | concept. | |
959 | </li></ul></div> | |
960 | <h6> | |
961 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h18"></a> | |
962 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.example0"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.example0">Example</a> | |
963 | </h6> | |
964 | <pre class="programlisting"><span class="comment">// We could be using any standard library container here... vector, deque, array, list etc:</span> | |
965 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">rates</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span> | |
966 | ||
967 | <span class="identifier">hyperexponential</span> <span class="identifier">he</span><span class="special">(</span><span class="identifier">rates</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">rates</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span> | |
968 | ||
969 | <span class="identifier">assert</span><span class="special">(</span><span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">()[</span><span class="number">0</span><span class="special">]</span> <span class="special">==</span> <span class="number">0.5</span><span class="special">);</span> <span class="comment">// Phase probabilities will be equal and normalised to unity.</span> | |
970 | </pre> | |
971 | <h5> | |
972 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h19"></a> | |
973 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.construction_from_a_single_range"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.construction_from_a_single_range">Construction | |
974 | from a single range of rates (all phase probabilities will be equal)</a> | |
975 | </h5> | |
976 | <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">></span> | |
977 | <span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">RateRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_range</span><span class="special">);</span> | |
978 | </pre> | |
979 | <p> | |
980 | Constructs a hyperexponential distribution with <span class="emphasis"><em>rate vector</em></span> | |
981 | parameter given by the range defined by <code class="computeroutput"><span class="identifier">rate_range</span></code>, | |
982 | and <span class="emphasis"><em>phase probability vector</em></span> set to the equal phase | |
983 | probabilities (i.e., to a vector of the same length <code class="computeroutput"><span class="identifier">n</span></code> | |
984 | of the <span class="emphasis"><em>rate vector</em></span> and with each element set to <code class="computeroutput"><span class="number">1.0</span><span class="special">/</span><span class="identifier">n</span></code>). | |
985 | </p> | |
986 | <h6> | |
987 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h20"></a> | |
988 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.parameters2"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.parameters2">Parameters</a> | |
989 | </h6> | |
990 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> | |
991 | <code class="computeroutput"><span class="identifier">rate_range</span></code>: the range | |
992 | of positive real elements representing the rates. | |
993 | </li></ul></div> | |
994 | <h6> | |
995 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h21"></a> | |
996 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.type_requirements2"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.type_requirements2">Type | |
997 | Requirements</a> | |
998 | </h6> | |
999 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> | |
1000 | <code class="computeroutput"><span class="identifier">RateRangeT</span></code>: must meet | |
1001 | the requirements of the <a href="http://www.boost.org/doc/libs/release/libs/range/doc/html/range/concepts.html" target="_top">Range</a> | |
1002 | concept: this includes native C++ array, standard library containers, | |
1003 | and a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span></code> of iterators. | |
1004 | </li></ul></div> | |
1005 | <h6> | |
1006 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h22"></a> | |
1007 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.examples1"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.examples1">Examples</a> | |
1008 | </h6> | |
1009 | <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">rates</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span> | |
1010 | ||
1011 | <span class="identifier">hyperexponential</span> <span class="identifier">he</span><span class="special">(</span><span class="identifier">rates</span><span class="special">);</span> | |
1012 | ||
1013 | <span class="identifier">assert</span><span class="special">(</span><span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">()[</span><span class="number">0</span><span class="special">]</span> <span class="special">==</span> <span class="number">0.5</span><span class="special">);</span> <span class="comment">// Phase probabilities will be equal and normalised to unity.</span> | |
1014 | </pre> | |
1015 | <h5> | |
1016 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h23"></a> | |
1017 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.construction_from_initializer_li"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.construction_from_initializer_li">Construction | |
1018 | from Initializer lists</a> | |
1019 | </h5> | |
1020 | <pre class="programlisting"><span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l1</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l2</span><span class="special">);</span> | |
1021 | </pre> | |
1022 | <p> | |
1023 | Constructs a hyperexponential distribution with <span class="emphasis"><em>phase probability | |
1024 | vector</em></span> parameter given by the <a href="http://en.cppreference.com/w/cpp/language/list_initialization" target="_top">brace-init-list</a> | |
1025 | defined by <code class="computeroutput"><span class="identifier">l1</span></code>, and <span class="emphasis"><em>rate | |
1026 | vector</em></span> parameter given by the <a href="http://en.cppreference.com/w/cpp/language/list_initialization" target="_top">brace-init-list</a> | |
1027 | defined by <code class="computeroutput"><span class="identifier">l2</span></code>. | |
1028 | </p> | |
1029 | <h6> | |
1030 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h24"></a> | |
1031 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.parameters3"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.parameters3">Parameters</a> | |
1032 | </h6> | |
1033 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
1034 | <li class="listitem"> | |
1035 | <code class="computeroutput"><span class="identifier">l1</span></code>: the brace-init-list | |
1036 | of non-negative real elements representing the phase probabilities; | |
1037 | elements are normalized to sum to unity. | |
1038 | </li> | |
1039 | <li class="listitem"> | |
1040 | <code class="computeroutput"><span class="identifier">l2</span></code>: the brace-init-list | |
1041 | of positive real elements representing the rates. | |
1042 | </li> | |
1043 | </ul></div> | |
1044 | <p> | |
1045 | The number of elements of the phase probabilities list and the rates list | |
1046 | must be the same. | |
1047 | </p> | |
1048 | <h6> | |
1049 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h25"></a> | |
1050 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.example1"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.example1">Example</a> | |
1051 | </h6> | |
1052 | <pre class="programlisting"><span class="identifier">hyperexponential</span> <span class="identifier">he</span> <span class="special">=</span> <span class="special">{</span> <span class="special">{</span> <span class="number">0.5</span><span class="special">,</span> <span class="number">0.5</span> <span class="special">},</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">}</span> <span class="special">};</span> | |
1053 | </pre> | |
1054 | <h5> | |
1055 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h26"></a> | |
1056 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.construction_from_a_single_initi"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.construction_from_a_single_initi">Construction | |
1057 | from a single initializer list (all phase probabilities will be equal)</a> | |
1058 | </h5> | |
1059 | <pre class="programlisting"><span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l1</span><span class="special">);</span> | |
1060 | </pre> | |
1061 | <p> | |
1062 | Constructs a hyperexponential distribution with <span class="emphasis"><em>rate vector</em></span> | |
1063 | parameter given by the <a href="http://en.cppreference.com/w/cpp/language/list_initialization" target="_top">brace-init-list</a> | |
1064 | defined by <code class="computeroutput"><span class="identifier">l1</span></code>, and <span class="emphasis"><em>phase | |
1065 | probability vector</em></span> set to the equal phase probabilities (i.e., | |
1066 | to a vector of the same length <code class="computeroutput"><span class="identifier">n</span></code> | |
1067 | of the <span class="emphasis"><em>rate vector</em></span> and with each element set to <code class="computeroutput"><span class="number">1.0</span><span class="special">/</span><span class="identifier">n</span></code>). | |
1068 | </p> | |
1069 | <h6> | |
1070 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h27"></a> | |
1071 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.parameters4"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.parameters4">Parameters</a> | |
1072 | </h6> | |
1073 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> | |
1074 | <code class="computeroutput"><span class="identifier">l1</span></code>: the brace-init-list | |
1075 | of non-negative real elements representing the phase probabilities; | |
1076 | they are normalized to ensure that they sum to unity. | |
1077 | </li></ul></div> | |
1078 | <h6> | |
1079 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h28"></a> | |
1080 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.example2"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.example2">Example</a> | |
1081 | </h6> | |
1082 | <pre class="programlisting"><span class="identifier">hyperexponential</span> <span class="identifier">he</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span> | |
1083 | ||
1084 | <span class="identifier">assert</span><span class="special">(</span><span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">()[</span><span class="number">0</span><span class="special">]</span> <span class="special">==</span> <span class="number">0.5</span><span class="special">);</span> | |
1085 | </pre> | |
1086 | <h5> | |
1087 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h29"></a> | |
1088 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.accessors"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.accessors">Accessors</a> | |
1089 | </h5> | |
1090 | <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">num_phases</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> | |
1091 | </pre> | |
1092 | <p> | |
1093 | Gets the number of phases of this distribution (the size of both the rate | |
1094 | and probability vectors). | |
1095 | </p> | |
1096 | <h6> | |
1097 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h30"></a> | |
1098 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.return_value"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.return_value">Return | |
1099 | Value</a> | |
1100 | </h6> | |
1101 | <p> | |
1102 | An non-negative integer number representing the number of phases of this | |
1103 | distribution. | |
1104 | </p> | |
1105 | <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">probabilities</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> | |
1106 | </pre> | |
1107 | <p> | |
1108 | Gets the <span class="emphasis"><em>phase probability vector</em></span> parameter of this | |
1109 | distribution. | |
1110 | </p> | |
1111 | <div class="note"><table border="0" summary="Note"> | |
1112 | <tr> | |
1113 | <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> | |
1114 | <th align="left">Note</th> | |
1115 | </tr> | |
1116 | <tr><td align="left" valign="top"><p> | |
1117 | The returned probabilities are the <span class="bold"><strong>normalized</strong></span> | |
1118 | versions of the probability parameter values passed at construction time. | |
1119 | </p></td></tr> | |
1120 | </table></div> | |
1121 | <h6> | |
1122 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h31"></a> | |
1123 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.return_value0"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.return_value0">Return | |
1124 | Value</a> | |
1125 | </h6> | |
1126 | <p> | |
1127 | A vector of non-negative real numbers representing the <span class="emphasis"><em>phase | |
1128 | probability vector</em></span> parameter of this distribution. | |
1129 | </p> | |
1130 | <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">rates</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> | |
1131 | </pre> | |
1132 | <p> | |
1133 | Gets the <span class="emphasis"><em>rate vector</em></span> parameter of this distribution. | |
1134 | </p> | |
1135 | <h6> | |
1136 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h32"></a> | |
1137 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.return_value1"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.return_value1">Return | |
1138 | Value</a> | |
1139 | </h6> | |
1140 | <p> | |
1141 | A vector of positive real numbers representing the <span class="emphasis"><em>rate vector</em></span> | |
1142 | parameter of this distribution. | |
1143 | </p> | |
1144 | <div class="warning"><table border="0" summary="Warning"> | |
1145 | <tr> | |
1146 | <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td> | |
1147 | <th align="left">Warning</th> | |
1148 | </tr> | |
1149 | <tr><td align="left" valign="top"> | |
1150 | <p> | |
1151 | The return type of these functions is a vector-by-value. This is deliberate | |
1152 | as we wish to hide the actual container used internally which may be | |
1153 | subject to future changes (for example to facilitate vectorization of | |
1154 | the cdf code etc). Users should note that some code that might otherwise | |
1155 | have been expected to work does not. For example, an attempt to output | |
1156 | the (normalized) probabilities: | |
1157 | </p> | |
1158 | <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">().</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">().</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream_iterator</span><span class="special"><</span><span class="keyword">double</span><span class="special">>(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">,</span> <span class="string">" "</span><span class="special">));</span> | |
1159 | </pre> | |
1160 | <p> | |
1161 | fails at compile or runtime because iterator types are incompatible, | |
1162 | but, for example, | |
1163 | </p> | |
1164 | <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">()[</span><span class="number">0</span><span class="special">]</span> <span class="special"><<</span> <span class="char">' '</span> <span class="special"><<</span> <span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">()[</span><span class="number">1</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> | |
1165 | </pre> | |
1166 | <p> | |
1167 | outputs the expected values. | |
1168 | </p> | |
1169 | <p> | |
1170 | In general if you want to access a member of the returned container, | |
1171 | then assign to a variable first, and then access those members: | |
1172 | </p> | |
1173 | <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">t</span> <span class="special">=</span> <span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">();</span> | |
1174 | <span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">t</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream_iterator</span><span class="special"><</span><span class="keyword">double</span><span class="special">>(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">,</span> <span class="string">" "</span><span class="special">));</span> | |
1175 | </pre> | |
1176 | </td></tr> | |
1177 | </table></div> | |
1178 | <h4> | |
1179 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h33"></a> | |
1180 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.non_member_accessor_functions"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.non_member_accessor_functions">Non-member | |
1181 | Accessor Functions</a> | |
1182 | </h4> | |
1183 | <p> | |
1184 | All the <a class="link" href="../nmp.html" title="Non-Member Properties">usual non-member accessor | |
1185 | functions</a> that are generic to all distributions are supported: | |
1186 | <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.cdf">Cumulative Distribution Function</a>, | |
1187 | <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.pdf">Probability Density Function</a>, | |
1188 | <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.quantile">Quantile</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.hazard">Hazard Function</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.chf">Cumulative Hazard Function</a>, | |
1189 | <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.mean">mean</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.median">median</a>, | |
1190 | <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.mode">mode</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.variance">variance</a>, | |
1191 | <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.sd">standard deviation</a>, | |
1192 | <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.skewness">skewness</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.kurtosis">kurtosis</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.kurtosis_excess">kurtosis_excess</a>, | |
1193 | <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.range">range</a> and <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.support">support</a>. | |
1194 | </p> | |
1195 | <p> | |
1196 | The formulae for calculating these are shown in the table below. | |
1197 | </p> | |
1198 | <h4> | |
1199 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h34"></a> | |
1200 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.accuracy"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.accuracy">Accuracy</a> | |
1201 | </h4> | |
1202 | <p> | |
1203 | The hyperexponential distribution is implemented in terms of the <a class="link" href="exp_dist.html" title="Exponential Distribution">Exponential Distribution</a> | |
1204 | and as such should have very small errors, usually an <a href="http://en.wikipedia.org/wiki/Machine_epsilon" target="_top">epsilon</a> | |
1205 | or few. | |
1206 | </p> | |
1207 | <h4> | |
1208 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h35"></a> | |
1209 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.implementation"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.implementation">Implementation</a> | |
1210 | </h4> | |
1211 | <p> | |
1212 | In the following table: | |
1213 | </p> | |
1214 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
1215 | <li class="listitem"> | |
1216 | <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(α<sub>1</sub>,...,α<sub>k</sub>)</em></span> is | |
1217 | the <span class="emphasis"><em>phase probability vector</em></span> parameter of the | |
1218 | <span class="emphasis"><em>k</em></span>-phase hyperexponential distribution, | |
1219 | </li> | |
1220 | <li class="listitem"> | |
1221 | <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(λ<sub>1</sub>,...,λ<sub>k</sub>)</em></span> is | |
1222 | the <span class="emphasis"><em>rate vector</em></span> parameter of the <span class="emphasis"><em>k</em></span>-phase | |
1223 | hyperexponential distribution, | |
1224 | </li> | |
1225 | <li class="listitem"> | |
1226 | <span class="emphasis"><em>x</em></span> is the random variate. | |
1227 | </li> | |
1228 | </ul></div> | |
1229 | <div class="informaltable"><table class="table"> | |
1230 | <colgroup> | |
1231 | <col> | |
1232 | <col> | |
1233 | </colgroup> | |
1234 | <thead><tr> | |
1235 | <th> | |
1236 | <p> | |
1237 | Function | |
1238 | </p> | |
1239 | </th> | |
1240 | <th> | |
1241 | <p> | |
1242 | Implementation Notes | |
1243 | </p> | |
1244 | </th> | |
1245 | </tr></thead> | |
1246 | <tbody> | |
1247 | <tr> | |
1248 | <td> | |
1249 | <p> | |
1250 | support | |
1251 | </p> | |
1252 | </td> | |
1253 | <td> | |
1254 | <p> | |
1255 | <span class="emphasis"><em>x</em></span> ∈ [0,∞) | |
1256 | </p> | |
1257 | </td> | |
1258 | </tr> | |
1259 | <tr> | |
1260 | <td> | |
1261 | <p> | |
1262 | ||
1263 | </p> | |
1264 | </td> | |
1265 | <td> | |
1266 | <p> | |
1267 | <span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_pdf.svg"></span> | |
1268 | </p> | |
1269 | </td> | |
1270 | </tr> | |
1271 | <tr> | |
1272 | <td> | |
1273 | <p> | |
1274 | cdf | |
1275 | </p> | |
1276 | </td> | |
1277 | <td> | |
1278 | <p> | |
1279 | <span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_cdf.svg"></span> | |
1280 | </p> | |
1281 | </td> | |
1282 | </tr> | |
1283 | <tr> | |
1284 | <td> | |
1285 | <p> | |
1286 | cdf complement | |
1287 | </p> | |
1288 | </td> | |
1289 | <td> | |
1290 | <p> | |
1291 | <span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_ccdf.svg"></span> | |
1292 | </p> | |
1293 | </td> | |
1294 | </tr> | |
1295 | <tr> | |
1296 | <td> | |
1297 | <p> | |
1298 | quantile | |
1299 | </p> | |
1300 | </td> | |
1301 | <td> | |
1302 | <p> | |
1303 | No closed form available. Computed numerically. | |
1304 | </p> | |
1305 | </td> | |
1306 | </tr> | |
1307 | <tr> | |
1308 | <td> | |
1309 | <p> | |
1310 | quantile from the complement | |
1311 | </p> | |
1312 | </td> | |
1313 | <td> | |
1314 | <p> | |
1315 | No closed form available. Computed numerically. | |
1316 | </p> | |
1317 | </td> | |
1318 | </tr> | |
1319 | <tr> | |
1320 | <td> | |
1321 | <p> | |
1322 | mean | |
1323 | </p> | |
1324 | </td> | |
1325 | <td> | |
1326 | <p> | |
1327 | <span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_mean.svg"></span> | |
1328 | </p> | |
1329 | </td> | |
1330 | </tr> | |
1331 | <tr> | |
1332 | <td> | |
1333 | <p> | |
1334 | variance | |
1335 | </p> | |
1336 | </td> | |
1337 | <td> | |
1338 | <p> | |
1339 | <span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_variance.svg"></span> | |
1340 | </p> | |
1341 | </td> | |
1342 | </tr> | |
1343 | <tr> | |
1344 | <td> | |
1345 | <p> | |
1346 | mode | |
1347 | </p> | |
1348 | </td> | |
1349 | <td> | |
1350 | <p> | |
1351 | <code class="computeroutput"><span class="number">0</span></code> | |
1352 | </p> | |
1353 | </td> | |
1354 | </tr> | |
1355 | <tr> | |
1356 | <td> | |
1357 | <p> | |
1358 | skewness | |
1359 | </p> | |
1360 | </td> | |
1361 | <td> | |
1362 | <p> | |
1363 | <span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_skewness.svg"></span> | |
1364 | </p> | |
1365 | </td> | |
1366 | </tr> | |
1367 | <tr> | |
1368 | <td> | |
1369 | <p> | |
1370 | kurtosis | |
1371 | </p> | |
1372 | </td> | |
1373 | <td> | |
1374 | <p> | |
1375 | <span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_kurtosis.svg"></span> | |
1376 | </p> | |
1377 | </td> | |
1378 | </tr> | |
1379 | <tr> | |
1380 | <td> | |
1381 | <p> | |
1382 | kurtosis excess | |
1383 | </p> | |
1384 | </td> | |
1385 | <td> | |
1386 | <p> | |
1387 | kurtosis <code class="computeroutput"><span class="special">-</span> <span class="number">3</span></code> | |
1388 | </p> | |
1389 | </td> | |
1390 | </tr> | |
1391 | </tbody> | |
1392 | </table></div> | |
1393 | <h4> | |
1394 | <a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h36"></a> | |
1395 | <span class="phrase"><a name="math_toolkit.dist_ref.dists.hyperexponential_dist.references"></a></span><a class="link" href="hyperexponential_dist.html#math_toolkit.dist_ref.dists.hyperexponential_dist.references">References</a> | |
1396 | </h4> | |
1397 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
1398 | <li class="listitem"> | |
1399 | A.O. Allen, <span class="emphasis"><em>Probability, Statistics, and Queuing Theory with | |
1400 | Computer Science Applications, Second Edition</em></span>, Academic | |
1401 | Press, 1990. | |
1402 | </li> | |
1403 | <li class="listitem"> | |
1404 | D.G. Feitelson, <span class="emphasis"><em>Workload Modeling for Computer Systems Performance | |
1405 | Evaluation</em></span>, Cambridge University Press, 2014 | |
1406 | </li> | |
1407 | <li class="listitem"> | |
1408 | A. Feldmann and W. Whitt, <span class="emphasis"><em>Fitting mixtures of exponentials | |
1409 | to long-tail distributions to analyze network performance models</em></span>, | |
1410 | Performance Evaluation 31(3-4):245, doi:10.1016/S0166-5316(97)00003-5, | |
1411 | 1998. | |
1412 | </li> | |
1413 | <li class="listitem"> | |
1414 | H.T. Papadopolous, C. Heavey and J. Browne, <span class="emphasis"><em>Queueing Theory | |
1415 | in Manufacturing Systems Analysis and Design</em></span>, Chapman & | |
1416 | Hall/CRC, 1993, p. 35. | |
1417 | </li> | |
1418 | <li class="listitem"> | |
1419 | R.F. Rosin, <span class="emphasis"><em>Determining a computing center environment</em></span>, | |
1420 | Communications of the ACM 8(7):463-468, 1965. | |
1421 | </li> | |
1422 | <li class="listitem"> | |
1423 | K.S. Trivedi, <span class="emphasis"><em>Probability and Statistics with Reliability, | |
1424 | Queueing, and Computer Science Applications</em></span>, John Wiley | |
1425 | & Sons, Inc., 2002. | |
1426 | </li> | |
1427 | <li class="listitem"> | |
1428 | Wikipedia, <span class="emphasis"><em>Hyperexponential Distribution</em></span>, Online: | |
1429 | <a href="http://en.wikipedia.org/wiki/Hyperexponential_distribution" target="_top">http://en.wikipedia.org/wiki/Hyperexponential_distribution</a>, | |
1430 | 2014 | |
1431 | </li> | |
1432 | <li class="listitem"> | |
1433 | R. Wolski and J. Brevik, <span class="emphasis"><em>Using Parametric Models to Represent | |
1434 | Private Cloud Workloads</em></span>, IEEE TSC, PrePrint, DOI: <a href="http://doi.ieeecomputersociety.org/10.1109/TSC.2013.48" target="_top">10.1109/TSC.2013.48</a>, | |
1435 | 2013. | |
1436 | </li> | |
1437 | <li class="listitem"> | |
1438 | Wolfram Mathematica, <span class="emphasis"><em>Hyperexponential Distribution</em></span>, | |
1439 | Online: <a href="http://reference.wolfram.com/language/ref/HyperexponentialDistribution.html" target="_top">http://reference.wolfram.com/language/ref/HyperexponentialDistribution.html</a>, | |
1440 | 2014. | |
1441 | </li> | |
1442 | </ul></div> | |
1443 | </div> | |
1444 | <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> | |
1445 | <td align="left"></td> | |
1446 | <td align="right"><div class="copyright-footer">Copyright © 2006-2010, 2012-2014 Nikhar Agrawal, | |
1447 | Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert | |
1448 | Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Johan Råde, Gautam Sewani, | |
1449 | Benjamin Sobotta, Thijs van den Berg, Daryle Walker and Xiaogang Zhang<p> | |
1450 | Distributed under the Boost Software License, Version 1.0. (See accompanying | |
1451 | file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) | |
1452 | </p> | |
1453 | </div></td> | |
1454 | </tr></table> | |
1455 | <hr> | |
1456 | <div class="spirit-nav"> | |
1457 | <a accesskey="p" href="geometric_dist.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dists.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="hypergeometric_dist.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> | |
1458 | </div> | |
1459 | </body> | |
1460 | </html> |