quais
December 23, 2023, 10:10pm
1
Hey, is there a way to round off decision variables? I initialized the following variable, which is given in hours:
n = 4
model = Model()
@variable(model, start_n[1:n] >= 0, Int)
In one of my cost functions, however, I need the value in days, so I have to divide the value by 24 hours and then round down to a whole number.
gdalle
December 26, 2023, 10:00am
2
I think you could create a second decision variable, also constrained to be integer, like so:
@variable(model, hours, Int)
@variable(model, days, Int)
@constraint(model, days / 24 >= hours - 1)
If your objective minimizes days * cost
then the solver will push days
down to the rounded value. I’m not entirely sure about the rounding direction but fiddling with a +1
or -1
should work eventually
1 Like
odow
December 26, 2023, 8:50pm
3
Assuming start_n
is the number of hours, do:
using JuMP
n = 10
model = Model()
@variable(model, start_n[1:n] >= 0, Int)
@variable(model, 0 <= hours[1:n] <= 23, Int)
@variable(model, 0 <= days[1:n], Int)
@constraint(model, [i in 1:n], start_n[i] == 24 * days[i] + hours[i])
Edit: opened a pr to improve the docs: [docs] add modulo to tips_and_tricks.jl by odow · Pull Request #3641 · jump-dev/JuMP.jl · GitHub
2 Likes