*==>choi.gms
$offsymxref offsymlist offuellist offuelxref
$inlinecom /* */
/* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
In this problem, a Nash price equilibrium is sought.
Different brand names of analgesics are available, with
different levels of aspirin, aspirin substitutes, caffeine,
and added ingredients. Demand is determined by the consumers'
disutility function, so that the demand for brand I is the
sum over J of the probability that consumer J will buy brand I.
Each brand name tries to maximize profit
by setting its price at an optimal level (computed assuming
all other prices constant).
Reference:
S. Chan Choi,Wayne S. DeSarbo, and Patrick T. Harker,
"Product Positioning Under Price Competition", Management Science
(36 no. 2) 1990, pp 175-199.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
sets
I / 1 * 30 /, /* subjects or consumers */
J / 1 * 14 /, /* brand names */
N / asp, asub, caff, aing /; /* coordinates to describe brands */
alias (J,JJ);
scalars
chi / 3 /, /* randomness increases as chi decreases */
M, /* number of subjects */
Kdemand, /* demand for no drug */
dsum,
K / 1 /; /* constant term in probability function */
/* representing "no purchase" option */
parameter
x(J,N), /* brand J's amount of N */
y(I,N), /* subject I's preference for N */
vv(I), /* subject I's importance weight for every N */
w(I),
b(I), /* constant term in DU eqn */
C(J), /* average cost of production */
p_init(J), /* initial prices for brand J */
p_solu(J), /* solution from Choi, DeSarbo, & Harker */
demand(J), /* computed demand for brand J */
/* DU is a computed param, such that
-chi(DU_{ij}) = w_i*p_j + DU_{ij} */
DU(I,J); /* matrix in disutility function */
$include 'choi.dat'
M = card(I);
* DU(I,J) = -chi * (sum (N, v(I,N)*power(x(J,N)-y(I,N), 2)) + b(I));
DU(I,J) = -chi * (vv(I)*sum (N, power(x(J,N)-y(I,N), 2)) + b(I));
w(I) = -chi * w(I);
positive variable
p(J); /* price of brand J */
equations
mprofit(J); /* marginal profit for brand J */
mprofit (J) ..
0
=g=
(1/M) *
( sum(I,
( exp(w(I)*p(J)+DU(I,J)) / ( K + sum(JJ, exp(w(I)*p(JJ)+DU(I,JJ)))) )
* (1 + (p(J)-C(J)) * w(I)
* ( K + sum(JJ$(ord(J) ne ord(JJ)), exp(w(I)*p(JJ)+DU(I,JJ))) )
/ ( K + sum(JJ, exp(w(I)*p(JJ)+DU(I,JJ))) )
)
))
model choi / mprofit.p /;
option limrow=0;
option limcol=0;
option iterlim=50000;
option reslim=120;
file out / choi.out /;
put out;
p.l(J) = C(J) + 0.01;
* p.l(J) = p_init(J);
* p.l(J) = p_solu(J);
p.lo(J) = C(J);
p.up(J) = 3*C(J);
p.fx("8") = .199; /* generic drug, price fixed at $1.99 */
solve choi using mcp;
Kdemand = sum(I, K/ ( K + sum(JJ, exp(w(I)*p.l(JJ)+DU(I,JJ))) ) );
demand(J) =
sum(I, exp(w(I)*p.l(J)+DU(I,J)) /
( K + sum(JJ, exp(w(I)*p.l(JJ)+DU(I,JJ))) ));
dsum = sum(J,demand(J)) + Kdemand;
put "brand demand % share $ cost price profit" /;
put "----- ------- ----- ------ ------ ------" /;
put "K ", Kdemand:10:5, (100*Kdemand/dsum):11:2 /;
loop (J,
put J.tl:6, demand(J):10:5, (100*demand(J)/dsum):11:2,
(10*C(J)):10:2, (10* p.l(J)):9:2,
(demand(J)*10*(p.l(J)-C(J))):10.2 /;
);