LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
cache_miss_is.m
1%{ @file cache_miss_is.m
2 % @brief Computes miss rates using importance sampling
3 %
4 % @author LINE Development Team
5%}
6
7%{
8 % @brief Computes cache miss rates using importance sampling
9 %
10 % @details
11 % This function computes global, per-user, and per-item miss rates for
12 % cache models using Monte Carlo importance sampling.
13 %
14 % @par Syntax:
15 % @code
16 % [M, MU, MI, pi0, lE] = cache_miss_is(gamma, m, lambda)
17 % [M, MU, MI, pi0, lE] = cache_miss_is(gamma, m, lambda, samples)
18 % @endcode
19 %
20 % @par Parameters:
21 % <table>
22 % <tr><th>Name<th>Description
23 % <tr><td>gamma<td>Item popularity probabilities (n x h matrix)
24 % <tr><td>m<td>Cache capacity vector (1 x h)
25 % <tr><td>lambda<td>Arrival rates per user per item (u x n x h+1)
26 % <tr><td>samples<td>(Optional) Number of Monte Carlo samples (default: 1e5)
27 % </table>
28 %
29 % @par Returns:
30 % <table>
31 % <tr><th>Name<th>Description
32 % <tr><td>M<td>Global miss rate
33 % <tr><td>MU<td>Per-user miss rate (u x 1)
34 % <tr><td>MI<td>Per-item miss rate (n x 1)
35 % <tr><td>pi0<td>Per-item miss probability (1 x n)
36 % <tr><td>lE<td>Log of normalizing constant
37 % </table>
38%}
39function [M, MU, MI, pi0, lE] = cache_miss_is(gamma, m, lambda, samples)
40% [M, MU, MI, PI0, LE] = CACHE_MISS_IS(GAMMA, M, LAMBDA, SAMPLES)
41%
42% Importance sampling estimation of cache miss rates.
43%
44% Input:
45% gamma - (n x h) item popularity probabilities
46% m - (1 x h) cache capacity vector
47% lambda - (u x n x h+1) arrival rates per user per item per level
48% samples - (optional) number of Monte Carlo samples, default 1e5
49%
50% Output:
51% M - global miss rate
52% MU - per-user miss rate
53% MI - per-item miss rate
54% pi0 - per-item miss probability
55% lE - log of normalizing constant
56
57if nargin < 4 || isempty(samples)
58 samples = 1e5;
59end
60
61[n, h] = size(gamma);
62
63% Compute normalizing constant via importance sampling
64[~, lE] = cache_is(gamma, m, samples);
65
66% Compute hit probabilities via importance sampling
67pij = cache_prob_is(gamma, m, samples);
68
69% Extract miss probabilities (first column)
70pi0 = pij(:, 1)';
71
72% Compute miss rates if lambda provided
73if nargin >= 3 && ~isempty(lambda)
74 u = size(lambda, 1); % number of users
75
76 % Per-user miss rate
77 MU = zeros(u, 1);
78 for v = 1:u
79 for k = 1:n
80 MU(v) = MU(v) + lambda(v, k, 1) * pi0(k);
81 end
82 end
83
84 % Per-item miss rate
85 MI = zeros(n, 1);
86 for k = 1:n
87 MI(k) = sum(lambda(:, k, 1)) * pi0(k);
88 end
89
90 % Global miss rate (sum of per-item miss rates)
91 M = sum(MI);
92else
93 % Without lambda, return just the mean miss probability
94 M = mean(pi0);
95 MU = [];
96 MI = [];
97end
98
99end