LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
cache_rrm_meanfield_ode.m
1%{ @file cache_rrm_meanfield_ode.m
2 % @brief ODE function for RRM mean-field cache dynamics
3 %
4 % @author LINE Development Team
5%}
6
7%{
8 % @brief Computes ODE dynamics for RRM mean-field cache model
9 %
10 % @details
11 % This function defines the ODE system for the Random Replacement Model (RRM)
12 % mean-field cache dynamics.
13 %
14 % @par Syntax:
15 % @code
16 % dxdt = cache_rrm_meanfield_ode(t, x, lambda, m, n, h)
17 % @endcode
18 %
19 % @par Parameters:
20 % <table>
21 % <tr><th>Name<th>Description
22 % <tr><td>t<td>Time variable (unused)
23 % <tr><td>x<td>State vector
24 % <tr><td>lambda<td>Arrival rates per item
25 % <tr><td>m<td>Cache capacity vector
26 % <tr><td>n<td>Number of items
27 % <tr><td>h<td>Number of cache levels
28 % </table>
29 %
30 % @par Returns:
31 % <table>
32 % <tr><th>Name<th>Description
33 % <tr><td>dxdt<td>Time derivative of state vector
34 % </table>
35%}
36function dxdt = cache_rrm_meanfield_ode(~, x, lambda, m, n, h)
37% Reshape state vector to matrix form: x_{k,s}
38x = reshape(x, [n, 1+ h]);
39
40% TODO check list 0 dxdt
41dxdt = zeros(n, 1+ h);
42
43for k = 1:n
44 for s = 1:h
45
46 % First term: promotion from list s-1
47 sum1 = 0;
48 for k1 = 1:n
49 sum1 = sum1 + lambda(k1) / m(s) * x(k1,1+ s-1) * x(k, 1+ s);
50 end
51
52 % Second term: demotion from list s+1
53 if s < h
54 sum2 = 0;
55 for k1 = 1:n
56 sum2 = sum2 + lambda(k1) / m(s+1) * x(k1,1+ s) * x(k, 1+ s+1);
57 end
58 sum2 = sum2 - lambda(k) * x(k,1+ s);
59 else
60 sum2 = 0;
61 end
62
63 % Drift component
64 dxdt(k, 1+s) = lambda(k) * x(k, 1+ s-1) - sum1 + sum2;
65 end
66 % case s=0
67 dxdt(k, 1) = - sum(dxdt(k, 2:(1+h)));
68end
69
70dxdt = dxdt(:); % Flatten to vector
71end