Hello. Could you clarify a question for me. I am having certain problems with my mathematical model, this model is non-linear and the ipopt is the solver chosen for the resolution of the problem. My model has its minimum and maximum limits, pmin and pmax, when using the solver it partially respects them since it reaches an optimal solution but certain values minimally exceed the maximum limits, such as pmax = 180 but some values reach 180.0000018 . How can I do to limit these variables to values without decimals, how can I do so that if the limits are reached, these are integer values?
using JuMP,Ipopt,XLSX
us = ["Jacui","Ita","Xingo","Salto Santiago","Lajeado","Itaparica","GP Souza","Canoas II","Capivara","Chavante","Funil","Camargos","Estreito","Manso"
,"Volta Grande","Porto Primavera","Marimbondo","Agua Vermelha","Samuel","Nova Ponte"]
d=[11924 9823 9539 9396 9254 9681 10735 11931 12813 13713 14308 13127 14892 16686 16458 16088 13411 11674 11105 11674 12244 11390 10535 9823]
metas=[108 870 1581 760 543 889 157 33 319 228 108 27 662 124 228 924 701 838 132 307]
pmin = [
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
140 140 140 140 140 140 140 140 140 140 140 140 140 140 140 140 140 140 140 140 140 140 140 140
250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250
170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89
113 113 113 113 113 113 113 113 113 113 113 113 113 113 113 113 113 113 113 113 113 113 113 113
22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79
19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
]
pmax = [
180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180
1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450 1450
2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635 2635
1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268 1268
905 905 905 905 905 905 905 905 905 905 905 905 905 905 905 905 905 905 905 905 905 905 905 905
1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482 1482
262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262
56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56
532 532 532 532 532 532 532 532 532 532 532 532 532 532 532 532 532 532 532 532 532 532 532 532
380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180 180
46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104 1104
208 208 208 208 208 208 208 208 208 208 208 208 208 208 208 208 208 208 208 208 208 208 208 208
380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 1540
1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169 1169
1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398 1398
220 220 220 220 220 220 220 220 220 220 220 220 220 220 220 220 220 220 220 220 220 220 220 220
513 513 513 513 513 513 513 513 513 513 513 513 513 513 513 513 513 513 513 513 513 513 513 513
]
valor_agua = [0.0036*304,0.0036*517,0.0036*351,0.0036*887,0.0036*434,0.0036*914,0.0036*2436,0.0036*804,0.0036*695,0.0036*1070,0.0036*715,0.0036*2242,0.0036*1496,0.0036*194,0.0036*1235,0.0036*472,0.0036*1073,0.0036*878,0.0036*106.5,0.0036*2129]
μ = 0.02
c_00=[7.654052483048688,40.62910891274373,31.96800105675084,9.530406772017962,115.0049118998941,48.386870152983235,2.34354793711202,2.627036394848996,18.63093278809548,4.07890572514291,5.099703248503789,10.549371263936779,10.904689524486393,7.459857028022684,10.694499834932483,40.11398550553216,63.36789930537633,25.18352774321871,14.144017305549545,10.84673263581038]
c_10=[0.892362529923684,0.9432654477458005,0.8218848297576222,1.053776436577942,2.7366057154026873,1.9400889416028784,0.15268218429693264,6.67235493471428,2.5023123226385535,1.448444294223902,1.6969986757777689,3.8816000432889375,1.5940558126085134,1.6798486102276515,3.4983288807513486,4.677474604738309,1.6809127962695842,1.7959703284343882,3.1968915809440226,0.9556199774266778]
c_20=[0.0015737422140654617,0.00013596507465868818,5.607056623632372e-05,0.00017923047649544608,0.0007023209416358729,0.00027822366537762276,0.0001455034168815677,0.020963716840235052,0.0010175800823603272,0.00083654906236899,0.0020053516881876014,0.014807233540011597,0.0003250711763358595,0.0017329078541697622,0.0019636755066780617,0.0010966877092086073,0.00042246653492786397,0.0002968271707442997,0.004750879880736467,0.0003930043398122151]
model = Model(Ipopt.Optimizer)
nus = length(us)
nd = length(d)
@variables(model, begin
p[i=1:nus, t=1:nd]
z[t=1:nd] >= 0
end)
@NLobjective(
model,
Min,
sum(
sum(
valor_agua[i] * (
c_00[i] +
c_10[i] * p[i, t] +
c_20[i] * p[i, t]^2)
for i = 1:nus
) + μ * z[t]^2
for t = 1:nd
)
)
@constraints(model, begin
[i=1:nus, t=1:nd], pmin[i, t] <= p[i, t]
[i=1:nus, t=1:nd], p[i, t] <= pmax[i, t]
[t=1:nd], sum(p[:, t]) + z[t] == d[t]
[i=1:nus], sum(p[i, :]) == 24 * metas[i]
end)
print(model)
optimize!(model)
@show value.(p)
@show value.(p)
@show value.(n)
@show value.(z)