About Install Documentation Problems Tree Forum Save your money
via IT outsourcing!

Ukrainian HI-TECH Initiative

MINLP

From OpenOpt

Jump to: navigation, search
Mixed-Integer Non-Linear Problems (MINLP)
\mathbf {f(x) \to min,\ max}
subjected to
\mathbf{lb} \le \mathbf{x} \le \mathbf{ub}
\mathbf{A x} \le \mathbf{b}
\mathbf{A}_\mathbf{eq} \mathbf{x} = \mathbf{b}_\mathbf{eq}
 \mathbf{\forall i=0,...,I: c_i(x) \le 0}
 \mathbf{\forall j=0,...,J: h_j(x) = 0}
 \mathbf{\forall k \in \{k_1,k_2,...k_m\}: x_k \in S_k}
\mathbf{S_k\ is\ a\ set\ of\ values\ from\ R}
 \mathbf{ \{ {f, c_i, h_j :R^n \to R \} \subset C^1}}
(smooth differentiable functions)
\mathbf{x \in R^n}


MINLP solvers connected to OpenOpt:

Solver License Algorithm Authors Info
branb BSD branch-and-bound Ingar Solberg, Institutt for teknisk kybernetikk, Norges Tekniske Hrgskole, Norway This is translation of MATLABs fminconset routine to Python (by Dmitrey, with some minor changes). It recuires parameter "nlpSolver" like "ipopt', "scipy_lbfgsb", "scipy_tnc" etc for solving NLP subproblems. Using ralg solver is not recommended, because currently it doesn't handle problems with fixed coords efficiently, while they are encountered very often during solving a MINLP.

Note!

  • MINLP is NP-Hard class of problems.
  • Please pay attention: objective function and non-linear constraints should be defined in whole R^nVars, i.e. for discrete variables as well as for continuous.
  • It is assumed that objective function and constraints are at least unimodal (convex is preferred). If it is not the case, you'd better markup your Sk with ranges of integer values (like [-3,-2,-1,0,1,2,3,4,5]) and involve galileo solver from GLP (don't forget to provide correct lb and ub). Non-linear constraints can be handled by rather big penalty S: F(x) = f(x) + S * max(0,ci(x)) + S * max(abs(hj(x))), same trick for linear constraint if any are present.
Then, for each problem with fixed doscrete values you should solve Non-Linear subproblem with unfixed continuous variables via an NLP/NSP solver, i.e.

def auxObjFunc(z):
 # z_i are components of continuous variables
 # solve NLP (or NSP, if penalties for constraints are present) for objFunc(y) = f(y,Z) for Z = z (fixed), 
 # y are continuous variables, z are discrete ones
 # eg if your discrete variables are in the tail of vector of optimized variables you could use
 objFunc = lambda y: f(hstack((y,z)))
 p2 = NLP(objFunc, zeros(len(y)), ...)
 r2 = p2.solve('ralg') # or another solver
 return r2.ff

p = GLP(auxObjFunc, lb=lb, ub=ub)
r = p.solve('galileo')


Retrieved from "http://openopt.org/MINLP"
Personal tools
Latest OOSuite 0.29