MODEL:   !  munbndt;
! Bond bidding and underwriting.
    The borrower has specified how much it wants
  to pay back in face value in each of a number
  of future maturity years.
    The bond underwriter wants to choose an interest
  rate(or coupon payment) for each maturity given that
   a) borrower has restricted the number of distinct
       interest rates allowed,
   b) underwriter knows the market price at which he can
      resell a bond of a given maturity and interest rate,
 and so as to strike a good compromise between the two
 objectives:
   i) underwriter makes a reasonable profit on the resale,
   ii) the bid is attractive to the borrower in terms of
      low interest rates and amount of money he receives
      initially.
 This model puts a constraint on (i) and makes it attractive
 to the borrower by minimizing the IRR (the so-called 
 True Interest Cost) of the cash stream as seen by the borrower.
 The underwriter pays the borrower the face value of the bonds,
  plus perhaps a premium;
! Keywords: municipal bonds, bond bidding,
   true interest cost, underwriting;
SETS: 
  MATURITY:
   YRS2GO, ! Years to maturity for this maturity;
   FACEV;  ! Total face value bonds at this maturity;
  RATE:
   CRATE,  ! A possible coupon or interest rate;
   Y;      ! = 1 if rate i used for any maturity; 
  RXM( RATE, MATURITY):
     X,      ! = 1 if rate i assigned to maturity t;
     PRICE;  ! Selling price of bonds at interest i, maturity t;
ENDSETS
DATA: ! Based on an example in Eppen, Gould, and Schmidt, which was based on an example in Schrage(1986); MATURITY= M01, M02, M03, M04, M05, M06; YRS2GO= 2, 3, 4, 5, 6, 7; FACEV = 250, 425, 1025, 1050, 1100, 1150; RATE = R300, R325, R350, R375, R400, R425, R450, R475, R500; CRATE = .0300, .0325, .0350, .0375, .0400, .0425, .0450, .0475, .050; ! Max number of rates allowed; NRATES = 3; ! Target profit for underwriter; TARGPR = 40; ! What underwriter thinks it can sell each maturity at as a function of coupon rate; PRICE = 245, 418, 1015, 1040, 1080, 1130, 248, 422, 1016, 1042, 1084, 1135, 250, 423, 1017, 1044, 1085, 1140, 251, 424, 1025, 1046, 1090, 1150, 253, 430, 1029, 1050, 1095, 1155, 255, 435, 1035, 1055, 1096, 1160, 256, 437, 1037, 1060, 1105, 1165, 257, 440, 1038, 1062, 1110, 1170, 258, 441, 1040, 1065, 1115, 1175; ENDDATA !-------------------------------------------------------------; ! The model; ! Each maturity must get a rate; @FOR( MATURITY( T): @SUM( RATE( I): X( I, T)) = 1; ); ! Set Y( I) = 1 if we use rate I; @FOR( RXM( I, T): X( I, T) <= Y( I); ! The X's must be 0 or 1; @BIN( X( I, T)); ); ! Limit number of rates; @SUM( RATE: Y) <= NRATES; ! Compute total sales if sold on market; TOTSALE = @SUM( RXM( I, T): PRICE( I, T)* X( I, T)); ! Compute total face value; TOTFV = @SUM( MATURITY: FACEV); ! Sources = uses of funds in period 0; TOTSALE = TOTFV + PREMIUM + TARGPR ; ! Compute true interest cost; TOTFV + PREMIUM >= @SUM( RXM( I, T): X( I, T) * CRATE( I) * FACEV( T) * @FPA( TIC, YRS2GO( T))) + @SUM( MATURITY( T): FACEV( T) * @FPL( TIC, YRS2GO( T))); ! Minimize True Interest Cost to borrower; MIN = TIC; END