若干改进
This commit is contained in:
@@ -2,7 +2,7 @@ import pathlib
|
|||||||
import toml
|
import toml
|
||||||
import time
|
import time
|
||||||
import auxiliary as aux
|
import auxiliary as aux
|
||||||
|
from typing import List
|
||||||
|
|
||||||
class Electron:
|
class Electron:
|
||||||
"""电子: 记忆分析元数据及算法"""
|
"""电子: 记忆分析元数据及算法"""
|
||||||
@@ -183,7 +183,7 @@ class NucleonUnion:
|
|||||||
lst.append(Nucleon(i, all[i]))
|
lst.append(Nucleon(i, all[i]))
|
||||||
self.keydata = all["keydata"]
|
self.keydata = all["keydata"]
|
||||||
self.testdata = all["testdata"]
|
self.testdata = all["testdata"]
|
||||||
self.nucleons = lst
|
self.nucleons: List[Nucleon] = lst
|
||||||
self.nucleons_dict = {i.content: i for i in lst}
|
self.nucleons_dict = {i.content: i for i in lst}
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
import random
|
import random
|
||||||
|
|
||||||
|
|
||||||
class Puzzle:
|
class BasePuzzle:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class BlankPuzzle(Puzzle):
|
class BlankPuzzle(BasePuzzle):
|
||||||
"""填空题谜题生成器
|
"""填空题谜题生成器
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -41,7 +41,7 @@ class BlankPuzzle(Puzzle):
|
|||||||
return f"{self.wording}\n{str(self.answer)}"
|
return f"{self.wording}\n{str(self.answer)}"
|
||||||
|
|
||||||
|
|
||||||
class SelectionPuzzle(Puzzle):
|
class SelectionPuzzle(BasePuzzle):
|
||||||
"""选择题谜题生成器
|
"""选择题谜题生成器
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
76
reactor_k.py
Normal file
76
reactor_k.py
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
import particles as pt
|
||||||
|
import auxiliary as aux
|
||||||
|
import time
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
class BaseScheduler():
|
||||||
|
"调度器接口"
|
||||||
|
|
||||||
|
def revisor(self, electron: pt.Electron, quality: int):
|
||||||
|
"""由 quality 更新电子的记忆参数"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_atoms_for_review(self, electron_file: pt.ElectronUnion):
|
||||||
|
"""从电子文件中筛选出当前需要复习的所有原子"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_atoms_for_learning(self, nucleon_file: pt.NucleonUnion, limit: int):
|
||||||
|
"""从核子文件中获取待学习的新原子"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
class SM2Scheduler(BaseScheduler):
|
||||||
|
"基于 SM-2 的调度器实现"
|
||||||
|
def revisor(self, electron: pt.Electron, quality: int, is_new_activation):
|
||||||
|
print(f"REVISOR: {quality}, {is_new_activation}")
|
||||||
|
if quality == -1:
|
||||||
|
return -1
|
||||||
|
|
||||||
|
electron.metadata['efactor'] = electron.metadata['efactor'] + (
|
||||||
|
0.1 - (5 - quality) * (0.08 + (5 - quality) * 0.02)
|
||||||
|
)
|
||||||
|
electron.metadata['efactor'] = max(1.3, electron.metadata['efactor'])
|
||||||
|
|
||||||
|
if quality < 3:
|
||||||
|
# 若保留率低于 3,重置重复次数
|
||||||
|
electron.metadata['rept'] = 0
|
||||||
|
electron.metadata['interval'] = 0 # 设为0,以便下面重新计算 I(1)
|
||||||
|
else:
|
||||||
|
electron.metadata['rept'] += 1
|
||||||
|
|
||||||
|
electron.metadata['real_rept'] += 1
|
||||||
|
|
||||||
|
if is_new_activation: # 初次激活
|
||||||
|
electron.metadata['rept'] = 0
|
||||||
|
electron.metadata['efactor'] = 2.5
|
||||||
|
|
||||||
|
if electron.metadata['rept'] == 0: # 刚被重置或初次激活后复习
|
||||||
|
electron.metadata['interval'] = 1 # I(1)
|
||||||
|
elif electron.metadata['rept'] == 1:
|
||||||
|
electron.metadata['interval'] = 6 # I(2) 经验公式
|
||||||
|
else:
|
||||||
|
electron.metadata['interval'] = round(
|
||||||
|
electron.metadata['interval'] * electron.metadata['efactor']
|
||||||
|
)
|
||||||
|
|
||||||
|
electron.metadata['last_date'] = aux.get_daystamp()
|
||||||
|
electron.metadata['next_date'] = aux.get_daystamp() + electron.metadata['interval']
|
||||||
|
electron.metadata['last_modify'] = time.time()
|
||||||
|
|
||||||
|
def get_atoms_for_learning(self, nucleon_file: pt.NucleonUnion, limit: int):
|
||||||
|
def electron_dict_get_fallback(key) -> pt.Electron:
|
||||||
|
value = self.electron_dict.get(key)
|
||||||
|
# 如果值不存在,则设置默认值
|
||||||
|
if value is None:
|
||||||
|
value = pt.Electron(key, {}) # 获取默认值
|
||||||
|
self.electron_dict[key] = value # 将默认值存入字典
|
||||||
|
electron_file.sync()
|
||||||
|
return value # 返回获取的值(可能是默认值)
|
||||||
|
|
||||||
|
for i in nucleon_file.nucleons:
|
||||||
|
if i.metadata
|
||||||
|
|
||||||
|
def get_atoms_for_review(self, electron_file: pt.ElectronUnion):
|
||||||
|
return super().get_atoms_for_review(electron_file)
|
||||||
|
|
||||||
|
class FSRSScheduler():
|
||||||
|
"基于 FSRS 的调度器实现"
|
Reference in New Issue
Block a user