Forum Discussion
FICO
6 months agoCommunity Manager
How to improve Bestbound?
e.g. my optimal solution for this dataset is 116. it reaches 116 within 1000 seconds but bestbound is still close to 0.
Optimization part:
multiplier=ub_nal * (QUARTERS[-1] - 1) + 1# spread of coeficients less to fasten the convergence . if multiplier is smaller than this then can pick more lines with late start. if bigger then more gap.
prob.setObjective( multiplier*line_used_ttl+new_line_num, sense=xp.minimize)# extreme cases #110+36=146 vs 165+36
prob.setControl({'maxtime': 2000})#2000/ 23%
prob.setControl('cutstrategy', 3) # aggressive cuts
prob.setControl('covercuts', 3) # max cover cuts at root
prob.setControl('gomcuts', 2) # Gomory cuts at root
prob.setControl('cutdepth', -1) # apply cuts at ALL tree depths (not just root)
# replaces treecovcuts + treegomcuts
prob.setControl('heursearcheffort',3) # heuriatic search effort
prob.setControl('heuremphasis', 2) # hueristic branch and bound
prob.setControl('HEURDIVERANDOMIZE',1)#heuristic uses priority weights on rows and columns to determine the order in which to e.g. round fractional columns,
prob.setControl('nodeselection', 1)
prob.setControl('presolve', 1)
prob.setControl('presolvepasses', 10)
prob.solve()
4 Replies
- FICOCommunity Manager
Hi Snehalata, we would be happy to take a more detailed look at your question. You can contact us through our support channel. support @ fico.com. (please remove the spaces).
Best,
Dinakar
- FICOCommunity Manager
Dear Snehalata More,
Thank you for your question. Without access to the complete model and full log files, it's challenging to provide a definitive diagnosis, here are only some directions to explore. Notice that with a commercial license you're entitled to full dedicated support through our standard channels, which would make it much easier to exchange data and analyze your specific problem in detail.
Here are a few thoughts based on what you've shared:
- Tuner Requirements:
The Xpress Tuner could clearly help identifying control combinations that improve dual bound progression for your problem. However, tuning requires substantially more time — you should allocate at least 50-100 times your target solve time limit (or even more).
In your case with a 2000-second time limit:
- Set TUNERMAXTIME to at least 1day
- Use TUNERTHREADS to parallelize across multiple cores and reduce wall-clock time
See the Tuner documentation for details on setting up and running the tuner effectively and also the example mentioned by Daniel.
- Alternative Control Strategies
Your current settings already use relatively aggressive settings, increasing both cutting and heuristic effort. Before investing in extensive tuning, I'd recommend two baseline experiments:
1. Test with default settings
Run the problem with all controls at their defaults to establish a baseline. Sometimes aggressive settings can be counterproductive — for example, generating many cuts can slow down LP solves without meaningfully improving bounds on certain problem structures.
2. Try a lighter tree search strategy
If aggressive cutting doesn't help, consider the opposite approach — use lightweight, fast tree search:
- Reduce strong branching effort: SBEFFORT=0.25 (or smaller)
- Reduce node probing effort: NODEPROBINGEFFORT=0
- Disable tree cuts CUTDEPTH=0
Maybe even decrease the cutting effort in the root node (we cannot see the root-cutting phase in your log file). This shifts computational effort towards exploring more nodes quickly, which can help on problems where bound improvement requires extensive branching.
- Modeling:
From the log, your dual bound is progressing extremely slowly (from ~0 to ~1.2 while BestSoln=116). This suggests a weak LP relaxation. We cannot judge your objective function, please check, there are only few variables involved and a (big?) multiplier.
However, as mentioned, this is difficult to diagnose definitively. Ideally, we have access to the model file (MPS) and the complete solver log.
Please let us know if we can help you further.
Best regards
Christian
- FICOCommunity Manager
I used following:
prob.tune('g')
prob.controls.tunermaxtime = 100
But this is even slower. seems like stuck on even though there is tunermaxtime.
Tuner: tuning MIP problem CR_HDE_lines
baseline setting:
MAXTIME = 1500
OUTPUTLOG = 1
Tuner: starting adaptive phase 1: trying each control
- FICOCommunity Manager
It seems you already tried some of the obvious things. Did you try the tuner (see this example) as well?
Related Content
Related Content
Set bestbound for MIP search
Hi, I am trying to solve a large MILP problem and do some pre-calculations where I get a could bound (a better one as the solver) Is their any chance to forward this bound to the solver and start w...6 years agoPlace FICO® Xpress Optimization ForumFICO® Xpress Optimization Forum1 unread comment1 unread0Views0likes1CommentImproving suboptimal solution for a network design problem
I'm solving a rather large network design problem (Xpress 9.2.4, python interface). Here's a very simplified version of the integer programming formulation. Variables: - y_ij: integer variable repr...2 years agoPlace FICO® Xpress Optimization ForumFICO® Xpress Optimization Forum1 unread comment1 unread0Views0likes1Comment