I have a nonlinearly-constrained model and wonder if a nonlinear solver like Ipopt or Knitro can solve the problem.

Briefly, my objective function is linear. I have the following variables with their associated domains: $d^\tau_i, d^\rho_o, y_{ij}, \eta_{ij}\in \mathbb{R}_{\geq 0}$ and $x_i, z_{oo^\prime}\in \{0,1\}$. The used sets are $\mathcal{I}$, $\mathcal{O}$, and $\mathcal{V}=\mathcal{I}\cup\mathcal{O}$. You may assume all variables are created based on $\mathcal{V}$ to sort of ease the interpretability. All symbols other than the aforementioned are parameters in $\mathbb{R}_{\geq 0}$. I have a bunch of linear constraints listed below (big M has a tight bound):

\begin{equation} \sum_{o\in\mathcal{O}}y_{io} \leq K_i \qquad \forall i\in\mathcal{I}. \end{equation}

\begin{equation} K_i x_i \geq y_{io} \qquad \forall i\in\mathcal{I}, o\in\mathcal{O}. \end{equation}

\begin{equation} L_i^\tau \leq d^\tau_i \leq U_i^\tau \qquad \forall i\in\mathcal{I}. \end{equation}

\begin{equation} L_o^\rho \leq d^\rho_o \leq U_o^\rho \qquad \forall o\in\mathcal{O}. \end{equation}

\begin{equation} y_{o o^\prime} \leq \mathbb{M} z_{oo^\prime}, z_{oo^\prime}+z_{o^\prime o} \leq 1 \qquad \forall o,o^\prime \in \mathcal{O} \end{equation}

and the following nonlinear constraints:

\begin{equation} \sum_{o^\prime\in\mathcal{O}\land o^\prime\neq o}y_{oo^\prime} \leq \sum_{j\in\mathcal{V}\land j\neq o}\eta_{jo}y_{jo} \qquad \forall o\in\mathcal{O}. \end{equation}

\begin{equation} \sum_{j\in\mathcal{V}\land j\neq o}\eta_{jo}y_{jo} \geq E_o \qquad \forall o\in\mathcal{O}. \end{equation}

and the following additional nonlinear constraints including the exponential function:

\begin{equation} \eta_{io} = 1-e^{\displaystyle d^\tau_i d^\rho_o} \qquad \forall i\in\mathcal{I}, o\in\mathcal{O}. \end{equation}

\begin{equation} \eta_{oo^\prime} = 1-e^{\displaystyle d^\rho_o d^\rho_{o^\prime}} \qquad \forall o,o^\prime\in\mathcal{O}, o\neq o^\prime. \end{equation}

As you may notice, the above are the sources of the nonlinearity. As a person living in the linear world, I am not sure (aware) if Knitro or Ipopt can handle such a model as there exists a chain of continuous variable multiplications. If they can do so, what do you think the magnitude of $|\mathcal{V}|$ it can tackle?

I guess, I should also clarify that I am not chasing the global optimality when I ask if the above nonlinear solvers can handle the problem. A locally optimal solution (if one exists) could be satisfactory.

  • $\begingroup$ If $x$ and $z$ are binary variables, this is an MINLP and not a straight NLP problem. So, unless you are interested in solving relaxations, Ipopt may not be a good candidate. $\endgroup$ Feb 22, 2021 at 5:41
  • $\begingroup$ Have you tried BARON. It can be freely accessed via the NEOS server. What AML are you using to model this? If it is PYOMO you can connect to NEOS directly. $\endgroup$ Feb 22, 2021 at 13:10
  • $\begingroup$ I use PYOMO, Oguz. Can you share an example piece of code showing how to access it? We also readily have Artleys Knitro license, and they state that they have three methods to deal with MINLP models. I haven’t started programming the model yet, but I just wondered if it could even be possible. We solved a similarly nonlinear model, but it was not involving binary/integer variabels. $\endgroup$
    – tcokyasar
    Feb 22, 2021 at 13:28
  • $\begingroup$ Oguz, I guess, it is as simple as the example here [stackoverflow.com/questions/56327524/…? What does NEOS server mean? Is it upload the *.nl file to some cloud, solve the problem, and report the results type of thing? Can you please elaborate your answer a bit? $\endgroup$
    – tcokyasar
    Feb 22, 2021 at 14:31
  • 1
    $\begingroup$ @tcokyasar The link that you provided above is using BARON as an installed solver on the local machine while NEOS is a server providing solvers for free (for research purposes). Knitro and BARON both are available on the NEOS server please look at this link for more information about NEOS: neos-server.org/neos and also this link for implementation in Pyomo (my answer): or.stackexchange.com/a/4589/39 $\endgroup$ Feb 24, 2021 at 10:02


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy