ps3_s_mn.gms : Parts Supply Problem w/ 3 Types w/ Monotonicity Constraint

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.

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


Small Model of Type : NLP


Category : GAMS Model library


Main file : ps3_s_mn.gms

$title Parts Supply Problem w/ 3 Types w/ Monotonicity Constraint (PS3_S_MN,SEQ=366)

$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.

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

option limCol = 0, limRow = 0;

Set i 'type of supplier' / 0, 1, 2 /;

Alias (i,j);

Parameter
   theta(i) 'efficiency'          / 0 0.1, 1 0.2, 2 0.3 /
   p(i)     'probability of type' / 0 0.2, 1 0.5, 2 0.3 /;

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"
   mn(i)   "monotonicity 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);

mn(i)..   x(i) =g= x(i+1);

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

Model SB4 / all /;

solve SB4 maximizing Util using nlp;

* The Case w/ alternative p(i)
p("0") = 0.30;
p("1") = 0.10;
p("2") = 0.60;
solve SB4 maximizing Util using nlp;

* The Case w/ alternative theta(i)
* Assumning the original p(i)
p("0") = 0.20;
p("1") = 0.50;
p("2") = 0.30;

* Assumning alternative theta(i)
theta("0") = 0.10;
theta("1") = 0.30;
theta("2") = 0.31;
solve SB4 maximizing Util using nlp;