商品の販売数の計算方法について
更新日: 2026/09/13

概要

本サービスの各コンテストでは、各会社の実際の販売数を決定するために、シェア配分と在庫制約を組み合わせた二段階のプロセスを採用しています。

第一段階では、価格、広告費、従業員数、前期からの価格変動、前期シェア率の 5 つの要素を考慮して各会社の販売シェア率を計算します。シェアの配分には 乗法的競争相互作用モデル / Multiplicative Competitive Interaction Model)を用い、各要素を市場平均に対する比率のべき乗で評価します。第二段階では、このシェア率と市場需要から潜在的販売数を算出し、在庫制約を考慮して実際の販売数を決定します。

第一段階:販売シェア率の計算

入力パラメータ

各会社 ii(全 nn 社)について、以下のデータを収集します:

  • PiP_i: 当期の販売価格
  • AiA_i: 当期の広告費
  • EiE_i: 当期の従業員数(期首人数に当期の採用・退職を反映した人数)
  • Pi,t−1P_{i,t-1}: 前期の販売価格(前期に販売実績がある場合のみ)
  • Si,t−1S_{i,t-1}: 前期(第 t−1t-1 期)における販売シェア率(前期の販売数 ÷ 全社の前期の販売数) また、製品ごと・期ごとに以下の係数が設定されています(係数の値は公開されません):
  • aa: 価格係数(a≥0a \geq 0)
  • bb: 広告係数(b≥0b \geq 0)
  • cc: 従業員係数(c≥0c \geq 0)
  • ε\varepsilon: 価格弾力性係数(ε≥0\varepsilon \geq 0)
  • ρ\rho: 前期シェア係数(0≤ρ≤10 \leq \rho \leq 1)

ステップ1:市場平均に対する比率

各要素について、全社の算術平均を求めます:

Pˉ=1n∑j=1nPj,Aˉ=1n∑j=1nAj,Eˉ=1n∑j=1nEj\bar{P} = \frac{1}{n} \sum_{j=1}^{n} P_j, \quad \bar{A} = \frac{1}{n} \sum_{j=1}^{n} A_j, \quad \bar{E} = \frac{1}{n} \sum_{j=1}^{n} E_j

会社 ii の各要素を平均に対する比率として表します:

NPi=PiPˉ,NAi=AiAˉ,NEi=EiEˉNP_i = \frac{P_i}{\bar{P}}, \quad NA_i = \frac{A_i}{\bar{A}}, \quad NE_i = \frac{E_i}{\bar{E}}

ステップ2:係数によるべき乗評価

比率を係数でべき乗し、f=min⁡(1n,0.001)f = \min\left(\frac{1}{n}, 0.001\right)としたうえで各要素の評価値を求めます。

FP(i)=max⁡(NPi,f)−a,FA(i)=max⁡(NAi b,f),FE(i)=max⁡(NEi c,f)F_P(i) = \max\left(NP_i, f\right)^{-a}, \quad F_A(i) = \max\left(NA_i^{\,b}, f\right), \quad F_E(i) = \max\left(NE_i^{\,c}, f\right)

ステップ3:前期からの価格変動(価格弾力性)

前期からの自社価格の変動率を求めます:

ri=PiPi,t−1r_i = \frac{P_i}{P_{i,t-1}}

次のいずれかに該当する場合は ri=1r_i = 1(影響なし)とします:

  • 前期の販売実績がない(前期の販売数が 00、または前期の販売価格が 00)
  • 途中参加などで前期のデータが存在しない
  • 第 1 期(全社が該当)

変動率の評価値を求めます。

FR(i)=ri−εF_R(i) = r_i^{-\varepsilon}

ステップ4:総合係数の計算と正規化

4つの評価値を乗算して、会社 ii の総合係数を求めます:

Ci=FP(i)×FA(i)×FE(i)×FR(i)C_i = F_P(i) \times F_A(i) \times F_E(i) \times F_R(i)

すべての会社の総合係数の合計で割り、当期のシェア率を正規化します:

Si,tcurrent=Ci∑j=1nCjS_{i,t}^{\text{current}} = \frac{C_i}{\sum_{j=1}^{n} C_j}

ステップ5:前期シェア率との混合

前期シェア率と当期シェア率を係数 ρ\rho で混合して、最終的なシェア率を決定します:

Si,t=ρ⋅Si,t−1+(1−ρ)⋅Si,tcurrentS_{i,t} = \rho \cdot S_{i,t-1} + (1 - \rho) \cdot S_{i,t}^{\text{current}}

特殊ケース(前期の販売実績がない場合):
全社の前期の販売数の合計が 00 の場合(第 1 期を含む)、すべての会社に均等なシェア率を前期シェア率として割り当てます:

Si,t−1=1nS_{i,t-1} = \frac{1}{n}

前期に販売実績のない会社が一部だけ存在する場合、その会社の Si,t−1S_{i,t-1} は 00 です。


第二段階:実際の販売数の決定

ステップ1:潜在的販売数の計算

製品ごとに設定された 1 社あたり需要量 DcompanyD_{\text{company}} に参加会社数を掛けたものを市場全体の需要量とします:

Dtotal=Dcompany×nD_{\text{total}} = D_{\text{company}} \times n

各会社の潜在的販売数は、シェア率を用いて計算されます:

Qipotential=⌊Dtotal×Si,t⌋Q_i^{\text{potential}} = \lfloor D_{\text{total}} \times S_{i,t} \rfloor

ステップ2:在庫制約下での販売数決定

各会社 ii の在庫数を IiI_i(期首在庫に当期の仕入を加えた数量)とします。実際の販売数は、反復アルゴリズムにより以下のように決定されます:
初期化:

Qireal=0∀iDremaining=DtotalQ_i^{\text{real}} = 0 \quad \forall i \quad D_{\text{remaining}} = D_{\text{total}}

反復プロセス:
残余需要が存在し、かつ在庫を持つ会社が存在する限り、以下を繰り返します:

  1. 在庫が残っている会社の集合を A\mathcal{A} とします:
A={i∣Ii>0}\mathcal{A} = \{i \mid I_i > 0\}
  1. 在庫を持つ会社の潜在的販売数の合計を計算:
QApotential=∑i∈AQipotentialQ_{\mathcal{A}}^{\text{potential}} = \sum_{i \in \mathcal{A}} Q_i^{\text{potential}}
  1. 各会社 i∈Ai \in \mathcal{A} に対して、需要シェアを計算:
ϕi=QipotentialQApotential\phi_i = \frac{Q_i^{\text{potential}}}{Q_{\mathcal{A}}^{\text{potential}}}
  1. 各会社が今回のイテレーションで販売する数量を決定:
ΔQi=min⁡(⌊ϕi×Dremaining⌋,Ii)\Delta Q_i = \min\left(\lfloor \phi_i \times D_{\text{remaining}} \rfloor, I_i\right)
  1. 実際の販売数と在庫を更新:
Qireal←Qireal+ΔQiIi←Ii−ΔQiQ_i^{\text{real}} \leftarrow Q_i^{\text{real}} + \Delta Q_i I_i \leftarrow I_i - \Delta Q_i
  1. 残余需要を更新:
Dremaining←Dremaining−∑i∈AΔQiD_{\text{remaining}} \leftarrow D_{\text{remaining}} - \sum_{i \in \mathcal{A}} \Delta Q_i

終了条件:
以下のいずれかの条件を満たした場合、反復を終了します:

  • Dremaining=0D_{\text{remaining}} = 0
  • A=∅\mathcal{A} = \emptyset
  • QApotential=0Q_{\mathcal{A}}^{\text{potential}} = 0
  • ∑i∈AΔQi=0\sum_{i \in \mathcal{A}} \Delta Q_i = 0

この反復により、在庫切れの会社が取りこぼした需要は、在庫の残っている会社に潜在的販売数の比率で再配分されます。


結論:各会社の実際の販売数

上記のアルゴリズムの実行後、各会社 ii の実際の販売数は以下となります:

Qireal\boxed{Q_i^{\text{real}}}

この値が、第 tt 期における会社 ii の最終的な販売数として記録され、翌期の Si,tS_{i,t} および Pi,tP_{i,t} の算出に用いられます。