]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/math/doc/html/math_toolkit/dist_ref/dists/hyperexponential_dist.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / math / doc / html / math_toolkit / dist_ref / dists / hyperexponential_dist.html
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">&lt;</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">&gt;</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">&lt;</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&#160;15.&#160;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&lt;&gt;</a> <span class="special">&gt;</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">&lt;&gt;</span> <span class="identifier">hyperexponential</span><span class="special">;</span>
38
39 <span class="keyword">template</span> <span class="special">&lt;</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&#160;15.&#160;Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&gt;</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">&lt;</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">&gt;</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">&amp;</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">&amp;</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">&lt;</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">&gt;</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">&lt;</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">&gt;</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">&amp;</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">&amp;</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">&lt;</span><span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">&gt;</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">&amp;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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>&#945;</strong></span>=(&#945;<sub>1</sub>,...,&#945;<sub>k</sub>)</em></span> and a
106 <span class="emphasis"><em>rate vector</em></span> <span class="emphasis"><em><span class="bold"><strong>&#955;</strong></span>=(&#955;<sub>1</sub>,...,&#955;<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>&#945;</strong></span>=(1.0)</em></span> and <span class="emphasis"><em><span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.1, 0.9)</em></span> and
127 <span class="emphasis"><em><span class="bold"><strong>&#955;</strong></span>=(0.5, 1.5)</em></span>,
128 </li>
129 <li class="listitem">
130 <span class="emphasis"><em><span class="bold"><strong>&#945;</strong></span>=(0.9, 0.1)</em></span> and
131 <span class="emphasis"><em><span class="bold"><strong>&#955;</strong></span>=(0.5, 1.5)</em></span>,
132 </li>
133 <li class="listitem">
134 <span class="emphasis"><em><span class="bold"><strong>&#945;</strong></span>=(0.2, 0.3, 0.5)</em></span>
135 and <span class="emphasis"><em><span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.5, 0.3, 0.2)</em></span>
139 and <span class="emphasis"><em><span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.1, 0.9)</em></span> and
154 <span class="emphasis"><em><span class="bold"><strong>&#955;</strong></span>=(0.5, 1.5)</em></span>,
155 </li>
156 <li class="listitem">
157 <span class="emphasis"><em><span class="bold"><strong>&#945;</strong></span>=(0.6, 0.4)</em></span> and
158 <span class="emphasis"><em><span class="bold"><strong>&#955;</strong></span>=(0.5, 1.5)</em></span>,
159 </li>
160 <li class="listitem">
161 <span class="emphasis"><em><span class="bold"><strong>&#945;</strong></span>=(0.9, 0.1)</em></span> and
162 <span class="emphasis"><em><span class="bold"><strong>&#955;</strong></span>=(0.5, 1.5)</em></span>,
163 </li>
164 <li class="listitem">
165 Exponential distribution with parameter <span class="emphasis"><em>&#955;=0.5</em></span>,
166 </li>
167 <li class="listitem">
168 Exponential distribution with parameter <span class="emphasis"><em>&#955;=1.5</em></span>.
169 </li>
170 </ol></div>
171 <p>
172 As expected, as the first element <span class="emphasis"><em>&#945;<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>&#945;<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>&#955;=0.5</em></span>. Conversely, as the first element
177 <span class="emphasis"><em>&#945;<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>&#945;<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>&#955;=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>&#945;</strong></span>=(1.0)</em></span> and <span class="emphasis"><em><span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.5, 0.5)</em></span> and
197 <span class="emphasis"><em><span class="bold"><strong>&#955;</strong></span>=(0.3, 1.5)</em></span>,
198 </li>
199 <li class="listitem">
200 <span class="emphasis"><em><span class="bold"><strong>&#945;</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>&#955;</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>&#945;<sub>i</sub></em></span>
227 and its service time distribution is an exponential distribution with rate
228 <span class="emphasis"><em>&#955;<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 &gt; 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>&#955;</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>&#955;</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>&#945;</strong></span>=(1/2,1/2)</em></span>
279 and rate vector <span class="emphasis"><em><span class="bold"><strong>&#955;</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">&lt;</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">&gt;</span>
288 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</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">&lt;&lt;</span> <span class="string">"Average lifetime: "</span>
296 <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" years"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Probability that the appliance will work for more than 15 years: "</span>
299 <span class="special">&lt;&lt;</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">&lt;&lt;</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>&#945;</strong></span>=(0.34561,0.08648,0.56791),
503 <span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.24667,0.37948,0.37385),
509 <span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.09325,0.22251,0.68424),
515 <span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.38881,0.18227,0.42892),
528 <span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.42093,0.43960,0.13947),
534 <span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.44885,0.30675,0.2444),
540 <span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.39442,0.24644,0.35914),
553 <span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.37621,0.14838,0.47541),
559 <span class="bold"><strong>&#955;</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>&#945;</strong></span>=(0.34131,0.12544,0.53325),
565 <span class="bold"><strong>&#955;</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">&lt;</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">&gt;</span>
577 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
578 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</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">&amp;</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">&lt;&lt;</span> <span class="string">"### "</span> <span class="special">&lt;&lt;</span> <span class="identifier">ds</span><span class="special">.</span><span class="identifier">name</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"* Fitted Request Interarrival Time"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - Mean (SD): "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" ("</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">") seconds."</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - 99th Percentile: "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" seconds."</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - Probability that a VM will arrive within 30 minutes: "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - Probability that a VM will arrive after 1 hour: "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"* Fitted Multi-core VM Lifetime"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - Mean (SD): "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" ("</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">") seconds."</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - 99th Percentile: "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" seconds."</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - Probability that a VM will last for less than 1 month: "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - Probability that a VM will last for more than 3 months: "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"* Fitted Single-core VM Lifetime"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - Mean (SD): "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" ("</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">") seconds."</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - 99th Percentile: "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" seconds."</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - Probability that a VM will last for less than 1 month: "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">" - Probability that a VM will last for more than 3 months: "</span> <span class="special">&lt;&lt;</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">&lt;&lt;</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">&lt;</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">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</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">&lt;</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">&gt;</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">&amp;</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">&amp;</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">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</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">&lt;</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">&gt;</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">&amp;</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">&amp;</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">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</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">&lt;</span><span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">&gt;</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">&amp;</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">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;(</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">&lt;&lt;</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">&lt;&lt;</span> <span class="char">' '</span> <span class="special">&lt;&lt;</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">&lt;&lt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;(</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>&#945;</strong></span>=(&#945;<sub>1</sub>,...,&#945;<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>&#955;</strong></span>=(&#955;<sub>1</sub>,...,&#955;<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> &#8712; [0,&#8734;)
1256 </p>
1257 </td>
1258 </tr>
1259 <tr>
1260 <td>
1261 <p>
1262 pdf
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 &amp;
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 &amp; 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 &#169; 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&#229;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>