Integer part of a variable

  • 29 November 2020
  • 6 replies

I have a variable of a MIP problem, for example: total_power_plants = 2.7 but I only want to use the integer part of this value, that is 2, I have been reading this article but it does not work nor is it what we need (


Could you bring me some solution, please?

6 replies

Userlevel 3
Badge +1

Looking at the variable name, I am assuming you cannot have 0.7 powerplants (it is either 0, or 1, or 2, etc).

In your case, you can set the range of the variable total_power_plants to integer and this should result in the variable only taking integer values.

Thanks for your quick response. You are right, we only can have a integer number of power plants but I can’t set the range of this variable to integer because it is calculated from the production of the plant and this variable doesn’t have to be integer.

Userlevel 5
Badge +2

@QueraltA , do you always want to use the rounded down value ? 

Is the variable total_power_plants involved in other constraints ? Where is the value 2.7 coming from ? 

Something like total_power_plants = sum[index_plants, power(index_plants)] .. 


I believe the approach in Model a Rounded Variable — AIMMS How-To should work in your case, can you elaborate how it does not fit your needs ? 


If you only need the rounded down value, you could even drop the auxilliary variable aux1 and just have var1 = value - aux2 as your constraint. Set the range of aux2 as [0,1] and the integer variable var1’s will be equal to rounddown(value). 

Thanks a lot for your answer. I have changed my model and now, due to these changes, I want to have the top value of total_power_plants.  I have solved it as follows:

total_power_plants_integer = total_power_plants + aux1

Where total_power_plants_integer is an integer variable and the range of aux1 is [0,1]. Generally, this solution works but when “total_power_plants” is an integer value I want to keep its value. For instance:

total_power_plants = 10

I want:



I tried to solve this problem changing the aux1 range: [0,1) but the solution with AIMMS was:

Warning: Postsolve indicates that solution to funciton_objetive is not reliable (see message window).

And the solution obtained does not make sense because some variables were outside their bounds.








Userlevel 5
Badge +2



if you need only the roundUp value, you could even just do the below. 


total_power_plants_integer >= total_power_plants


Include total_power_plants_integer to your objective function, with a minimize direction. If your problem is a minimization, then obj + total_power_plants_integer and if it is a maximization problem, then obj - total_power_plants_integer. 


Regarding the “postsolve indicates solution is unreliable” warning, can you review this thread on our (deprecated) google groups forum ?

Setting the integrality option to 1 should work in most cases. 


You can also review this post to improve the scaling of your model: Marcel Hunting on the AIMMS Scaling tool | AIMMS Community

Userlevel 4
Badge +1

Hi @QueraltA ,


Hope all is well.

Did @mohansx and @gdiepen 's answers help you to move forward?

Thanks for getting back to us!


Didn't find what you were looking for? Try searching on our documentation pages:

AIMMS Developer & PRO | AIMMS How-To | AIMMS SC Navigator