# Geometric programming

A geometric program (GP) is an optimization problem of the form

${\displaystyle {\begin{array}{ll}{\mbox{minimize}}&f_{0}(x)\\{\mbox{subject to}}&f_{i}(x)\leq 1,\quad i=1,\ldots ,m\\&g_{i}(x)=1,\quad i=1,\ldots ,p,\end{array}}}$

where ${\displaystyle f_{0},\dots ,f_{m}}$ are posynomials and ${\displaystyle g_{1},\dots ,g_{p}}$ are monomials. In the context of geometric programming (unlike standard mathematics), a monomial is a function from ${\displaystyle \mathbb {R} _{++}^{n}}$ to ${\displaystyle \mathbb {R} }$ defined as

${\displaystyle x\mapsto cx_{1}^{a_{1}}x_{2}^{a_{2}}\cdots x_{n}^{a_{n}}}$

where ${\displaystyle c>0\ }$ and ${\displaystyle a_{i}\in \mathbb {R} }$. A posynomial is any sum of monomials. [1][2]

Geometric programming is closely related to convex optimization: any GP can be made convex by means of a change of variables. [2] GPs have numerous applications, including component sizing in IC design[3][4], aircraft design[5], and maximum likelihood estimation for logistic regression in statistics.

## Convex form

Geometric programs are not in general convex optimization problems, but they can be transformed to convex problems by a change of variables and a transformation of the objective and constraint functions. In particular, after performing the change of variables ${\displaystyle y_{i}=\log(x_{i})}$ and taking the log of the objective and constraint functions, the functions ${\displaystyle f_{i}}$, i.e., the posynomials, are transformed into log-sum-exp functions, which are convex, and the functions ${\displaystyle g_{i}}$, i.e., the monomials, become affine. Hence, this transformation transforms every GP into an equivalent convex program. [2] In fact, this log-log transformation can be used to convert a larger class of problems, known as log-log convex programming (LLCP), into an equivalent convex form. [6]

## Software

Several software packages exist to assist with formulating and solving geometric programs.

• MOSEK is a commercial solver capable of solving geometric programs as well as other non-linear optimization problems.
• CVXOPT is an open-source solver for convex optimization problems.
• GPkit is a Python package for cleanly defining and manipulating geometric programming models. There are a number of example GP models written with this package here.
• GGPLAB is a MATLAB toolbox for specifying and solving geometric programs (GPs) and generalized geometric programs (GGPs).
• CVXPY is a Python-embedded modeling language for specifying and solving convex optimization problems, including GPs, GGPs, and LLCPs. [6]