endolith
endolith

Reputation: 26843

How to combine multiple objectives for optimization?

I don't know why this is so hard for me to figure out.

For example, I have two functions, f(x, y) and g(x, y). I want to find the values of x and y such that:

So if I were just finding a solution for f, I could minimize abs(f(x, y) - target), for instance, and it will hit zero when it's found a solution. But there are multiple such solutions and I also want to find the one that minimizes g.

So how do I combine these two functions into a single expression that I can then minimize (using a Newton-like method)?

My first attempt was 100*abs(f(x, y) - target) + g(x, y) to strongly emphasize hitting the target first, and it worked for some cases of the target value, but failed for others, since g(x, y) could go so negative that it dominated the combination and the optimizer stopped caring about f. How do I guarantee that f hitting the target is always dominant?

Are there general rules for how to combine multiple objectives into a single objective?

Upvotes: 3

Views: 3297

Answers (2)

Erwin Kalvelagen
Erwin Kalvelagen

Reputation: 16797

There is a rich literature about multi-objective optimization. Two popular methods are weighted objective and a lexicographic approach.

A weighted objective could be designed as:

min w1 * [f-target]^2 + w2 * g

for some weights w1, w2 >= 0. Often we have w1+w2=1 so we can also write:

min w1 * [f-target]^2 + (1-w1) * g

Set w1 to a larger value than w2 to put emphasis on the f objective.

The lexicographic method assumes an ordering of objectives. It can look like:

  1. Solve with first objective z = min [f-target]^2. Let z* be the optimal objective.
  2. Solve with the second objective while staying close to z*: min g subject to [f-target]^2-z* <= tolerance

To measure the deviation between the target and f I used a quadratic function here. You can also use an absolute value.

Upvotes: 4

Tony Ruth
Tony Ruth

Reputation: 1408

Since you cannot exactly get f(x,y)-target to be zero, you have to accept some amount of error. I will use the relative error r = abs((f(x, y) - target)/target).

A function which grows extremely rapidly with r should do the trick.

exp(r/epsilon) + g(x, y)

If I choose epsilon = 1e-10, then I know r has to be less than 1e-7, because exp(1000) is an enormous number, but when r is small, like r = 1e-12, then the exponential changes very slowly, and g(x,y) will be the dominant term. You can even take it a step further and calculate how close x and y are to their true value, but its usually just easier to adjust the parameter until you get what you need.

Upvotes: 0

Related Questions