From a8e6c6da2253baf88ce535ac7188bb80a6a04a72 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 18 Oct 2022 21:07:25 -0500 Subject: [PATCH] BB: Fix incorrect set_bounds call; add failing tests --- src/bb/optimize.jl | 18 ++++++++++++++++-- src/bb/varbranch/reliability.jl | 4 ++-- src/bb/varbranch/strong.jl | 12 ++---------- test/bb/lp_test.jl | 31 ++++++++++++++++++++----------- test/fixtures/bell5.h5 | Bin 0 -> 36347 bytes test/fixtures/bell5.mps.gz | Bin 0 -> 2617 bytes test/fixtures/vpm2.h5 | Bin 0 -> 50063 bytes 7 files changed, 40 insertions(+), 25 deletions(-) create mode 100644 test/fixtures/bell5.h5 create mode 100644 test/fixtures/bell5.mps.gz create mode 100644 test/fixtures/vpm2.h5 diff --git a/src/bb/optimize.jl b/src/bb/optimize.jl index b81f40f..f87d793 100644 --- a/src/bb/optimize.jl +++ b/src/bb/optimize.jl @@ -58,6 +58,13 @@ function solve!( sleep(0.1) continue else + # Assert node is feasible + _set_node_bounds(node) + status, _ = solve_relaxation!(mip) + @assert status == :Optimal + _unset_node_bounds(node) + + # Find branching variable ids = generate_indices(pool, 2) branch_var = find_branching_var(branch_rule, node, pool) @@ -136,8 +143,7 @@ function _create_node( fractional_variables = Variable[] fractional_values = Float64[] end - n_branch = length(branch_vars) - set_bounds!(mip, branch_vars, zeros(n_branch), ones(n_branch)) + set_bounds!(mip, mip.int_vars, mip.int_vars_lb, mip.int_vars_ub) return Node( mip, index, @@ -197,3 +203,11 @@ function solve!( return pool end + +function _set_node_bounds(node::Node) + set_bounds!(node.mip, node.branch_vars, node.branch_lb, node.branch_ub) +end + +function _unset_node_bounds(node::Node) + set_bounds!(node.mip, node.mip.int_vars, node.mip.int_vars_lb, node.mip.int_vars_ub) +end diff --git a/src/bb/varbranch/reliability.jl b/src/bb/varbranch/reliability.jl index 838edb1..07a262d 100644 --- a/src/bb/varbranch/reliability.jl +++ b/src/bb/varbranch/reliability.jl @@ -34,7 +34,7 @@ function find_branching_var( ] σ = sortperm(pseudocost_scores, rev = true) sorted_vars = node.fractional_variables[σ] - _strong_branch_start(node) + _set_node_bounds(node) no_improv_count, n_sb_calls = 0, 0 max_score, max_var = pseudocost_scores[σ[1]], sorted_vars[1] for (i, var) in enumerate(sorted_vars) @@ -72,6 +72,6 @@ function find_branching_var( end no_improv_count <= rule.look_ahead || break end - _strong_branch_end(node) + _unset_node_bounds(node) return max_var end diff --git a/src/bb/varbranch/strong.jl b/src/bb/varbranch/strong.jl index ec31942..360c2f2 100644 --- a/src/bb/varbranch/strong.jl +++ b/src/bb/varbranch/strong.jl @@ -32,7 +32,7 @@ function find_branching_var(rule::StrongBranching, node::Node, pool::NodePool):: ] σ = sortperm(pseudocost_scores, rev = true) sorted_vars = node.fractional_variables[σ] - _strong_branch_start(node) + _set_node_bounds(node) no_improv_count, call_count = 0, 0 max_score, max_var = (-Inf, -Inf), sorted_vars[1] for (i, var) in enumerate(sorted_vars) @@ -55,7 +55,7 @@ function find_branching_var(rule::StrongBranching, node::Node, pool::NodePool):: no_improv_count <= rule.look_ahead || break call_count <= rule.max_calls || break end - _strong_branch_end(node) + _unset_node_bounds(node) return max_var end @@ -94,11 +94,3 @@ function _strong_branch_score(; end return (obj_change_up * obj_change_down, var.index) end - -function _strong_branch_start(node::Node) - set_bounds!(node.mip, node.branch_vars, node.branch_lb, node.branch_ub) -end - -function _strong_branch_end(node::Node) - set_bounds!(node.mip, node.mip.int_vars, node.mip.int_vars_lb, node.mip.int_vars_ub) -end diff --git a/test/bb/lp_test.jl b/test/bb/lp_test.jl index f3b01fe..3dad52f 100644 --- a/test/bb/lp_test.jl +++ b/test/bb/lp_test.jl @@ -6,6 +6,7 @@ using Clp using JuMP using Test using MIPLearn.BB +using MIPLearn basepath = @__DIR__ @@ -80,17 +81,25 @@ function runtests(optimizer_name, optimizer; large = true) BB.HybridBranching(), ] for branch_rule in branch_rules - filename = "$basepath/../fixtures/vpm2.mps.gz" - mip = BB.init(optimizer) - BB.read!(mip, filename) - @info optimizer_name, branch_rule - @time BB.solve!( - mip, - initial_primal_bound = 13.75, - print_interval = 10, - node_limit = 100, - branch_rule = branch_rule, - ) + for instance in ["bell5", "vpm2"] + h5 = Hdf5Sample("$basepath/../fixtures/$instance.h5") + mip_lower_bound = h5.get_scalar("mip_lower_bound") + mip_upper_bound = h5.get_scalar("mip_upper_bound") + mip_sense = h5.get_scalar("mip_sense") + mip_primal_bound = mip_sense == "min" ? mip_upper_bound : mip_lower_bound + h5.file.close() + + mip = BB.init(optimizer) + BB.read!(mip, "$basepath/../fixtures/$instance.mps.gz") + @info optimizer_name, branch_rule, instance + @time BB.solve!( + mip, + initial_primal_bound = mip_primal_bound, + print_interval = 10, + node_limit = 100, + branch_rule = branch_rule, + ) + end end end end diff --git a/test/fixtures/bell5.h5 b/test/fixtures/bell5.h5 new file mode 100644 index 0000000000000000000000000000000000000000..24f990b13b2a41cadb24c7d96aafb4d9c8dfdb52 GIT binary patch literal 36347 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 W&lG#)`I3K8{i?0t!{7L$bpHp_DWDGk literal 0 HcmV?d00001 diff --git a/test/fixtures/bell5.mps.gz b/test/fixtures/bell5.mps.gz new file mode 100644 index 0000000000000000000000000000000000000000..63739d20d0cd8098789849a81f9ba569aabae6aa GIT binary patch literal 2617 zcmZutdpHyNA6A{YOyp=dWRW5^x8yFDIixsqnPMj5RNAn)WNsal3|SXZ4x8kXC4^tb zjLAU`%CN0CE+f>6xy=0_{6@d?JU!?6{qg<0@Av(FKJWW^zA8j<@y#PTRwDa;y%HR3 zBvR}R51BYE+sOA^!oC!>6L=$V8t=Qh|I8At72C6-L1w$AUIM&~678%!P`p(-TN)^V zyr}VXYPl>hvgw&F#H4KK`dYPqLeEfte_;4x)z%D)d*N~>IWlf_IsOVR0Aog9W5i}O zb%@24kz8;d{Pzi;T2Z5&{Mc|#NBi;lx>w$hL%J34J`_Ac_q9ukwe^+}oxU+{1-7o_ z#N;qD+Ok_G*7-jNxo=>%*Xu{W9vN&Mi<);oNm&aw#kKEAT3y{v=EkpuuhJXi))`jC z)FJDT`@jAYv8^^zt70wPK5E|-H=1zW0^YINc)@Z~Q410F*X{fM(3KFCp^&3f8@#&F zQ%$(hHeQ`v&jyV-U#WlB|JrohllIo1Rvi8w*ce;hs8z6DQEBbi{F$M=9+u7Ah@KN@ z%u0`%%q6&}Tr_UyPR?%mDAP8#eXUkfXq}S}>TfE=M0vuUT_V&xY|F{pxgjpEAIs2k zL=?;znjh>X^dQl0twcpeb}JFU=s-k2XeKKAf&_(03XdAleiBmJ1vk|VtCB>sdjF7B zLfY=D#`*P0b=BYWGSTOY25>LeG@$+abh_#ZUNn8ad;qtl+&ddDdHfYYom!P7pViwU zi$dB;I-$p2)2i~+%dblCy;@?kzNbm*+Wrzw$QIeGs$E*0r5_~muks`@N&O7+`{Dv? ziLD0-BC6`7<@=k*&5;+xh% zTiwM`2Z5qTaHEh>a(Bj7Io*C zyxu$|)eG)?kqC5xeJqgG7HnctaiQsX%Hc?Yu8s+;pw8*HgtT5s$Qjd|)lA@S>vU=U zf~&+h;nKl~FC?dQWTXac!_6VQOw~gFQM*~Q=rwPk@LqVnw+kV2zQinhY=a}i{h-=t z)8Q`{i=#^b+bo6oN9vEVARQIpz+*3J?F8Y|2N(}+rWVAn0EHa}pWIplsRO@*2t17+H0?}G zJ3`%egep*5PQy{_UUc;*%~8$)(HX~8zb*&xZ7Z?ml?OQolQ*Hn>L~ZfG?tEUrcy{zaIK(9ucTd3;b|H7u5n;=ky$kV&bUi(tSlN#*&xedk72d`(B$gbqQ^# zhm?ocXd06G)rb@&NhRjnJNE7=*B2RHfUq92X~rQ#sI)X(xm1e8U6qFCJ{BTdh|xlP zAw(}BrV8J6PtSs!X?et`Ml#H+yoDU z(4NXI=zTNZn~^^G-2D0C@NjLM*T`IAgFVq3mO@&_{X26e2Ug4aWJ)=je#oQ;;Cd1f0#&9X& zztlIfzXcF#F@eZdFeaU2JQG%JY#9%AHwJqLJ?J*Wa;!|Qayl>UZ19QaJw=6Y4Clh{ z*HeOp3E_*4k%N>t+@BQAQ?@afQ*-8EUM=Q{FoIPK4M4tSMtv4;OgH=A##ux8Ls0DC zXI`*5+(5XI3Xx%uk5vkvQ=9W4#Gd#iqHaI!XNP;k4J9lHF#ha}ZZ74#>pK@Yz+7sB zWJ-V>s0MD|Ok~Zr3?KpaTsJqt;fda*AB7z5>L!?zjZ|>1hiFdW(-Nb~xP*N#fN6ti zg&#)Mr*(6|%Wv+{Q$`fZx8`(}f5f|X9Ww+#7aJsx!@!`$z3}E&PJj8B3MTWjKL!Ck zs8I^tcymq4G%4{tk4u;!OQ+o~q4@0@J=8d`?a_1zyj^osGdO&q3-G&+l4 z$_||vS=n2}f)3`Ku5QGpXe8+WM$%tMsb7?VuT3bz=}NZOlI7Nqr!-d?va_v9rs#rVIn zSc7%ZRIF3iw#LOyjM{uvc7W2Y*;TsDpP&zk})m;1|~ZIO!E7pu>$2W2@XFcFiL zUXV>Ar{bmnx&8hlpZm-GU9(LTK|Hu9Atn?dm$Yqs)5FCGDc+0 zR1zFy$J788YCy!-lRfn0lD}2^|J&9cKQdm>f4DW19q@?!G+&U X+z!%FBUW7Jtvxu_8B@BYh{%5dOj{l9 literal 0 HcmV?d00001 diff --git a/test/fixtures/vpm2.h5 b/test/fixtures/vpm2.h5 new file mode 100644 index 0000000000000000000000000000000000000000..94816799a49a46bb20bc9f187b58687d1ac4e99f GIT binary patch literal 50063 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 NIz0qk-dpkOKLGjSOQQe) literal 0 HcmV?d00001