# Weighted single objective over several criteria
#
# Trades profit against risk inside one objective row. The language admits a
# single min or max per model, so combining criteria is done by weighting
# them rather than by declaring several objectives. Varying the weights
# traces the convex hull of the efficient set, though not points lying in a
# non-convex dent -- for those, bound the secondary criterion instead.
#
# Technique: A model has exactly one objective, so competing criteria are
# folded into it as a weighted sum with non-negative weights.
#
# On this instance the optimum is 11 (maximisation), confirmed
# independently by exhaustive enumeration before publication.
#
# Reference: Zadeh, L. (1963). Optimality and non-scalar-valued performance
# criteria. IEEE Transactions on Automatic Control 8(1), 59–60.
# doi:10.1109/TAC.1963.1105511
model m
set I = {1, 2, 3, 4, 5, 6, 7}
const p = {2, 2, 6, 4, 6, 9, 6}, forall i in I
const r = {3, 5, 3, 1, 8, 4, 9}, forall i in I
bin x, forall i in I
# one objective row: the two criteria are weighted into it
max 2 * sum_{i in I}{p_{i} * x_{i}} - 3 * sum_{i in I}{r_{i} * x_{i}}
constr sum_{i in I}{x_{i}} <= 2
end
import elytica
Read this through MCP: read with path: "formulations/weighted-single-objective", or resource hlpl://formulations/weighted-single-objective.