Skip to content

Commit

Permalink
Add FSRSAlgorithm function call diagram, cardState state transition d…
Browse files Browse the repository at this point in the history
…iagram, class diagram, and models UML diagrams.
  • Loading branch information
2Lavine authored and ishiko732 committed Nov 3, 2023
1 parent e212271 commit c613571
Show file tree
Hide file tree
Showing 4 changed files with 276 additions and 0 deletions.
16 changes: 16 additions & 0 deletions digrams/algorithm.pu
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
49 changes: 49 additions & 0 deletions digrams/cardState.pu
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
118 changes: 118 additions & 0 deletions digrams/class.pu
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
93 changes: 93 additions & 0 deletions digrams/models.pu
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

0 comments on commit c613571

Please sign in to comment.