ps10_s.gms : Parts Supply Problem w/ 10 Types and w/ 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 :** ps10_s.gms

```
$title Parts Supply Problem w/ 10 Types & w/ Asymmetric Information (PS10_S,SEQ=368)
$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' / 0*9 /;
Alias (i,j);
Parameter
theta(i) 'efficiency'
p(i) 'probability of type';
theta(i) = ord(i)/card(i);
p(i) = 1/card(i);
Scalar ru 'reservation utility' / 0 /;
* Definition of Primal/Dual Variables
Positive Variable
x(i) "quality"
b(i) "maker's revenue"
w(i) "price";
Variable Util "maker's utility";
Equation
obj "maker's utility function"
rev(i) "maker's revenue function"
pc(i) "participation constraint"
licd(i) "incentive compatibility constraint";
obj.. Util =e= sum(i, p(i)*(b(i) - w(i)));
rev(i).. b(i) =e= x(i)**(0.5);
pc(i).. w(i) - theta(i)*x(i) =g= ru;
licd(i).. w(i) - theta(i)*x(i) =g= w(i+1) - theta(i)*x(i+1);
* Setting Lower Bounds on Variables to Avoid Division by Zero
x.lo(i) = 0.0001;
Model SB_lic / all /;
solve SB_lic maximizing Util using nlp;
File sol / solution_lic.csv /;
put sol;
sol.pc = 5;
sol.pw = 32767;
put "type" "x.l" "w.l" "b.l" "prob" "theta"/;
loop(i, put i.tl x.l(i):20:10 w.l(i):20:10 b.l(i):20:10 p(i):20:10 theta(i):20:10/;);
put "Util" Util.l:20:10;
put "Shadow price of IC(i,j)" /;
put "True type"; put "LICD" /;
loop(i, put i.tl licd.m(i):20:10; put /;);
```