次の問題について、特定のプラットフォーム/ソフトウェアから切り離された概念的な入力を探しています。
R を、最初の列がオブジェクト ID を示し、2 番目の列がカテゴリ (たとえば、1 から 10) を示す Nx2 行列とします。
ID | Category
1 | 1
2 | 1
3 | 1
4 | 2
5 | 2
6 | 3
7 | 3
8 | 3
9 | 3
. | .
. | .
さらに、各カテゴリに番号を割り当てる行列 C があるとします。たとえば、次のようになります。
Category | Number
1 | 0.5
2 | 0.2
3 | 0.9
. | .
. | .
したがって、マトリックス R の各オブジェクトに対して、マトリックス C に従って数値をマッピングできます (たとえば、カテゴリ = 1 で ID=1 の場合、マトリックス C による数値は 0.5 です)。
ここでの目標は、事前に指定されたカテゴリ範囲全体でオブジェクトをランダム化し、列番号(対応するカテゴリにマップされる) の全体平均を一定に保つアルゴリズムを作成することです。
たとえば、カテゴリ範囲が 2 として定義されているとします。これは、カテゴリ 1 の各オブジェクトがカテゴリ 1 にとどまるか、ランダムにカテゴリ 2 に移動するか、さらにはカテゴリ 3 に移動できることを意味します。同様に、選択されたカテゴリ範囲を持つカテゴリ 3 のオブジェクト1 のうち、カテゴリ 2 に下げるか、カテゴリ 3 にとどまるか、カテゴリ 4 に上げるかのいずれかです)。オブジェクトが別のカテゴリに移動すると、行列 C に従って新しい番号が割り当てられ、列番号全体の平均に影響を与えます。
ただし、すべてのスワップは純粋にランダムに実行する必要があり、ランダム化後の列番号の平均が最初からのものと等しいという追加の制約があります。
任意の入力をいただければ幸いです。