マルチユーザー研究の構築
どのようにして2人の参加者を接続し、一方の行動がもう一方の画面に届くのでしょうか?
この手順は、クリック・バイ・クリックでのメカニクスをカバーしています:マルチユーザーモードの有効化、役割の割り当て、参加者の接続、そしてそれらを同期させる方法です。マルチユーザーデザインの使用タイミング、ベストプラクティス、既存の例としては、マルチユーザー実験デザインを参照してください。
以下の4つのステップは、実際に何をテストしているかに関係なく、すべてのマルチユーザー研究で同じです。それが機能するようになったら、「追加の例」のセクションで、3つの異なるデザインにわたって再利用される同じ4つのステップが示されます。
目次
前提知識
以下の用語を理解するためには、Labvancedに関する基本的な知識が推奨されます。具体的には、イベントの機能や変数の使い方です。
フレーム
試験の各瞬間に参加者が見るものを保持する構成要素です。
イベント
トリガーとアクションとは何か、そしてそれがどのように組み合わさって研究の論理を構築するか。
変数
変数とは何か、そして研究の中でどのように値を保存および更新するか。
スケルトンの設定
マルチ参加者モードの有効化
Labvancedの研究はデフォルトで1人の参加者に対して構築されます。マルチユーザーツール、Role_Id, Distribute Variable, 同期は、研究が複数の参加者で同時に実行されることを指示されるまで存在しません。
右の列で設定を開き、次に特別な機能の下でマルチユーザー研究をクリックして、Transformをクリックします。これにより、2つのフィールドが表示されます:Number of Participants(最小2)およびMaximum Parallel Sessions。これにより解除される設定の完全リストは、マルチユーザー研究を参照してください。
このクリックは元に戻すことができません(確認ダイアログ自体はTransform Permanentlyとラベル付けされています)。まず参加者の数を決定し、単一参加者バージョンが必要な場合は、事前に研究を複製してください。

Role_Idによる役割の割り当て
マルチ参加者モードがオンの状態でも、各参加者は依然として同一で判別できない実験のコピーを実行しています。まだ彼らを区別するものはありません。Role_Idは各参加者に行動できるアイデンティティを与え、個人情報を収集せずに、彼らの実験が異なることを開始することができます。
イベントを追加し、Trial and Frame Trigger → On Frame Start、次にControl Actions → Requirement Actions (If... Then... Else If)アクションを追加します:
- **要件を追加:**左側 →
Variable→ 選択Role_Id; 比較 →equal; 右側 →Constant Value→Number→1 - **次に:**役割1に適用されるアクションを追加します。たとえば、
Set Object Propertyでターゲット画像を表示します - **他の場合のケースを追加:**他のすべての役割に適用されるアクションを追加します

Distribute Variableによる参加者の接続
別のRole_Idは各参加者に異なるコンテンツを提示できますが、まだ彼らの間で情報を移動させることはできません;各参加者の実験は依然として隔離された状態で実行されています。Distribute Variableは、実験の1人の参加者から別の参加者の実験に値を押し出す唯一のアクションであり、これが実際に研究を横並びではなく共有されたものと感じさせるものです。
デザインに合ったトリガー、たとえばButton Click TriggerまたはEnter on Input Triggerで、Variable Actions → Distribute Variable Actionを追加します:
- **値を分配先:**すべての参加者または選択した参加者
- **ターゲット変数と値を選択:**受信参加者の画面上の変数と、それを設定するべき値
- **ブロック:**同時に同じターゲット変数に書き込む可能性のある参加者が1人以上いる場合は、これをオンにします

priceArrayをターゲットにし、ブロックが有効で、デバウンスレート制限。 参加者を同期させる
参加者はそれぞれ自分のペースで研究を進めることができません。同期ポイントがないと、一人の参加者が、その参加者が待機している値が配布される前に次のフレームに進むことがあり、他の参加者の応答ではなく、空白または未完成の状態を見ることになります。
参加者が同調する必要があるフレームでは、たとえば、どちらも他の参加者が応答するまで進まないように、フレーム設定でSync Frame Startを有効にします。すべての参加者が到着するまで、そのフレームで待機します。

追加の例
上記の4つのステップは変わりません。変わるのは、何が分配され、同期ポイントがどこにあるかです。3つの作業バリエーションがあり、最も簡単なものから始めます:
- 共有カウンター:2人の参加者間で同期された1つの値を保持する最小限のバージョン
- ディレクター・マッチャー記述タスク:一人の参加者が説明し、もう一人が特定する
- ターン制の提案と応答:一人の参加者が提案し、もう一人が受け入れるか拒否する
共有カウンター
スケルトンの最も単純なバージョン:両方の参加者が同じ運用総計を見て、どちらか一方がそれに追加できます。
- **Role_Id:**ここでは必要ありません。両方の参加者が同じ行動を取るためです。
- 分配:
Button Click Triggerで値をすべての参加者に分配し、ターゲット変数はSharedCount、値 =SharedCount + 1。 - **同期:**試験の境界がないため、必要ありません。
これはマルチ参加者モードとDistribute Variableが機能していることを確認させるものであり、その後、役割ベースのロジックを追加します。
ディレクター・マッチャー記述タスク
参照コミュニケーションタスク:一人の参加者(ディレクター)がターゲットアイテムを説明し、もう一人(マッチャー)が候補のセットからそれを特定します。
- Role_Id:
Role_Id1はターゲット画像とテキスト入力が表示されます。Role_Id2は候補画像のみが表示され、ターゲットはありません。 - **分配:**ディレクターのEnterキーのトリガーで、テキスト値をマッチャーの画面上にある
Description変数に分配します。Blockは、一度に1つの説明のみが飛んでいるべきために有効にします。 - **同期:**次のトライアルフレームで
Sync Frame Startを有効にし、ディレクターがマッチャーが候補を選択する前に進まないようにします。
これは画像記述デモの背後にある同じ構造です。
ターン制の提案と応答
経済的交換:一人の参加者が共有された金額の分割を提案し、もう一人がそれを受け入れるか拒否します。
- Role_Id:
Role_Id1は提案された分割の入力が表示されます。Role_Id2は提案が到着するまで何も表示されません。 - **分配:**提案者の提出トリガーで、提案された値を応答者の画面の
Offer変数に分配します。 - **同期:**結果フレームで
Sync Frame Startを有効にし、応答者が応答する前にどちらの参加者も結果を目にしないようにします。
これはウルティマトムゲームの背後にある同じ構造です。
このパターンの実際の例:手動で入力した量の代わりにランダムに選ばれた量を使用するもので、Role_Idが1に等しい場合、Draw Random Numberアクションをトリガー(50から150までの離散一様抽選を行い、amountToSplitに保存)、続けてDistribute VariableがamountToSplitをすべての参加者に送信し、Blockを有効にします。

amountToSplitに実行し、その後Distribute VariableがBlockを有効にしてすべての参加者に送信します。