I am mimicking a GAMS model that was introduced in Soler et al. (2013)1 to compare my new model with its results.

In a nutshell, assume we have a variable $t$ that is supposed to only take certain discrete values from the set $D$ where $D=\{0.12,0.22,0.32,0.42,0.52, 0.62\}$.

The proposed method is to relax $t$ and make it a continuous variable between two upper and lower limits $\min D\le t\le\max D$ and then add a penalty function to the model objective function to force the solver to allocate only discrete values for $t$.

The penalty function is $\sin^2\left(\pi t/(\text{upr}-\text{lwr})\right)$ where:

  • $\text{upr}$ is the upper closest values for $t$ in $D$;

  • $\text{lwr}$ is the lower closest values for $t$ in $D$.

This clever trick will make the penalty function take positive values if the allocated value for $t$ is not discrete, and zero if $t$ is discrete.

During the optimization process, when the solver allocates a value for $t$, it needs to find the two closest elements from $D$ to the allocated value of $t$. Let's say it gives $t=0.14$, then it has to find the upper and lower values of $t$ from $D$ which are $\text{lwr}=0.12$ and $\text{upr}=0.22$. This has to be done during the optimization process not after it finishes like in some iterative methods.

So, my question is how I should code this in GAMS. How can I tell the solver to find the upper and lower values of a variable from a set during the optimization process? In MATLAB we use the function find but it is not effective.


[1] Soler, E. M., Asada, E. N., da Costa, G. R. M. (2013). Penalty-based nonlinear solver for optimal reactive power dispatch with discrete controls. IEEE Transactions on Power Systems. 28(3):2174-2182.

  • $\begingroup$ This sounds like a heuristic approach. Probably a better way is to solve as a MINLP model. GAMS supports different MINLP solvers. Note that GAMS is a modeling system and not a programming language for implementing solvers. $\endgroup$ – Erwin Kalvelagen Dec 24 '19 at 10:50

Your Answer

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

Browse other questions tagged or ask your own question.