! An advertising agency wants to solve a 
 media selection problem for one of its clients.
 Ads can be placed in various media.
 These ads are intended to reach various demographic groups.
 Based on viewing and readership data, we have built a table
 giving the number of exposures obtained in each of several
 market segments per dollar spent on advertising in each medium.
 For each market segment we have decided upon:
  1) a minimum desired number of exposures. The feeling is that
     we must reach this minimum number of readers/viewers, regardless of cost. 
  2) a saturation level. The feeling is that exposure beyond this level is of
     no value. 
 Exposures between these two limits will be termed useful exposures.
 Given an advertising spend budget, as well as a target
 minimum of total useful exposures over all markets, 
 how much should be spent on advertising in each medium? ;
! Keywords: Advertising, Marketing, Media selection, Reach;
SETS:
  MEDIA: ADSPEND ;  ! The set of media;
  SEGMENT: USX, MNDESIRED, MXUSEFUL, TOTX ; !Market segments;
  SXM( SEGMENT, MEDIA): XPD;
ENDSETS
DATA: ! All data are in 1000's; BUDGET = 11; ! Advertising budget in $1000; MINTOT = 330; ! Required Min total useful exposures; ! The market segments; SEGMENT = SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7; MNDESIRED= 25 40 60 120 40 11 15; MXUSEFUL = 60 70 120 140 80 25 55; ! The available media: Late night TV, Prime time TV, Newspapers, BillBoards, Radio; MEDIA = TVL TVP BLB NEW RAD; ! Exposures Per Dollar by segment and medium; XPD = 0 0 20 8 0 ! SEG1; 10 10 0 0 6 ! SEG2; 4 30 0 0 5 50 5 0 0 10 5 12 0 0 11 0 0 5 6 4 2 0 3 10 0; ! SEG7; ENDDATA SUBMODEL FINDADSPEND: MAX = USEFULX ; ! Maximize useful exposures; COST <= BUDGET; ! Limit (in $1,000) on cost; USEFULX >= MINTOT;! Required total useful exposures; @SUM( MEDIA(j): ADSPEND(j)) = COST; ! Compute total cost; @SUM( SEGMENT(i): USX(i)) = USEFULX; ! Compute total useful; @FOR( SEGMENT( i): TOTX(i) = @SUM( MEDIA( j): XPD(i,j)*ADSPEND(j)); TOTX(i) >= MNDESIRED(i); ! Achieve min in each segment; USX(i) <= MXUSEFUL(i); ! Do not count exposures above Max; USX(i) <= TOTX(i); ); ENDSUBMODEL
CALC: @SET( 'TERSEO',2); ! Output level (0:verb, 1:terse, 2:only errors, 3:none); @SOLVE( FINDADSPEND); @WRITE(' Recommended Ad Spend:', @NEWLINE(1), ' Medium Spend', @NEWLINE(1)); @FOR( MEDIA( j): @WRITE(' ', MEDIA(j),' ', @FORMAT( ADSPEND(j),'7.3f'), @NEWLINE(1)); ); @WRITE(' Total spend=',@FORMAT( COST, '8.3f'), @NEWLINE(2)); @WRITE(' Exposures in Each Market Segment:', @NEWLINE(1), ' Segment Min_Needed Total Useful', @NEWLINE(1)); @FOR( SEGMENT(i): @WRITE(' ', SEGMENT(i),' ', @FORMAT( MNDESIRED(i),'5.1f'),' ', @FORMAT( TOTX(i),'7.3f'),' ',@FORMAT( USX(i),'7.3f'), @NEWLINE(1)); ); @WRITE(' Total useful= ',@FORMAT( USEFULX, '8.3f'),@NEWLINE(1)); ENDCALC