1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- SUBROUTINE CALCFC (N,M,X,F,CON)
- C Used by COBYLA routine
- C Computes aggregate cost and evaluate constraints
- IMPLICIT REAL*8 (A-H,O-Z)
- INCLUDE "param.inc"
- DIMENSION Z(14)
- DIMENSION X(*),CON(*)
- COMMON /PB/ NPROB
- COMMON /VARS/ Z
-
- C Some useful constants
- ZERO = 0.0D0
- ONE = 1.0D0
- TWO = 2.0D0
- C -------------------------------------------------------------------
- C Z (1:14) is a container for parameters passed between subroutines
- C
- C Z(1:3) NSC, NCE, NSE
- C Z(4:6) TAUSC, TAUCE, TAUSE
- C Z(7:9) PSC, PCE, PSE
- C Z(10:12) FSC, FCE, FSE
- C Z(13;14) AA, BB
- C
- C AA : ALPHA
- C BB : BETA
- C -------------------------------------------------------------------
- C X(1) X(2) X(3) number of users
- C X(4) X(5) X(6) tolls
- C X(7) X(8) X(9) fares
- C -------------------------------------------------------------------
- A1 = FSCR + ASCR * (POPSC - X(1))
- A2 = FCER + ACER * (POPCE - X(2))
- A3 = FSER + ASER * (POPSE - X(3))
- A4 = FSCT + CW / (TWO * Z(10)) + ASCT * (X(1) + X(3)) / Z(10)
- A5 = FCET + CW / (TWO * Z(11)) + ACET * (X(2) + X(3)) / Z(11)
- A6 = A4 + A5 - Z(13) * CW / (TWO * Z(11)) + (ONE - Z(13)) * SC
- F = (POPSC - X(1)) * A1 + X(1) * A4 +
- 1 (POPCE - X(2)) * A2 + X(2) * A5 +
- 2 (POPSE - X(3)) * A3 + X(3) * A6 +
- 3 PHI*(Z(10)+Z(11))+EF*Z(13)*Z(13)
- F = F / ( POPSC + POPCE + POPSE )
- C The following constraints are always met
- C 0 <= X(1) <= Nsc
- CON(1) = X(1)
- CON(2) = POPSC - X(1)
- C 0 <= X(2) <= Nce
- CON(3) = X(2)
- CON(4) = POPCE - X(2)
- C 0 <= X(3) <= Nse
- CON(5) = X(3)
- CON(6) = POPSE - X(3)
- C Equal costs for users sc
- CON(7) = X(4) + A1 - X(7) - A4
- CON(8) = -X(4) - A1 + X(7) + A4
- C Equal costs for users ce
- CON(9) = X(5) + A2 - X(8) - A5
- CON(10) = -X(5) - A2 + X(8) + A5
- C Equal costs for users se
- CON(11) = X(6) + A3 - X(9) - A6
- CON(12) = -X(6) - A3 + X(9) + A6
- IF (NPROB.EQ.10) THEN
- C Tolls are fixed
- CON(13) = X(4) - Z(4)
- CON(14) = - X(4) + Z(4)
- CON(15) = X(5) - Z(5)
- CON(16) = - X(5) + Z(5)
- CON(17) = X(6) - Z(6)
- CON(18) = - X(6) + Z(6)
- ELSEIF (NPROB.EQ.11) THEN
- C Fares are fixed
- CON(13) = X(7) - Z(7)
- CON(14) = - X(7) + Z(7)
- CON(15) = X(8) - Z(8)
- CON(16) = - X(8) + Z(8)
- CON(17) = X(9) - Z(9)
- CON(18) = - X(9) + Z(9)
- ELSEIF (NPROB.EQ.12) THEN
- C Tolls are fixed
- CON(13) = X(4) - Z(4)
- CON(14) = - X(4) + Z(4)
- CON(15) = X(5) - Z(5)
- CON(16) = - X(5) + Z(5)
- CON(17) = X(6) - Z(6)
- CON(18) = - X(6) + Z(6)
- CON(19) = - DABS(X(9)) + DABS(Z(14) * ( X(7) + X(8) ))
- ENDIF
- RETURN
- END
|