Redundant condition detection

Neill Clift <[email protected]> Wed, 13 Oct 2021 00:12:59 +0000
Newsgroups gmane.comp.gnu.glpk
Message-ID <SA1PR15MB4467C0B9C1F982A8DA866251B5B79@SA1PR15MB4467.namprd15.prod.outlook.com>
Hi,
I am currently using winglpk to detect if a small integer inequality system is feasible. No objective function just feasibility.
If the system is found to be feasible then I call glpk for each condition in the system with that condition removed and instead specified as the objective function.

So for example if one of my conditions is a - b + c >= 3 then I remove that condition and have an objective function of a - b + c and find its minimum.
If it's minimum is >= 3  I conclude the condition is redundant and remove it (it wasn't limiting the problem).
If redundant the condition is removed and the attempts at reduction continue.

I do this in a program with a very large number of systems. I currently rebuild the problem from scratch for each condition (glp_erase_prob first).
I want to improve the performance of this. I would like to have some input on what might be the best way to do this.
I can see I could delete rows, update the objective and optimize again. I would have to tracks the rows used.
Is there a way to use something like glp_analyze_bound to obtain information I could use for this?

I am calling glpk from 256 threads concurrently. This seems to work just fine but the documentation suggests it's not thread safe. I am assuming this is for sharing a lp program between threads rather than having a problem per thread? I only change things relating to a problem (glp_prob* type calls).
Thanks.
Neill.