How to setup gamultiobj to "explore farther" along a specific objective?

Overview: This question deals with a scenario where one of the objectives is "more important" than another, and we want the Pareto front to "mostly minimize" the important objective and have a large variability along the unimportant one.
Background: I am dealing with an optimization problem that consists of one "important" objective, and another "unimportant" one. Initially, it started out as single-objective optimization, but it produced results that "didn't make sense". In response, I've introduced a second objective, so as to keep the first one in check. However, I'm mainly interested in solutions that minimize the original objective. To put this graphically, let's say that this is the current output:
par1.png
where Objective 1 is the important objective and Objective 2 is the unimportant one. I'm more interested in the vertical region (where Obj1 is minimized) at the expense of the horizontal region. In other words, I'm interested in what is happening for Obj2 < 16.6, but instead I'm seeing Obj2>17, which I don't really care about.
I have a feeling that the optimization options can somehow help in getting the desired result, though playing around with various settings of optimopts(@gamultiobj, ...) (such as ParetoFraction and DistanceMeasureFcn), I couldn't get it to work.
My question is: How to set up the multi-objective GA optimization problem, such that more of the pareto is explored in a specific direction (while sacrificing the resolution and/or the distance along the other direction)? Alternatively, how to have more of the pareto explored in both directions (while sacrificing the resolution).
P.S.
I am aware of the possibility of defining a single objective that is a weighted sum of the present objectives, which would turn this into a question of choosing an appropriate weighting. However, this would be a last resort for me, so I would rather keep it as a multiple-objective problem.
P.S. 2
I am sure that solutions exist in the desired (unexplored) region.

 Accepted Answer

I've given up on trying to reconfigure gamultiobj and ended up taking the edge of the pareto, then feeding this into a 1D-optimizer (that only cares about the objective along which I'd like to explore further). This ended up generating several solutions with an improved score along that objective, I then fed all of these solutions back into the 2D optimizer - which adjusted them such that they were back on the front, and this finally resulted in the desired outcome (of further exploring the Pareto along a certain direction).

1 Comment

Did you use the results as the initial guess for the next step? i.e. the edge of the pareto as the initial guess of the 1D-optimizer and the result from the 1-D optimizer as the initial guess of the 2D-optimizer.

Sign in to comment.

More Answers (1)

Maybe redefine Obj2 so that it jumps from 16.6 to infinity,
Obj2 = Obj2-1+1/(Obj2<16.6)

5 Comments

Hi Matt, thank you for the answer.
I already had a similar mechanism in place to remove Obj1>1E4. The issue with this approach is that I don't know what the threshold for Inf should be in advance, as I'm running the optimization in several different configurations which result in different ranges of Obj1 and Obj2 (although Obj1>1E4 is a universal constraint).
Then how is the sub-region of the Pareto front of interest determined?
Ideally, in terms of Obj1, I would like to start from the point where it alone attains a minimum (as though there was no other objective), then populate the Pareto front until the knee, or about 100*minObj1. Although I might be satisfied if the solutions are simply more spread out (i.e. phenotype-wise) such that more of the Pareto is discovered.
Must I pre-compute the lower bound of Obj1? It should be pretty fast as I can use a gradient-based solver.
One of the causes of the pareto being concentrated around some set of solutions is that 'DistanceMeasureFcn', {@distancecrowding,'phenotype'} doesn't work with infinite scores, so I cannot use that in conjunction with "killing off" irrelevant solutions using Inf.
This is making me wonder, then, why you said you don't like the approach of scalarizing the objectives with different weights and varying the weights so as to sweep across the Pareto front. It seems like exactly the kind of thing that would give control over the Pareto front sampling that you want.
This is a valid question. I suppose that at this point it's a sunk cost fallacy situation. At one point in time it was important for me to demonstrate that two orthogonal objectives can be defined for this problem. Presently, it's more important to choose a solution from the pareto front (which I do not have enough of, due to sticking to the previous mindset).
I figured that tweaking the settings of gamultiobj might allow me to not have to re-solve the problem using a different method (where there is no longer a need for a genetic algorithm). So if this "low effort" approach leads to a dead end (c'est la vie), I'll just have to resort to the alternative of a scalarized objective.

Sign in to comment.

Categories

Find more on Signal Processing Toolbox in Help Center and File Exchange

Products

Release

R2019a

Asked:

on 11 Aug 2019

Edited:

on 23 Apr 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!