ここは数学OSの「理解の停滞 → 別視点 → 理解回復」という中核ループを成立させるための 最重要インターフェース設計です。
NegotiatorSelector(説得者選択)と ProfileManager(学習者モデル)がどう連携するかを、OSレベルの仕様として完全に設計します。

以下は Roblox Studio でそのまま実装できるレベルで、かつあなたの「制度OS」思想に沿った構造です。


📘 数学OS:NegotiatorSelector × ProfileManager 連携仕様(完全版)

🎯 目的

  • 学習者が「理解できない」を選んだ瞬間、
    ProfileManager が学習者の状態を提供し、
    NegotiatorSelector が最適な説得者を選ぶ
  • 説得者の効果が出たら、
    ProfileManager が学習者の理解スタイルを更新する

つまり、
ProfileManager = 学習者の状態データベース
NegotiatorSelector = 状態に応じて説得者を選ぶ推論エンジン


🧩 1. データの流れ(Data Flow)

[StepRunner]
   ↓ (理解できない)
[ProfileManager] --(学習者プロファイル)--> [NegotiatorSelector]
   ↑                                           ↓
   ←---------(選ばれた説得者)-------------------

理解できたら:

[StepRunner] --(理解できた + 説得者タイプ)--> [ProfileManager]

🧱 2. NegotiatorSelector が必要とする情報

NegotiatorSelector は ProfileManager から次の情報を受け取る:

① learnerPreferredType

  • 学習者が最も理解しやすい説得者タイプ
  • 例:Concrete / Diagrammatic / Narrative …

② preferenceScores

  • 各タイプの理解成功回数
  • 例:{Concrete=3, Diagrammatic=1, Reverse=0, …}

③ history.usedNegotiators

  • 過去に使った説得者のログ
  • 同じ説得者の連続使用を避けるため

④ history.stepResponses

  • どのステップで理解が止まったか
  • 壁の種類推定に使う

⑤ currentStep

  • 今どの説明ステップにいるか
  • ステップごとの「壁の種類」も含む

🧭 3. NegotiatorSelector → ProfileManager の要求(API)

NegotiatorSelector は ProfileManager に次の関数を要求する:

■ getPreferredType(profile)

学習者の理解スタイルを返す。

■ getHistory(profile)

過去の説得者や反応を返す。

■ getPreferenceScores(profile)

各タイプのスコアを返す。

■ recordHistory(profile, stepId, response, negotiatorType)

理解できた/できないを記録。

■ updatePreference(profile, negotiatorType)

理解が回復したときに preference を更新。


🧠 4. NegotiatorSelector の内部処理(ProfileManager 連携版)

Step 1:壁の種類を推定(DetectWall)

  • currentStep の内容
  • learnerFeedback
  • history.stepResponses
    から壁の種類を推定。

Step 2:候補説得者を抽出(FilterCandidates)

  • Negotiators フォルダから
    trigger に WallType を含むものを抽出

Step 3:スコアリング(Scoring)

ProfileManager から得た情報を使ってスコアをつける:

条件 加点
negotiator.type == learnerPreferredType +1
negotiator.id not in history.usedNegotiators +2
negotiator.tags contains currentStep.topic +2
preferenceScores[negotiator.type] が低い +1(多様性確保)
ランダム性 +0〜1

Step 4:最適説得者を返す(PickBestNegotiator)


🔁 5. 理解できたときの連携(Feedback Loop)

学習者が「理解できた」を選んだ瞬間:

StepRunner → ProfileManager.updatePreference(negotiatorType)

さらに:

StepRunner → ProfileManager.recordHistory(stepId, "understood", negotiatorType)

これにより:

  • preference が更新され
  • growth.timeline に記録され
  • 次回の NegotiatorSelector の精度が上がる

🗂 6. Studio でのフォルダ構成(連携を前提にした構造)

MathOS
 ├─ LearnerModel
 │    ├─ ProfileManager
 │    ├─ LearnerProfileTemplate
 │    └─ DataStoreAdapter
 │
 ├─ Negotiators
 │    ├─ Concrete
 │    ├─ Diagrammatic
 │    ├─ Reverse
 │    ├─ Abstract
 │    ├─ Counterexample
 │    └─ Narrative
 │
 ├─ Protocol
 │    ├─ NegotiatorSelector
 │    ├─ StateMachine
 │    └─ StepRunner
 │
 └─ Problems

NegotiatorSelector は
ProfileManager を require して情報を取得する。


🌱 7. あなたの思想との一致

この連携仕様は、あなたの思想を完全に反映している:

  • 理解の停滞を状態として扱う(S1)
  • 別視点を制度化する(Negotiator Modules)
  • 学習者の成長を時系列で追跡する(growth.timeline)
  • 制度同士が連携して学習を進める(Selector × ProfileManager)
  • OSが学習者の“制度的プロファイル”を構築する

数学OSの「制度としての学習」がここで完成する。


次に進むなら…

  1. DetectWall(理解の壁分類器)を設計する
  2. NegotiatorSelector のスコアリング式を最適化する
  3. StepRunner の UI/UX を設計する
  4. 彩色数問題をこのプロトコルで実際に流すデモを作る

どれに進みますか。