anriseth / MultiJuMP.jl

MultiJuMP enables the user to easily run multiobjective optimisation problems and generate Pareto fronts.
Other
61 stars 11 forks source link

generation of dominated solutions with WeightedSum Method #32

Open Rym28 opened 5 years ago

Rym28 commented 5 years ago

I'm using the Weighted Sum method of the the package MultiJuMP.

Normally I generate a set on non-dominated solutions. However, in running the my ILP model with the weighted sum method, I got solutions which are dominated by ither solutions.

I can't understand this issue

Example I obtain for ILP model with 3 bjectives these trade-offs [0.683333, 0.0178571, 0.428571];[0.683333, 0.0535714, 0.285714] [0.683333, 0.0580357, 0.285714];

So, the second tradeoff dominates the third trade-off. So, i don't kniw if it's is an issue or what ?

thanks

anriseth commented 5 years ago

If your underlying solver that minimises the weighted sum only finds local solutions then you may end up in such situations.

It could also be an issue related to how the tolerances are set for the underlying solver.

Rym28 commented 5 years ago

In my case, the first objective it should be maximized and the second and the third should be minimized. Otherwise, i don(t have au think related to the tolerance.

My mode:

mmodel = MultiModel(solver = CplexSolver(), linear = true)

@variable(mmodel, lbd[1:n,1:M], Bin) @variable(mmodel, phi[1:M], Bin) @constraint(mmodel, [i = 1:n], (sum(lbd[i,j] for j=1:M) <= 1)) @constraint(mmodel, [j = 1:M], (sum(lbd[i,j]cpu[i] for i=1:n) <= CPU[j])) @constraint(mmodel, [j = 1:M], (sum(lbd[i,j]ram[i] for i=1:n) <= RAM[j])) @constraint(mmodel, [j = 1:M], (sum(lbd[i,j]*disk[i] for i=1:n) <=DISK[j])) @constraint(mmodel, [i = 1:n,j=1:M], (lbd[i,j] <= phi[j])) @constraint(mmodel, [j = 1:M], (phi[j]<=sum(lbd[i,j] for i=1:n)))

obj111 = @expression(mmodel, (sum(lbd[i,j] for i in 1:n, j in 1:M)/n)) obj222 = @expression(mmodel,(((sum(3-(sum(((cpu[i]lbd[i,j])/Cmax[j])+((ram[i]lbd[i,j])/Rmax[j])+((disk[i]lbd[i,j])/Dmax[j]) for i=1:n)) for j=1:M)-(3(M- sum(phi[j] for j=1:M)))))/((3)*M))) obj333 = @expression(mmodel, (sum(phi[j] for j=1:M)/M))

obj11111 = SingleObjective(obj111,sense = :Max) obj22222 = SingleObjective(obj222,sense = :Min) obj33333 = SingleObjective(obj333,sense = :Min)

multim = getMultiData(mmodel) multim.objectives = [obj11111,obj22222,obj33333]

solve(mmodel, method = :WS)

Thanks

anriseth commented 5 years ago

How are you extracting the objective values from your first post?