Package: lincs
lincs(Learn and Infer Non Compensatory Sortings) is a collection ofMCDAalgorithms, usable as a command-line utility and through a Python (3.8+) API.lincssupports Linux, macOS and Windows, with the exception that GPU-based algorithms are not available on macOS, because CUDA itself is not available there.
On these 3 OSes,lincsonly support x86_64 CPUs.lincsis licensed under the GNU Lesser General Public License v3.0 as indicated by the two filesCOPYINGandCOPYING.LESSER.lincsis available for install from thePython package index.
Itsdocumentationand itssource codeare on GitHub.Questions? Remarks? Bugs? Want to contribute? Openan issueora discussion!
You should probably take a look atour roadmapfirst.@todo(Project management, v1.1) Add a note asking academics to kindly cite our ROADEF 2024 paper.Contributorslincsis developed by theMICSresearch team atCentraleSupélec.Its main authors are (alphabetical order):Khaled Belahcène (domain expertise)Laurent Cabaret(performance optimization)Vincent Jacques(engineering)Vincent Mousseau(domain expertise)Wassila Ouerdane(domain expertise)Project goalsProvide MCDA tools usable out of the boxYou should be able to uselincswithout being a specialist of MCDA and/or NCS models.
Just follow the “Get started” section below.Provide a base for developing new MCDA algorithmslincsis designed to be easy to extend with new algorithms or even replace parts of existing algorithms.
See ourcontributor guidefor more details.Get startedDepending on your favorite approach, you can either start with ourhands-on “Get started” guideor with ourconceptual overview documentation.
The former will show you how to use our tools, the latter will explain the concepts behind them: what’s MCDA, what are NCS models,etc.If in doubt, start with the conceptual overview.
We highly recommend you read the other one just after.Once you’ve usedlincsa bit, you can follow up with ouruser guideandreference documentation.Versioninglincsusessemantic versioning.lincs’ public API (that “must be declared” according to SemVer) is constituted exclusively by itsreference documentation,at a code level: we consider a change as backward compatible if the client code doesn’t need to be modified to keep working,
even if that change requires recompiling the client code in some cases.Future backward compatible changes might changelincs’ behavior, especially with regards to pseudo-random behavior.Note that we plan to makelincsusable as a C++ library.
When we do that, we’ll add this interface to the public API.
In the mean time, if you chose to uselincsthat way, you must expect unanticipated changes to this interface.ExceptionsDefault valuesDefault values of optional arguments are not considered part of the public API.
They might change in future releases if we find values that perform better for most use-cases.We advice you write your code in an explicit way where it matters to you,
and rely on implicit default values only where you want the potential future improvements.File formatsThe same specification applies to files read and produced bylincs.
This leads to an issue with regard to backward compatibility:
if we allow more flexibility in input files, new versions oflincswill be able to read both the old and the new format, in a backward-compatible way.
But iflincsproduces a file in the new format, existing client scripts might not be able to read it, making this change backward-incompatible.To solve this issue, we impose an additional constraint tolincs’ public API:lincswill produce files in a new format only when the client uses the new feature that motivated the new format.That way, we know that the client already needs to modify their scripts, so they can adapt to the new format.DeveloplincsitselfSee ourcontributor guide.