*==>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 /; );