On this page:
<require>
<provide>
<matrix>
<solve>
<run-example>
<*>

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))

(define (run-example)
  <matrix>
  <solve>)

Running it.

(vector-ref (scs-result-x (run-example)) 2)   ; ~ 4.0 = sqrt(2*8)

<*> ::=