! Preemptive Goal programming ( GoalProgBike)
illustration based on example in Lawrence and Pasternack,
Applied Management Sciences;
! Keywords: Goal Programming, Preemptive Criteria;
SUBMODEL GOALP:
! Variables:
X1 = number of B2 (tandem) bicycles produced,
X2 = number of S10 (10 speed) bicycles produced
Ui = under achievement of goal,
Ei = excess achievement of goal;
! Hard constraints;
! Seat limitation;
2*X1 + X2 <= 2000;
! Gear assemblies;
X2 <= 1000;
! Tires available;
2*X1 + 2*X2 <= 2400;
! Soft constraints;
! Priority 1: Produce at least 400 B2 cycles;
X1 + U1 - E1 = 400;
! Priority 2: Produce at least 1000 cycles;
X1 + X2 + U2 - E2 = 1000;
! Priority 3: ( Two weighted criteria),
Profit close to 100 ( in 1000's);
0.04*X1 + 0.10*X2 + U31 - E31 = 100;
! Use no more than 1600 hours of labor;
2*X1 + 3*X2 + U32 - E32 = 1600;
! Priority 4: (Two weighted criteria)
Use no more than 2200 tires;
2*X1 + 2*X2 + U41 - E41 = 2200;
! Use no more than 900 gear assemblies;
X2 + U42 - E42 = 900;
! Define the goals;
V1 = U1;
V2 = U2;
V3 = 30*U31 + E32;
V4 = E41 + 2*E42;
! In Preemptive Goal Programming, we will
successively put bounds on the goals;
V1 <= UB1;
V2 <= UB2;
V3 <= UB3;
V4 <= UB4;
! Minimize a selectively weighted sum of the goals;
MIN = WGT1*V1 +WGT2*V2 + WGT3*V3 + WGT4*V4;
ENDSUBMODEL
CALC:
BIGM = 9999999;
! Initially no bounds on the goals;
UB1 = BIGM;
UB2 = BIGM;
UB3 = BIGM;
UB4 = BIGM;
! And all the weight is on priority 1 goal;
WGT1 = 1;
WGT2 = 0;
WGT3 = 0;
WGT4 = 0;
@set('TERSEO',2); !Turn off default output;
! Optimize goal 1;
@SOLVE( GOALP);
@WRITE('Priority X1 X2 V1 V2 V3 V4',@NEWLINE(1));
@WRITE( ' 1: ', @FORMAT( X1,'8.2F'),@FORMAT( X2,'8.2F'),
@FORMAT( V1,'8.2F'), @NEWLINE(1));
! Optimize goal 2;
UB1 = V1; ! Cannot do worse on priority 1;
WGT1 = 0;
WGT2 = 1; ! Now put weight on priority 2 goal;
@SOLVE( GOALP);
@WRITE( ' 2: ',@FORMAT( X1,'8.2F'),@FORMAT( X2,'8.2F'),
@FORMAT( V1,'8.2F'),@FORMAT( V2,'8.2F'),@NEWLINE(1));
! Optimize goal 3;
UB2 = V2;
WGT2 = 0;
WGT3 = 1;
@SOLVE( GOALP);
@WRITE( ' 3: ',@FORMAT( X1,'8.2F'),@FORMAT( X2,'8.2F'),
@FORMAT( V1,'8.2F'),@FORMAT( V2,'8.2F'),
@FORMAT( V3,'8.2F'),@NEWLINE(1));
! Optimize goal 4;
UB3 = V3;
WGT3 = 0;
WGT4 = 1;
@SOLVE( GOALP);
@WRITE( ' 4: ',@FORMAT( X1,'8.2F'),@FORMAT( X2,'8.2F'),
@FORMAT( V1,'8.2F'),@FORMAT( V2,'8.2F'),
@FORMAT( V3,'8.2F'),@FORMAT( V4,'8.2F'),@NEWLINE(1));
ENDCALC
|