Class: ActiveRecord::Relation

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_elastic_sensitivity.rb

Constant Summary collapse

EPS =
1
BETA =
EPS / (2 * (Math.log(2 / delta)))

Instance Method Summary collapse

Instance Method Details

#compute_elastic_sensitivity(c, k, k_square, n) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
# File 'lib/rails_elastic_sensitivity.rb', line 94

def compute_elastic_sensitivity(c, k, k_square, n)
  max = 0
  n = 0 if k_square == 0 # MAX value is when k == 0

  (0..n).each do |i|
    temp = (Math::E ** (-BETA*i)) * ((k_square * i **2 ) + (i * k) + c )
    max = temp if temp > max
  end

  max
end

#elastic_countObject



85
86
87
88
89
90
91
92
# File 'lib/rails_elastic_sensitivity.rb', line 85

def elastic_count
  es = Rails.cache.read("now_es")
  ture_result = self.count
  n = es.main_t.count
  elastic_sensitivity = compute_elastic_sensitivity(es.c, es.k, es.k_square, n)
  laplace_noise_scale = (2 * elastic_sensitivity) / EPS
  (ture_result + laplace(laplace_noise_scale)).abs
end

#laplace(scale) ⇒ Object



106
107
108
109
# File 'lib/rails_elastic_sensitivity.rb', line 106

def laplace(scale)
  u = 0.5 - rand(0.0..1.0)
  -(u <=> 0.0) * scale * Math.log(1 - (2 * (u).abs))
end