How to add multiple objectives within an objective

(Arvind Krishna) #1

I want to my objective to be:
objective<-Minimize(norm2(a-b[1,]) + norm2(a-b[2,]) + ..... + norm2(a-b[n,]))

b is n x 2 matrix

How can I define this objective?

(Mark L. Stone) #2

You can use for loops to build up an objective. Or you can use sum. In this case you can use sum with norms to get an efficient vectorized calculation.

variable a(1,2)
minimize(sum(norms(repmat(a,n,1) - b,2,2)))

I leave you to check that this is correct. You can add constraints as appropriate.

help norms

norms Computation of multiple vector norms.
norms( X ) provides a means to compute the norms of multiple vectors
packed into a matrix or N-D array. This is useful for performing
max-of-norms or sum-of-norms calculations.

All of the vector norms, including the false "-inf" norm, supported
by NORM() have been implemented in the norms() command.
  norms(X,P)           = sum(abs(X).^P).^(1/P)
  norms(X)             = norms(X,2).
  norms(X,inf)         = max(abs(X)).
  norms(X,-inf)        = min(abs(X)).
If X is a vector, these computations are completely identical to
their NORM equivalents. If X is a matrix, a row vector is returned
of the norms of each column of X. If X is an N-D matrix, the norms
are computed along the first non-singleton dimension.

norms( X, [], DIM ) or norms( X, 2, DIM ) computes Euclidean norms
along the dimension DIM. norms( X, P, DIM ) computes its norms
along the dimension DIM.

Disciplined convex programming information:
    norms is convex, except when P<1, so an error will result if these
    non-convex "norms" are used within CVX expressions. norms is
    nonmonotonic, so its input must be affine.