3.6 Power cone
The power cone K_pow(a) = {(x, y, z) : x^a · y^(1−a) ≥ |z|, x ≥ 0, y ≥ 0} with parameter a ∈ [0, 1] captures weighted geometric means. As a small demonstration we maximize the geometric mean coordinate:
maximize z
subject to (x, y, z) ∈ K_pow(½), x = 2, y = 8
With a = ½ the cone reads √(x·y) ≥ |z|, so z ≤ √(2·8) = 4; the optimum is z = 4.
(require scs)
(provide run-example)
Layout.
Pin x and y with two zero cone rows, then drop the slack (x, y, z) into the power cone with an A = −I block. SCS minimizes, so maximizing z means c = (0, 0, −1).
(define A (scs:matrix 5 3 1 0 0 ; x = 2 (zero cone) 0 1 0 ; y = 8 -1 0 0 ; power-cone block: s = (x, y, z) 0 -1 0 0 0 -1))
#:power takes a list of parameters in [−1, 1]; a positive value a selects K_pow(a) and a negative value selects the dual power cone.
(solve #:A A #:b #(2.0 8.0 0.0 0.0 0.0) #:c #(0.0 0.0 -1.0) #:cone (make-cone #:zero 2 #:power '(0.5)) #:settings (make-settings #:eps-abs 1e-9 #:eps-rel 1e-9))
Running it.
(vector-ref (scs-result-x (run-example)) 2) ; ~ 4.0 = sqrt(2*8)