entrenar/optim/dp/
budget.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
7pub struct PrivacyBudget {
8 pub epsilon: f64,
10 pub delta: f64,
12}
13
14impl PrivacyBudget {
15 pub fn new(epsilon: f64, delta: f64) -> Self {
17 Self { epsilon, delta }
18 }
19
20 pub fn allows(&self, spent: f64) -> bool {
22 spent <= self.epsilon
23 }
24
25 pub fn remaining(&self, spent: f64) -> f64 {
27 (self.epsilon - spent).max(0.0)
28 }
29}
30
31impl Default for PrivacyBudget {
32 fn default() -> Self {
33 Self { epsilon: 8.0, delta: 1e-5 }
35 }
36}