bid.gms : Bid Evaluation

Description

A company obtains a number of bids from vendors for the supply
of a specified number of units of an item. Most of the submitted
bids have prices that depend on the volume of business.


Small Model of Type : MIP


Category : GAMS Model library


Main file : bid.gms

$title Bid Evaluation (BID,SEQ=19)

$onText
A company obtains a number of bids from vendors for the supply
of a specified number of units of an item. Most of the submitted
bids have prices that depend on the volume of business.


Bracken, J, and McCormick, G P, Chapter 3. In Selected Applications of
Nonlinear Programming. John Wiley and Sons, New York, 1968, pp. 28-36.

Keywords: mixed integer linear programmming, bid evaluation, micro economics
$offText

Set
   v       'vendors'                  / a*e /
   s       'segments'                 / 1*5 /
   vs(v,s) 'vendor bit possibilities'
   cl      'column labels'            / setup, price, q-min, q-max /;

Scalar req 'requirements' / 239600.48 /;

Table bid(v,s,cl) 'bid data'
             setup   price   q-min   q-max
   a.1     3855.84  61.150           33000
   b.1   125804.84  68.099   22000   70000
   b.2              66.049   70000  100000
   b.3              64.099  100000  150000
   b.4              62.119  150000  160000
   c.1    13456.00  62.190          165600
   d.1     6583.98  72.488           12000
   e.1              70.150           42000
   e.2              68.150   42000   77000;

* get minimum domains and ripple total cost up the segments
vs(v,s) = bid(v,s,'q-max');

loop(vs(v,s+1), bid(v,s+1,'setup') = bid(v,s,'setup') + bid(v,s,'q-max')*(bid(v,s,'price')-bid(v,s+1,'price')););

display bid;

Variable
   c          'total cost'
   pl(v,s)    'purchase level'
   plb(v,s)   'purchase decision';

Binary Variable plb;

Equation
   demand     'demand constraint'
   costdef    'cost definition'
   minpl(v,s) 'min purchase'
   maxpl(v,s) 'max purchase'
   oneonly(v) 'at most one deal';

demand..     req =e= sum(vs, pl(vs));

costdef..    c   =e= sum(vs, bid(vs,'price')*pl(vs) + bid(vs,'setup')*plb(vs));

minpl(vs)..  pl(vs) =g= bid(vs,'q-min')*plb(vs);

maxpl(vs)..  pl(vs) =l= bid(vs,'q-max')*plb(vs);

oneonly(v).. sum(vs(v,s), plb(vs)) =l= 1;

Model bideval / all /;

option optCr = 0.0;

solve bideval minimizing c using mip;