Linear Complementarity Problem. Non-obsolete package?

I was wondering which is a fast and easy to use package for a LCP problem. The examples using Complementarity I found give me errors (things like curly brackets were used) and PATHSolver requires a license (I cannot get the temporary one because I don’t understand how!). Any suggestions?

Have you tried this one: https://github.com/odow/PATH.jl ?
Still a bit limited, but should work.
For the binaries you can get them by downloading GAMS academic version.
You can get the license for path here: http://pages.cs.wisc.edu/~ferris/path/LICENSE

KNTRO should also be able to handle this kind of fomulation: Constraints · JuMP

1 Like

Also, the category should be “Optimization (Mathematical)”

Luckily this one is easy. Go to http://pages.cs.wisc.edu/~ferris/path/LICENSE as the path above says and follow the instructions to set the environment variable. PATHSolver will work fine with Julia 1.4 after recent updates. The only hint is that if you are setting the environment variable with ENV["PATH_LICENSE_STRING"] =... you need to do it before you do a using PATHSolver in your code.

That all said, PATH.jl is the future. The only issue is that the binaries need to be managed manually in the short term…

1 Like

@jlperla, I just merged a commit that should fix the libgfortran issue.

3 Likes

PATHSolver worked for me, after updating to Julia 1.4. It is still a bit slow for high dimensional problems, even if very sparse. If that’s not too silly: how do I suppress output? The option output=no only suppressed some it, but it still prints too many useless lines (including the name of the authors, god bless them)

it still prints too many useless lines (including the name of the authors, god bless them)

The trade-off of free software…

Except for all the other many packages, whose authors have a slightly smaller ego

PATH is not unique in this respect: Option to omit printing Ipopt header information · Issue #112 · jump-dev/Ipopt.jl · GitHub

If I remember, Ipopt only displays the text once, though, instead of on every call like PATH. But I could be wrong…

Point still stands. You’re using the software for free. There are alternatives like KNITRO if you want to pay so you don’t have the banner.

While there are multiple work-arounds, as the writers and maintainers of the solver wrappers, we won’t be publicizing them. (But some are just a Google or a search through previous questions asked in this forum away.)

Of course. All I am saying is that if the authors only printed the header once… as Ipopt does… then nobody would need to go looking for the work-arounds-that-shall-not-be-named.

In practice, the consequence is frequently that no headers whatsoever are shown because they all get blocked by necessity if you are calling it hundreds of times. Whereas with ipopt a single one gets shown that is never blocked in practice.

Up to the authors, of course, but I think this is backfiring.

I managed to make it work, but not in parallel programming using Distributed. I get this error
On worker 2: IOError: unlink: no such file or directory (ENOENT)

Please read the first post of Please read: make it easier to help you - #19 and provide a reproducible example. It might be best to start a new post, rather than cluttering up this one.

Complementarity.jl and Path.jl are working for me with Distributed parallel computation. Do you still have your IOError?
I did have to remember to properly distribute all needed code, including the license declaration in ENV, with @everywhere.

I would like to suppress the intermediate listing of iteration progress from all the workers to the console too, though. It slows the solution down and the processes seem to have to competed for console IO.