tiny_outcome 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tiny_outcome.rb +10 -38
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4bcfb2b56da2846a690a84f9488326c2ddf16f48d1906ead7da68a900c8cc3ec
4
- data.tar.gz: 8709cc918943d9dfbc7b02ec9bd5ff666808c123e9f557a9fb04b8659a6d394b
3
+ metadata.gz: ebffbf581a411eb6ff64bd292e95cbb41e8ed3e99992013c89cd503d90105777
4
+ data.tar.gz: f7073aa9eabe6a1d969d1aae133a96cfc0b3064300ec47f53b5649a3f0c97abd
5
5
  SHA512:
6
- metadata.gz: c3789f5b4df3368b9b5e76997176c294de4f0c6ef27f6562b8562c186fa2d8feca4c784598d34fecf8babaa32b52705761a6a0a5d843ea13865f40ff844afe90
7
- data.tar.gz: 78c4b3f3a69110a43ff58963da0e6371d43a1a84eb6db2190580f23967a8b955b22b2a18429e0ad8ec396f1e4af8de246e3c20d987e4de68e9463aa79db03864
6
+ metadata.gz: 43736cd94727be0fe53354e21d9018d63ff14bc7787891460e81b590b8320aa637a20975663c10b318ca42f033baaefc44f7cbcffba4b0c542ef79a97ac634fb
7
+ data.tar.gz: db0da73385a7d80b91b750fd29123ffbc3b7f2df2a3753e0b4895dc28a0dc59767fcdce7e43d7e496d4b7a8644307a685cc376ffa743cb5a6480d2d0da074708
data/lib/tiny_outcome.rb CHANGED
@@ -20,17 +20,11 @@
20
20
  # 87.times { o << rand(2) }
21
21
  #
22
22
  # to_s reveals how we're doing:
23
- # L10 1111000110 coinflip 0.49 84/84::128/128
23
+ # L10 1111000110 w 0.49 84/84::128/128
24
24
  #
25
25
  # this tells us that of the 128 precision capacity, we're currently warmed up
26
- # because we have the minimum (at least 84 samples) to be considered warmed up.
27
- # there's also a prediction here: that the outcome is essentially a coinflip.
28
- # this is because the observed likelihood of an outcome of 1 is 49% in this
29
- # example, well within the range of random chance. if we had a TinyOutcome with
30
- # a precision of 10,000 we wouldn't necessarily consider 49% a true coinflip,
31
- # but because we're trying to predict things within a relatively small sample
32
- # size, we don't want to go all the way to that level of precision, it's more
33
- # like just trying to win more than we lose.
26
+ # because we have the minimum (at least 84 samples) to be considered warmed up
27
+ # (this is also indicated with the lowercase 'w').
34
28
  class TinyOutcome
35
29
  attr_reader :precision,
36
30
  :samples,
@@ -95,39 +89,17 @@ class TinyOutcome
95
89
  value.to_s(2).count('1') / samples.to_f
96
90
  end
97
91
 
98
- # classifies the probability of the next outcome
99
- #
100
- # :cold - if this Outcome isn't yet warm
101
- # :highly_positive - greater than 95% chance that the next outcome will be a 1
102
- # :positive - greater than 90% chance the next outcome will be a 1
103
- # :coinflip - 50% chance (+/- 5%) that the next outcome will be a 1
104
- # :negative - less than 10% chance the next outcome will be a 1
105
- # :highly_negative - less than 5% chance the next outcome will be a 1
106
- # :weak - for all other outcomes
107
- def prediction
108
- return :cold unless warm?
109
-
110
- case probability
111
- when 0...0.05 then :disaster
112
- when 0.05...0.1 then :strongly_negative
113
- when 0.1...0.32 then :negative
114
- when 0.32..0.34 then :one_third
115
- when 0.34...0.48 then :weakly_negative
116
- when 0.48..0.52 then :coinflip
117
- when 0.52...0.65 then :weakly_positive
118
- when 0.65..0.67 then :two_thirds
119
- when 0.67..0.9 then :positive
120
- when 0.9...0.95 then :strongly_positive
121
- when 0.95..1.0 then :amazing
122
- end
123
- end
124
-
125
92
  # true if we've received at least warmup number of samples
126
93
  # false otherwise
127
94
  def warm?
128
95
  warmth == warmup
129
96
  end
130
97
 
98
+ # the opposite of warm: a TinyOutcome can only be cold or warm
99
+ def cold?
100
+ !warm?
101
+ end
102
+
131
103
  # true if we've received at least precision number of samples
132
104
  # false otherwise
133
105
  def full?
@@ -141,15 +113,15 @@ class TinyOutcome
141
113
  :warmth,
142
114
  :warmup,:warm?,
143
115
  :probability,
144
- :prediction,
145
116
  ].each_with_object({}) do |attr, memo|
146
117
  memo[attr] = send(attr)
147
118
  memo
148
119
  end
149
120
  end
150
121
 
122
+ # L10 = last 10 samples
151
123
  def to_s
152
124
  max_backward = [value.to_s(2).length, 10].min
153
- "L10 #{value.to_s(2)[-max_backward..-1].rjust(10, '?')} #{prediction} #{'%.2f' % probability} #{warmth}/#{warmup}::#{samples}/#{precision}"
125
+ "L10 #{value.to_s(2)[-max_backward..-1].rjust(10, '?')} #{warm? ? 'w' : 'c'} #{'%.2f' % probability} #{warmth}/#{warmup}::#{samples}/#{precision}"
154
126
  end
155
127
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_outcome
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Lunt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-04 00:00:00.000000000 Z
11
+ date: 2022-12-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: a tiny outcome tracker with almost no features
14
14
  email: jefflunt@gmail.com