若干改进

This commit is contained in:
2025-09-08 13:44:14 +08:00
parent 5e96fc8138
commit afb7252f71
3 changed files with 81 additions and 5 deletions

View File

@@ -2,7 +2,7 @@ import pathlib
import toml
import time
import auxiliary as aux
from typing import List
class Electron:
"""电子: 记忆分析元数据及算法"""
@@ -183,7 +183,7 @@ class NucleonUnion:
lst.append(Nucleon(i, all[i]))
self.keydata = all["keydata"]
self.testdata = all["testdata"]
self.nucleons = lst
self.nucleons: List[Nucleon] = lst
self.nucleons_dict = {i.content: i for i in lst}
def __len__(self):

View File

@@ -1,11 +1,11 @@
import random
class Puzzle:
class BasePuzzle:
pass
class BlankPuzzle(Puzzle):
class BlankPuzzle(BasePuzzle):
"""填空题谜题生成器
Args:
@@ -41,7 +41,7 @@ class BlankPuzzle(Puzzle):
return f"{self.wording}\n{str(self.answer)}"
class SelectionPuzzle(Puzzle):
class SelectionPuzzle(BasePuzzle):
"""选择题谜题生成器
Args:

76
reactor_k.py Normal file
View 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 的调度器实现"