mirror of
https://github.com/boostorg/math.git
synced 2026-01-28 07:22:12 +00:00
1471 lines
142 KiB
HTML
1471 lines
142 KiB
HTML
<html>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>Hyperexponential Distribution</title>
|
||
<link rel="stylesheet" href="../../../math.css" type="text/css">
|
||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||
<link rel="home" href="../../../index.html" title="Math Toolkit 4.2.1">
|
||
<link rel="up" href="../dists.html" title="Distributions">
|
||
<link rel="prev" href="geometric_dist.html" title="Geometric Distribution">
|
||
<link rel="next" href="hypergeometric_dist.html" title="Hypergeometric Distribution">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
</head>
|
||
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
|
||
<table cellpadding="2" width="100%"><tr>
|
||
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
|
||
<td align="center"><a href="../../../../../../../index.html">Home</a></td>
|
||
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
|
||
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
|
||
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
|
||
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
|
||
</tr></table>
|
||
<hr>
|
||
<div class="spirit-nav">
|
||
<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>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist"></a><a class="link" href="hyperexponential_dist.html" title="Hyperexponential Distribution">Hyperexponential
|
||
Distribution</a>
|
||
</h4></div></div></div>
|
||
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">hyperexponential</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></pre>
|
||
<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>
|
||
|
||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RealType</span> <span class="special">=</span> <span class="keyword">double</span><span class="special">,</span>
|
||
<span class="keyword">typename</span> <a class="link" href="../../../policy.html" title="Chapter 22. Policies: Controlling Precision, Error Handling etc">Policy</a> <span class="special">=</span> <a class="link" href="../../pol_ref/pol_ref_ref.html" title="Policy Class Reference">policies::policy<></a> <span class="special">></span>
|
||
<span class="keyword">class</span> <span class="identifier">hyperexponential_distribution</span><span class="special">;</span>
|
||
|
||
<span class="keyword">typedef</span> <span class="identifier">hyperexponential_distribution</span><span class="special"><></span> <span class="identifier">hyperexponential</span><span class="special">;</span>
|
||
|
||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RealType</span><span class="special">,</span> <span class="keyword">typename</span> <a class="link" href="../../../policy.html" title="Chapter 22. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
|
||
<span class="keyword">class</span> <span class="identifier">hyperexponential_distribution</span>
|
||
<span class="special">{</span>
|
||
<span class="keyword">public</span><span class="special">:</span>
|
||
<span class="keyword">typedef</span> <span class="identifier">RealType</span> <span class="identifier">value_type</span><span class="special">;</span>
|
||
<span class="keyword">typedef</span> <span class="identifier">Policy</span> <span class="identifier">policy_type</span><span class="special">;</span>
|
||
|
||
<span class="comment">// Constructors:</span>
|
||
<span class="identifier">hyperexponential_distribution</span><span class="special">();</span> <span class="comment">// Default.</span>
|
||
|
||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RateIterT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateIterT2</span><span class="special">></span>
|
||
<span class="identifier">hyperexponential_distribution</span><span class="special">(</span> <span class="comment">// Default equal probabilities.</span>
|
||
<span class="identifier">RateIterT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_first</span><span class="special">,</span>
|
||
<span class="identifier">RateIterT2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_last</span><span class="special">);</span> <span class="comment">// Rates using Iterators.</span>
|
||
|
||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ProbIterT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateIterT</span><span class="special">></span>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ProbRangeT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">></span>
|
||
<span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">ProbRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">prob_range</span><span class="special">,</span>
|
||
<span class="identifier">RateRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_range</span><span class="special">);</span> <span class="comment">// Ranges.</span>
|
||
|
||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">></span>
|
||
<span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">RateRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_range</span><span class="special">);</span>
|
||
|
||
<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>
|
||
<span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l1</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l2</span><span class="special">);</span>
|
||
<span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l1</span><span class="special">);</span>
|
||
<span class="preprocessor">#endif</span>
|
||
|
||
<span class="comment">// Accessors:</span>
|
||
<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>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">probabilities</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">rates</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
|
||
<span class="special">};</span>
|
||
|
||
<span class="special">}}</span> <span class="comment">// namespaces</span>
|
||
</pre>
|
||
<div class="note"><table border="0" summary="Note">
|
||
<tr>
|
||
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
|
||
<th align="left">Note</th>
|
||
</tr>
|
||
<tr><td align="left" valign="top"><p>
|
||
An implementation-defined mechanism is provided to avoid ambiguity between
|
||
constructors accepting ranges, iterators and constants as parameters.
|
||
This should be transparent to the user. See below and the header file
|
||
hyperexponential.hpp for details and explanatory comments.
|
||
</p></td></tr>
|
||
</table></div>
|
||
<p>
|
||
The class type <code class="computeroutput"><span class="identifier">hyperexponential_distribution</span></code>
|
||
represents a <a href="http://en.wikipedia.org/wiki/Hyperexponential_distribution" target="_top">hyperexponential
|
||
distribution</a>.
|
||
</p>
|
||
<p>
|
||
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
|
||
probability distribution</a> obtained as a mixture of <span class="emphasis"><em>k</em></span>
|
||
<a class="link" href="exp_dist.html" title="Exponential Distribution">Exponential Distribution</a>s.
|
||
It is also referred to as <span class="emphasis"><em>mixed exponential distribution</em></span>
|
||
or parallel <span class="emphasis"><em>k-phase exponential distribution</em></span>.
|
||
</p>
|
||
<p>
|
||
A <span class="emphasis"><em>k</em></span>-phase hyperexponential distribution is characterized
|
||
by two parameters, namely a <span class="emphasis"><em>phase probability vector</em></span>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(α<sub>1</sub>,...,α<sub>k</sub>)</em></span> and a
|
||
<span class="emphasis"><em>rate vector</em></span> <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(λ<sub>1</sub>,...,λ<sub>k</sub>)</em></span>.
|
||
</p>
|
||
<p>
|
||
The <a href="http://en.wikipedia.org/wiki/Probability_density_function" target="_top">probability
|
||
density function</a> for random variate <span class="emphasis"><em>x</em></span> in a
|
||
hyperexponential distribution is given by:
|
||
</p>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_pdf.svg"></span>
|
||
|
||
</p></blockquote></div>
|
||
<p>
|
||
The following graph illustrates the PDF of the hyperexponential distribution
|
||
with five different parameters, namely:
|
||
</p>
|
||
<div class="orderedlist"><ol class="orderedlist" type="1">
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(1.0)</em></span> and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(1.0)</em></span> (which degenerates to a simple
|
||
exponential distribution),
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.1, 0.9)</em></span> and
|
||
<span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.9, 0.1)</em></span> and
|
||
<span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.2, 0.3, 0.5)</em></span>
|
||
and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.0, 1.5)</em></span>,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.5, 0.3, 0.2)</em></span>
|
||
and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.0, 1.5)</em></span>.
|
||
</li>
|
||
</ol></div>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../graphs/hyperexponential_pdf.svg" align="middle"></span>
|
||
|
||
</p></blockquote></div>
|
||
<p>
|
||
Also, the following graph illustrates the PDF of the hyperexponential distribution
|
||
(solid lines) where only the <span class="emphasis"><em>phase probability vector</em></span>
|
||
changes together with the PDF of the two limiting exponential distributions
|
||
(dashed lines):
|
||
</p>
|
||
<div class="orderedlist"><ol class="orderedlist" type="1">
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.1, 0.9)</em></span> and
|
||
<span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.6, 0.4)</em></span> and
|
||
<span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.9, 0.1)</em></span> and
|
||
<span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.5, 1.5)</em></span>,
|
||
</li>
|
||
<li class="listitem">
|
||
Exponential distribution with parameter <span class="emphasis"><em>λ=0.5</em></span>,
|
||
</li>
|
||
<li class="listitem">
|
||
Exponential distribution with parameter <span class="emphasis"><em>λ=1.5</em></span>.
|
||
</li>
|
||
</ol></div>
|
||
<p>
|
||
As expected, as the first element <span class="emphasis"><em>α<sub>1</sub></em></span> of the <span class="emphasis"><em>phase
|
||
probability vector</em></span> approaches to <span class="emphasis"><em>1</em></span> (or,
|
||
equivalently, <span class="emphasis"><em>α<sub>2</sub></em></span> approaches to <span class="emphasis"><em>0</em></span>),
|
||
the resulting hyperexponential distribution nears the exponential distribution
|
||
with parameter <span class="emphasis"><em>λ=0.5</em></span>. Conversely, as the first element
|
||
<span class="emphasis"><em>α<sub>2</sub></em></span> of the <span class="emphasis"><em>phase probability vector</em></span>
|
||
approaches to <span class="emphasis"><em>1</em></span> (or, equivalently, <span class="emphasis"><em>α<sub>1</sub></em></span>
|
||
approaches to <span class="emphasis"><em>0</em></span>), the resulting hyperexponential distribution
|
||
nears the exponential distribution with parameter <span class="emphasis"><em>λ=1.5</em></span>.
|
||
</p>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../graphs/hyperexponential_pdf_samerate.svg" align="middle"></span>
|
||
|
||
</p></blockquote></div>
|
||
<p>
|
||
Finally, the following graph compares the PDF of the hyperexponential distribution
|
||
with different number of phases but with the same mean value equal to
|
||
<span class="emphasis"><em>2</em></span>:
|
||
</p>
|
||
<div class="orderedlist"><ol class="orderedlist" type="1">
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(1.0)</em></span> and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(2.0)</em></span> (which degenerates to a simple
|
||
exponential distribution),
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.5, 0.5)</em></span> and
|
||
<span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.3, 1.5)</em></span>,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(1.0/3.0, 1.0/3.0, 1.0/3.0)</em></span>
|
||
and <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(0.2, 1.5, 3.0)</em></span>,
|
||
</li>
|
||
</ol></div>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../graphs/hyperexponential_pdf_samemean.svg" align="middle"></span>
|
||
|
||
</p></blockquote></div>
|
||
<p>
|
||
As can be noted, even if the three distributions have the same mean value,
|
||
the two hyperexponential distributions have a <span class="emphasis"><em>longer</em></span>
|
||
tail with respect to the one of the exponential distribution. Indeed, the
|
||
hyperexponential distribution has a larger variability than the exponential
|
||
distribution, thus resulting in a <a href="http://en.wikipedia.org/wiki/Coefficient_of_variation" target="_top">Coefficient
|
||
of Variation</a> greater than <span class="emphasis"><em>1</em></span> (as opposed to
|
||
the one of the exponential distribution which is exactly <span class="emphasis"><em>1</em></span>).
|
||
</p>
|
||
<h4>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h0"></a>
|
||
<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>
|
||
</h4>
|
||
<p>
|
||
A <span class="emphasis"><em>k</em></span>-phase hyperexponential distribution is frequently
|
||
used in <a href="http://en.wikipedia.org/wiki/Queueing_theory" target="_top">queueing
|
||
theory</a> to model the distribution of the superposition of <span class="emphasis"><em>k</em></span>
|
||
independent events, like, for instance, the service time distribution of
|
||
a queueing station with <span class="emphasis"><em>k</em></span> servers in parallel where
|
||
the <span class="emphasis"><em>i</em></span>-th server is chosen with probability <span class="emphasis"><em>α<sub>i</sub></em></span>
|
||
and its service time distribution is an exponential distribution with rate
|
||
<span class="emphasis"><em>λ<sub>i</sub></em></span> (Allen,1990; Papadopolous et al.,1993; Trivedi,2002).
|
||
</p>
|
||
<p>
|
||
For instance, CPUs service-time distribution in a computing system has
|
||
often been observed to possess such a distribution (Rosin,1965). Also,
|
||
the arrival of different types of customer to a single queueing station
|
||
is often modeled as a hyperexponential distribution (Papadopolous et al.,1993).
|
||
Similarly, if a product manufactured in several parallel assembly lines
|
||
and the outputs are merged, the failure density of the overall product
|
||
is likely to be hyperexponential (Trivedi,2002).
|
||
</p>
|
||
<p>
|
||
Finally, since the hyperexponential distribution exhibits a high Coefficient
|
||
of Variation (CoV), that is a CoV > 1, it is especially suited to fit
|
||
empirical data with large CoV (Feitelson,2014; Wolski et al.,2013) and
|
||
to approximate <a href="http://en.wikipedia.org/wiki/Long_tail" target="_top">long-tail
|
||
probability distributions</a> (Feldmann et al.,1998).
|
||
</p>
|
||
<h4>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h1"></a>
|
||
<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
|
||
distributions</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
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
|
||
is simply an <a class="link" href="exp_dist.html" title="Exponential Distribution">Exponential
|
||
Distribution</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
When the <span class="emphasis"><em>k</em></span> rates are all equal to <span class="emphasis"><em>λ</em></span>,
|
||
the hyperexponential distribution is simple an <a class="link" href="exp_dist.html" title="Exponential Distribution">Exponential
|
||
Distribution</a> with rate <span class="emphasis"><em>λ</em></span>.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h2"></a>
|
||
<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>
|
||
</h4>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h3"></a>
|
||
<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
|
||
of Appliances</a>
|
||
</h5>
|
||
<p>
|
||
Suppose a customer is buying an appliance and is choosing at random between
|
||
an appliance with average lifetime of 10 years and an appliance with average
|
||
lifetime of 12 years. Assuming the lifetime of this appliance follows an
|
||
exponential distribution, the lifetime distribution of the purchased appliance
|
||
can be modeled as a hyperexponential distribution with phase probability
|
||
vector <span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(1/2,1/2)</em></span>
|
||
and rate vector <span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(1/10,1/12)</em></span>
|
||
(Wolfram,2014).
|
||
</p>
|
||
<p>
|
||
In the rest of this section, we provide an example C++ implementation for
|
||
computing the average lifetime and the probability that the appliance will
|
||
work for more than 15 years.
|
||
</p>
|
||
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">hyperexponential</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
||
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
|
||
<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
|
||
<span class="special">{</span>
|
||
<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>
|
||
|
||
<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>
|
||
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Average lifetime: "</span>
|
||
<span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">he</span><span class="special">)</span>
|
||
<span class="special"><<</span> <span class="string">" years"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability that the appliance will work for more than 15 years: "</span>
|
||
<span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">he</span><span class="special">,</span> <span class="number">15.0</span><span class="special">))</span>
|
||
<span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="special">}</span>
|
||
</pre>
|
||
<p>
|
||
The resulting output is:
|
||
</p>
|
||
<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>
|
||
<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>
|
||
</pre>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h4"></a>
|
||
<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
|
||
of Private Cloud Computing Systems</a>
|
||
</h5>
|
||
<p>
|
||
<a href="http://en.wikipedia.org/wiki/Cloud_computing" target="_top">Cloud computing</a>
|
||
has become a popular metaphor for dynamic and secure self-service access
|
||
to computational and storage capabilities. In (Wolski et al.,2013), the
|
||
authors analyze and model workloads gathered from enterprise-operated commercial
|
||
<a href="http://en.wikipedia.org/wiki/Cloud_computing#Private_cloud" target="_top">private
|
||
clouds</a> and show that 3-phase hyperexponential distributions (fitted
|
||
using the <a href="http://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm" target="_top">Expectation
|
||
Maximization algorithm</a>) capture workload attributes accurately.
|
||
</p>
|
||
<p>
|
||
In this type of computing system, user requests consist in demanding the
|
||
provisioning of one or more <a href="http://en.wikipedia.org/wiki/Virtual_machine" target="_top">Virtual
|
||
Machines</a> (VMs). In particular, in (Wolski et al.,2013) the workload
|
||
experienced by each cloud system is a function of four distributions, one
|
||
for each of the following workload attributes:
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
<span class="emphasis"><em>Request Interarrival Time</em></span>: the amount of time
|
||
until the next request,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em>VM Lifetime</em></span>: the time duration over which a VM
|
||
is provisioned to a physical machine,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em>Request Size</em></span>: the number of VMs in the request,
|
||
and
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em>Core Count</em></span>: the CPU core count requested for each
|
||
VM.
|
||
</li>
|
||
</ul></div>
|
||
<p>
|
||
The authors assume that all VMs in a request have the same core count,
|
||
but request sizes and core counts can vary from request to request. Moreover,
|
||
all VMs within a request are assumed to have the same lifetime. Given these
|
||
assumptions, the authors build a statistical model for the request interarrival
|
||
time and VM lifetime attributes by fitting their respective data to a 3-phase
|
||
hyperexponential distribution.
|
||
</p>
|
||
<p>
|
||
In the following table, we show the sample mean and standard deviation
|
||
(SD), in seconds, of the request interarrival time and of the VM lifetime
|
||
distributions of the three datasets collected by authors:
|
||
</p>
|
||
<div class="informaltable"><table class="table">
|
||
<colgroup>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
</colgroup>
|
||
<thead><tr>
|
||
<th>
|
||
<p>
|
||
Dataset
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Mean Request Interarrival Time (SD)
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Mean Multi-core VM Lifetime (SD)
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Mean Single-core VM Lifetime (SD)
|
||
</p>
|
||
</th>
|
||
</tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
DS1
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
2202.1 (2.2e+04)
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
257173 (4.6e+05)
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
28754.4 (1.6e+05)
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
DS2
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
41285.7 (1.1e+05)
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
144669.0 (7.9e+05)
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
599815.0 (1.7e+06)
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
DS3
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
11238.8 (3.0e+04)
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
30739.2 (1.6e+05)
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
44447.8 (2.2e+05)
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div>
|
||
<p>
|
||
Whereas in the following table we show the hyperexponential distribution
|
||
parameters resulting from the fit:
|
||
</p>
|
||
<div class="informaltable"><table class="table">
|
||
<colgroup>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
</colgroup>
|
||
<thead><tr>
|
||
<th>
|
||
<p>
|
||
Dataset
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Request Interarrival Time
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Multi-core VM Lifetime
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Single-core VM Lifetime
|
||
</p>
|
||
</th>
|
||
</tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
DS1
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.34561,0.08648,0.56791),
|
||
<span class="bold"><strong>λ</strong></span>=(0.008,0.00005,0.02894)</em></span>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.24667,0.37948,0.37385),
|
||
<span class="bold"><strong>λ</strong></span>=(0.00004,0.000002,0.00059)</em></span>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.09325,0.22251,0.68424),
|
||
<span class="bold"><strong>λ</strong></span>=(0.000003,0.00109,0.00109)</em></span>
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
DS2
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.38881,0.18227,0.42892),
|
||
<span class="bold"><strong>λ</strong></span>=(0.000006,0.05228,0.00081)</em></span>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.42093,0.43960,0.13947),
|
||
<span class="bold"><strong>λ</strong></span>=(0.00186,0.00008,0.0000008)</em></span>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.44885,0.30675,0.2444),
|
||
<span class="bold"><strong>λ</strong></span>=(0.00143,0.00005,0.0000004)</em></span>
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
DS3
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.39442,0.24644,0.35914),
|
||
<span class="bold"><strong>λ</strong></span>=(0.00030,0.00003,0.00257)</em></span>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.37621,0.14838,0.47541),
|
||
<span class="bold"><strong>λ</strong></span>=(0.00498,0.000005,0.00022)</em></span>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(0.34131,0.12544,0.53325),
|
||
<span class="bold"><strong>λ</strong></span>=(0.000297,0.000003,0.00410)</em></span>
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div>
|
||
<p>
|
||
In the rest of this section, we provide an example C++ implementation for
|
||
computing some statistical properties of the fitted distributions for each
|
||
of the analyzed dataset.
|
||
</p>
|
||
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
||
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
|
||
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span>
|
||
|
||
<span class="keyword">struct</span> <span class="identifier">ds_info</span>
|
||
<span class="special">{</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">name</span><span class="special">;</span>
|
||
<span class="keyword">double</span> <span class="identifier">iat_sample_mean</span><span class="special">;</span>
|
||
<span class="keyword">double</span> <span class="identifier">iat_sample_sd</span><span class="special">;</span>
|
||
<span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span> <span class="identifier">iat_he</span><span class="special">;</span>
|
||
<span class="keyword">double</span> <span class="identifier">multi_lt_sample_mean</span><span class="special">;</span>
|
||
<span class="keyword">double</span> <span class="identifier">multi_lt_sample_sd</span><span class="special">;</span>
|
||
<span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span> <span class="identifier">multi_lt_he</span><span class="special">;</span>
|
||
<span class="keyword">double</span> <span class="identifier">single_lt_sample_mean</span><span class="special">;</span>
|
||
<span class="keyword">double</span> <span class="identifier">single_lt_sample_sd</span><span class="special">;</span>
|
||
<span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">hyperexponential</span> <span class="identifier">single_lt_he</span><span class="special">;</span>
|
||
<span class="special">};</span>
|
||
|
||
<span class="comment">// DS1 dataset</span>
|
||
<span class="identifier">ds_info</span> <span class="identifier">make_ds1</span><span class="special">()</span>
|
||
<span class="special">{</span>
|
||
<span class="identifier">ds_info</span> <span class="identifier">ds</span><span class="special">;</span>
|
||
|
||
<span class="identifier">ds</span><span class="special">.</span><span class="identifier">name</span> <span class="special">=</span> <span class="string">"DS1"</span><span class="special">;</span>
|
||
|
||
<span class="comment">// VM interarrival time distribution</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="comment">// Multi-core VM lifetime distribution</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="comment">// Single-core VM lifetime distribution</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="keyword">return</span> <span class="identifier">ds</span><span class="special">;</span>
|
||
<span class="special">}</span>
|
||
|
||
<span class="comment">// DS2 dataset</span>
|
||
<span class="identifier">ds_info</span> <span class="identifier">make_ds2</span><span class="special">()</span>
|
||
<span class="special">{</span>
|
||
<span class="identifier">ds_info</span> <span class="identifier">ds</span><span class="special">;</span>
|
||
|
||
<span class="identifier">ds</span><span class="special">.</span><span class="identifier">name</span> <span class="special">=</span> <span class="string">"DS2"</span><span class="special">;</span>
|
||
|
||
<span class="comment">// VM interarrival time distribution</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="comment">// Multi-core VM lifetime distribution</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="comment">// Single-core VM lifetime distribution</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="keyword">return</span> <span class="identifier">ds</span><span class="special">;</span>
|
||
<span class="special">}</span>
|
||
|
||
<span class="comment">// DS3 dataset</span>
|
||
<span class="identifier">ds_info</span> <span class="identifier">make_ds3</span><span class="special">()</span>
|
||
<span class="special">{</span>
|
||
<span class="identifier">ds_info</span> <span class="identifier">ds</span><span class="special">;</span>
|
||
|
||
<span class="identifier">ds</span><span class="special">.</span><span class="identifier">name</span> <span class="special">=</span> <span class="string">"DS3"</span><span class="special">;</span>
|
||
|
||
<span class="comment">// VM interarrival time distribution</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="comment">// Multi-core VM lifetime distribution</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="comment">// Single-core VM lifetime distribution</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="keyword">return</span> <span class="identifier">ds</span><span class="special">;</span>
|
||
<span class="special">}</span>
|
||
|
||
<span class="keyword">void</span> <span class="identifier">print_fitted</span><span class="special">(</span><span class="identifier">ds_info</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">ds</span><span class="special">)</span>
|
||
<span class="special">{</span>
|
||
<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>
|
||
<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>
|
||
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"### "</span> <span class="special"><<</span> <span class="identifier">ds</span><span class="special">.</span><span class="identifier">name</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"* Fitted Request Interarrival Time"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Mean (SD): "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" ("</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">standard_deviation</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">") seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - 99th Percentile: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">quantile</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">,</span> <span class="number">0.99</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will arrive within 30 minutes: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">,</span> <span class="identifier">secs_in_a_hour</span> <span class="special">/</span> <span class="number">2.0</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will arrive after 1 hour: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">iat_he</span><span class="special">,</span> <span class="identifier">secs_in_a_hour</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"* Fitted Multi-core VM Lifetime"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Mean (SD): "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" ("</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">standard_deviation</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">") seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - 99th Percentile: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">quantile</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">,</span> <span class="number">0.99</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will last for less than 1 month: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">,</span> <span class="identifier">secs_in_a_month</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will last for more than 3 months: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">multi_lt_he</span><span class="special">,</span> <span class="number">3.0</span><span class="special">*</span><span class="identifier">secs_in_a_month</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"* Fitted Single-core VM Lifetime"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Mean (SD): "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" ("</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">standard_deviation</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">)</span> <span class="special"><<</span> <span class="string">") seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - 99th Percentile: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">quantile</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">,</span> <span class="number">0.99</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" seconds."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will last for less than 1 month: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">,</span> <span class="identifier">secs_in_a_month</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" - Probability that a VM will last for more than 3 months: "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">ds</span><span class="special">.</span><span class="identifier">single_lt_he</span><span class="special">,</span> <span class="number">3.0</span><span class="special">*</span><span class="identifier">secs_in_a_month</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
<span class="special">}</span>
|
||
|
||
<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
|
||
<span class="special">{</span>
|
||
<span class="identifier">print_fitted</span><span class="special">(</span><span class="identifier">make_ds1</span><span class="special">());</span>
|
||
|
||
<span class="identifier">print_fitted</span><span class="special">(</span><span class="identifier">make_ds2</span><span class="special">());</span>
|
||
|
||
<span class="identifier">print_fitted</span><span class="special">(</span><span class="identifier">make_ds3</span><span class="special">());</span>
|
||
<span class="special">}</span>
|
||
</pre>
|
||
<p>
|
||
The resulting output (with floating-point precision set to 2) is:
|
||
</p>
|
||
<pre class="programlisting"><span class="special">###</span> <span class="identifier">DS1</span>
|
||
<span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Request</span> <span class="identifier">Interarrival</span> <span class="identifier">Time</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<span class="special">###</span> <span class="identifier">DS2</span>
|
||
<span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Request</span> <span class="identifier">Interarrival</span> <span class="identifier">Time</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<span class="special">###</span> <span class="identifier">DS3</span>
|
||
<span class="special">*</span> <span class="identifier">Fitted</span> <span class="identifier">Request</span> <span class="identifier">Interarrival</span> <span class="identifier">Time</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
</pre>
|
||
<div class="note"><table border="0" summary="Note">
|
||
<tr>
|
||
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
|
||
<th align="left">Note</th>
|
||
</tr>
|
||
<tr><td align="left" valign="top"><p>
|
||
The above results differ from the ones shown in Tables III, V, and VII
|
||
of (Wolski et al.,2013). We carefully double-checked them with Wolfram
|
||
Mathematica 10, which confirmed our results.
|
||
</p></td></tr>
|
||
</table></div>
|
||
<h4>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h5"></a>
|
||
<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
|
||
Functions</a>
|
||
</h4>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h6"></a>
|
||
<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
|
||
Constructor</a>
|
||
</h5>
|
||
<pre class="programlisting"><span class="identifier">hyperexponential_distribution</span><span class="special">();</span>
|
||
</pre>
|
||
<p>
|
||
Constructs a <span class="emphasis"><em>1</em></span>-phase hyperexponential distribution
|
||
(i.e., an exponential distribution) with rate <code class="computeroutput"><span class="number">1</span></code>.
|
||
</p>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h7"></a>
|
||
<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
|
||
from Iterators</a>
|
||
</h5>
|
||
<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ProbIterT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateIterT</span><span class="special">></span>
|
||
<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>
|
||
<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>
|
||
</pre>
|
||
<p>
|
||
Constructs a hyperexponential distribution with <span class="emphasis"><em>phase probability
|
||
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>)
|
||
iterator pair, and <span class="emphasis"><em>rate vector</em></span> parameter given by
|
||
the range defined by the [<code class="computeroutput"><span class="identifier">rate_first</span></code>,
|
||
<code class="computeroutput"><span class="identifier">rate_last</span></code>) iterator pair.
|
||
</p>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h8"></a>
|
||
<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>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
<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
|
||
real elements representing the phase probabilities; elements are normalized
|
||
to sum to unity.
|
||
</li>
|
||
<li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">rate_first</span></code>, <code class="computeroutput"><span class="identifier">rate_last</span></code>: the range of positive
|
||
elements representing the rates.
|
||
</li>
|
||
</ul></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h9"></a>
|
||
<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
|
||
Requirements</a>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">ProbIterT</span></code>, <code class="computeroutput"><span class="identifier">RateIterT</span></code>: must meet the requirements
|
||
of the <a href="http://en.cppreference.com/w/cpp/concept/InputIterator" target="_top">InputIterator</a>
|
||
concept.
|
||
</li></ul></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h10"></a>
|
||
<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>
|
||
</h6>
|
||
<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">phase_prob</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.5</span><span class="special">,</span> <span class="number">0.5</span> <span class="special">};</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">rates</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span>
|
||
|
||
<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>
|
||
</pre>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h11"></a>
|
||
<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
|
||
from Ranges/Containers</a>
|
||
</h5>
|
||
<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ProbRangeT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">></span>
|
||
<span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">ProbRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">prob_range</span><span class="special">,</span>
|
||
<span class="identifier">RateRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_range</span><span class="special">);</span>
|
||
</pre>
|
||
<p>
|
||
Constructs a hyperexponential distribution with <span class="emphasis"><em>phase probability
|
||
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>
|
||
parameter given by the range defined by <code class="computeroutput"><span class="identifier">rate_range</span></code>.
|
||
</p>
|
||
<div class="note"><table border="0" summary="Note">
|
||
<tr>
|
||
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
|
||
<th align="left">Note</th>
|
||
</tr>
|
||
<tr><td align="left" valign="top"><p>
|
||
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
|
||
mechanism</a> to disambiguate between this and other 2-argument constructors.
|
||
Refer to the source code for more details.
|
||
</p></td></tr>
|
||
</table></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h12"></a>
|
||
<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>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">prob_range</span></code>: the range
|
||
of non-negative real elements representing the phase probabilities;
|
||
elements are normalized to sum to unity.
|
||
</li>
|
||
<li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">rate_range</span></code>: the range
|
||
of positive real elements representing the rates.
|
||
</li>
|
||
</ul></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h13"></a>
|
||
<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
|
||
Requirements</a>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">ProbRangeT</span></code>, <code class="computeroutput"><span class="identifier">RateRangeT</span></code>: must meet the requirements
|
||
of the <a href="http://www.boost.org/doc/libs/release/libs/range/doc/html/range/concepts.html" target="_top">Range</a>
|
||
concept: that includes native C++ arrays, standard library containers,
|
||
or a std::pair or iterators.
|
||
</li></ul></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h14"></a>
|
||
<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>
|
||
</h6>
|
||
<pre class="programlisting"><span class="comment">// We could be using any standard library container here... vector, deque, array, list etc:</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">phase_prob</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.5</span><span class="special">,</span> <span class="number">0.5</span> <span class="special">};</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">rates</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span>
|
||
|
||
<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>
|
||
|
||
<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>
|
||
<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>
|
||
|
||
<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>
|
||
</pre>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h15"></a>
|
||
<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
|
||
with rates-iterators (and all phase probabilities equal)</a>
|
||
</h5>
|
||
<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RateIterT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RateIterT2</span><span class="special">></span>
|
||
<span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">RateIterT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_first</span><span class="special">,</span>
|
||
<span class="identifier">RateIterT2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_last</span><span class="special">);</span>
|
||
</pre>
|
||
<p>
|
||
Constructs a hyperexponential distribution with <span class="emphasis"><em>rate vector</em></span>
|
||
parameter given by the range defined by the [<code class="computeroutput"><span class="identifier">rate_first</span></code>,
|
||
<code class="computeroutput"><span class="identifier">rate_last</span></code>) iterator pair,
|
||
and <span class="emphasis"><em>phase probability vector</em></span> set to the equal phase
|
||
probabilities (i.e., to a vector of the same length <code class="computeroutput"><span class="identifier">n</span></code>
|
||
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>).
|
||
</p>
|
||
<div class="note"><table border="0" summary="Note">
|
||
<tr>
|
||
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
|
||
<th align="left">Note</th>
|
||
</tr>
|
||
<tr><td align="left" valign="top"><p>
|
||
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
|
||
mechanism</a> to disambiguate between this and other 2-argument constructors.
|
||
Refer to the source code for more details.
|
||
</p></td></tr>
|
||
</table></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h16"></a>
|
||
<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>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">rate_first</span></code>, <code class="computeroutput"><span class="identifier">rate_last</span></code>: the range of positive
|
||
elements representing the rates.
|
||
</li></ul></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h17"></a>
|
||
<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
|
||
Requirements</a>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">RateIterT</span></code>, <code class="computeroutput"><span class="identifier">RateIterT2</span></code>: must meet the requirements
|
||
of the <a href="http://en.cppreference.com/w/cpp/concept/InputIterator" target="_top">InputIterator</a>
|
||
concept.
|
||
</li></ul></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h18"></a>
|
||
<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>
|
||
</h6>
|
||
<pre class="programlisting"><span class="comment">// We could be using any standard library container here... vector, deque, array, list etc:</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">rates</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span>
|
||
|
||
<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>
|
||
|
||
<span class="identifier">BOOST_MATH_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>
|
||
</pre>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h19"></a>
|
||
<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
|
||
from a single range of rates (all phase probabilities will be equal)</a>
|
||
</h5>
|
||
<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RateRangeT</span><span class="special">></span>
|
||
<span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">RateRangeT</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rate_range</span><span class="special">);</span>
|
||
</pre>
|
||
<p>
|
||
Constructs a hyperexponential distribution with <span class="emphasis"><em>rate vector</em></span>
|
||
parameter given by the range defined by <code class="computeroutput"><span class="identifier">rate_range</span></code>,
|
||
and <span class="emphasis"><em>phase probability vector</em></span> set to the equal phase
|
||
probabilities (i.e., to a vector of the same length <code class="computeroutput"><span class="identifier">n</span></code>
|
||
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>).
|
||
</p>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h20"></a>
|
||
<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>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">rate_range</span></code>: the range
|
||
of positive real elements representing the rates.
|
||
</li></ul></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h21"></a>
|
||
<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
|
||
Requirements</a>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">RateRangeT</span></code>: must meet
|
||
the requirements of the <a href="http://www.boost.org/doc/libs/release/libs/range/doc/html/range/concepts.html" target="_top">Range</a>
|
||
concept: this includes native C++ array, standard library containers,
|
||
and a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span></code> of iterators.
|
||
</li></ul></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h22"></a>
|
||
<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>
|
||
</h6>
|
||
<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> <span class="identifier">rates</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">10</span><span class="special">,</span> <span class="number">1.0</span> <span class="special">/</span> <span class="number">12</span> <span class="special">};</span>
|
||
|
||
<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">BOOST_MATH_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>
|
||
</pre>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h23"></a>
|
||
<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
|
||
from Initializer lists</a>
|
||
</h5>
|
||
<pre class="programlisting"><span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l1</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l2</span><span class="special">);</span>
|
||
</pre>
|
||
<p>
|
||
Constructs a hyperexponential distribution with <span class="emphasis"><em>phase probability
|
||
vector</em></span> parameter given by the <a href="http://en.cppreference.com/w/cpp/language/list_initialization" target="_top">brace-init-list</a>
|
||
defined by <code class="computeroutput"><span class="identifier">l1</span></code>, and <span class="emphasis"><em>rate
|
||
vector</em></span> parameter given by the <a href="http://en.cppreference.com/w/cpp/language/list_initialization" target="_top">brace-init-list</a>
|
||
defined by <code class="computeroutput"><span class="identifier">l2</span></code>.
|
||
</p>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h24"></a>
|
||
<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>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">l1</span></code>: the brace-init-list
|
||
of non-negative real elements representing the phase probabilities;
|
||
elements are normalized to sum to unity.
|
||
</li>
|
||
<li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">l2</span></code>: the brace-init-list
|
||
of positive real elements representing the rates.
|
||
</li>
|
||
</ul></div>
|
||
<p>
|
||
The number of elements of the phase probabilities list and the rates list
|
||
must be the same.
|
||
</p>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h25"></a>
|
||
<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>
|
||
</h6>
|
||
<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>
|
||
</pre>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h26"></a>
|
||
<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
|
||
from a single initializer list (all phase probabilities will be equal)</a>
|
||
</h5>
|
||
<pre class="programlisting"><span class="identifier">hyperexponential_distribution</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">initializer_list</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">l1</span><span class="special">);</span>
|
||
</pre>
|
||
<p>
|
||
Constructs a hyperexponential distribution with <span class="emphasis"><em>rate vector</em></span>
|
||
parameter given by the <a href="http://en.cppreference.com/w/cpp/language/list_initialization" target="_top">brace-init-list</a>
|
||
defined by <code class="computeroutput"><span class="identifier">l1</span></code>, and <span class="emphasis"><em>phase
|
||
probability vector</em></span> set to the equal phase probabilities (i.e.,
|
||
to a vector of the same length <code class="computeroutput"><span class="identifier">n</span></code>
|
||
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>).
|
||
</p>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h27"></a>
|
||
<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>
|
||
</h6>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<code class="computeroutput"><span class="identifier">l1</span></code>: the brace-init-list
|
||
of non-negative real elements representing the phase probabilities;
|
||
they are normalized to ensure that they sum to unity.
|
||
</li></ul></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h28"></a>
|
||
<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>
|
||
</h6>
|
||
<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>
|
||
|
||
<span class="identifier">BOOST_MATH_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>
|
||
</pre>
|
||
<h5>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h29"></a>
|
||
<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>
|
||
</h5>
|
||
<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>
|
||
</pre>
|
||
<p>
|
||
Gets the number of phases of this distribution (the size of both the rate
|
||
and probability vectors).
|
||
</p>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h30"></a>
|
||
<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
|
||
Value</a>
|
||
</h6>
|
||
<p>
|
||
An non-negative integer number representing the number of phases of this
|
||
distribution.
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">probabilities</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
|
||
</pre>
|
||
<p>
|
||
Gets the <span class="emphasis"><em>phase probability vector</em></span> parameter of this
|
||
distribution.
|
||
</p>
|
||
<div class="note"><table border="0" summary="Note">
|
||
<tr>
|
||
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
|
||
<th align="left">Note</th>
|
||
</tr>
|
||
<tr><td align="left" valign="top"><p>
|
||
The returned probabilities are the <span class="bold"><strong>normalized</strong></span>
|
||
versions of the probability parameter values passed at construction time.
|
||
</p></td></tr>
|
||
</table></div>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h31"></a>
|
||
<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
|
||
Value</a>
|
||
</h6>
|
||
<p>
|
||
A vector of non-negative real numbers representing the <span class="emphasis"><em>phase
|
||
probability vector</em></span> parameter of this distribution.
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">></span> <span class="identifier">rates</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
|
||
</pre>
|
||
<p>
|
||
Gets the <span class="emphasis"><em>rate vector</em></span> parameter of this distribution.
|
||
</p>
|
||
<h6>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h32"></a>
|
||
<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
|
||
Value</a>
|
||
</h6>
|
||
<p>
|
||
A vector of positive real numbers representing the <span class="emphasis"><em>rate vector</em></span>
|
||
parameter of this distribution.
|
||
</p>
|
||
<div class="warning"><table border="0" summary="Warning">
|
||
<tr>
|
||
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td>
|
||
<th align="left">Warning</th>
|
||
</tr>
|
||
<tr><td align="left" valign="top">
|
||
<p>
|
||
The return type of these functions is a vector-by-value. This is deliberate
|
||
as we wish to hide the actual container used internally which may be
|
||
subject to future changes (for example to facilitate vectorization of
|
||
the cdf code etc). Users should note that some code that might otherwise
|
||
have been expected to work does not. For example, an attempt to output
|
||
the (normalized) probabilities:
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">().</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">().</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream_iterator</span><span class="special"><</span><span class="keyword">double</span><span class="special">>(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">,</span> <span class="string">" "</span><span class="special">));</span>
|
||
</pre>
|
||
<p>
|
||
fails at compile or runtime because iterator types are incompatible,
|
||
but, for example,
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">()[</span><span class="number">0</span><span class="special">]</span> <span class="special"><<</span> <span class="char">' '</span> <span class="special"><<</span> <span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">()[</span><span class="number">1</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
||
</pre>
|
||
<p>
|
||
outputs the expected values.
|
||
</p>
|
||
<p>
|
||
In general if you want to access a member of the returned container,
|
||
then assign to a variable first, and then access those members:
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">t</span> <span class="special">=</span> <span class="identifier">he</span><span class="special">.</span><span class="identifier">probabilities</span><span class="special">();</span>
|
||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">t</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream_iterator</span><span class="special"><</span><span class="keyword">double</span><span class="special">>(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">,</span> <span class="string">" "</span><span class="special">));</span>
|
||
</pre>
|
||
</td></tr>
|
||
</table></div>
|
||
<h4>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h33"></a>
|
||
<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
|
||
Accessor Functions</a>
|
||
</h4>
|
||
<p>
|
||
All the <a class="link" href="../nmp.html" title="Non-Member Properties">usual non-member accessor
|
||
functions</a> that are generic to all distributions are supported:
|
||
<a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.cdf">Cumulative Distribution Function</a>,
|
||
<a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.pdf">Probability Density Function</a>,
|
||
<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>,
|
||
<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>,
|
||
<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>,
|
||
<a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.sd">standard deviation</a>,
|
||
<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>,
|
||
<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>.
|
||
</p>
|
||
<p>
|
||
The formulae for calculating these are shown in the table below.
|
||
</p>
|
||
<h4>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h34"></a>
|
||
<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>
|
||
</h4>
|
||
<p>
|
||
The hyperexponential distribution is implemented in terms of the <a class="link" href="exp_dist.html" title="Exponential Distribution">Exponential Distribution</a>
|
||
and as such should have very small errors, usually an <a href="http://en.wikipedia.org/wiki/Machine_epsilon" target="_top">epsilon</a>
|
||
or few.
|
||
</p>
|
||
<h4>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h35"></a>
|
||
<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>
|
||
</h4>
|
||
<p>
|
||
In the following table:
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>α</strong></span>=(α<sub>1</sub>,...,α<sub>k</sub>)</em></span> is
|
||
the <span class="emphasis"><em>phase probability vector</em></span> parameter of the
|
||
<span class="emphasis"><em>k</em></span>-phase hyperexponential distribution,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em><span class="bold"><strong>λ</strong></span>=(λ<sub>1</sub>,...,λ<sub>k</sub>)</em></span> is
|
||
the <span class="emphasis"><em>rate vector</em></span> parameter of the <span class="emphasis"><em>k</em></span>-phase
|
||
hyperexponential distribution,
|
||
</li>
|
||
<li class="listitem">
|
||
<span class="emphasis"><em>x</em></span> is the random variate.
|
||
</li>
|
||
</ul></div>
|
||
<div class="informaltable"><table class="table">
|
||
<colgroup>
|
||
<col>
|
||
<col>
|
||
</colgroup>
|
||
<thead><tr>
|
||
<th>
|
||
<p>
|
||
Function
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Implementation Notes
|
||
</p>
|
||
</th>
|
||
</tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
support
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<span class="emphasis"><em>x</em></span> ∈ [0,∞)
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
pdf
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_pdf.svg"></span>
|
||
|
||
</p></blockquote></div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
cdf
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_cdf.svg"></span>
|
||
|
||
</p></blockquote></div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
cdf complement
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_ccdf.svg"></span>
|
||
|
||
</p></blockquote></div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
quantile
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
No closed form available. Computed numerically.
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
quantile from the complement
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
No closed form available. Computed numerically.
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
mean
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_mean.svg"></span>
|
||
|
||
</p></blockquote></div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
variance
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_variance.svg"></span>
|
||
|
||
</p></blockquote></div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
mode
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
<code class="computeroutput"><span class="number">0</span></code>
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
skewness
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_skewness.svg"></span>
|
||
|
||
</p></blockquote></div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
kurtosis
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="inlinemediaobject"><img src="../../../../equations/hyperexponential_kurtosis.svg"></span>
|
||
|
||
</p></blockquote></div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
kurtosis excess
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
kurtosis <code class="computeroutput"><span class="special">-</span> <span class="number">3</span></code>
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div>
|
||
<h4>
|
||
<a name="math_toolkit.dist_ref.dists.hyperexponential_dist.h36"></a>
|
||
<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>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
A.O. Allen, <span class="emphasis"><em>Probability, Statistics, and Queuing Theory with
|
||
Computer Science Applications, Second Edition</em></span>, Academic
|
||
Press, 1990.
|
||
</li>
|
||
<li class="listitem">
|
||
D.G. Feitelson, <span class="emphasis"><em>Workload Modeling for Computer Systems Performance
|
||
Evaluation</em></span>, Cambridge University Press, 2014
|
||
</li>
|
||
<li class="listitem">
|
||
A. Feldmann and W. Whitt, <span class="emphasis"><em>Fitting mixtures of exponentials
|
||
to long-tail distributions to analyze network performance models</em></span>,
|
||
Performance Evaluation 31(3-4):245, doi:10.1016/S0166-5316(97)00003-5,
|
||
1998.
|
||
</li>
|
||
<li class="listitem">
|
||
H.T. Papadopolous, C. Heavey and J. Browne, <span class="emphasis"><em>Queueing Theory
|
||
in Manufacturing Systems Analysis and Design</em></span>, Chapman &
|
||
Hall/CRC, 1993, p. 35.
|
||
</li>
|
||
<li class="listitem">
|
||
R.F. Rosin, <span class="emphasis"><em>Determining a computing center environment</em></span>,
|
||
Communications of the ACM 8(7):463-468, 1965.
|
||
</li>
|
||
<li class="listitem">
|
||
K.S. Trivedi, <span class="emphasis"><em>Probability and Statistics with Reliability,
|
||
Queueing, and Computer Science Applications</em></span>, John Wiley
|
||
& Sons, Inc., 2002.
|
||
</li>
|
||
<li class="listitem">
|
||
Wikipedia, <span class="emphasis"><em>Hyperexponential Distribution</em></span>, Online:
|
||
<a href="http://en.wikipedia.org/wiki/Hyperexponential_distribution" target="_top">http://en.wikipedia.org/wiki/Hyperexponential_distribution</a>,
|
||
2014
|
||
</li>
|
||
<li class="listitem">
|
||
R. Wolski and J. Brevik, <span class="emphasis"><em>Using Parametric Models to Represent
|
||
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>,
|
||
2013.
|
||
</li>
|
||
<li class="listitem">
|
||
Wolfram Mathematica, <span class="emphasis"><em>Hyperexponential Distribution</em></span>,
|
||
Online: <a href="http://reference.wolfram.com/language/ref/HyperexponentialDistribution.html" target="_top">http://reference.wolfram.com/language/ref/HyperexponentialDistribution.html</a>,
|
||
2014.
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="copyright-footer">Copyright © 2006-2021 Nikhar Agrawal, Anton Bikineev, Matthew Borland,
|
||
Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno
|
||
Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde,
|
||
Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle
|
||
Walker and Xiaogang Zhang<p>
|
||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||
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>)
|
||
</p>
|
||
</div>
|
||
<hr>
|
||
<div class="spirit-nav">
|
||
<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>
|
||
</div>
|
||
</body>
|
||
</html>
|