Sunday, February 7, 2010

Efficient frontiers in MIP models

My first attempt in creating an efficient frontier between competing objectives failed somewhat.

image

The objective was:

obj.. wsum =e= lambda*TotFamilies + (1-lambda)*TotAgRevenue;

Looking at the solution data:

scen lambda wsum agrevenue Families
f1 0% 1030.344 1030.343553 340148
f2 4% 15382.14 1017.455397 345770
f3 8% 29745.33 1017.81362 345748
f4 13% 44107.68 1017.630868 345738
f5 17% 58468.76 1017.707789 345724
f6 21% 72835.88 1017.955018 345744
f7 25% 87204.65 1017.872265 345765
f8 29% 101566.6 1018.032087 345756
f9 33% 115924.7 1018.032087 345738
f10 38% 130285.8 1018.054461 345732
f11 42% 144653.8 1017.955018 345744
f12 46% 159020.3 1017.358215 345751
f13 50% 173384.2 1017.358215 345751
f14 54% 187744.6 1017.955018 345744
f15 58% 202108.1 1017.955018 345744
f16 63% 216471.7 1017.955018 345744
f17 67% 230835.3 1017.955018 345744
f18 71% 245203.7 1017.358215 345751
f19 75% 259555.7 1017.927741 345735
f20 79% 273917.2 1017.290331 345733
f21 83% 288285.5 1018.062319 345739
f22 88% 302648.9 1018.062319 345739
f23 92% 317028.7 1017.683527 345757
f24 96% 331378.5 1017.001386 345742
f25 100% 345757 1017.683527 345757

the objectives have numbers that differ in magnitudes. After changing the objective to:

obj.. wsum =e= lambda*TotFamilies/300 + (1-lambda)*TotAgRevenue;

the graph came out much better:

image

As this is a MIP you don’t necessarily get a new point for each lambda: different lambda’s one may actually yield the same solution. I have not drawn lines between the points as that would suggest any location on the line would be a valid solution, which for this MIP is not the case.