Quagliarella–Vicini (QV)

This family is represented by the QV1 constructor. Quagliarella and Vicini introduced the problem in "Sub-population policies for a parallel multiobjective genetic algorithm with applications to wing design" [27]. Huband et al. later reproduced the same formulation and parameter domain under the QV1 name [9].

Overview

QV1(; nvar) requires nvar >= 1 and has nobj = 2. The default n = 16 is the dimension used by Quagliarella and Vicini. The constructor retains the componentwise domain specified in both sources.

ProblemDefault nvarnobjLower boundUpper bound
QV1162-5.125.12

QV1 has no general equality or inequality constraints. An analytical Jacobian is registered. Hessians are not registered. The catalog metadata classifies both objectives as not strictly convex (:not_strictly_convex).

Jacobian at the individual objective minimizers

The first objective is not differentiable at $x=(0,\ldots,0)$, and the second is not differentiable at $x=(1.5,\ldots,1.5)$. The registered analytical Jacobian is therefore valid only away from these two points.

Consequently, Jacobian row 1 throws a DomainError at $(0,\ldots,0)$, whereas row 2 throws a DomainError at $(1.5,\ldots,1.5)$. The other row remains available at each point through eval_jacobian_row.

A full eval_jacobian(prob, x) call throws at either singular point. No positive tolerance is imposed: all other points are evaluated by the analytical formulas, subject to the range and precision of the input floating-point type.

Mathematical formulation

Let $F:[-5.12,5.12]^n\to\mathbb{R}^2$ be defined by $F(x)=(f_1(x),f_2(x))$, where $n\geq1$. The objectives are

\[\begin{aligned} f_1(x) &= \left[\frac{1}{n}\sum_{i=1}^{n} \left(x_i^2-10\cos(2\pi x_i)+10\right)\right]^{1/4},\\ f_2(x) &= \left[\frac{1}{n}\sum_{i=1}^{n} \left((x_i-1.5)^2-10\cos(2\pi(x_i-1.5))+10\right)\right]^{1/4}. \end{aligned}\]

Equivalently, both objectives are instances of the shifted expression

\[f_k(x)=\left[\frac{1}{n}\sum_{i=1}^{n} \left((x_i-a_k)^2-10\cos(2\pi(x_i-a_k))+10\right)\right]^{1/4}, \qquad a_1=0,\quad a_2=1.5.\]

Usage

julia> using MOProblems

julia> using Random

julia> prob = QV1();

julia> lower, upper = recommended_bounds(prob);

julia> rng = MersenneTwister(1234);

julia> α = rand(rng, prob.nvar);

julia> x = lower .+ α .* (upper .- lower);

julia> values = eval_f(prob, x);

julia> J = eval_jacobian(prob, x);

julia> (length(values), size(J))
(2, (2, 16))

Constructor reference

MOProblems.QV1Function
QV1(; nvar::Int = 16)

Construct the two-objective QV1 problem.

Requires nvar >= 1. Each variable is bounded in [-5.12, 5.12]. An analytical Jacobian is registered; objective Hessians are not registered.

The Jacobian rows are undefined at x == zeros(nvar) (row 1) and x == fill(1.5, nvar) (row 2). Evaluating the corresponding row throws a DomainError; objective values and the other row remain defined.

source