I’m using MultiJuMP.jl to solve a MOO problem with 2 objectives, f1 and f2. Here, f1 is a continuous function to minimize, f2 is an integer function to maximize.

When I post model.pointsperdim = 10, I got a pareto front with 10 points(in blue). Compared values of f1 for the same value of f2, the points linked with red line might be better. So I decrease the number of points to 7

The result with model.pointsperdim = 7 is below, I got different result:

Again, with model.pointsperdim = 5, only 2 points in pareto front are catched:

Why this happens? How many points in pareto front are appropriate?

The result might due to the fact that the variables are not exactly integers. You can see in the table below, each column corresponds to one point in the pareto front plot. In my case, f2 is the sum of six elements(values for each row). As there are values of 0.99999999, f2 are not exactly equal to each other for the 5th point and the 6th point.

It’s hard to say anything without a reproducible example.

Note that no solver will produce values which are exactly integers; they all use some sort of tolerance to check whether the value is “integer.” In this case, values like 0.999999 are expected.