Re: [Fwd: Linear Program Optimal Extreme Points]
Naszvadi Peter <[email protected]> Thu, 06 Oct 2022 19:49:08 +0000
| Newsgroups | gmane.comp.gnu.glpk |
|---|---|
| Message-ID | <[email protected]> |
Hi, A finite dimensional polyhedron could have exponentially many vertices! For an all-zero objective function - in case when the LP problem turns to a feasibility problem: no one can check nor list all the vertices in polynomial time = no polynomial size witness, can't be NP-complete! Even more difficult problem. Regards, NASZVADI, Peter 2022-10-06 15:18 időpontban Manuel Muñoz Márquez ezt írta: > Hi, Andrew: > > I don't kown if it is implemented somewhere. But the problem of > generating all the optimal vertices is the same as generating all the > vertices of a new polyhedron in 1 lower dimension. > > But that problem is known to be NP-complete [1], so it is very hard or > almost impossible as soon as the dimension increases. > > Furthermore, if I understand your procedure correctly, that way you > only will find vertices next to the original. For simplicity, lets us > assume that the optimal polyhedron is a square. If the solver gives > you the bottom left corner, you will only be able to find the bottom > right and top left corners, but you will never reach the top right > corner. > > What is it your goal? > > Regards, Manuel. > > [1] https://link.springer.com/article/10.1007/s00454-008-9050-5 > > El jue, 06-10-2022 a las 13:49 +0300, Andrew Makhorin escribió: >> -------- Forwarded Message -------- >> From: Prabhu Manyem <[email protected]> >> To: [email protected], Andrew Makhorin <[email protected]>, >> [email protected] >> a >> Subject: Linear Program Optimal Extreme Points >> Date: Thu, 6 Oct 2022 10:04:22 +1030 >> >> Dear Andrew, Komei, David, >> >> I am a retired Maths professor in Adelaide, Australia. >> >> About the problem of enumerating all OEP (optimal extreme points) for >> a Linear Program, I tried the following approach, using GLPK >> software.. Is this a good way to handle degeneracy? Please let me >> know. >> >> For my instances, I have explicitly added lower bound constraints of >> the >> form >> "x_i >= 0" for each variable x_i.. >> >> (1) Solve the original Linear Program (call this LP0).. This returned >> an optimal solution value of 50 (for my example). >> The objective function is "Max. Z = CX"... So Z_{max} = 50. >> >> (2) Now add the constraint "CX = 50" to the original LP.. This gives >> us a new LP, which we can call LP1... Solve LP1.. With GLPK, I was >> able to save the last BFS (basic feasible solution) of LP1 to a file, >> say Soln-1.bas (using the "-w Soln-1.bas" option). >> Soln-1.bas is the first OEP (optimal extreme point). >> >> (3) In Soln-1.bas, find the lexicographically first Non-Basic >> variable.. For example, let us say that this is x5... Since I want to >> avoid degeneracy and go to a new OEP, I modify the Lower Bound for >> x5... I modify "x5 >= 0" to "x5 >= epsilon" where epsilon is a >> very small positive number.. Call this LP2. >> >> (4) Now run LP2 using GLPK, using the previous basis Soln-1.bas as the >> starting solution.. In GLPK, you can do this using the "--ini >> Soln-1.bas" option in the terminal command line... The LP2 output >> should be written to "Soln-2.bas". >> >> (5) If Step 4 is a failure, that is, LP2 is infeasible, then check >> Soln-1.bas, and find the NON-BASIC variable lexicographically next to >> x5, for example, x8... Then the lower bound "x5 >= epsilon" should be >> reset to zero ("x5 >= 0), and the lower bound for x8 should be set to >> epsilon (x8 >= epsilon)... Now run this new LP, again using the >> "--ini Soln-1.bas" option in GLPK. >> >> On the other hand, if Step 4 is a success (that is, LP2 is feasible), >> then Soln-2 is the second OEP. >> Then we do something similar to Step 3... Open Soln-2.bas, find the >> lexicographically smallest Non-basic variable, for example, x9, reset >> the lower bound of x5 to zero (x5 >= 0), change the lower bound of x9 >> to epsilon (x9 >= epsilon), and the solve the new LP (call it LP3) in >> GLPK using the "--ini Soln-2.bas" option. >> >> We traverse the OEP's in a tree-like fashion.. >> >> I assume that the above approach (setting a Non-basic variable to >= >> epsilon and solving a new LP, using the last BFS of the previous LP as >> a starting point for the new LP) is NOT a new idea... But I would >> like to know if this has been implemented. >> >> Look forward to your comments and suggestions.. Thank you.. (And >> thanks to Andrew for GLPK). >> >> -Prabhu >> >> Dr Prabhu Manyem >> Retired Professor of Applied Mathematics >> Nanchang Institute of Technology >> Currently in Adelaide, Australia >> >>