# Secondary criterion moved into a constraint
#
# Maximises profit subject to an explicit ceiling on total risk. Since only
# one objective may be declared, the second criterion becomes a constraint
# rather than a weighted term. This reaches efficient points a weighted sum
# cannot, including ones in a non-convex region, at the cost of one solve
# per bound value.
#
# Technique: Keep one criterion in the single objective row and impose the
# others as bounds, re-solving for different bound values.
#
# On this instance the optimum is 12 (maximisation), confirmed
# independently by exhaustive enumeration before publication.
#
# Reference: Haimes, Y. Y., Lasdon, L. S. and Wismer, D. A. (1971). On a
# bicriterion formulation of the problems of integrated system
# identification and system optimization. IEEE Transactions on Systems, Man,
# and Cybernetics 1(3), 296–297. doi:10.1109/TSMC.1971.4308298
model m
set I = {1, 2, 3, 4, 5}
const p = {2, 4, 2, 2, 8}, forall i in I
const r = {1, 7, 8, 1, 8}, forall i in I
const eps = 11
bin x, forall i in I
max sum_{i in I}{p_{i} * x_{i}}
# the second criterion is a bound, since only one objective may be declared
constr sum_{i in I}{r_{i} * x_{i}} <= eps
end
import elytica
Read this through MCP: read with path: "formulations/criterion-as-constraint", or resource hlpl://formulations/criterion-as-constraint.