-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
LP/QP solver BQPD and possible alternatives #33
Comments
I agree! It's on my to-do list. |
I am not sure if it relevant in this context (I always get confused by the different requirements of different solvers) but proxsuite since 0.5.0 supports non-convex QPs, see https://github.com/Simple-Robotics/proxsuite/releases/tag/v0.5.0 and Simple-Robotics/proxsuite#257 . |
I don't think this is the most important consideration. It doesn't have to be HiGHS. But it's hard (or impossible) to distribute a version of Uno with the LP/QP subproblem features if we need the non-free BQPD. Another option Is OSQP: https://github.com/osqp/osqp
I don't understand the details in Uno well enough to comment. At the very least, HiGHS is an excellent LP solver.
This seems hard. |
I was actually wanting to add an interface for OSQP after we get OSQP 1.0 finished. |
Can we create a bqpd binary library and distribute that? As long as we don't send source code, we should be OK.
Sven
Sven Leyffer
Senior Computational Mathematician and Deputy Director
Mathematics and Computer Science Division
Argonne National Laboratory
…________________________________
From: Ian McInerney ***@***.***>
Sent: Friday, November 1, 2024 8:42 AM
To: cvanaret/Uno ***@***.***>
Cc: Subscribed ***@***.***>
Subject: Re: [cvanaret/Uno] Add HiGHS as an LP/QP solver (Issue #33)
I don't think this is the most important consideration. It doesn't have to be HiGHS. But it's hard (or impossible) to distribute a version of Uno with the LP/QP subproblem features if we need the non-free BQPD. Another option Is OSQP: osqp/osqp
ZjQcmQRYFpfptBannerStart
This Message Is From an External Sender
This message came from outside your organization.
ZjQcmQRYFpfptBannerEnd
I don't think this is the most important consideration. It doesn't have to be HiGHS. But it's hard (or impossible) to distribute a version of Uno with the LP/QP subproblem features if we need the non-free BQPD.
Another option Is OSQP: osqp/osqp<https://urldefense.us/v3/__https://github.com/osqp/osqp__;!!G_uCfscf7eWS!bEkLiXsTtQ4GL7DWV2p6a6-Tzh1-r_15Y5FU1WtrckQ3qyQDCX50f7-JG53FAqntG9nMKylsMdRMJ-DlKzHIpFFzI9I$>
I was actually wanting to add an interface for OSQP after we get OSQP 1.0 finished.
—
Reply to this email directly, view it on GitHub<https://urldefense.us/v3/__https://github.com/cvanaret/Uno/issues/33*issuecomment-2451893897__;Iw!!G_uCfscf7eWS!bEkLiXsTtQ4GL7DWV2p6a6-Tzh1-r_15Y5FU1WtrckQ3qyQDCX50f7-JG53FAqntG9nMKylsMdRMJ-DlKzHINkgdce8$>, or unsubscribe<https://urldefense.us/v3/__https://github.com/notifications/unsubscribe-auth/AB52TLOO4GTDGCAMGYAA6XDZ6OAMXAVCNFSM6AAAAABQEZCRY2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINJRHA4TGOBZG4__;!!G_uCfscf7eWS!bEkLiXsTtQ4GL7DWV2p6a6-Tzh1-r_15Y5FU1WtrckQ3qyQDCX50f7-JG53FAqntG9nMKylsMdRMJ-DlKzHIIQY3raI$>.
You are receiving this because you are subscribed to this thread.Message ID: ***@***.***>
|
Providing a closed source binary library could be sufficient for people who compile Uno themselves. But I'm a bit cautious including it in Uno_jll for us to distribute.
Currently we build Uno for a whole host of platforms: https://github.com/JuliaBinaryWrappers/Uno_jll.jl/tree/main?tab=readme-ov-file#platforms
We also have both glibc and musl, and for differing C++ ABIs. Perhaps we could have just BQPD binaries for Windows x86_64, Linux x86_64, macOS x86_64, and macOS aarch64, and then compile without BQPD on the more niche platforms? |
Perhaps Sven @leyffer meant that we could build binaries of BQPD using BinaryBuilder.jl (without disclosing the source) in a BQPD_jll.jl package, the same way we built Uno_jll.jl? |
That would work. As long as the binary package is not openly available.
Sven
Get Outlook for iOS<https://aka.ms/o0ukef>
…________________________________
From: Charlie Vanaret ***@***.***>
Sent: Saturday, November 2, 2024 3:09:51 AM
To: cvanaret/Uno ***@***.***>
Cc: Leyffer, Sven ***@***.***>; Mention ***@***.***>
Subject: Re: [cvanaret/Uno] Add HiGHS as an LP/QP solver (Issue #33)
Perhaps Sven @leyffer meant that we could build binaries of BQPD using BinaryBuilder. jl (without disclosing the source) in a BQPD_jll. jl package? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this
ZjQcmQRYFpfptBannerStart
This Message Is From an External Sender
This message came from outside your organization.
ZjQcmQRYFpfptBannerEnd
Perhaps Sven @leyffer<https://urldefense.us/v3/__https://github.com/leyffer__;!!G_uCfscf7eWS!eoBqJ3a5CveU7T7sNB4PB_PKMydnCXs-_eHeE2R2FpYzbq9F0Cr20n5YJXo6sEOaySMBi9adrThMuNa7Xc0JL4LVWLY$> meant that we could build binaries of BQPD using BinaryBuilder.jl (without disclosing the source) in a BQPD_jll.jl package?
—
Reply to this email directly, view it on GitHub<https://urldefense.us/v3/__https://github.com/cvanaret/Uno/issues/33*issuecomment-2452942949__;Iw!!G_uCfscf7eWS!eoBqJ3a5CveU7T7sNB4PB_PKMydnCXs-_eHeE2R2FpYzbq9F0Cr20n5YJXo6sEOaySMBi9adrThMuNa7Xc0J6sVWEUU$>, or unsubscribe<https://urldefense.us/v3/__https://github.com/notifications/unsubscribe-auth/AB52TLLMYG75YMH7EUBHJ5LZ6SQG7AVCNFSM6AAAAABQEZCRY2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINJSHE2DEOJUHE__;!!G_uCfscf7eWS!eoBqJ3a5CveU7T7sNB4PB_PKMydnCXs-_eHeE2R2FpYzbq9F0Cr20n5YJXo6sEOaySMBi9adrThMuNa7Xc0J2-ptQR8$>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
To clarify, I am not comfortable including BQPD in Uno_jll unless:
or
The first approach is my preferred option. The second could work, but we will probably run into various compatibility issues and need to restrict what platforms we include BQPD on. However, it doesn't seem like either of these are viable options. So, if you want to use the Julia infrastructure to compile and distribute Uno, there are three options:
|
Longer term, it would be nice if we could somehow get BQPD support working in the UNO_jll, and creating a somewhat standardized workflow for doing this linking against proprietary libraries would be good, so I would say the method that HSL uses would be a good starting point. However, we also need to be careful that the software can properly handle the library not actually being the full library, so it should be able to identify that it doesn't have the library and fail gracefully to the user. (I don't know how the HSL facsimile handles that, actually). Perhaps @amontoison can comment on how well the HSL fascimile system is working and if it is recommended to try that? |
@imciner2 For I can answer a few questions:
The two questions we need to answer are:
|
Thanks Alexis,
I think we can make your suggestion work. The license will have to be similar to the source code license. I have been distributing pre-compiled versions of BQPD, and also source code for research purposes, so I am OK with this approach.
Kind regard,
Sven
Sven Leyffer
Senior Computational Mathematician and Deputy Director
Mathematics and Computer Science Division
Argonne National Laboratory
…________________________________
From: Alexis Montoison ***@***.***>
Sent: Monday, November 4, 2024 8:37 AM
To: cvanaret/Uno ***@***.***>
Cc: Leyffer, Sven ***@***.***>; Mention ***@***.***>
Subject: Re: [cvanaret/Uno] Add HiGHS as an LP/QP solver (Issue #33)
@ imciner2 For HSL_jll. jl, I added a C routine LIBHSL_isfunctional that returns a boolean, allowing us to determine at runtime whether we have the dummy or official version of libHSL. Uno relies on it to use MA57 or MUMPS at runtime. I can answer
ZjQcmQRYFpfptBannerStart
This Message Is From an External Sender
This message came from outside your organization.
ZjQcmQRYFpfptBannerEnd
@imciner2<https://urldefense.us/v3/__https://github.com/imciner2__;!!G_uCfscf7eWS!beexAwMTI6CMR94S-tupACXemXfwq3gNJA5FqMZBOhG-KMTb07RnJQqNBtmoN1JJadl2YTfuGfkpRP-vt3XjMD-fsk0$> For HSL_jll.jl, I added a C routine LIBHSL_isfunctional that returns a boolean, allowing us to determine at runtime whether we have the dummy or official version of libHSL.
Uno relies on it to use MA57 or MUMPS at runtime.
I can answer a few questions:
* Linking at runtime is a pain on Windows; they don't use standard symbols for that, as usual... I don’t want to go down that path.
* Doing it like HSL_jll.jl would require distributing a BQPD_jll.jl from a portal or website, along with a dummy BQPD that includes all the symbols needed by Uno, plus a way to detect at runtime whether we have the official BQPD. It’s like using a hammer on an egg.
* The best solution is Oscar's second proposal: we cross-compile BQPD locally on all platforms using BinaryBuilder.jl.
We host all precompiled tarballs publicly somewhere (e.g., Sven’s webpage).
We create a BQPD_jll.jl on Yggdrasil with all the precompiled tarballs.
This is what we already do for some packages that are distributed only in precompiled form (e.g., CUDA_SDK_jll, MKL_jll, etc.).
This approach avoids any compatibility issues and enables us to link Uno_jll.jl with BQPD_jll.jl. It also allows Charlie to generate precompiled Uno releases with BQPD.
The two questions we need to answer are:
1. Where should we upload all precompiled tarballs?
I think Sven's webpage is suitable since some users could also request the precompiled form of BQPD directly from him.
2. Finalize the license we want to include in the precompiled tarballs.
—
Reply to this email directly, view it on GitHub<https://urldefense.us/v3/__https://github.com/cvanaret/Uno/issues/33*issuecomment-2454883495__;Iw!!G_uCfscf7eWS!beexAwMTI6CMR94S-tupACXemXfwq3gNJA5FqMZBOhG-KMTb07RnJQqNBtmoN1JJadl2YTfuGfkpRP-vt3XjyHVLcDc$>, or unsubscribe<https://urldefense.us/v3/__https://github.com/notifications/unsubscribe-auth/AB52TLKTXY6ECRLZWKRLYWDZ652AZAVCNFSM6AAAAABQEZCRY2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINJUHA4DGNBZGU__;!!G_uCfscf7eWS!beexAwMTI6CMR94S-tupACXemXfwq3gNJA5FqMZBOhG-KMTb07RnJQqNBtmoN1JJadl2YTfuGfkpRP-vt3XjdfdKLIo$>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
I'm confused with what you are suggesting here. The precompiled packages like Earlier in this thread, @leyffer said
was one of the conditions of use, so I think putting those precompiled tarballs with BQPD into the BQPD_jll repo would violate that because the binaries would be openly available for anyone to install. To do this so they aren't available to everyone, Sven still needs to control the distribution of them (somehow). |
Hi all,
What I meant was that the source code is not public. It looks like the option that you describe would be OK.
Kind regards,
Sven
Sven Leyffer
Senior Computational Mathematician and Deputy Director
Mathematics and Computer Science Division
Argonne National Laboratory
…________________________________
From: Ian McInerney ***@***.***>
Sent: Monday, November 4, 2024 10:27 AM
To: cvanaret/Uno ***@***.***>
Cc: Leyffer, Sven ***@***.***>; Mention ***@***.***>
Subject: Re: [cvanaret/Uno] Add HiGHS as an LP/QP solver (Issue #33)
The best solution is Oscar's second proposal: we cross-compile BQPD locally on all platforms using BinaryBuilder. jl. I can take care of that. We host all precompiled tarballs publicly somewhere (e. g. , Sven’s webpage). We create a BQPD_jll. jl
ZjQcmQRYFpfptBannerStart
This Message Is From an External Sender
This message came from outside your organization.
ZjQcmQRYFpfptBannerEnd
* The best solution is Oscar's second proposal: we cross-compile BQPD locally on all platforms using BinaryBuilder.jl.
I can take care of that.
We host all precompiled tarballs publicly somewhere (e.g., Sven’s webpage).
We create a BQPD_jll.jl on Yggdrasil with all the precompiled tarballs.
This is what we already do for some packages that are distributed only in precompiled form (e.g., CUDA_SDK_jll, MKL_jll, etc.).
This approach avoids any compatibility issues and enables us to link Uno_jll.jl with BQPD_jll.jl. It also allows Charlie to generate precompiled Uno releases with BQPD here.
I'm confused with what you are suggesting here. The precompiled packages like CUDA_SDK_jll and MKL_jll actually repackage the files and binaries compiled by the vendors into a tarball that we host on GitHub as an attachment to the releases, we don't link to any external tarballs in the JLL packages. That is then available to any Julia user to install.
Earlier in this thread, @leyffer<https://urldefense.us/v3/__https://github.com/leyffer__;!!G_uCfscf7eWS!b60y3sFdlN1eQitJrsnwoaZXoowfxxP3PTYn8ks8Kqo65OGXu7_X5Rt89endcf18j6B9F8INSZm2Tkh9LzryTNI2DzA$> said
As long as the binary package is not openly available.
was one of the conditions of use, so I think putting those precompiled tarballs with BQPD into the BQPD_jll repo would violate that because the binaries would be openly available for anyone to install. To do this so they aren't available to everyone, Sven still needs to control the distribution of them (somehow).
—
Reply to this email directly, view it on GitHub<https://urldefense.us/v3/__https://github.com/cvanaret/Uno/issues/33*issuecomment-2455160351__;Iw!!G_uCfscf7eWS!b60y3sFdlN1eQitJrsnwoaZXoowfxxP3PTYn8ks8Kqo65OGXu7_X5Rt89endcf18j6B9F8INSZm2Tkh9LzryEmP5xHg$>, or unsubscribe<https://urldefense.us/v3/__https://github.com/notifications/unsubscribe-auth/AB52TLLZH5PPONQVG6UATRLZ66N73AVCNFSM6AAAAABQEZCRY2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINJVGE3DAMZVGE__;!!G_uCfscf7eWS!b60y3sFdlN1eQitJrsnwoaZXoowfxxP3PTYn8ks8Kqo65OGXu7_X5Rt89endcf18j6B9F8INSZm2Tkh9Lzrycrv-VWc$>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
Great, in that case we just will need some sort of statement (as the copyright holder) giving us the permissions to distribute the binaries, and include the appropriate license statement in the built tarballs. @odow I think you've done something similar for other packages, so maybe you can work with Sven to get that sorted out? |
@amontoison can you please delete your comment? I don't want us to provide any legal advice or template. Let's take this discussion offline. I'll send an email. |
@odow Good idea. |
HiGHS is MIT and it's easy to compile and distribute.
This would be muuuuuch easier than trying to agree on a way that we can distribute Uno with BQPD.
The text was updated successfully, but these errors were encountered: