## Multiobjective optimization

Solver related questions
trengarajan
User
Posts: 3
Joined: 1 year ago

### Multiobjective optimization

GAMS documentation shows how to create a blended objective function whose weights can be used as objective coefficients in the usual sense for blended approach and priority determining weights for hierarchical approach. So, is it correct to say that if hierarchical is chosen (using the Multobj 1 solver option), then the actual magnitudes of the weights dont matter, only their ordering by absolute value? For example, suppose I have five objectives, obj 1 through obj 5 and I create a blended objective function that is a linear combination of these five. Then, any set of weights w1 through w5 would be equivalent to any other set of weights w1' through w5' such that ordering is preserved in absolute value?

Also, suppose I want to do a combo of blended and hierarchical: obj1 through obj5 are same priority (first) and blended with some weights, and the remaining two are same priority (second) and blended with some weights. I would define these two linear combinations (of three and two functions respectively) and finally define a "master" blended objective where the weight on the first is greater (in abs value) than weight on the second. I would set Multiobj to 1 in options file and be on my way. What if I then wanted to do 5-way hierarchical? I would need to redefine my master blended objective??

bussieck
Moderator
Posts: 113
Joined: 1 year ago

### Re: Multiobjective optimization

Your analysis is correct. For other readers, this is only for the GAMS/Gurobi solver. Anyhow, in case of "MultiObj=1" the coefficients in the master objective "just" help to build the different priority classes. When I implemented this, I had in mind that I wanted to go easily from a pure weighted to a pure hierarchical objective function. Doing a mix of weighted and hierarchical is more difficult. Indeed, you need to use the weight in the definition of the individual objective function and in the "master" objective you just specify the priority classes:

Code: Select all

``````set i objectives / z1*z5 /;
parameter priorClass(i), weight(i) / ... /;
variables z, obj(i);
equations master, defz1, ... defz5;
master..  z =e= sum(i, priorClass(i)*obj(i));
defz1.. obj('z1') =e= weight('z1')*(...);
defz2.. obj('z2') =e= weight('z2')*(...);
...
defz5.. obj('z5') =e= weight('z5')*(...);
model m /all/;

file fopt / gurobi.opt /;
putclose fopt 'MultObj 1';
m.optfile = 1; option solver=gurobi;

* Pure weighted optimization
priorClass(i) = 1;
solve m min z us lp;

* Pure hierarchical optimization
priorClass(i) = ord(i);
solve m min z us lp;

* Mixed weighted and hierarchical optimization
priorClass(i) = 1\$(ord(i)=1 or ord(i)=2) + 2\$(ord(i)>2);
solve m min z us lp;``````
Hope this helps,
-Michael