A geometric program (GP) is an optimization problem of the form
where are posynomials and are monomials. In the context of geometric programming (unlike standard mathematics), a monomial is a function from to defined as
where and . A posynomial is any sum of monomials.[1][2]
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 and taking the log of the objective and constraint functions, the functions , i.e., the posynomials, are transformed into log-sum-exp functions, which are convex, and the functions , 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.[7]
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. [7]