decentralize.f 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. SUBROUTINE DECENTRALIZE (FSC,FCE,AA,PSC,PCE,BB,
  2. 1 TAUSC,TAUCE,TAUSE,USCT,UCET,USET,TC,ID)
  3. C
  4. C Compute optimal tolls or optimal fares (optimal means that
  5. C we seek to reduce total cost)
  6. C
  7. IMPLICIT REAL*8 (A-H,O-Z)
  8. DIMENSION Z(14), X(9), W(3000), IACT(51), CON(18)
  9. INCLUDE "param.inc"
  10. COMMON /PB/ NPROB
  11. COMMON /VARS/ Z
  12. C
  13. C Set type of the problem
  14. C ID = 10, find optimal fares (tolls given)
  15. C ID = 11, find optimal tolls (fares given)
  16. C
  17. NPROB = ID
  18. C Some useful constants
  19. ZERO=0.0D0
  20. ONE=1.0D0
  21. TWO=2.0D0
  22. C The number of variables (N) and constraints (M)
  23. N = 9
  24. M = 18
  25. C set parameters and vector block Z
  26. Z(4) = TAUSC
  27. Z(5) = TAUCE
  28. Z(6) = TAUSE
  29. Z(7) = PSC
  30. Z(8) = PCE
  31. Z(14) = BB
  32. Z(10) = FSC
  33. Z(11) = FCE
  34. Z(13) = AA
  35. C set initial solutions
  36. X(1) = USCT
  37. X(2) = USCE
  38. X(3) = USSE
  39. X(4) = TAUSC
  40. X(5) = TAUCE
  41. X(6) = TAUSE
  42. X(7) = PSC
  43. X(8) = PCE
  44. X(9) = PSE
  45. C Set parameters for cobyla
  46. RHOBEG=3.5D0
  47. RHOEND=1.0D-9
  48. IPRINT=0
  49. MAXFUN=2000
  50. C Call cobyla routine
  51. CALL COBYLA(N,M,X,RHOBEG,RHOEND,IPRINT,MAXFUN,W,IACT,IERR)
  52. C PRINT '(9F9.2)', X(1:9)
  53. C PRINT '(9F9.2)', Z(1:9)
  54. USCT = X(1)
  55. UCET = X(2)
  56. USET = X(3)
  57. TAUSC = X(4)
  58. TAUCE = X(5)
  59. TAUSE = X(6)
  60. PSC = X(7)
  61. PCE = X(8)
  62. PSE = X(9)
  63. BB = PSE / ( PSC + PCE )
  64. CALL CALCFC(N,M,X,TC,CON)
  65. C PRINT '(9F9.2)', CON(1:9)
  66. C PRINT '(9F9.2)', CON(10:18)
  67. C CALL EQUILUSERS(X(1),X(2),X(3),Z(1),Z(2),Z(3),USCT,UCET,USET)
  68. C WRITE (*,'(4F9.4)') TC, USCT,UCET,USET
  69. C WRITE (*,'(6F8.3)') TAUSC,TAUCE,TAUSE,PSC,PCE,BB
  70. RETURN
  71. END