ここが数学OSの“頭脳”になる部分です。
NegotiatorSelector は、「理解できない」という信号を受け取ったときに、どの説得者モジュールを呼ぶかを決めるアルゴリズムです。
数学OSの思想に沿って、
- 状態を外部化し
- 理解の壁を分類し
- 最適な説得者を選ぶ
という流れを、OSレベルのアルゴリズムとして完全に設計します。
🧠 NegotiatorSelector アルゴリズム(数学OS版)
🎯 目的
学習者が「理解できない」を選んだとき、
理解の壁の種類を推定し、最適な説得者モジュールを選ぶ。
🧩 1. 入力(Inputs)
NegotiatorSelector は次の情報を受け取る:
① currentStep
- 今どの説明ステップにいるか
- 例:Step3(彩色数の直線→輪の変換)
② learnerFeedback
- 学習者の反応
"abstract_too_high"(抽象的すぎる)"too_many_steps"(手順が多い)"cannot_visualize"(イメージできない)"cannot_generalize"(一般化できない)"condition_unclear"(制約の意味が不明)"formula_confusing"(式の意味が不明)"other"(その他)
※ 学習者が明示しなくても、OSが推定してもよい。
③ history
- 過去にどの説得者を使ったか
- 同じ説得者を連続で使わないための情報
🧠 2. 出力(Output)
Negotiator モジュール 1つ
例:
Negotiator = {
id = "diagrammatic_cycle_closure",
type = "Diagrammatic",
message = "直線が輪になる瞬間をイメージしてみよう。",
diagram = { ... }
}
🧭 3. アルゴリズムの全体像
NegotiatorSelector は次の3段階で動く:
- 壁の分類(DetectWall)
- 候補の抽出(FilterCandidates)
- 最適な説得者の選択(PickBestNegotiator)
🧱 4. 壁の分類(DetectWall)
学習者の反応から「理解の壁」を分類する。
ルール例:
| learnerFeedback | 壁の種類(WallType) |
|---|---|
| abstract_too_high | ConcreteWall |
| cannot_visualize | DiagramWall |
| too_many_steps | ReverseWall |
| cannot_generalize | AbstractWall |
| condition_unclear | CounterexampleWall |
| formula_confusing | NarrativeWall |
| other | MixedWall |
🧲 5. 候補の抽出(FilterCandidates)
Negotiators フォルダから、
trigger に WallType が含まれるものだけを抽出する。
例:
candidates = allNegotiators.filter(
negotiator.trigger contains WallType
)
🧮 6. 最適な説得者の選択(PickBestNegotiator)
候補の中から、次の優先順位で選ぶ:
① まだ使っていない説得者を優先
if negotiator.id not in history then score += 2
② currentStep に対応した説得者を優先
(例:彩色数の「輪の閉じ方」なら Diagrammatic が強い)
if negotiator.tags contains currentStep.topic then score += 2
③ 学習者の理解スタイル(optional)
(もし OS が学習者の傾向を記録している場合)
if negotiator.type == learnerPreferredType then score += 1
④ ランダム性を少し入れる
同じパターンに偏らないようにする。
🧠 7. 疑似コード(Pseudo-code)
function NegotiatorSelector.select(currentStep, learnerFeedback, history)
WallType = DetectWall(learnerFeedback)
candidates = FilterCandidates(WallType)
bestScore = -inf
bestNegotiator = nil
for n in candidates do
score = 0
if n.id not in history then
score += 2
end
if n.tags contains currentStep.topic then
score += 2
end
if n.type == learnerPreferredType then
score += 1
end
score += random(0,1)
if score > bestScore then
bestScore = score
bestNegotiator = n
end
end
return bestNegotiator
end
🗂 8. Studio での配置
MathOS
├─ Negotiators
│ ├─ Concrete
│ │ ├─ example1
│ │ └─ example2
│ ├─ Diagrammatic
│ ├─ Reverse
│ ├─ Abstract
│ ├─ Counterexample
│ └─ Narrative
└─ Protocol
├─ NegotiatorSelector (ModuleScript)
└─ StateMachine
NegotiatorSelector は
Negotiators フォルダを走査して候補を集める。
🌱 あなたへ
このアルゴリズムは、あなたの思想である
- 理解の壁を外部化する
- 制度として分類する
- 別視点を制度化する
- 学習の停滞を状態として扱う
をそのまま数学OSの中核に落とし込んだものです。
次に進むなら:
- 彩色数問題をこのプロトコルで実際に流すデモを作る
- Negotiator モジュールのテンプレートを作る
- 学習者の理解スタイル(learnerPreferredType)をどう記録するか設計する
どれに進みますか。