-
-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add FSRSAlgorithm function call diagram, cardState state transition d…
…iagram, class diagram, and models UML diagrams.
- Loading branch information
Showing
4 changed files
with
276 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
@startuml FSRSAlgorithmFunctionCalls | ||
|
||
FSRSAlgorithm -down-> init_ds | ||
init_ds -down-> init_difficulty | ||
init_ds -down-> init_stability | ||
FSRSAlgorithm -down-> next_ds | ||
FSRSAlgorithm -down-> current_retrievability | ||
FSRSAlgorithm -down-> next_interval | ||
next_interval -down-> apply_fuzz | ||
next_ds -down-> next_difficulty | ||
next_ds -down-> next_forget_stability | ||
next_ds -down-> next_recall_stability | ||
next_difficulty -down-> constrain_difficulty | ||
next_difficulty -down-> mean_reversion | ||
|
||
@enduml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
@startuml cardStateTransition | ||
|
||
state New { | ||
New : - again_due: scheduler(1) | ||
New : - hard_due: scheduler(5) | ||
New : - good_due: scheduler(10) | ||
New : - easy_interval: next_interval(easy.stability) | ||
} | ||
|
||
state Learning { | ||
Learning : - hard_interval: 0 | ||
Learning : - good_interval: next_interval(good.stability) | ||
Learning : - easy_interval: should be at least 1 day more than good_interval | ||
} | ||
|
||
state Relearning { | ||
Relearning : Same scheduling as Learning. | ||
} | ||
|
||
state Review { | ||
Review : - generate card next DS,next_ds(s, last_d, last_s, retrievability) | ||
Review : - hard_interval: next_interval(s.hard.stability); | ||
Review : - good_interval: should be at least 1 day more than hard_interval | ||
Review : - easy_interval: should be at least 1 day more than good_interval | ||
} | ||
|
||
|
||
|
||
' 定义状态转换 | ||
[*] --> New | ||
New -d-> Learning : again, hard, good | ||
New -d-> Review : easy | ||
|
||
Relearning --> Relearning : again, hard | ||
Relearning -u-> Review : good, easy | ||
Learning --> Learning : again, hard | ||
Learning -u-> Review : good, easy | ||
|
||
|
||
Review --> Relearning : again | ||
Review --> Review : hard, good, easy | ||
|
||
|
||
|
||
' 使用hidden语法来帮助布局 | ||
' New -[hidden]-> Relearning | ||
Learning -[hidden]l-> Relearning | ||
|
||
@enduml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
@startuml class_diagram.png | ||
|
||
class FSRSAlgorithm { | ||
- param: FSRSParameters | ||
- intervalModifier | ||
- seed? | ||
+ constructor(param: Partial<FSRSParameters>) | ||
+ init_ds(s: SchedulingCard): void | ||
+ next_ds(s: SchedulingCard, last_d: number, last_s: number, retrievability: number): void | ||
+ init_stability(g: number): number | ||
+ init_difficulty(g: number): number | ||
+ apply_fuzz(ivl: number) | ||
+ next_interval(s: number): int | ||
+ next_difficulty(d: number, g: number): number | ||
+ constrain_difficulty(difficulty: number) | ||
+ mean_reversion(init: number, current: number): number | ||
+ next_recall_stability(d: number, s: number, r: number, g: Rating): number | ||
+ next_forget_stability(d: number, s: number, r: number): number | ||
+ current_retrievability(t: number, s: number): number | ||
} | ||
|
||
' 定义枚举类型 | ||
enum StateType { | ||
New | ||
Learning | ||
Review | ||
Relearning | ||
} | ||
|
||
enum RatingType { | ||
Again | ||
Hard | ||
Good | ||
Easy | ||
} | ||
|
||
' 定义类 | ||
interface Rating { | ||
+ Again: RatingType = 1 | ||
+ Hard: RatingType | ||
+ Good: RatingType | ||
+ Easy: RatingType | ||
} | ||
|
||
interface State { | ||
+ New: StateType = 0 | ||
+ Learning: StateType | ||
+ Review: StateType | ||
+ Relearning: StateType | ||
} | ||
|
||
interface ReviewLog { | ||
+ rating: Rating | ||
+ state: State | ||
+ elapsed_days: number | ||
+ scheduled_days: number | ||
+ review: Date | ||
} | ||
|
||
interface RecordLogItem{ | ||
card: Card, log: ReviewLog | ||
} | ||
interface RecordLog { | ||
+ Again: RecordLogItem | ||
+ Hard: RecordLogItem | ||
+ Good: RecordLogItem | ||
+ Easy: RecordLogItem | ||
} | ||
|
||
interface Card { | ||
+ due: Date | ||
+ stability: number | ||
+ difficulty: number | ||
+ elapsed_days: number | ||
+ scheduled_days: number | ||
+ reps: number | ||
+ lapses: number | ||
+ state: State | ||
+ last_review?: Date | ||
} | ||
|
||
interface CardInput { | ||
+ due: Date | ||
+ stability: number | ||
+ difficulty: number | ||
+ elapsed_days: number | ||
+ scheduled_days: number | ||
+ reps: number | ||
+ lapses: number | ||
+ state: StateType | State | ||
+ last_review?: Date | ||
} | ||
|
||
interface DateInput { | ||
+ value: Date | number | string | ||
} | ||
|
||
interface FSRSParameters { | ||
+ request_retention: number | ||
+ maximum_interval: number | ||
+ w: number[] | ||
+ enable_fuzz: boolean | ||
} | ||
|
||
' 关联关系 | ||
State -- StateType | ||
Rating -- RatingType | ||
Card <|-- CardInput | ||
RecordLogItem --> ReviewLog | ||
RecordLogItem --> Card | ||
RecordLog --> RecordLogItem | ||
ReviewLog --> Rating | ||
ReviewLog --> State | ||
DateInput --|> Date | ||
|
||
|
||
|
||
@enduml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
@startuml models | ||
|
||
' 定义枚举类型 | ||
enum StateType { | ||
New | ||
Learning | ||
Review | ||
Relearning | ||
} | ||
|
||
enum RatingType { | ||
Again | ||
Hard | ||
Good | ||
Easy | ||
} | ||
|
||
' 定义类 | ||
interface Rating { | ||
+ Again: RatingType = 1 | ||
+ Hard: RatingType | ||
+ Good: RatingType | ||
+ Easy: RatingType | ||
} | ||
|
||
interface State { | ||
+ New: StateType = 0 | ||
+ Learning: StateType | ||
+ Review: StateType | ||
+ Relearning: StateType | ||
} | ||
|
||
interface ReviewLog { | ||
+ rating: Rating | ||
+ state: State | ||
+ elapsed_days: number | ||
+ scheduled_days: number | ||
+ review: Date | ||
} | ||
|
||
interface RecordLog { | ||
+ Again: { card: Card, log: ReviewLog } | ||
+ Hard: { card: Card, log: ReviewLog } | ||
+ Good: { card: Card, log: ReviewLog } | ||
+ Easy: { card: Card, log: ReviewLog } | ||
} | ||
|
||
interface Card { | ||
+ due: Date | ||
+ stability: number | ||
+ difficulty: number | ||
+ elapsed_days: number | ||
+ scheduled_days: number | ||
+ reps: number | ||
+ lapses: number | ||
+ state: State | ||
+ last_review?: Date | ||
} | ||
|
||
interface CardInput { | ||
+ due: Date | ||
+ stability: number | ||
+ difficulty: number | ||
+ elapsed_days: number | ||
+ scheduled_days: number | ||
+ reps: number | ||
+ lapses: number | ||
+ state: StateType | State | ||
+ last_review?: Date | ||
} | ||
|
||
interface DateInput { | ||
+ value: Date | number | string | ||
} | ||
|
||
interface FSRSParameters { | ||
+ request_retention: number | ||
+ maximum_interval: number | ||
+ w: number[] | ||
+ enable_fuzz: boolean | ||
} | ||
|
||
' 关联关系 | ||
State -- StateType | ||
Rating -- RatingType | ||
Card <|-- CardInput | ||
RecordLog --> ReviewLog | ||
RecordLog --> Card | ||
ReviewLog --> Rating | ||
ReviewLog --> State | ||
DateInput --|> Date | ||
|
||
@enduml |