mirror of
https://github.com/jjaldridge2009/Project_Xs.git
synced 2024-10-05 14:57:12 +02:00
added reidentifyByIntervals function
added reidentifyByIntervals this function allows for reidentification in less time
This commit is contained in:
parent
3eba0654d1
commit
86a55f8b8f
@ -165,6 +165,19 @@ def recov(blinks:List[int],rawintervals:List[int])->Xorshift:
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def reidentifyByBlinks(rng:Xorshift, observed_blinks:List[int], npc = 0, search_max=10**6, search_min=0)->Xorshift:
|
def reidentifyByBlinks(rng:Xorshift, observed_blinks:List[int], npc = 0, search_max=10**6, search_min=0)->Xorshift:
|
||||||
|
"""reidentify Xorshift state by type of observed blinks.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
rng (Xorshift): identified rng
|
||||||
|
observed_blinks (List[int]):
|
||||||
|
npc (int, optional): num of npcs. Defaults to 0.
|
||||||
|
search_max (int, optional): . Defaults to 10**6.
|
||||||
|
search_min (int, optional): . Defaults to 0.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Xorshift: reidentified rng
|
||||||
|
"""
|
||||||
|
|
||||||
if search_max<search_min:
|
if search_max<search_min:
|
||||||
search_min, search_max = search_max, search_min
|
search_min, search_max = search_max, search_min
|
||||||
search_range = search_max - search_min
|
search_range = search_max - search_min
|
||||||
@ -210,6 +223,72 @@ def reidentifyByBlinks(rng:Xorshift, observed_blinks:List[int], npc = 0, search_
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def reidentifyByIntervals(rng:Xorshift, rawintervals:List[int], npc = 0, search_max=10**6, search_min=0)->Xorshift:
|
||||||
|
"""reidentify Xorshift state by intervals of observed blinks.
|
||||||
|
This method is faster than "reidentifyByBlinks" in most cases since it can be reidentified by less blinking.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
rng (Xorshift): [description]
|
||||||
|
rawintervals (List[int]): list of intervals of blinks. 6 or more is recommended.
|
||||||
|
npc (int, optional): [description]. Defaults to 0.
|
||||||
|
search_max ([type], optional): [description]. Defaults to 10**6.
|
||||||
|
search_min (int, optional): [description]. Defaults to 0.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Xorshift: [description]
|
||||||
|
"""
|
||||||
|
intervals = rawintervals[1:]
|
||||||
|
if search_max<search_min:
|
||||||
|
search_min, search_max = search_max, search_min
|
||||||
|
search_range = search_max - search_min
|
||||||
|
observed_len = sum(intervals)+1
|
||||||
|
|
||||||
|
for d in range(1+npc):
|
||||||
|
identify_rng = Xorshift(*rng.getState())
|
||||||
|
blinkrands = [(i, int((r&0b1110)==0)) for i,r in list(enumerate(identify_rng.getNextRandSequence(search_max)))[d::1+npc]]
|
||||||
|
|
||||||
|
#prepare
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
expected_blinks_lst = []
|
||||||
|
expected_blinks = 0
|
||||||
|
lastblink_idx = -1
|
||||||
|
mask = (1<<observed_len)-1
|
||||||
|
for idx, r in blinkrands[:observed_len]:
|
||||||
|
lastblink_idx = idx
|
||||||
|
|
||||||
|
expected_blinks <<= 1
|
||||||
|
expected_blinks |= r
|
||||||
|
|
||||||
|
expected_blinks_lst.append((lastblink_idx, expected_blinks))
|
||||||
|
|
||||||
|
for idx, r in blinkrands[observed_len:]:
|
||||||
|
lastblink_idx = idx
|
||||||
|
|
||||||
|
expected_blinks <<= 1
|
||||||
|
expected_blinks |= r
|
||||||
|
expected_blinks &= mask
|
||||||
|
|
||||||
|
expected_blinks_lst.append((lastblink_idx, expected_blinks))
|
||||||
|
|
||||||
|
#search preparation
|
||||||
|
search_blinks = 1
|
||||||
|
for i in intervals:
|
||||||
|
search_blinks <<= i
|
||||||
|
search_blinks |= 1
|
||||||
|
|
||||||
|
#search
|
||||||
|
result = Xorshift(*rng.getState())
|
||||||
|
for idx, blinks in expected_blinks_lst:
|
||||||
|
if search_blinks==blinks and search_min <= idx:
|
||||||
|
print(f"found at advances:{idx}, d={d}")
|
||||||
|
result.getNextRandSequence(idx)
|
||||||
|
return result
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def recovByMunchlax(rawintervals:List[float])->Xorshift:
|
def recovByMunchlax(rawintervals:List[float])->Xorshift:
|
||||||
"""Recover the xorshift from the interval of Munchlax blinks.
|
"""Recover the xorshift from the interval of Munchlax blinks.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user