ps2_f_eff.gms : Parts Supply Problem w/ Efficient Type w/o Asymmetric Information

Description

Hideo Hashimoto, Kojun Hamada, and Nobuhiro Hosoe, "A Numerical Approach
to the Contract Theory: the Case of Adverse Selection", GRIPS Discussion
Paper 11-27, National Graduate Institute for Policy Studies, Tokyo, Japan,
March 2012.

http://www.grips.ac.jp/r-center/en/discussion_papers/11-27/

Keywords: nonlinear programming, contract theory, principal-agent problem,
          adverse selection, parts supply problem


References

  • Hashimoto, H, Hamada, K, and Hosoe, N, A Numerical Approachto the Contract Theory: The Case of Adverse Selection. GRIPS Discussion Papers, National Graduate Institute for Policy Studies, 2012.
  • Itoh, H, A Course in Contract Theory. Yuhikaku, Tokyo, 2003.

Small Model of Type : NLP


Category : GAMS Model library


Main file : ps2_f_eff.gms

$title Parts Supply Problem w/ Efficient Type w/o Asymmetric Information (PS2_F_eff,SEQ=360)

$onText
Hideo Hashimoto, Kojun Hamada, and Nobuhiro Hosoe, "A Numerical Approach
to the Contract Theory: the Case of Adverse Selection", GRIPS Discussion
Paper 11-27, National Graduate Institute for Policy Studies, Tokyo, Japan,
March 2012.

http://www.grips.ac.jp/r-center/en/discussion_papers/11-27/

Keywords: nonlinear programming, contract theory, principal-agent problem,
          adverse selection, parts supply problem
$offText

option limCol = 0, limRow = 0;

Set i 'type of supplier' / eff /;

Parameter theta(i) 'efficiency' / eff 0.2 /;

* Definition of Primal/Dual Variables
Positive Variable
   x(i) "quality"
   b(i) "maker's revenue"
   c(i) "cost";

Variable Util "maker's utility";

Equation
   obj    "maker's utility function"
   rev(i) "maker's revenue function"
   pc(i)  "participation constraint";

obj..    Util =e= sum(i, (b(i) - c(i)));

rev(i).. b(i) =e= x(i)**(0.5);

pc(i)..  c(i) - theta(i)*x(i) =e= 0;

* Setting Lower Bounds on Variables to Avoid Division by Zero
x.lo(i) = 0.0001;

Model FB1 / all /;

solve FB1 maximizing Util using nlp;

Parameter
   db(i) 'derivative of b'
   w(i)  'price';

db(i) = 0.5*x.l(i)**(-0.5);
w(i)  = c.l(i);

display x.l, b.l, c.l, util.l, db, w;