# Problem Set 11 -----------------------------------------------------------

# Question 1 (PRIMAL) --------------------------------------------------------------


rm(list=ls()) # will remove ALL objects

### Mixed Complementarity Problem [MCP]

#system of equations to solve



fcnuMax = function(inputs){
  
  PY = 1 # normalized price via Walras's law
  
  YD=inputs[1]
  XD=inputs[2]
  lam1=inputs[3]
  PX=inputs[4]
  r=inputs[5]
  w=inputs[6]
  KY=inputs[7]
  LY=inputs[8]
  KX=inputs[9]
  LX=inputs[10]
  
  
  
  
  # Consumer Problem -------------------------------------------
  
  
  res1=RO*(YD^(RO-1))-lam1*PY
  res2=RO*(XD^(RO-1))-lam1*PX
  res3=r*K+w*L-PY*YD-PX*XD
  
  
  # Producer Problem  -------------------------------------------
  
  
  res4=ALPHA*A*PY*(KY^(ALPHA-1))*(LY^BETA)-r
  res5=BETA*A*PY*(KY^ALPHA)*(LY^(BETA-1))-w
  res6=GAMA*B*PX*(KX^(GAMA-1))*(LX^TETA)-r
  res7=TETA*B*PX*(KX^GAMA)*(LX^(TETA-1))-w
  
  # Market Clearing  -------------------------------------------
  
  
  res8=A*(KY^ALPHA)*(LY^BETA)-YD #ignore due to Walras' Law
  res9=B*(KX^GAMA)*(LX^TETA)-XD
  res10=K-KY-KX
  res11=L-LY-LX
  
  
  
  return(c(res1,res2,res3,res4,res5,res6,res7,res9,res10,res11)) 
  
}


# parameters

SIGMA=2 
RO=(SIGMA-1)/SIGMA
A=8
B=6
ALPHA=0.3
BETA=0.7
GAMA=0.6
TETA=0.4
K=100
L=100


library("rootSolve") #load "rootSolve" Package

# Order YD XD lam1 PX r w KY LY KX LX
stval=c(469.35, 275.98, 0.02, 1.3, 3.57, 4.73, 39.47, 69.53, 60.53, 30.47)
solUFOC=multiroot(fcnuMax, stval)
solinput=solUFOC$root
startF = paste(round(solinput,2), collapse=", ")
startF
## [1] "469.35, 275.98, 0.02, 1.3, 3.57, 4.73, 39.47, 69.53, 60.53, 30.47"
PY=1
YDstar=solinput[1];YDstar
## [1] 469.3532
XDstar=solinput[2];XDstar
## [1] 275.9757
lam1star=solinput[3];lam1star
## [1] 0.02307917
PXstar=solinput[4];PXstar
## [1] 1.304111
rstar=solinput[5];rstar
## [1] 3.567477
wstar=solinput[6];wstar
## [1] 4.725084
KYstar=solinput[7];KYstar
## [1] 39.46934
LYstar=solinput[8];LYstar
## [1] 69.53257
KXstar=solinput[9];KXstar
## [1] 60.53066
LXstar=solinput[10];LXstar
## [1] 30.46743
YS =  A*(KYstar^ALPHA)*(LYstar^BETA); YS
## [1] 469.3532
YTrade = YS - YDstar; YTrade #should be zero since identical countries
## [1] 7.389644e-13
XS =  B*(KXstar^GAMA)*(LXstar^TETA); XS
## [1] 275.9757
XTrade = XS - XDstar; XTrade #should be zero since identical countries
## [1] -5.684342e-14
# Question 1 (DUAL) --------------------------------------------------------------


rm(list=ls()) #will remove ALL objects
### Mixed Complementarity Problem [MCP]
#system of equations to solve



fcnuMin = function(inputs){
  
  PY = 1 # normalized price via Walras's law
  
  YD = inputs[1]
  XD = inputs[2]
  lam1 = inputs[3]
  YS = inputs[4]
  XS = inputs[5]
  PX = inputs[6]
  r = inputs[7]
  w = inputs[8]
  
  
  # Consumer Problem -------------------------------------------
  
  
  
  res1 = RO*(YD^(RO-1))-lam1*PY
  res2 = RO*(XD^(RO-1))-lam1*PX
  res3 = r*K+w*L-PY*YD-PX*XD
  
  
  
  # Producer Problem  -------------------------------------------
  
  res4 = PY-(1/A)*PHI*(r^ALPHA)*(w^BETA)
  res5 = PX-(1/B)*OMEGA*(r^GAMA)*(w^TETA)
  
  # Market Clearing  -------------------------------------------
  
  res6 = XS-XD  
  res7 = YS-YD #ignore due to Walras' Law
  
  KY = (YS/A)*(((w/r)*(ALPHA/BETA))^BETA);KY
  LY = (YS/A)*(((r/w)*(BETA/ALPHA))^ALPHA);LY
  KX = (XS/B)*(((w/r)*(GAMA/TETA))^TETA);KX
  LX = (XS/B)*(((r/w)*(TETA/GAMA))^GAMA);LX
  
  res8 = K-KY-KX
  res9 = L-LY-LX
  
  
  return(c(res1,res2,res3,res4,res5,res6,res8,res9)) 
}


# parameters
 
SIGMA = 2 
RO = (SIGMA-1)/SIGMA
A = 8
B = 6
ALPHA = 0.3
BETA = 0.7
GAMA = 0.6
TETA = 0.4
K = 100
L = 100
PHI = ((ALPHA/BETA)^BETA)+((BETA/ALPHA)^ALPHA)
OMEGA = ((GAMA/TETA)^TETA)+((TETA/GAMA)^GAMA)



library("rootSolve") #load "rootSolve" Package


# Order YD XD lam1 YS XS PX R W
stval = c(469.35, 275.98, 0.02, 39.47, 69.53, 1.3, 3.57, 4.73 )
solUFOC = multiroot(fcnuMin, stval)
solinput = solUFOC$root
startF = paste(round(solinput,2), collapse=", ")
startF
## [1] "469.35, 275.98, 0.02, 469.35, 275.98, 1.3, 3.57, 4.73"
YDstar = solinput[1];YDstar
## [1] 469.3532
XDstar = solinput[2];XDstar
## [1] 275.9757
lam1star = solinput[3];lam1star
## [1] 0.02307917
YSstar = solinput[4];YSstar
## [1] 469.3532
XSstar = solinput[5];XSstar
## [1] 275.9757
PXstar = solinput[6];PXstar
## [1] 1.304111
rstar = solinput[7];rstar
## [1] 3.567477
wstar = solinput[8];wstar
## [1] 4.725084
KY = (YSstar/A)*(((wstar/rstar)*(ALPHA/BETA))^BETA);KY
## [1] 39.46934
LY = (YSstar/A)*(((rstar/wstar)*(BETA/ALPHA))^ALPHA);LY
## [1] 69.53257
KX = (XSstar/B)*(((wstar/rstar)*(GAMA/TETA))^TETA);KX
## [1] 60.53066
LX = (XSstar/B)*(((rstar/wstar)*(TETA/GAMA))^GAMA);LX
## [1] 30.46743
YT = YSstar-YDstar;YT
## [1] 1.431886e-10
XT = XSstar-XDstar;XT
## [1] 0
# Question 2 (PRIMAL) --------------------------------------------------------------


rm(list=ls()) #will remove ALL objects

### Mixed Complementarity Problem [MCP]

#system of equations to solve


fcnuMax = function(inputs){
  
  PY = 1 # normalized price via Walras's law
  
  YD=inputs[1]
  XD=inputs[2]
  lam1=inputs[3]
  PX=inputs[4]
  r=inputs[5]
  w=inputs[6]
  KY=inputs[7]
  LY=inputs[8]
  KX=inputs[9]
  LX=inputs[10]
  
  
  
  # Consumer Problem -------------------------------------------
  
  MPROFIT=PX*B*(KX^GAMA)*(LX^TETA)-r*KX-w*LX
  
  res1=RO*(YD^(RO-1))-lam1*PY
  res2=RO*(XD^(RO-1))-lam1*PX
  res3=r*K+w*L+MPROFIT-PY*YD-PX*XD
  
  
  # Producer Problem  -------------------------------------------
  
  
  NUM1 = -2*PX*(PY^(-1))-1
  NUM2 = (MPROFIT + r*K + w*L)
  DEN1 = ((PX^2)*(PY^(-1))+PX)^2
  DXP = NUM1*NUM2/DEN1
  DPX = (1/DXP)
  
  res4=ALPHA*A*PY*(KY^(ALPHA-1))*(LY^BETA)-r
  res5=BETA*A*PY*(KY^ALPHA)*(LY^(BETA-1))-w
  res6 = (PX + DPX*XD)*B*GAMA*(KX^(GAMA-1))*(LX^TETA)-r
  res7=(PX + DPX*XD)*B*TETA*(KX^GAMA)*(LX^(TETA-1))-w
  
  # Market Clearing  -------------------------------------------
  
  res8=A*(KY^ALPHA)*(LY^BETA)-YD #ignore due to Walras' Law
  res9=B*(KX^GAMA)*(LX^TETA)-XD
  res10=K-KY-KX
  res11=L-LY-LX
  
  
  return(c(res1,res2,res3,res4,res5,res6,res7,res9,res10,res11)) 
  
}


# parameters

SIGMA=2 
RO=(SIGMA-1)/SIGMA
A=8
B=6
ALPHA=0.3
BETA=0.7
GAMA=0.6
TETA=0.4
K=100
L=100


library("rootSolve") #load "rootSolve" Package


# YD XD lam1 PX r w KY LY KX LX
stval=c(695.83, 92.1, 0.02, 2.75, 2.73, 5.3, 76.46, 91.92, 23.54, 8.08)

solUFOC = multiroot(fcnuMax, stval)
solinput = solUFOC$root
startF = paste(round(solinput,2), collapse=", ")
startF
## [1] "695.83, 92.1, 0.02, 2.75, 2.73, 5.3, 76.46, 91.92, 23.54, 8.08"
YDstar = solinput[1];YDstar
## [1] 695.8262
XDstar = solinput[2];XDstar
## [1] 92.09625
lam1star = solinput[3];lam1star
## [1] 0.01895482
PXstar = solinput[4];PXstar
## [1] 2.748713
rstar = solinput[5];rstar
## [1] 2.730034
wstar = solinput[6];wstar
## [1] 5.299154
KYstar = solinput[7];KYstar
## [1] 76.46346
LYstar = solinput[8];LYstar
## [1] 91.91625
KXstar = solinput[9];KXstar
## [1] 23.53654
LXstar = solinput[10];LXstar
## [1] 8.08375
YS =  A*(KYstar^ALPHA)*(LYstar^BETA); YS
## [1] 695.8262
YTrade = YS - YDstar; YTrade 
## [1] -2.721663e-09
XS = B*(KXstar^GAMA)*(LXstar^TETA); XS
## [1] 92.09625
XTrade = XS - XDstar; XTrade 
## [1] -3.128093e-10
# Question 2 (DUAL) --------------------------------------------------------------

PY = 1 # normalized price via Walras's law


# parameters 
ALPHA = 0.3
BETA = 0.7
GAMA = 0.6
TETA = 0.4
SIGMA = 2
K = 100
L = 100
A = 8
B = 6
RO = (SIGMA-1)/SIGMA

fcnUFOC = function(inputs){
  YD = inputs[1]
  XD = inputs[2]
  Lam = inputs[3]
  PX = inputs[4]
  XS = inputs[5]
  YS = inputs[6]
  r = inputs[7]
  w = inputs[8]
  
  
  KX = (XS/B)*((GAMA/TETA)^TETA)*((w/r)^TETA);KX
  LX = (XS/B)*((TETA/GAMA)^(1-TETA))*((r/w)^(1-TETA));LX
  
  MPROFIT = (PX*B*(KX^GAMA*LX^TETA))-r*KX-w*LX
  num1 = (PX^(RO/(RO-1))+PY^(RO/(RO-1)))^2
  den1 = (1/(RO-1))*(PX^(2/(RO-1))+PY^(RO/(RO-1))*PX^((2-RO)/(RO-1)))
  den2 = ((RO/(RO-1))*PX^(2/(RO-1)))
  den3 = MPROFIT+r*K+w*L
  
  
  # Consumer Problem -------------------------------------------
  
  res1 = ((SIGMA-1)/SIGMA) *(XD^(((SIGMA-1)/SIGMA)-1))-Lam*PX
  res2 = ((SIGMA-1)/SIGMA) *(YD^(((SIGMA-1)/SIGMA)-1))-Lam*PY
  res3 = (r*K)+(w*L) + MPROFIT -(PY*YD)-(PX*XD)
  
  
  # Producer Problem -------------------------------------------
  
  res4 = ((PX + XD*(num1/((den1-den2)*den3))))- ( ((r/B)*((GAMA/TETA)^TETA)*((w/r)^TETA))+((w/B)*((TETA/GAMA)^GAMA)*((r/w)^GAMA)))
  res5 = PY- (((r/A)*((ALPHA/BETA)^BETA)*((w/r)^BETA))+((w/A)*((BETA/ALPHA)^ALPHA)*((r/w)^ALPHA)))
  
  # Market Clearing -------------------------------------------
  
  res6 = XS - XD 
  
  res7 = K - ((YS/A)*((ALPHA/BETA)^BETA)*((w/r)^BETA)) -((XS/B)*((GAMA/TETA)^TETA)*((w/r)^TETA))
  res8 = L - ((YS/A)*((BETA/ALPHA)^(1-BETA))*((r/w)^(1-BETA)))-((XS/B)*((TETA/GAMA)^(1-TETA))*((r/w)^(1-TETA)))
  
  return(c(res1, res2, res3, res4, res5, res6, res7, res8)) 
}


library("rootSolve") #load "rootSolve" Package

stval = c(695.82,92.09,0.02307917,2.74, 92.09,695.8, 2.74,5.3)
solUFOC = multiroot(fcnUFOC, stval)
solinput = solUFOC$root
YDstar = solinput[1];YDstar 
## [1] 695.8262
XDstar = solinput[2];XDstar
## [1] 92.09625
Lamstar = solinput[3];Lamstar
## [1] 0.01895482
PXstar = solinput[4];PXstar 
## [1] 2.748713
XSstar = solinput[5];XSstar
## [1] 92.09625
YSstar = solinput[6];YSstar
## [1] 695.8262
rstar = solinput[7];rstar 
## [1] 2.730034
wstar = solinput[8];wstar
## [1] 5.299154
Ustar = YDstar^((SIGMA-1)/SIGMA)+XDstar^((SIGMA-1)/SIGMA);Ustar
## [1] 35.9752
KX = (XSstar/B)*((GAMA/TETA)^TETA)*((wstar/rstar)^TETA);KX
## [1] 23.53654
LX = (XSstar/B)*((TETA/GAMA)^(1-TETA))*((rstar/wstar)^(1-TETA));LX
## [1] 8.08375
KY = (YSstar/A)*((ALPHA/BETA)^BETA)*((wstar/rstar)^BETA);KY
## [1] 76.46346
LY = (YSstar/A)*((BETA/ALPHA)^(1-BETA))*((rstar/wstar)^(1-BETA));LY
## [1] 91.91625
YSstar = A*(KY^ALPHA)*(LY^BETA);YSstar
## [1] 695.8262
XSstar = B*(KX^GAMA)*(LX^TETA);XSstar
## [1] 92.09625
# Question 3 (PRIMAL) --------------------------------------------------------------

rm(list=ls()) # will remove ALL objects

### Mixed Complementarity Problem [MCP]

#system of equations to solve


fcnuMax = function(inputs){
  
  PY = 1 # normalized price via Walras's law
  PX = 1.304111
  
  YD = inputs[1]
  XD = inputs[2]
  lam1 = inputs[3]
  r = inputs[4]
  w = inputs[5]
  KY = inputs[6]
  LY = inputs[7]
  KX = inputs[8]
  LX = inputs[9]
  
  
  
  # Consumer Problem -------------------------------------------
  
  
  res1=RO*(YD^(RO-1))-lam1*PY
  res2=RO*(XD^(RO-1))-lam1*PX
  res3=r*K+w*L-PY*YD-PX*XD
  
  
  # Producer Problem  -------------------------------------------
  
  
  res4 = ALPHA*A*PY*(KY^(ALPHA-1))*(LY^BETA)-r
  res5 = BETA*A*PY*(KY^ALPHA)*(LY^(BETA-1))-w
  res6 = GAMA*B*PX*(KX^(GAMA-1))*(LX^TETA)-r
  res7 = TETA*B*PX*(KX^GAMA)*(LX^(TETA-1))-w
  
  # Market Clearing  -------------------------------------------
  
  
  res8 = A*(KY^ALPHA)*(LY^BETA)-YD #ignore due to Walras' Law
  res9 = B*(KX^GAMA)*(LX^TETA)-XD # ignore due to PX = 1.304111
  res10 = K-KY-KX
  res11 = L-LY-LX
  
  
  return(c(res1,res2,res3,res4,res5,res6,res7,res10,res11)) 
  
}


# parameters

SIGMA = 2 
RO =(SIGMA-1)/SIGMA
A = 8
B = 6
ALPHA = 0.3
BETA = 0.7
GAMA = 0.6
TETA = 0.4
K = 100
L = 100

library("rootSolve") #load "rootSolve" Package

# Order YD XD lam1 PX r w KY LY KX LX
stval = c(469.35, 275.98, 0.02,3.57, 4.73, 39.47, 69.53, 60.53, 30.47)
solUFOC = multiroot(fcnuMax, stval)
solinput = solUFOC$root
startF = paste(round(solinput,2), collapse=", ")
startF
## [1] "469.35, 275.98, 0.02, 3.57, 4.73, 39.47, 69.53, 60.53, 30.47"
YDstar = solinput[1];YDstar
## [1] 469.3532
XDstar = solinput[2];XDstar
## [1] 275.9756
lam1star = solinput[3];lam1star
## [1] 0.02307916
rstar = solinput[4];rstar
## [1] 3.567478
wstar = solinput[5];wstar
## [1] 4.725083
KYstar = solinput[6];KYstar
## [1] 39.4693
LYstar = solinput[7];LYstar
## [1] 69.53253
KXstar = solinput[8];KXstar
## [1] 60.5307
LXstar = solinput[9];LXstar
## [1] 30.46747
YS =  A*(KYstar^ALPHA)*(LYstar^BETA); YS
## [1] 469.3528
YTrade = YS - YDstar; YTrade 
## [1] -0.0004145812
XS =  B*(KXstar^GAMA)*(LXstar^TETA); XS
## [1] 275.9759
XTrade = XS - XDstar; XTrade 
## [1] 0.0003183094
# Question 3 (DUAL) --------------------------------------------------------------


rm(list=ls()) #will remove ALL objects
### Mixed Complementarity Problem [MCP]
#system of equations to solve

fcnuMin = function(inputs){
  
  PY = 1 # normalized price via Walras's law
  PX = 1.304111
  
  YD = inputs[1]
  XD = inputs[2]
  lam1 = inputs[3]
  YS = inputs[4]
  XS = inputs[5]
  r = inputs[6]
  w = inputs[7]
  
  
  # Consumer Problem -------------------------------------------
  
  res1 = RO*(YD^(RO-1))-lam1*PY
  res2 = RO*(XD^(RO-1))-lam1*PX
  res3 = r*K+w*L-PY*YD-PX*XD
  

  # Producer Problem  -------------------------------------------
  
  res4 = PY-(1/A)*PHI*(r^ALPHA)*(w^BETA)
  res5 = PX-(1/B)*OMEGA*(r^GAMA)*(w^TETA)
  
  # Market Clearing  -------------------------------------------
  
  res6 = XS-XD # jgonor this PX = 1.304111
  res7 = YS-YD #ignore due to Walras' Law
  
  KY = (YS/A)*(((w/r)*(ALPHA/BETA))^BETA);KY
  LY = (YS/A)*(((r/w)*(BETA/ALPHA))^ALPHA);LY
  KX = (XS/B)*(((w/r)*(GAMA/TETA))^TETA);KX
  LX = (XS/B)*(((r/w)*(TETA/GAMA))^GAMA);LX
  
  res8 = K-KY-KX
  res9 = L-LY-LX
  
  
  return(c(res1,res2,res3,res4,res5,res8,res9)) 
}


# parameters

SIGMA = 2 
RO = (SIGMA-1)/SIGMA
A = 8
B = 6
ALPHA = 0.3
BETA = 0.7
GAMA = 0.6
TETA = 0.4
K = 100
L = 100
PHI = ((ALPHA/BETA)^BETA)+((BETA/ALPHA)^ALPHA)
OMEGA = ((GAMA/TETA)^TETA)+((TETA/GAMA)^GAMA)

library("rootSolve") #load "rootSolve" Package

# Order YD XD lam1 YS XS R W
stval = c(469.35, 275.98, 0.02, 39.47, 69.53, 3.57, 4.73 )
solUFOC = multiroot(fcnuMin, stval)
solinput = solUFOC$root
startF = paste(round(solinput,2), collapse=", ")
startF
## [1] "469.35, 275.98, 0.02, 469.35, 275.98, 3.57, 4.73"
YDstar = solinput[1];YDstar
## [1] 469.3532
XDstar = solinput[2];XDstar
## [1] 275.9756
lam1star = solinput[3];lam1star
## [1] 0.02307916
YSstar = solinput[4];YSstar
## [1] 469.3528
XSstar = solinput[5];XSstar
## [1] 275.9759
rstar = solinput[6];rstar
## [1] 3.567478
wstar = solinput[7];wstar
## [1] 4.725083
KY = ((YSstar/A)*((ALPHA*wstar)/(BETA*rstar))^BETA)^(1/(ALPHA+BETA)); KY
## [1] 39.4693
KX = ((XSstar/B)*((GAMA*wstar)/(TETA*rstar))^TETA)^(1/(GAMA+TETA)); KX
## [1] 60.5307
LY = ((YSstar/A)*((BETA*rstar)/(ALPHA*wstar))^ALPHA)^(1/(ALPHA+BETA)); LY
## [1] 69.53253
LX = ((XSstar/B)*((TETA*rstar)/(GAMA*wstar))^GAMA)^(1/(GAMA+TETA)); LX
## [1] 30.46747
YT = YSstar-YDstar;YT
## [1] -0.0004176251
XT = XSstar-XDstar;XT
## [1] 0.0003202381
# Question 4 (PRIMAL)--------------------------------------------------------------

rm(list=ls()) # will remove ALL objects

### Mixed Complementarity Problem [MCP]

#system of equations to solve


fcnuMax = function(inputs){
  
  PY = 1 # normalized price via Walras's law
  
  YDH = inputs[1]
  XDH = inputs[2]
  YDF = inputs[3]
  XDF = inputs[4]
  lamH = inputs[5]
  lamF = inputs[6]
  PX = inputs[7]
  rH = inputs[8]
  wH = inputs[9]
  rF = inputs[10]
  wF = inputs[11]
  KYH = inputs[12]
  LYH = inputs[13]
  KXH = inputs[14]
  LXH = inputs[15]
  KYF = inputs[16]
  LYF = inputs[17]
  KXF = inputs[18]
  LXF = inputs[19]
  
  
  # Consumer Problem in Country H-------------------------------------------
  
  XSH = BH*(KXH^GAMA)*(LXH^TETA)
 
  MPROFITH=PX*BH*(KXH^GAMA)*(LXH^TETA)-rH*KXH-wH*LXH
  
  res1 = RO*(YDH^(RO-1))-lamH*PY
  res2 = RO*(XDH^(RO-1))-lamH*PX
  res3 = rH*KH+wH*LH+MPROFITH-PY*YDH-PX*XDH
  
  
  # Consumer Problem in Country F -------------------------------------------
  
  XSF = BF*(KXF^GAMA)*(LXF^TETA)
  
  MPROFITF = PX*BF*(KXF^GAMA)*(LXF^TETA)-rF*KXF-wF*LXF
  
  res4 = RO*(YDF^(RO-1))-lamF*PY
  res5 = RO*(XDF^(RO-1))-lamF*PX
  res6 = rF*KF+wF*LF+MPROFITF-PY*YDF-PX*XDF
  
  
  # Producer Problem  in Country H-------------------------------------------
  
  res7 = ALPHA*AH*PY*(KYH^(ALPHA-1))*(LYH^BETA)-rH
  res8 = BETA*AH*PY*(KYH^ALPHA)*(LYH^(BETA-1))-wH
  
  DENH = (PX^(RO/(RO-1))+PY^(RO/(RO-1)))^2
  NUM1H = (1/(RO-1))*(PX^(2/(RO-1)) + PY^(RO/(RO-1))*PX^((2-RO)/(RO-1)))             
  NUM2H = (RO/(RO-1))*PX^(2/(RO-1))
  NUM3H = (MPROFITH+rH*KH+wH*LH)+(MPROFITF+rF*KF+wF*LF)
  NUMTH = (NUM1H-NUM2H)*NUM3H
  TERMH = XSH*(DENH/NUMTH)
  
  res9  = (PX+TERMH)*BH*GAMA*(KXH^(GAMA-1))*(LXH^TETA)-rH
  res10 = (PX+TERMH)*BH*TETA*(KXH^GAMA)*(LXH^(TETA-1))-wH
  
  
  # Producer Problem in Country F -------------------------------------------
  
  res11 = ALPHA*AF*PY*(KYF^(ALPHA-1))*(LYF^BETA)-rF
  res12 = BETA*AF*PY*(KYF^ALPHA)*(LYF^(BETA-1))-wF
  
  
  DENF = (PX^(RO/(RO-1))+PY^(RO/(RO-1)))^2
  NUM1F = (1/(RO-1))*(PX^(2/(RO-1))+PY^(RO/(RO-1))*PX^((2-RO)/(RO-1)))             
  NUM2F = (RO/(RO-1))*PX^(2/(RO-1))
  NUM3F = (MPROFITH+rH*KH+wH*LH)+(MPROFITF+rF*KF+wF*LF)
  NUMTF = (NUM1F-NUM2F)*NUM3F
  TERMF = XSF*(DENF/NUMTF)
  
  res13 = (PX+TERMF)*BF*GAMA*(KXF^(GAMA-1))*(LXF^TETA)-rF
  res14 = (PX+TERMF)*BF*TETA*(KXF^GAMA)*(LXH^(TETA-1))-wF
  
  # Market Clearing  -------------------------------------------
  
  res15 = AH*KYH^ALPHA*LYH^BETA+AF*KYF^ALPHA*LYF^BETA-YDH-YDF #ignore due to Walras' Law
  res16 = XSH+XSF-XDH-XDF
  res17 = KH-KYH-KXH
  res18 = KF-KYF-KXF
  res19 = LH-LYH-LXH
  res20 = LF-LYF-LXF
  
  return(c(res1,res2,res3,res4,res5,res6,res7,res8,res9,res10,res11,res12,res13,res14,res16,res17,res18,res19,res20)) 
  
}

# parameters

SIGMA = 2 
RO = (SIGMA-1)/SIGMA
AH = 8
AF = 8
BH = 6
BF = 6
ALPHA = 0.3
BETA = 0.7
GAMA = 0.6
TETA = 0.4
KH = 100
LH = 100
KF = 100
LF = 100

library("rootSolve") #load "rootSolve" Package


# Order YDH XDH YDF XDF lam1 lam2 PX rH wH rF wF KYH LYH KXH LXH KYF LYF KXF LXF
stval =c (583.73, 185.75, 583.73, 185.75, 0.02, 0.02, 1.77, 3.12, 5, 3.12, 5, 56.05, 81.7, 43.95, 18.3, 56.05, 81.7, 43.95, 18.3)
solUFOC = multiroot(fcnuMax, stval)
solinput = solUFOC$root
startF = paste(round(solinput,2), collapse=", ")
startF
## [1] "583.73, 185.75, 583.73, 185.75, 0.02, 0.02, 1.77, 3.12, 5, 3.12, 5, 56.05, 81.7, 43.95, 18.3, 56.05, 81.7, 43.95, 18.3"
YDHstar = solinput[1];YDHstar
## [1] 583.7263
XDHstar = solinput[2];XDHstar
## [1] 185.7503
YDFstar = solinput[3];YDFstar
## [1] 583.7263
XDFstar = solinput[4];XDFstar
## [1] 185.7503
lam1star = solinput[5];lam1star
## [1] 0.020695
lam2star = solinput[6];lam2star
## [1] 0.020695
PXstar = solinput[7];PXstar
## [1] 1.772719
rHstar = solinput[8];rHstar
## [1] 3.124289
wHstar = solinput[9];wHstar
## [1] 5.001491
rFstar = solinput[10];rFstar
## [1] 3.124289
wFstar = solinput[11];wFstar
## [1] 5.001491
KYHstar = solinput[12];KYHstar
## [1] 56.05048
LYHstar = solinput[13];LYHstar
## [1] 81.69732
KXHstar = solinput[14];KXHstar
## [1] 43.94952
LXHstar = solinput[15];LXHstar
## [1] 18.30268
KYFstar = solinput[16];KYFstar
## [1] 56.05048
LYFstar = solinput[17];LYFstar
## [1] 81.69732
KXFstar = solinput[18];KXFstar
## [1] 43.94952
LXFstar = solinput[19];LXFstar
## [1] 18.30268
YSH =  AH*(KYHstar^ALPHA)*(LYHstar^BETA); YSH
## [1] 583.7263
YHTrade = YSH - YDHstar; YHTrade 
## [1] -8.70341e-09
YSF =  AF*(KYFstar^ALPHA)*(LYFstar^BETA); YSF
## [1] 583.7263
YFTrade = YSF - YDFstar; YFTrade 
## [1] -8.70341e-09
XSH =  BH*(KXHstar^GAMA)*(LXHstar^TETA); XSH
## [1] 185.7503
XHTrade = XSH - XDHstar; XHTrade 
## [1] -3.417426e-09
XSF =  BF*(KXFstar^GAMA)*(LXFstar^TETA); XSF
## [1] 185.7503
XFTrade = XSF - XDFstar; XFTrade 
## [1] -3.417426e-09
MPROFITH = PXstar*BH*(KXHstar^GAMA)*(LXHstar^TETA)-rHstar*KXHstar-wHstar*LXHstar
MPROFITH
## [1] 100.4314
MPROFITF=PXstar*BF*(KXFstar^GAMA)*(LXFstar^TETA)-rFstar*KXFstar-wFstar*LXFstar
MPROFITF
## [1] 100.4314
# Question 4 (DUAL)--------------------------------------------------------------


rm(list=ls()) # will remove ALL objects

### Mixed Complementarity Problem [MCP]

# system of equations to solve

# parameters 

alfa = 0.3
beta = 0.7
gama = 0.6
vee = 0.4
a = 2
rho=0.5
KH = 100
LH = 100
KF = 100
LF = 100
AH = 8
AF = 8
BH = 6
BF = 6
PY = 1


fcnUFOC = function(inputs){
  YDH = inputs[1]
  XDH = inputs[2]
  YDF = inputs[3]
  XDF = inputs[4]
  LamH = inputs[5]
  LamF = inputs[6]
  PXFT = inputs[7]
  XSH = inputs[8]
  YSH = inputs[9]
  XSF = inputs[10]
  YSF = inputs[11]
  rH = inputs[12]
  wH = inputs[13]
  rF = inputs[14]
  wF = inputs[15]
  
  
  KXH = (XSH/BH)*((gama/vee)^vee)*((wH/rH)^vee);KXH
  LXH = (XSH/BH)*((vee/gama)^(1-vee))*((rH/wH)^(1-vee));LXH
  
  KXF = (XSF/BF)*((gama/vee)^vee)*((wF/rF)^vee);KXF
  LXF = (XSF/BF)*((vee/gama)^(1-vee))*((rF/wF)^(1-vee));LXF
  
  
  profH = (PXFT*BH*(KXH^gama*LXH^vee))-rH*KXH-wH*LXH
  profF = (PXFT*BF*(KXF^gama*LXF^vee))-rF*KXF-wF*LXF
  
  num1H = (PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2
  num1F = (PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2
  
  den1H = (1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1)))
  den1F = (1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1)))
  
  den2H=((rho/(rho-1))*PXFT^(2/(rho-1)))
  den2F=((rho/(rho-1))*PXFT^(2/(rho-1)))
  
  den3H = (profH+rH*KH+wH*LH)+(profF+rF*KF+wF*LF)
  den3F = (profF+rF*KF+wF*LF)+(profH+rH*KH+wH*LH)
   
  num2H = gama*BH*KXH^(gama-1)*LXH^vee
  num2F = gama*BF*KXF^(gama-1)*LXF^vee
  
  num3H = vee*BH*KXH^gama*LXH^(vee-1)
  num3F = vee*BF*KXF^gama*LXF^(vee-1)
  
  
  # F O C for utility maximization  at H
  FOCXDH =((a-1)/a) *(XDH^(((a-1)/a)-1))-LamH*PXFT
  FOCYDH = ((a-1)/a) *(YDH^(((a-1)/a)-1))-LamH*PY
  FOCLamdaH =(rH*KH)+(wH*LH) + profH -(PY*YDH)-(PXFT*XDH)
  
  # F O C for utility maximization at F 
  FOCXDF =((a-1)/a) *(XDF^(((a-1)/a)-1))-LamF*PXFT
  FOCYDF = ((a-1)/a) *(YDF^(((a-1)/a)-1))-LamF*PY
  FOCLamdaF =(rF*KF)+(wF*LF) + profF -(PY*YDF)-(PXFT*XDF)
  
  
  # producer problem
  #Profit Maximization for production of commodity X and Y at home 
  
  
  FOCXSH = ((PXFT + XDH*(num1H/((den1H-den2H)*den3H))))- ( ((rH/BH)*((gama/vee)^vee)*((wH/rH)^vee))+((wH/BH)*((vee/gama)^gama)*((rH/wH)^gama)))
  FOCYSH = PY- (((rH/AH)*((alfa/beta)^beta)*((wH/rH)^beta))+((wH/AH)*((beta/alfa)^alfa)*((rH/wH)^alfa)))
  
  #Profit Maximization for production of commodity X and Y at F 
  
  FOCXSF = ((PXFT + XDF*(num1F/((den1F-den2F)*den3F))))- ( ((rF/BF)*((gama/vee)^vee)*((wF/rF)^vee))+((wF/BF)*((vee/gama)^gama)*((rF/wF)^gama)))
  FOCYSF = PY- (((rF/AF)*((alfa/beta)^beta)*((wF/rF)^beta))+((wF/AF)*((beta/alfa)^alfa)*((rF/wF)^alfa)))
  
  # Commotidy market Equilibrium 
  CX = (BH*(KXH^gama)*(LXH^vee)+BF*(KXF^gama)*(LXF^vee))-XDH-XDF   
  
  # Factor Market Equilibrium at H
  
  CapHH = KH - ((YSH/AH)*((alfa/beta)^beta)*((wH/rH)^beta)) -((XSH/BH)*((gama/vee)^vee)*((wH/rH)^vee))
  LabHH = LH - ((YSH/AH)*((beta/alfa)^(1-beta))*((rH/wH)^(1-beta)))-((XSH/BH)*((vee/gama)^(1-vee))*((rH/wH)^(1-vee)))
  
  # Factor Market Equilibrium at F
  CapHF = KF - ((YSF/AF)*((alfa/beta)^beta)*((wF/rF)^beta)) -((XSF/BF)*((gama/vee)^vee)*((wF/rF)^vee))
  LabHF = LF - ((YSF/AF)*((beta/alfa)^(1-beta))*((rF/wF)^(1-beta)))-((XSF/BF)*((vee/gama)^(1-vee))*((rF/wF)^(1-vee)))
  
  return(c(FOCXDH,FOCYDH, FOCLamdaH, FOCXDF, FOCYDF, FOCLamdaF, FOCXSH, FOCYSH, FOCXSF, FOCYSF, CX, CapHH, LabHH, CapHF, LabHF)) 
}


library("rootSolve")  #load "rootSolve" package

# Order YDH  XDH  YDF  XDF  LamdaH  LamdaF PXFT XSH YSH XSF YSF  rH wH  rF  wF

stval=c(583.73, 185.75, 583.73, 185.75, 0.02, 0.02, 1.77, 185.7503, 583.7263 , 185.7503 , 583.7203 , 3.12, 5, 3.12, 5)

signf = -1 

solUFOC = multiroot(fcnUFOC, stval)
solinput = solUFOC$root
YDHstar = solinput[1];YDHstar 
## [1] 583.7263
XDHstar = solinput[2];XDHstar
## [1] 185.7503
YDFstar = solinput[3];YDFstar
## [1] 583.7263
XDFstar = solinput[4];XDFstar
## [1] 185.7503
LamHstar = solinput[5];LamHstar
## [1] 0.020695
LamFstar = solinput[6];LamFstar
## [1] 0.020695
PXFTstar = solinput[7];PXFTstar
## [1] 1.772719
XSHstar = solinput[8];XSHstar
## [1] 185.7503
YSHstar = solinput[9];YSHstar
## [1] 583.7263
XSFstar = solinput[10];XSFstar
## [1] 185.7503
YSFstar = solinput[11];YSFstar
## [1] 583.7263
rHstar = solinput[12];rHstar 
## [1] 3.124289
wHstar = solinput[13];wHstar
## [1] 5.001491
rFstar = solinput[14];rFstar 
## [1] 3.124289
wFstar = solinput[15];wFstar
## [1] 5.001491
OptUHstar = YDHstar^((a-1)/a)+XDHstar^((a-1)/a);OptUHstar
## [1] 37.78945
OptUFstar = YDFstar^((a-1)/a)+XDFstar^((a-1)/a);OptUFstar
## [1] 37.78945
KXHstar = (XSHstar/BH)*((gama/vee)^vee)*((wHstar/rHstar)^vee);KXHstar
## [1] 43.94952
LXHstar = (XSHstar/BH)*((vee/gama)^(1-vee))*((rHstar/wHstar)^(1-vee));LXHstar
## [1] 18.30268
KYHstar = (YSHstar/AH)*((alfa/beta)^beta)*((wHstar/rHstar)^beta);KYHstar
## [1] 56.05048
LYHstar = (YSHstar/AH)*((beta/alfa)^(1-beta))*((rHstar/wHstar)^(1-beta));LYHstar
## [1] 81.69732
KXFstar = (XSFstar/BF)*((gama/vee)^vee)*((wFstar/rFstar)^vee);KXFstar
## [1] 43.94952
LXFstar = (XSFstar/BF)*((vee/gama)^(1-vee))*((rFstar/wFstar)^(1-vee));LXFstar
## [1] 18.30268
KYFstar = (YSFstar/AF)*((alfa/beta)^beta)*((wFstar/rFstar)^beta);KYFstar
## [1] 56.05048
LYFstar = (YSFstar/AF)*((beta/alfa)^(1-beta))*((rFstar/wFstar)^(1-beta));LYFstar
## [1] 81.69732
# Question 5 (PRIMAL)--------------------------------------------------------------

rm(list=ls()) # will remove ALL objects

### Mixed Complementarity Problem [MCP]

#system of equations to solve


# parameters 
alfa = 0.3
beta = 0.7
gama = 0.6
vee = 0.4
a = 2
rho=0.5
KH = 100
LH = 100
KF = 100
LF = 100
AH = 8
AF=8
BH = 4.7
BF = 6
PY = 1 # normalized price via Walras's law

fcnUFOC = function(inputs){
  YDH = inputs[1] 
  XDH = inputs[2]
  LamdaH = inputs[3]
  YDF = inputs[4]
  XDF = inputs[5]
  LamdaF = inputs[6]
  PXFT = inputs[7]
  KXH = inputs[8]
  LXH = inputs[9]
  KXF = inputs[10]
  LXF = inputs[11]
  KYH = inputs[12]
  LYH = inputs[13]
  KYF = inputs[14]
  LYF = inputs[15]
  rH = inputs[16]
  wH = inputs[17]  
  rF = inputs[18]
  wF = inputs[19]
  
  
  profH=(PXFT*BH*(KXH^gama*LXH^vee))-rH*KXH-wH*LXH
  profF=(PXFT*BF*(KXF^gama*LXF^vee))-rF*KXF-wF*LXF
  
  num1H=(PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2
  num1F=(PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2
  
  den1H=(1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1)))
  den1F=(1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1)))
  
  den2H=((rho/(rho-1))*PXFT^(2/(rho-1)))
  den2F=((rho/(rho-1))*PXFT^(2/(rho-1)))
  
  den3H=profH+rH*KH+wH*LH +profF+rF*KF+wF*LF
  den3F=profF+rF*KF+wF*LF+ profH+rH*KH+wH*LH
  
  num2H=gama*BH*KXH^(gama-1)*LXH^vee
  num2F=gama*BF*KXF^(gama-1)*LXF^vee
  
  num3H=vee*BH*KXH^gama*LXH^(vee-1)
  num3F=vee*BF*KXF^gama*LXF^(vee-1)
  
  
  # Consumer Problem in Country H -------------------------------------------
  
  res1 =((a-1)/a) *(XDH^(((a-1)/a)-1))-LamdaH*PXFT
  res2 = ((a-1)/a) *(YDH^(((a-1)/a)-1))-LamdaH*PY
  res3 =(rH*KH)+(wH*LH) + profH -(PY*YDH)-(PXFT*XDH)
  
  # Consumer Problem in Country F -------------------------------------------
  
  # F O C for utility maximization X at F 
  res4 =((a-1)/a) *(XDF^(((a-1)/a)-1))-LamdaF*PXFT
  res5 = ((a-1)/a) *(YDF^(((a-1)/a)-1))-LamdaF*PY
  res6 =(rF*KF)+(wF*LF) + profF -(PY*YDF)-(PXFT*XDF)
  
  
  # Producer Problem in Country H -------------------------------------------
  
  res7 = (PXFT + XDH*(num1H/((den1H-den2H)*den3H)))*num2H -rH
  res8 = (PXFT + XDH*(num1H/((den1H-den2H)*den3H)))*num3H- wH
  
  
  # Producer Problem in Country F -------------------------------------------
  
  res9 = (PXFT + XDF*(num1F/((den1F-den2F)*den3F)))*num2F -rF
  res10 = (PXFT + XDF*(num1F/((den1F-den2F)*den3F)))*num3F- wF
  
  # Market Clearing in both Country H and F -------------------------------------------

  res11 = (alfa*PY*AH*(KYH^(alfa-1))*(LYH^beta))- rH
  res12 = (beta*PY*AH*(KYH^alfa)*(LYH^(beta-1))) - wH
  
  res13 = (alfa*PY*AF*(KYF^(alfa-1))*(LYF^beta))- rF
  res14 = (beta*PY*AF*(KYF^alfa)*(LYF^(beta-1))) - wF
  
  res15 = (BH*(KXH^gama)*(LXH^vee)+BF*(KXF^gama)*(LXF^vee))-XDH-XDF 
  
  res16 = KH - KYH - KXH
  res17 = LH - LYH - LXH 
  
  res18 = KF - KYF - KXF
  res19 = LF - LYF - LXF
  
  
  return(c(res1,res2,res3,res4,res5,res6,res7,res8,res9,res10,res11,res12,res13,res14,res15,res16,res17,res18,res19))
  
}

library("rootSolve")  #load "rootSolve" package

stval = c(560.3379,139.486,0.02, 666.915, 173.348,0.02, 1.964557,11.41063,2.89,66.62,32.13,88.59,102.9,33.38,67.87,2.4,5.48,3.63,4.6)
signf = -1 
solUFOC = multiroot(fcnUFOC, stval)
solinput = solUFOC$root

YDH = solinput[1];YDH
## [1] 541.5478
XDH= solinput[2];XDH
## [1] 140.2051
LamdaH = solinput[3];LamdaH
## [1] 0.0214858
YDF = solinput[4];YDF
## [1] 673.692
XDF = solinput[5];XDF
## [1] 174.4169
LamdaF = solinput[6];LamdaF
## [1] 0.01926368
PXFT = solinput[7];PXFT
## [1] 1.965334
KXH = solinput[8];KXH
## [1] 10.69644
LXH = solinput[9];LXH
## [1] 3.30894
KXF = solinput[10];KXF
## [1] 61.73308
LXF = solinput[11];LXF
## [1] 31.55002
KYH = solinput[12];KYH
## [1] 89.30356
LYH = solinput[13];LYH
## [1] 96.69106
KYF = solinput[14];KYF
## [1] 38.26692
LYF = solinput[15];LYF
## [1] 68.44998
rH = solinput [16];rH
## [1] 2.53731
wH= solinput [17];wH
## [1] 5.468054
rF = solinput [18];rF
## [1] 3.605754
wF = solinput [19];wF
## [1] 4.703521
OptUH = YDH^((a-1)/a)+XDH^((a-1)/a);OptUH
## [1] 35.112
OptUF = YDF^((a-1)/a)+XDF^((a-1)/a);OptUF
## [1] 39.16228
YSH=AH*(KYH^alfa)*(LYH^beta);YSH
## [1] 755.3027
XSH=BH*(KXH^gama)*(LXH^vee);XSH
## [1] 31.44249
YSF=AF*(KYF^alfa)*(LYF^beta);YSF
## [1] 459.937
XSF=BF*(KXF^gama)*(LXF^vee);XSF
## [1] 283.1795
# Question 5 (DUAL)--------------------------------------------------------------

rm(list=ls()) # will remove ALL objects

### Mixed Complementarity Problem [MCP]

#system of equations to solve

# parameters 
alfa = 0.3
beta = 0.7
gama = 0.6
vee = 0.4
a = 2
rho=0.5
KH = 100
LH = 100
KF = 100
LF = 100
AH = 8
AF=8
BH = 4.7
BF = 6
PY=1


fcnUFOC = function(inputs){
  YDH = inputs[1]
  XDH = inputs[2]
  YDF = inputs[3]
  XDF = inputs[4]
  LamdaH = inputs[5]
  LamdaF = inputs[6]
  PXFT = inputs[7]
  XSH = inputs[8]
  YSH = inputs[9]
  XSF = inputs[10]
  YSF = inputs[11]
  rH = inputs[12]
  wH = inputs[13]
  rF = inputs[14]
  wF = inputs[15]
  
 
  KXH = (XSH/BH)*((gama/vee)^vee)*((wH/rH)^vee);KXH
  LXH = (XSH/BH)*((vee/gama)^(1-vee))*((rH/wH)^(1-vee));LXH

  KXF = (XSF/BF)*((gama/vee)^vee)*((wF/rF)^vee);KXF
  LXF = (XSF/BF)*((vee/gama)^(1-vee))*((rF/wF)^(1-vee));LXF

  
  profH=(PXFT*BH*(KXH^gama*LXH^vee))-rH*KXH-wH*LXH
  profF=(PXFT*BF*(KXF^gama*LXF^vee))-rF*KXF-wF*LXF
  
  num1H=(PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2
  num1F=(PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2
  
  den1H=(1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1)))
  den1F=(1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1)))
  
  den2H=((rho/(rho-1))*PXFT^(2/(rho-1)))
  den2F=((rho/(rho-1))*PXFT^(2/(rho-1)))
  
  den3H=profH+rH*KH+wH*LH +profF+rF*KF+wF*LF
  den3F=profF+rF*KF+wF*LF+ profH+rH*KH+wH*LH
  
  num2H=gama*BH*KXH^(gama-1)*LXH^vee
  num2F=gama*BF*KXF^(gama-1)*LXF^vee
  
  num3H=vee*BH*KXH^gama*LXH^(vee-1)
  num3F=vee*BF*KXF^gama*LXF^(vee-1)
  
  
  # F O C for utility maximization  at H
  FOCXDH =((a-1)/a) *(XDH^(((a-1)/a)-1))-LamdaH*PXFT
  FOCYDH = ((a-1)/a) *(YDH^(((a-1)/a)-1))-LamdaH*PY
  FOCLamdaH =(rH*KH)+(wH*LH) + profH -(PY*YDH)-(PXFT*XDH)
  
  # F O C for utility maximization at F 
  FOCXDF =((a-1)/a) *(XDF^(((a-1)/a)-1))-LamdaF*PXFT
  FOCYDF = ((a-1)/a) *(YDF^(((a-1)/a)-1))-LamdaF*PY
  FOCLamdaF =(rF*KF)+(wF*LF) + profF -(PY*YDF)-(PXFT*XDF)
  
  
  # producer problem
  #Profit Maximization for production of commodity X and Y at home 
  
  
  FOCXSH = ((PXFT + XDH*(num1H/((den1H-den2H)*den3H))))- ( ((rH/BH)*((gama/vee)^vee)*((wH/rH)^vee))+((wH/BH)*((vee/gama)^gama)*((rH/wH)^gama)))
  FOCYSH = PY- (((rH/AH)*((alfa/beta)^beta)*((wH/rH)^beta))+((wH/AH)*((beta/alfa)^alfa)*((rH/wH)^alfa)))
  
  #Profit Maximization for production of commodity X and Y at F 
  
  FOCXSF = ((PXFT + XDF*(num1F/((den1F-den2F)*den3F))))- ( ((rF/BF)*((gama/vee)^vee)*((wF/rF)^vee))+((wF/BF)*((vee/gama)^gama)*((rF/wF)^gama)))
  FOCYSF = PY- (((rF/AF)*((alfa/beta)^beta)*((wF/rF)^beta))+((wF/AF)*((beta/alfa)^alfa)*((rF/wF)^alfa)))
  
  # Commotidy market Equilibrium 
  CX = (BH*(KXH^gama)*(LXH^vee)+BF*(KXF^gama)*(LXF^vee))-XDH-XDF   
  
  # Factor Market Equilibrium at H
  
  CapHH = KH - ((YSH/AH)*((alfa/beta)^beta)*((wH/rH)^beta)) -((XSH/BH)*((gama/vee)^vee)*((wH/rH)^vee))
  LabHH = LH - ((YSH/AH)*((beta/alfa)^(1-beta))*((rH/wH)^(1-beta)))-((XSH/BH)*((vee/gama)^(1-vee))*((rH/wH)^(1-vee)))
  
  # Factor Market Equilibrium at F
  CapHF = KF - ((YSF/AF)*((alfa/beta)^beta)*((wF/rF)^beta)) -((XSF/BF)*((gama/vee)^vee)*((wF/rF)^vee))
  LabHF = LF - ((YSF/AF)*((beta/alfa)^(1-beta))*((rF/wF)^(1-beta)))-((XSF/BF)*((vee/gama)^(1-vee))*((rF/wF)^(1-vee)))
  
  return(c(FOCXDH,FOCYDH, FOCLamdaH, FOCXDF, FOCYDF, FOCLamdaF, FOCXSH, FOCYSH, FOCXSF, FOCYSF, CX, CapHH, LabHH, CapHF, LabHF)) 
}


library("rootSolve")  #load "rootSolve" package

# Order YDH  XDH  YDF  XDF  LamdaH  LamdaF PXFT   XSH YSH XSF YSF  rH wH  rF  wF

stval = c(560.3379,139.486, 666.915, 173.348, 0.02, 0.02, 1.964557,31.44 ,755.3027 , 283.1795 , 459.937, 2.4,5.48,3.63,4.6)
signf = -1 

solUFOC = multiroot(fcnUFOC, stval)
solinput = solUFOC$root
YDHstar = solinput[1];YDHstar 
## [1] 541.5478
XDHstar = solinput[2];XDHstar
## [1] 140.2051
YDFstar = solinput[3];YDFstar
## [1] 673.692
XDFstar = solinput[4];XDFstar
## [1] 174.4169
LambHstar = solinput[5];LambHstar
## [1] 0.0214858
LambFstar = solinput[6];LambFstar
## [1] 0.01926368
PXFTstar = solinput[7];PXFTstar
## [1] 1.965334
XSHstar = solinput[8];XSHstar
## [1] 31.44249
YSHstar = solinput[9];YSHstar
## [1] 755.3027
XSFstar = solinput[10];XSFstar
## [1] 283.1795
YSFstar = solinput[11];YSFstar
## [1] 459.937
rHstar = solinput[12];rHstar 
## [1] 2.53731
wHstar = solinput[13];wHstar
## [1] 5.468054
rFstar = solinput[14];rFstar 
## [1] 3.605754
wFstar = solinput[15];wFstar
## [1] 4.703521
OptUHstar = YDHstar^((a-1)/a)+XDHstar^((a-1)/a);OptUHstar
## [1] 35.112
OptUFstar = YDFstar^((a-1)/a)+XDFstar^((a-1)/a);OptUFstar
## [1] 39.16228
KXHstar = (XSHstar/BH)*((gama/vee)^vee)*((wHstar/rHstar)^vee);KXHstar
## [1] 10.69644
LXHstar = (XSHstar/BH)*((vee/gama)^(1-vee))*((rHstar/wHstar)^(1-vee));LXHstar
## [1] 3.30894
KYHstar = (YSHstar/AH)*((alfa/beta)^beta)*((wHstar/rHstar)^beta);KYHstar
## [1] 89.30356
LYHstar = (YSHstar/AH)*((beta/alfa)^(1-beta))*((rHstar/wHstar)^(1-beta));LYHstar
## [1] 96.69106
KXFstar = (XSFstar/BF)*((gama/vee)^vee)*((wFstar/rFstar)^vee);KXFstar
## [1] 61.73308
LXFstar = (XSFstar/BF)*((vee/gama)^(1-vee))*((rFstar/wFstar)^(1-vee));LXFstar
## [1] 31.55002
KYFstar = (YSFstar/AF)*((alfa/beta)^beta)*((wFstar/rFstar)^beta);KYFstar
## [1] 38.26692
LYFstar = (YSFstar/AF)*((beta/alfa)^(1-beta))*((rFstar/wFstar)^(1-beta));LYFstar
## [1] 68.44998
# Question 6 (PRIMAL)--------------------------------------------------------------


rm(list=ls()) # will remove ALL objects

### Mixed Complementarity Problem [MCP]

#system of equations to solve


# parameters  

alfa = 0.3 
beta = 0.7 
gama = 0.6 
vee = 0.4 
a = 2 
rho = 0.5 
KH = 100 
LH = 100 
KF = 40 
LF = 40
AH = 8 
AF=8 
BH = 6 
BF = 6 
PY = 1 # normalized price via Walras's law


fcnUFOC = function(inputs){ 
  
  
  PY = 1 # normalized price via Walras's law
  
  YDH = inputs[1]
  XDH = inputs[2]
  YDF = inputs[3]
  XDF = inputs[4]
  LamdaH = inputs[5]
  LamdaF = inputs[6]
  PXFT = inputs[7]
  rH = inputs[8]
  wH = inputs[9]
  rF = inputs[10]
  wF = inputs[11]
  KYH = inputs[12]
  LYH = inputs[13]
  KXH = inputs[14]
  LXH = inputs[15]
  KYF = inputs[16]
  LYF = inputs[17]
  KXF = inputs[18]
  LXF = inputs[19]
  
  
  profH=(PXFT*BH*(KXH^gama*LXH^vee))-rH*KXH-wH*LXH 
  profF=(PXFT*BF*(KXF^gama*LXF^vee))-rF*KXF-wF*LXF 
  
  num1H=(PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2 
  num1F=(PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2 
  
  den1H=(1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1))) 
  den1F=(1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1))) 
  
  den2H=((rho/(rho-1))*PXFT^(2/(rho-1))) 
  den2F=((rho/(rho-1))*PXFT^(2/(rho-1))) 
  
  den3H=profH+rH*KH+wH*LH +profF+rF*KF+wF*LF 
  den3F=profF+rF*KF+wF*LF+ profH+rH*KH+wH*LH 
  
  num2H=gama*BH*KXH^(gama-1)*LXH^vee 
  num2F=gama*BF*KXF^(gama-1)*LXF^vee 
  
  num3H=vee*BH*KXH^gama*LXH^(vee-1) 
  num3F=vee*BF*KXF^gama*LXF^(vee-1) 
  
  
  
  # Consumer Problem in Country H -------------------------------------------
  
  res1 =((a-1)/a) *(XDH^(((a-1)/a)-1))-LamdaH*PXFT 
  res2 = ((a-1)/a) *(YDH^(((a-1)/a)-1))-LamdaH*PY 
  res3 =(rH*KH)+(wH*LH) + profH -(PY*YDH)-(PXFT*XDH) 
  
  
  # Consumer Problem in Country F -------------------------------------------  
  
  res4 =((a-1)/a) *(XDF^(((a-1)/a)-1))-LamdaF*PXFT 
  res5 = ((a-1)/a) *(YDF^(((a-1)/a)-1))-LamdaF*PY 
  res6 =(rF*KF)+(wF*LF) + profF -(PY*YDF)-(PXFT*XDF) 
  
  
  
  # Producer Problem in Country F -------------------------------------------
  
  
  res7 = (PXFT + XDH*(num1H/((den1H-den2H)*den3H)))*num2H -rH 
  res8 = (PXFT + XDH*(num1H/((den1H-den2H)*den3H)))*num3H- wH 
  
  
  # Producer Problem in Country F -------------------------------------------
  
  
  res9 = (PXFT + XDF*(num1F/((den1F-den2F)*den3F)))*num2F -rF 
  res10 = (PXFT + XDF*(num1F/((den1F-den2F)*den3F)))*num3F- wF 
  
  
  
  # Market Clearing in Both Country H and F -------------------------------------------
  
  res11 = (alfa*PY*AH*(KYH^(alfa-1))*(LYH^beta))- rH 
  res12 = (beta*PY*AH*(KYH^alfa)*(LYH^(beta-1))) - wH 
  
  
  res13 = (alfa*PY*AF*(KYF^(alfa-1))*(LYF^beta))- rF 
  res14 = (beta*PY*AF*(KYF^alfa)*(LYF^(beta-1))) - wF 
  
 
  res15 = (BH*(KXH^gama)*(LXH^vee)+BF*(KXF^gama)*(LXF^vee))-XDH-XDF  
  
  
  res16 = KH - KYH - KXH 
  res17 = LH - LYH - LXH  
  
  
  # Factor Market Equilibrium at F 
  
  res18 = KF - KYF - KXF 
  res19 = LF - LYF - LXF 
  
 return(c(res1,res2,res3,res4,res5,res6,res7,res8,res9,res10,res11,res12,res13,res14,res15,res16,res17,res18,res19))
  
 
  
} 

library("rootSolve")  #load "rootSolve" package 


# Order YDH XDH YDF XDF lam1 lam2 PX rH wH rF wF KYH LYH KXH LXH KYF LYF KXF LXF
stval = c(579.54, 166.16, 136.98, 39.27, 0.02 , 0.04, 1.87, 2.86, 5.2, 4.34, 4.34, 69.16, 88.7, 30.84, 11.3, 4.01, 9.35, 15.99, 10.65)

signf = -1  

solUFOC = multiroot(fcnUFOC, stval) 
solinput = solUFOC$root 

YDH = solinput[1];YDH 
## [1] 542.967
XDH= solinput[2];XDH 
## [1] 154.5073
LamdaH = solinput[3];LamdaH 
## [1] 283.0672
YDF = solinput[4];YDF 
## [1] 80.54992
XDF = solinput[5];XDF 
## [1] 0.02145771
LamdaF = solinput[6];LamdaF 
## [1] 0.02971839
PXFT = solinput[7];PXFT 
## [1] 1.874616
KXH = solinput[8];KXH 
## [1] 2.547109
LXH = solinput[9];LXH 
## [1] 5.459028
KXF = solinput[10];KXF 
## [1] 4.836428
LXF = solinput[11];LXF 
## [1] 4.147324
KYH = solinput[12];KYH 
## [1] 88.59352
LYH = solinput[13];LYH 
## [1] 96.45193
KYF = solinput[14];KYF 
## [1] 11.40648
LYF = solinput[15];LYF 
## [1] 3.548073
rH = solinput [16];rH 
## [1] 4.580431
wH= solinput [17];wH 
## [1] 12.4635
rF = solinput [18];rF 
## [1] 35.41957
wF = solinput [19];wF 
## [1] 27.5365
OptUH = YDH^((a-1)/a)+XDH^((a-1)/a);OptUH 
## [1] 35.73175
OptUF = YDF^((a-1)/a)+XDF^((a-1)/a);OptUF 
## [1] 9.121445
YSH=AH*(KYH^alfa)*(LYH^beta);YSH 
## [1] 752.1911
XSH=BH*(KXH^gama)*(LXH^vee);XSH 
## [1] 20.73127
YSF=AF*(KYF^alfa)*(LYF^beta);YSF 
## [1] 40.29307
XSF=BF*(KXF^gama)*(LXF^vee);XSF 
## [1] 27.2881
# Question 6 (DUAL)--------------------------------------------------------------


rm(list=ls()) # will remove ALL objects

### Mixed Complementarity Problem [MCP]

# system of equations to solve

# parameters 

alfa = 0.3
beta = 0.7
gama = 0.6
vee = 0.4
a = 2
rho=0.5
KH = 100
LH = 100
KF = 40
LF = 40
AH = 8
AF=8
BH = 6
BF = 6
PY=1


fcnUFOC = function(inputs){
  YDH = inputs[1]
  XDH = inputs[2]
  YDF = inputs[3]
  XDF = inputs[4]
  LamdaH = inputs[5]
  LamdaF = inputs[6]
  PXFT = inputs[7]
  XSH = inputs[8]
  YSH = inputs[9]
  XSF = inputs[10]
  YSF = inputs[11]
  rH = inputs[12]
  wH = inputs[13]
  rF = inputs[14]
  wF = inputs[15]
  
  
  KXH = (XSH/BH)*((gama/vee)^vee)*((wH/rH)^vee);KXH
  LXH = (XSH/BH)*((vee/gama)^(1-vee))*((rH/wH)^(1-vee));LXH
  
  KXF = (XSF/BF)*((gama/vee)^vee)*((wF/rF)^vee);KXF
  LXF = (XSF/BF)*((vee/gama)^(1-vee))*((rF/wF)^(1-vee));LXF
  
  
  profH=(PXFT*BH*(KXH^gama*LXH^vee))-rH*KXH-wH*LXH
  profF=(PXFT*BF*(KXF^gama*LXF^vee))-rF*KXF-wF*LXF
  
  num1H=(PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2
  num1F=(PXFT^(rho/(rho-1))+PY^(rho/(rho-1)))^2
  
  den1H=(1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1)))
  den1F=(1/(rho-1))*(PXFT^(2/(rho-1))+PY^(rho/(rho-1))*PXFT^((2-rho)/(rho-1)))
  
  den2H=((rho/(rho-1))*PXFT^(2/(rho-1)))
  den2F=((rho/(rho-1))*PXFT^(2/(rho-1)))
  
  den3H=profH+rH*KH+wH*LH +profF+rF*KF+wF*LF
  den3F=profF+rF*KF+wF*LF+ profH+rH*KH+wH*LH
  
  num2H=gama*BH*KXH^(gama-1)*LXH^vee
  num2F=gama*BF*KXF^(gama-1)*LXF^vee
  
  num3H=vee*BH*KXH^gama*LXH^(vee-1)
  num3F=vee*BF*KXF^gama*LXF^(vee-1)
  
  
  # F O C for utility maximization  at H
  FOCXDH =((a-1)/a) *(XDH^(((a-1)/a)-1))-LamdaH*PXFT
  FOCYDH = ((a-1)/a) *(YDH^(((a-1)/a)-1))-LamdaH*PY
  FOCLamdaH =(rH*KH)+(wH*LH) + profH -(PY*YDH)-(PXFT*XDH)
  
  # F O C for utility maximization at F 
  FOCXDF =((a-1)/a) *(XDF^(((a-1)/a)-1))-LamdaF*PXFT
  FOCYDF = ((a-1)/a) *(YDF^(((a-1)/a)-1))-LamdaF*PY
  FOCLamdaF =(rF*KF)+(wF*LF) + profF -(PY*YDF)-(PXFT*XDF)
  
  
  # producer problem
  #Profit Maximization for production of commodity X and Y at home 
  
  
  FOCXSH = ((PXFT + XDH*(num1H/((den1H-den2H)*den3H))))- ( ((rH/BH)*((gama/vee)^vee)*((wH/rH)^vee))+((wH/BH)*((vee/gama)^gama)*((rH/wH)^gama)))
  FOCYSH = PY- (((rH/AH)*((alfa/beta)^beta)*((wH/rH)^beta))+((wH/AH)*((beta/alfa)^alfa)*((rH/wH)^alfa)))
  
  #Profit Maximization for production of commodity X and Y at F 
  
  FOCXSF = ((PXFT + XDF*(num1F/((den1F-den2F)*den3F))))- ( ((rF/BF)*((gama/vee)^vee)*((wF/rF)^vee))+((wF/BF)*((vee/gama)^gama)*((rF/wF)^gama)))
  FOCYSF = PY- (((rF/AF)*((alfa/beta)^beta)*((wF/rF)^beta))+((wF/AF)*((beta/alfa)^alfa)*((rF/wF)^alfa)))
  
  # Commotidy market Equilibrium 
  CX = (BH*(KXH^gama)*(LXH^vee)+BF*(KXF^gama)*(LXF^vee))-XDH-XDF   
  
  # Factor Market Equilibrium at H
  
  CapHH = KH - ((YSH/AH)*((alfa/beta)^beta)*((wH/rH)^beta)) -((XSH/BH)*((gama/vee)^vee)*((wH/rH)^vee))
  LabHH = LH - ((YSH/AH)*((beta/alfa)^(1-beta))*((rH/wH)^(1-beta)))-((XSH/BH)*((vee/gama)^(1-vee))*((rH/wH)^(1-vee)))
  
  # Factor Market Equilibrium at F
  CapHF = KF - ((YSF/AF)*((alfa/beta)^beta)*((wF/rF)^beta)) -((XSF/BF)*((gama/vee)^vee)*((wF/rF)^vee))
  LabHF = LF - ((YSF/AF)*((beta/alfa)^(1-beta))*((rF/wF)^(1-beta)))-((XSF/BF)*((vee/gama)^(1-vee))*((rF/wF)^(1-vee)))
  
  return(c(FOCXDH,FOCYDH, FOCLamdaH, FOCXDF, FOCYDF, FOCLamdaF, FOCXSH, FOCYSH, FOCXSF, FOCYSF, CX, CapHH, LabHH, CapHF, LabHF)) 
}


library("rootSolve")  #load "rootSolve" package

# Order YDH  XDH  YDF  XDF  LamdaH  LamdaF PXFT   XSH YSH XSF YSF  rH wH  rF  wF

stval = c(579.54, 166.16, 136.98, 39.27, 0.02 , 0.04, 1.87, 20.73, 752.19, 27.2881, 40.29, 2.86, 5.2, 4.34, 4.34)

#stval = c(560.3379,139.486, 666.915, 173.348, 0.02, 0.02, 1.964557,31.44 ,755.3027 , 283.1795 , 459.937, 2.4,5.48,3.63,4.6)
signf = -1 

solUFOC = multiroot(fcnUFOC, stval)
solinput = solUFOC$root
solUFOC = multiroot(fcnUFOC, stval)
solinput = solUFOC$root



YDHstar = solinput[1];YDHstar 
## [1] 542.967
XDHstar = solinput[2];XDHstar
## [1] 154.5073
YDFstar = solinput[3];YDFstar
## [1] 283.0672
XDFstar = solinput[4];XDFstar
## [1] 80.54992
LambHstar = solinput[5];LambHstar
## [1] 0.02145771
LambFstar = solinput[6];LambFstar
## [1] 0.02971839
PXFTstar = solinput[7];PXFTstar
## [1] 1.874616
XSHstar = solinput[8];XSHstar
## [1] 42.89822
YSHstar = solinput[9];YSHstar
## [1] 752.1911
XSFstar = solinput[10];XSFstar
## [1] 192.159
YSFstar = solinput[11];YSFstar
## [1] 73.84309
rHstar = solinput[12];rHstar 
## [1] 2.547109
wHstar = solinput[13];wHstar
## [1] 5.459028
rFstar = solinput[14];rFstar 
## [1] 4.836428
wFstar = solinput[15];wFstar
## [1] 4.147324
OptUHstar = YDHstar^((a-1)/a)+XDHstar^((a-1)/a);OptUHstar
## [1] 35.73175
OptUFstar = YDFstar^((a-1)/a)+XDFstar^((a-1)/a);OptUFstar
## [1] 25.79956
KXHstar = (XSHstar/BH)*((gama/vee)^vee)*((wHstar/rHstar)^vee);KXHstar
## [1] 11.40648
LXHstar = (XSHstar/BH)*((vee/gama)^(1-vee))*((rHstar/wHstar)^(1-vee));LXHstar
## [1] 3.548073
KYHstar = (YSHstar/AH)*((alfa/beta)^beta)*((wHstar/rHstar)^beta);KYHstar
## [1] 88.59352
LYHstar = (YSHstar/AH)*((beta/alfa)^(1-beta))*((rHstar/wHstar)^(1-beta));LYHstar
## [1] 96.45193
KXFstar = (XSFstar/BF)*((gama/vee)^vee)*((wFstar/rFstar)^vee);KXFstar
## [1] 35.41957
LXFstar = (XSFstar/BF)*((vee/gama)^(1-vee))*((rFstar/wFstar)^(1-vee));LXFstar
## [1] 27.5365
KYFstar = (YSFstar/AF)*((alfa/beta)^beta)*((wFstar/rFstar)^beta);KYFstar
## [1] 4.580431
LYFstar = (YSFstar/AF)*((beta/alfa)^(1-beta))*((rFstar/wFstar)^(1-beta));LYFstar
## [1] 12.4635