scaling parameter for multi objective function

I have two objective functions, but the formulation of one function has larger numbers than the other function. Therefore, the first function is more impact on the result. Probably, I should put a scaling parameter for the functions so that they become the same unit. Is there a any formula or method to determine these scaling numbers?
a=[33.5106 34.9787 36.4468 38.3830 40.3404 42.5213 44.7234 39.6915 33.5745 15.3298 -5.4681 -39.6702 -77.5957
-99.2447 -115.1489 -120.8404 -122.0638 -118.1809 -111.5745 -100.7979 -87.3404 -69.0426 -47.0213 -26.1489 -6.3298 9.8617
22.0957 34.6489 47.6170 58.0000 64.3617 69.0213 70.4894 70.6915 68.0000 64.3511 57.9894 49.6064 33.9468
18.5851 4.6383 -7.2660 -5.5532 -3.3511 3.9894 11.3191 18.4149 25.5106];
p(48) is variable
obj 1: (norm((( a + p)))^2
obj 2 : sum(0.004*(p^2)+0.075.*p+0.003)
obj1 + obj2
And I think, for example, because the coefficient of the objective function 2 is 0.004, it makes its effect very low on result. So objs should be united somehow

12 Comments

Torsten
Torsten on 11 Nov 2022
Edited: Torsten on 11 Nov 2022
No. That's the essence of multiobjective optimization: You must weigh the two (usually conflicting) targets of the two objectives according to your preferences.
Of course, if the outcomes of both objectives share the same physical quantity (e.g. energy), the unit should be the same for both objectives (e.g. Kilojoule). But usually, the units are not comparable (e.g. costs and environmental impact). Here, it's up to you to prescribe the appropriate weights.
I edited my question more clearly, I don't mean the weighting factor , I want them to be the same unit
I don't understand your objective functions. What is sum_square(aaa+p) ? What is aaa ? Why does aaa not appear in obj 2 ? sum(0.004*(p^2)+0.075.*p+0.003) is minimized if 0.004*(p^2)+0.075.*p+0.003 is minimal, thus for p = -0.075/0.008.
I edited it. There are 48 variables in 'p' and the objective functions has a series of constrians that I did not mention
And the answer remains the same: scaling is weighing. It is up to you to decide how you want to weigh the two objectives.
If you want to weigh them equally, you can put the constraint obj1 = obj2.
If you want to weigh them differently, you can put the constraint alpha*obj1 = obj2 for an alpha ~= 1.
i didn't understand. what the mean obj1 = obj2 ?
You can put as constraint
alpha * (norm((( a + p)))^2 = sum(0.004*(p^2)+0.075.*p+0.003)
can't you ?
No, it is not possible. The structure of the algorithm is multi-agent and two agents solve their objective function separately. It cannot be said that because one of the objectives function is multiplied by 0.004 to equalize the unit, it is multiplied by 250 as a weighting factor ؟
An alternative view-point is to take inspiration from "weighted least square"-fitting. There you normalize each residual with the corresponding variance:
If you similarly can associate something like a standard-deviation, uncertainty of the two objective functions then you have one way to select their relative weighting.
alpha * (norm((( a + p)))^2 = sum(0.004*(p^2)+0.075.*p+0.003)
is a usual nonlinear constraint on the parameter vector p.
It must be able to set it in every optimization code you use.
i did't understand . for example for this problem how should do I calculate the weighting factor?
You can't calculate a weighting factor. If you want to weigh both objectives equally, put the constraint
(norm((( a + p)))^2 = sum(0.004*(p^2)+0.075.*p+0.003)
If you think that minimizing objective 1 is twice as important as minimizing objective 2, set the constraint
2*(norm((( a + p)))^2 = sum(0.004*(p^2)+0.075.*p+0.003)

Sign in to comment.

Answers (0)

Asked:

on 11 Nov 2022

Edited:

on 11 Nov 2022

Community Treasure Hunt

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

Start Hunting!