MATLAB Answers

Pareto Front of the multi-objective problem

13 views (last 30 days)
Zonghong Hu
Zonghong Hu on 28 Sep 2020 at 21:52
Commented: Walter Roberson on 29 Sep 2020 at 7:27
For Pareto Front of the multi-objective problem, we can only get the final 'optimal value curve' of the objective functions, so how can we get all the original objective values and therefore we can see the front clearly and also see all other results

  0 Comments

Sign in to comment.

Answers (1)

Walter Roberson
Walter Roberson on 29 Sep 2020 at 0:56
for both gamultiobj() and paretosearch() you can add an OutputFcn to the options structure.
If you look at https://www.mathworks.com/help/optim/ug/output-functions.html#OutputFunctionsForOptimizationToolboxExample-5 there is an example that calls fmincon with a helper function that records a history of all of the values available at each iteration. A modified version of that could be used for pareto searchs.
However: OutputFcn are called for every iteration not every time the objective function is called. If you want a record of the objective function calls and results, you would need to build that in to your objective function. (You might be interested in having a look at memoize() in that connection.)

  2 Comments

Zonghong Hu
Zonghong Hu on 29 Sep 2020 at 4:20
Hi Walter,
Thank you so much for answer my question and I really appreciate the example you mentioned to me. I have a check that when we modify the output function we can get the history 'Scores' of each iteration. Thanks for that.
However, I am not familier with what you said about the memoize() function. Can you share more details.
Thanks,
Zonghong
Walter Roberson
Walter Roberson on 29 Sep 2020 at 7:27
An example is given there.
The general idea is that instead of passing in your objective function, you would instead pass in a "memoized" function. The memoized function builds a cache of parameters and corresponding results, and if it is called again with the same parameters then instead of re-executing the function to determine the result, it just returns the result it got before.
However, you generally configure a fixed size cache for a memoized function -- you might, for example, configure it to record only the most recent 1000 different combinations of input parameters. WIth a function such as gamultiobj() or paretosearch(), the objective function can end up getting called thousands of times, so be careful when you set the size of the cache.
After the search function has run, you can use the properties of the memoized function handle to retrieve the list of parameters that were used, and the list of corresponding function values.
...
My experience is that if you have 1 or 2 independent variables, that it is not difficult to get out useful plots of the results. If you have 3 independent variables, then you start needing translucancy or spot size to encode the dependent variable instead of representing it more directly, and that starts getting difficult to interpret. If you have more than 3 independent variables, then making a plot that can show the interaction of parameters clearly gets pretty tough.
I am therefore concerned that your plan to "see the front clearly" by examining all of the values might not be effective due to difficulties in visualization.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!