From 7e3f052e4f14c7c8542b4e181eb4ce61a9bae44f Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Wed, 15 Nov 2023 13:13:44 +0000 Subject: [PATCH] Publish version 0.11.0 --- doc-sources/changelog.rst | 14 + .../conceptual-overview.ipynb | 2 +- doc-sources/get-started.rst | 8 +- doc-sources/get-started/get-started.ipynb | 8 +- doc-sources/user-guide.rst | 2 +- .../alglib-learning/alglib-learning.ipynb | 2 +- .../gpu-learning/gpu-learning.ipynb | 2 +- .../sat-learning/sat-learning.ipynb | 4 +- .../synthetic-data/synthetic-data.ipynb | 8 +- docs/.buildinfo | 2 +- docs/.doctrees/changelog.doctree | Bin 40158 -> 46410 bytes docs/.doctrees/conceptual-overview.doctree | Bin 108432 -> 103231 bytes docs/.doctrees/contributor-guide.doctree | Bin 80019 -> 77016 bytes docs/.doctrees/environment.pickle | Bin 83461 -> 87308 bytes docs/.doctrees/get-started.doctree | Bin 45530 -> 43849 bytes docs/.doctrees/reference.doctree | Bin 164804 -> 176098 bytes docs/.doctrees/user-guide.doctree | Bin 115456 -> 104093 bytes docs/README.html | 4 +- .../problem-schema.yml | 16 +- docs/_images/alternatives.png | Bin 61868 -> 64056 bytes docs/_images/model.png | Bin 18957 -> 21730 bytes docs/_sources/changelog.rst.txt | 16 + docs/_sources/conceptual-overview.rst.txt | 89 ---- docs/_sources/contributor-guide.rst.txt | 101 +---- docs/_sources/get-started.rst.txt | 207 ++++------ docs/_sources/user-guide.rst.txt | 197 ++------- docs/_static/documentation_options.js | 2 +- docs/changelog.html | 21 +- docs/conceptual-overview.html | 4 +- docs/contributor-guide.html | 81 ++-- docs/genindex.html | 97 ++++- docs/get-started.html | 95 +++-- docs/get-started.ipynb | 385 ++++++++++++++++++ docs/index.html | 4 +- docs/objects.inv | Bin 1639 -> 1738 bytes docs/reference.html | 89 +++- docs/search.html | 4 +- docs/searchindex.js | 2 +- docs/user-guide.html | 41 +- .../all-options-of-problem-generation.ipynb | 2 +- ...ail-generating-balanced-alternatives.ipynb | 2 +- .../learning-failure-exception.ipynb | 2 +- .../python-module-is-executable.ipynb | 10 +- .../read-from-stdin/read-from-stdin.ipynb | 2 +- integration-tests/verbose/verbose.ipynb | 2 +- lincs/__init__.py | 2 +- 46 files changed, 865 insertions(+), 664 deletions(-) create mode 100644 docs/get-started.ipynb diff --git a/doc-sources/changelog.rst b/doc-sources/changelog.rst index 7e4c45b7..192dfc1d 100644 --- a/doc-sources/changelog.rst +++ b/doc-sources/changelog.rst @@ -4,6 +4,20 @@ Changelog ========= +Version 0.11.0 +============== + +- **Breaking** Rename ``category_correlation`` to ``preference_direction`` in problem files +- **Breaking** Rename the ``growing`` preference direction to ``increasing`` in problem files +- **Breaking** Rename the ``categories`` attribute in problem files to ``ordered_categories`` in problem files +- Make names of generated categories more explicit ("Worst category", "Intermediate category N", "Best category") +- Support ``isotone`` (resp. ``antitone``) as a synonym for ``increasing`` (resp. ``decreasing``) in problem files +- Add ``lincs describe`` command to produce human-readable descriptions of problems and models +- **Remove** comments about termination conditions from learned models, but: +- Add ``--mrsort.weights-profiles-breed.output-metadata`` to generate in YAML the data previously found in those comments +- Provide a Jupyter notebook to help follow the "Get Started" guide (and use Jupyter for all integration tests) +- Document the "externally managed" error on Ubuntu 23.4+ + (In versions below, the term "category correlation" was used instead of "preference direction".) Versions 0.10.0 to 0.10.3 diff --git a/doc-sources/conceptual-overview/conceptual-overview.ipynb b/doc-sources/conceptual-overview/conceptual-overview.ipynb index 4b2fafb2..b98db066 100644 --- a/doc-sources/conceptual-overview/conceptual-overview.ipynb +++ b/doc-sources/conceptual-overview/conceptual-overview.ipynb @@ -21,7 +21,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs classify problem.yml model.yml alternatives.csv\n", + "# Reproduction command (with lincs version 0.11.0): lincs classify problem.yml model.yml alternatives.csv\n", "name,Math,Physics,Literature,History,category\n", "A,1,1,1,1,\"Full scholarship\"\n", "B,1,1,1,0,\"Full scholarship\"\n", diff --git a/doc-sources/get-started.rst b/doc-sources/get-started.rst index 1a2d99a0..72363775 100644 --- a/doc-sources/get-started.rst +++ b/doc-sources/get-started.rst @@ -68,7 +68,7 @@ So, start by generating a classification problem with 4 criteria and 3 categorie The generated ``problem.yml`` should look like:: - # Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-problem 4 3 --random-seed 40 + # Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 40 kind: classification-problem format_version: 1 criteria: @@ -132,7 +132,7 @@ Then generate an NCS classification model:: It should look like:: - # Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-model problem.yml --random-seed 41 --model-type mrsort + # Reproduction command (with lincs version 0.11.0): lincs generate classification-model problem.yml --random-seed 41 --model-type mrsort kind: ncs-classification-model format_version: 1 accepted_values: @@ -199,7 +199,7 @@ Then we'll need to think about the how the ``--max-imbalance`` option interacts It should start with something like this, and contain 1000 alternatives:: - # Reproduction command (with lincs version 0.10.4-dev): lincs generate classified-alternatives problem.yml model.yml 1000 --random-seed 42 --misclassified-count 0 + # Reproduction command (with lincs version 0.11.0): lincs generate classified-alternatives problem.yml model.yml 1000 --random-seed 42 --misclassified-count 0 name,"Criterion 1","Criterion 2","Criterion 3","Criterion 4",category "Alternative 1",0.37454012,0.796543002,0.95071429,0.183434784,"Best category" "Alternative 2",0.731993914,0.779690981,0.598658502,0.596850157,"Intermediate category 1" @@ -237,7 +237,7 @@ The learning set doesn't contain all the information from the original model, and the trained model was reconstituted from this partial information, so it is numerically different:: - # Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0 + # Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0 kind: ncs-classification-model format_version: 1 accepted_values: diff --git a/doc-sources/get-started/get-started.ipynb b/doc-sources/get-started/get-started.ipynb index d03bd5cc..14cf5b6c 100644 --- a/doc-sources/get-started/get-started.ipynb +++ b/doc-sources/get-started/get-started.ipynb @@ -48,7 +48,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-problem 4 3 --random-seed 40\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 40\n", "kind: classification-problem\n", "format_version: 1\n", "criteria:\n", @@ -126,7 +126,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-model problem.yml --random-seed 41 --model-type mrsort\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-model problem.yml --random-seed 41 --model-type mrsort\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", @@ -216,7 +216,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classified-alternatives problem.yml model.yml 1000 --random-seed 42 --misclassified-count 0\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classified-alternatives problem.yml model.yml 1000 --random-seed 42 --misclassified-count 0\n", "name,\"Criterion 1\",\"Criterion 2\",\"Criterion 3\",\"Criterion 4\",category\n", "\"Alternative 1\",0.37454012,0.796543002,0.95071429,0.183434784,\"Best category\"\n", "\"Alternative 2\",0.731993914,0.779690981,0.598658502,0.596850157,\"Intermediate category 1\"\n", @@ -270,7 +270,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", + "# Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", diff --git a/doc-sources/user-guide.rst b/doc-sources/user-guide.rst index dbe1f98e..ffa6adcc 100644 --- a/doc-sources/user-guide.rst +++ b/doc-sources/user-guide.rst @@ -473,7 +473,7 @@ And:: They produce a different kind of model, with the sufficient coalitions specified explicitly by their roots:: - # Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy sat-by-coalitions + # Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy sat-by-coalitions kind: ncs-classification-model format_version: 1 accepted_values: diff --git a/doc-sources/user-guide/alglib-learning/alglib-learning.ipynb b/doc-sources/user-guide/alglib-learning/alglib-learning.ipynb index 8714af46..ec946a2c 100644 --- a/doc-sources/user-guide/alglib-learning/alglib-learning.ipynb +++ b/doc-sources/user-guide/alglib-learning/alglib-learning.ipynb @@ -27,7 +27,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver alglib --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", + "# Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver alglib --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", diff --git a/doc-sources/user-guide/gpu-learning/gpu-learning.ipynb b/doc-sources/user-guide/gpu-learning/gpu-learning.ipynb index 72117e87..29646dcd 100644 --- a/doc-sources/user-guide/gpu-learning/gpu-learning.ipynb +++ b/doc-sources/user-guide/gpu-learning/gpu-learning.ipynb @@ -27,7 +27,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor gpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", + "# Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor gpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", diff --git a/doc-sources/user-guide/sat-learning/sat-learning.ipynb b/doc-sources/user-guide/sat-learning/sat-learning.ipynb index 0f3bf4dd..8c48a999 100644 --- a/doc-sources/user-guide/sat-learning/sat-learning.ipynb +++ b/doc-sources/user-guide/sat-learning/sat-learning.ipynb @@ -22,7 +22,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy sat-by-coalitions\n", + "# Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy sat-by-coalitions\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", @@ -58,7 +58,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy max-sat-by-separation\n", + "# Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy max-sat-by-separation\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", diff --git a/doc-sources/user-guide/synthetic-data/synthetic-data.ipynb b/doc-sources/user-guide/synthetic-data/synthetic-data.ipynb index 025efec3..5e42db69 100644 --- a/doc-sources/user-guide/synthetic-data/synthetic-data.ipynb +++ b/doc-sources/user-guide/synthetic-data/synthetic-data.ipynb @@ -14,7 +14,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-problem 4 3 --random-seed 57\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 57\n", "kind: classification-problem\n", "format_version: 1\n", "criteria:\n", @@ -63,7 +63,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-model problem.yml --random-seed 58 --model-type mrsort\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-model problem.yml --random-seed 58 --model-type mrsort\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", @@ -101,7 +101,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classified-alternatives problem.yml model.yml 100 --random-seed 59 --misclassified-count 0\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classified-alternatives problem.yml model.yml 100 --random-seed 59 --misclassified-count 0\n", "name,\"Criterion 1\",\"Criterion 2\",\"Criterion 3\",\"Criterion 4\",category\n", "\"Alternative 1\",0.924035132,0.804616809,0.157870576,0.637420833,\"Best category\"\n", "\"Alternative 2\",0.866915047,0.979161799,0.0841569453,0.397855282,\"Best category\"\n", @@ -224,7 +224,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 60 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", + "# Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 60 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", diff --git a/docs/.buildinfo b/docs/.buildinfo index 23a0d121..52e6e2c1 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 21415a206eb54523072fadedfdf8571f +config: b8cf68fa18ac3570036bef5ce646b33b tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/changelog.doctree b/docs/.doctrees/changelog.doctree index 1d17eaa9190ffaf6483fa0df3ded2a93234a6aa2..261404deadd9c3e7c5da95e047dfddb72dc00539 100644 GIT binary patch literal 46410 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 delta 9414 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 e{b&h-SGioBZLZFydi*j&%PMM@ diff --git a/docs/.doctrees/conceptual-overview.doctree b/docs/.doctrees/conceptual-overview.doctree index b05c75f4fcb9415dc347b79ccce50dc0fbbb4cec..b55631ceea7b397c1b7567e4cf5dc84108112cc8 100644 GIT binary patch delta 9330 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 JV#f23^M7m56LtUq delta 14400 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 diff --git a/docs/.doctrees/contributor-guide.doctree b/docs/.doctrees/contributor-guide.doctree index 78ad702d048c32ac6fcee1f4c1f6c29391234ab6..14dc098bb24e118952b43800cf5f81f5a27c8dda 100644 GIT binary patch delta 7690 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

V3rq2Q z7=&*a9AI$UfM@AZ@YChcsf0$hKP=n#w84X*>}d09qY`Au{t_<888jxCimu&T=@!|9 zjfLp^k`VAf6E^bAr}dkLa0_5RuHDc&JS`kP=8mQo8@`Kew>TYxl3JV9OBJoAPl@H& zBbMVcRI$2HZ{0z%r@O|hMBr=H3g()5&mK&Hf4UkM|E!5i=VQ^yhfL6iqVP}*{NbW_ z^bp^+-$aU^Z$YvDxgaUQS2^9h4##n`Fb-YX%Aao0bj(E|rdq%RnnfO&x6%$h+BCA8 z+(k<>v8%mR=(ZPzN%g+y?4bhm=VejS6kj|s3-KPEhl*d!knY5H5coo9HL=Y>C!X{~ zj;CXYH2VM^J`pCh_@dEA^7K|;rN&DLSD}89D(F!dhoci8d!mw;qNII>*J<@DqGQczKDzX5J$mtYl4MpHl1^lE408!$5Me;4wwL-^IjkSaKp*I* zbPLDQH>G-X{A8-stFmXmn#r+m65`t^#7Bx!k1AiwkPfR1FT9q|F+3|U93W%87UeEl zXD&)Sh1{d;QVT!hjWp?V)z3R`y`2atF8q$Svp9Sr+WZXPx_CMk@z1|wfLa$m?p?mLRRX@UU%cs53M_Qt zcb+nF{#yjRg^anv{vx&?SL9ZOE&E#>Y;$?p`!~Kyvf#yuPVQZZRz5Zu^`1_FS6rBz zr*pZ;jtH3N=~%1GA++c~J&HIJ0T*2OWoME({5b*tQ9pQgCaybck_H4QXCk~ml4JQ@ zVEGkCUPRB|-`>weQx4UVDY5A9!#GGRG9Bhy8imfjP=w0!i%`=Cu~NC}=-m%8B&#o4 zc({T)bw^OJmSrJ=H{vMx+=r1;lL{{R2ftp-6I{-@CCiwP4AMH45ttsoCDZV8acKHW0my%E5nbHR@hyBupm~#wxye}=AgoPM zRKP8_;cEGE&nHU1sUdGa&!2?&s@tt&KM8)q8LhSk{)(~=6mf12(Xpm?3VLnvIq_+< zR1m1lwUp2Jy(}+K*ave0k>PYF(p^lE>Q&6Li@DrxG)2TrWCCpljSHj~*yxf;TB?%x zeO|(mEEY-Z{gV`otg&==w{|QrwDh!_JB(cxbF;az&0=Wnm~ZQ9$1f1@GjMaGt*6^y zHgtB`u&Ui)>p~~r36}mueK)n>Eyn#?tvCt4F(ITzcTyuqYNVt_v(ZIrv~?Nj8w%xd zl(uzl6?1v0zg#xeqr5Ln(s8vQ&wNqJ7341>$;5u_s1nQBzKY^0PFgm#@^S89eJ zx|>zs83VOgUnAuQq5XHJ=?jCD&Ao~k7wSt@K_x?PdL>9I3!)S0e-#wJ$afmz{Sm2MYNQZ+8#D694dcO#HN_4%4g`d7E z3f@;Z9IKK!x9^D@f9;23*9CTEheO(Rp-}IZ+S%2MK|-rOpoQIhkCEfPNvWjLAhh#L zg*!^Q7u>TZ22vEXer>u=YfB=k_^^oUN_;SGBzc-*g(?L>c0UbKDIm%S!iEa&%>|2s zc<$a(4$(*uI<4~!ltIgHb}()KN9)sJy}~eNLoUa#R$y37#~cINd7()6lQtRXSko6% zdrcot^!?Y$c3&vGrbKc2z636c6EtoukE6kK5q-vy0$(VI*iC%g7lpVlPzEiob2#%& z_rhRgx=1_w-2KH|X9tD|r_2B*aL3~ZP#->!4jBqZP46&{1HZd;KkbtG;aGH~9yM)_ zhp`IBUpHrR9AiX|>V7zsxpr|&8rT$`NhpuwX%l%`L+I40bQ;L{%1W@`>2|(~kPV{i zb@=5hF2S(}3*b40qx7Ll&h0^wWB)BU7RdSVp~CT%T)}a?FLJzh3l6`n!^xvImdoa? zRUF4pBF7K?aF8=!o2R%y?n?ogFgV*$k0eWJp=i|`)nuVP^hgfpCOK5-cmfsZxLG5d zEl2yF4env!)!jXeSi0tTkwEd@Agd4Yp87f*7NV11FO^zC(WM{Q-e3vET_$(&!|9XK zO;}$oS(hR6zti-~LzVquBLNiZ?@3wl zV;)Vs2HUxw(bfM?G9;tk>ou?pz4kvQomPzmbn%BGt{8D)xEQf$-uD(5?E?5+GjMW+HuUYa6litIGOVdiKW=Va*nMQ&(%F#qD9Vt{TFpPHt+k`cZd5_8j|a4p>=gpujgJ4c z1ugldHlZ(DvOAk>2nJk_8(v)aZwYj-3;Ca9`5*sJGJNOCKlA5EPgi{MnNWxbR<04X zATJB7U-xBQbhW_O8Xl(1``uxPO8P0`1SuvQZN6TOXGiT%eCZ?Qib23nkFaob;-}40 zv0}dMMk$x-aB9x=x`5#|mwDl|*~kAA6a3)ysRQUgHIB7I;8kI^;-%omzNEKO73KOI-H(N zy-OqM?eBsAhDv7@fbMrA7u;zvxKm7^RqkyTt=3OWe(Tuw{1Ge-h;a2(x|zzk`kfJJ zC*-g0QD)yrlngHDgEL_yw-m)j2uo)a6KGL}Gl3Q*CcjmbBjkY+gh>-zzT`#;hH%ct ziq6JFxK)$HX;ZMz4}>xf+a_XL#X#qafnxT)fl`T<3|{N7M9;0UBk5_US>WYUuvkNu zWj%KuTEum_k*?=c2}w_5kHf#)*3{6^)81g|=U`+eUUlL0Q?I%~ z^gFLQ9sS6w&euvlq^mPn$rp5WVOH|#TwR!)?g=F;$oF7#Fvo^U%P z|1$zFOgpg3dLI9UoEhYMvvm5#V!ZVt7LB)Fk~_U&nBfaL_!s?UpACG8|K4Ez3jfY= zTECHB_XguoQXxDd-^1Yp`4|o#Smv}sctk3M4_jqFA6PS3ABney8hNK4^5j!KFp~+& zh#*&J&kRx_LeMri)x_ykoWjOz3k%;(+B619*mG10&ovj z1cJBxxIYw2`H}J^e^^3}vjSiZ9S1-+IZh9Rx#V~x5N>Da9C=nCB+Da%pgfq;jdR=I z$&Q>Q{~imTscc835jq{^TC{HV7C9jfV%=EU<*ir^;b6FBW|jSL z=Y&BROV4iP(!+iu<;Macm~`T}J|}qK!lE{l`kl&*hr4!;$R)Ku9hdoL6IC750jaoh6sksz3DJmeli}$F{wqB#>)E* z5Fnck(8yHHoGLy6Itl;g1o)O5P027z)+K{Z{xT8fF?%~_?~@F1^6?}F!p3hhlXlMJ z=x{t^7N&respfO4O{owlSEfP}Q!V6F6Gz}_5S|7tB#KpOaE6(5t0o7CqAUZxVhTQq ze-6R*?HvMUrdrA{IYZ$H6U2$`Iv^092Z z^kXZ?fh{X8<4xx-r^6FJy6wT6CEl}IYU>8{ShMi!cCvrD^u8@-dxK?B4}G4jZQ&c} z{*?OKo^IY7=-$1dhw`>;)kv+EBL~PqCJ2Jda*7Ei`{t9!P=0s` zUFWp^Dz7ntfr$bY(IFE=te{pQE)iL8bw(rIUFiOWq0}IpGYD`QwAt_zZ8xhZ&dT3q zrS4z~RV-%|V4TRDY5SI9X5h@C)R6jaUW$E^%U&+ag;17gsvcG~1fG zE%t6B+nAgRS0=S`=(Do5jSByd0c|%^46_+sOcbu0$JnZRydW#8T*l!+*G&wT&*g%z zC%Hwm7DmcfbHOx<4n{DFG)lqNbWA~2C7en(wQ9=LG2?3*rc_NOKBz%?q}-SXIV$OkrjDtvnxcZoQVWOsy{yI9)MmEZ zTj#en$wPxd*Y0$L7>%wIkKb^VU?(s?rTxY?nNte!O=I3u`ffl~|DVeljJ393m$Mje z64^15dsrq!sN|lZjW%KfqZw!MN7D+n;HblvWd`M!lPE|H3A0n8{uF6QnxisR%iVR2W zH)`@2+}kk~4WlMZ8?ViwrHYMw40Evwx;#?8kPo$mlw<`n=pseLCw04diLtf4(cFf= zM$$50%^8KtyP_a0P|19)qN1g&rkv{)S$}i&K29mjh5Hqi{AmG1v0yhx$~Oxjl?|Mc za%LfntfyXNX6+!6_usH>oCRJEdYbT~pDcTKm$}=rV5!>HM-?miXdy%fQSP0J40C78 zCIjSzDhWT%sj}onMUWMwQteT6a(fZfFsi2%8K%mVS0zDam}_A) z%Ev}PHFI-Pk>R|G8Q?%V1k3v~z(-|$oioak%|jqtRlUWjMlt-jp^&UjtalZ?48@Sm zeEv<5DQz({h}Qy2o6c~iea^_gb4vZ#s*1_u#kKbz)WVTWt^|_F@(~(LC&niX`5u{c zAx8O37KB(7m*+WMAD5qTN@3c6&Z!1Zm^O9dH0}KTlInV_m*t8Qh?PE%lIN9x#s5p} zAKx=u_u!ja>(^282PI$#yM~1=qphOOrxcRmhMZjrdH9=nxw#Zy%GK%Q)1^>Hj?ra6 zzTT9Z%b;-(`4Ulnx(uS^f0aQx{-8njE5}#I_&BW`CX?e+;c?m9GEytIWNfnR* z%j9ttP=OB*R6y+@QYZOX1y)|KfD|l^tb`FOKF7gX$xq8@T(2u+^sO=?fm>PhSa*Yr z$Pcyrg^ae5&-{PIe_{3SL_p%S{=ozgtq3Ii7q;+F1%s);5oud2U$2CSffy%$R|yF# zyj2q)hVdl=l9ttv2?A9?5EF!|f-okCR0UB?5K9Dfmc%hZf+|R4f)tk^bbvLLNitNE zA<^<phQoRRM^|-@N90Q nPj{TwYV6P9JKAb2ocbpQ}xjLI4rPACqXDaQY(&7jvJwhe-ekLI*4L;1I zom86i0h1o1(u0mJltre}-3ud$)Hk4SZR={o@jK?sZ|kw3XCkvFkf>WN@dIv)I$PTo zrgU}SQVh)td)vA@ntSIjZtJ0{ZDx`W@pG>$Ei9Q*n$q3VYuRSri9(}F(2^)W)Dq>7 zHbBBSJNN7X(!qq9RU_} zB>Don7#D?Br5Vxjm`2!zo{!B!b+L_TZOk}y6`!ArjY6B^!_bPjM&yrw&xngahWKUZ z$GAZBT>PC363qMyIgrxLfe!dULYhaDUnHtIpZp?$&9&s$PV`|yJXnrE;&v~16!m}A zLBj{;PDGAPW6+M=W9U|sQR;R=hS~YjQYW;!%!I=7ozdkbAuiocBS!SKw4n>7qmij7 z9^IYogZ`0s4gJ_0Asu9h7Zij`;KSJ49D@&4=2&`kBMD%?=UUQT4q{CYN0l`vUDr$i z)M-D0k|NlHk2$a#ov)mYs#^o3j|q1pI@#*Yxn82Ke;sz6F>?zB49zTZy^G2ETFkp} ziK9@}+*Fj<9EtYKeLgtU8Ak~xhe&dWCWlyZh<8S9^PZC2osrjt26Q&oSITonHM32~ zV~)RMbVjGz6Qps@D55P3bu|S^+0F*Xs;sor=l zX1$23V+ySc)h@IP=lg=BWmZJB+59wFA`~rVb!Z(YoQO45E4923UL0A*n{? zOG2cVUFZrwMsk`;q|xKT$mvQ;8JX;saVcDxN5t#~#q2P%b#{1pSjWce3M-^*&S>-a zO%k}Gw4PGbl$#;_;(}H$%0kQE3X<-yu3yNHlcI=2nPhN9MH4dg-mc1e3U|fc*?Oa@ z2qB6rMAlP~D}v%?)Lvke%2oK}(hzj5z?Y*a5h)6pqCn-uM60LIM&A?~B(q9%sA5z= zPI9)T&+Jb&GA*TfB44W=J}7=r+N^R-E)7GU7khI_Z4^l!wo5Vx4V45)gB(#BNAe=Y zfDw5$8`0K933{87I?D{w`zo50l$~s{E$O_N%~?Cy;1+pjrI;-1EUPW}vPQSNAFQ~u z>~Vi5a$mR4jp{25lF?0>28Sx*bXw2-(W*r`I&BvC5ZSieGm{KbE=LiH3M$<=ny~^+ zmVKJ>lMPanO0%^()Hl<%XEOw@du_SM>^wBZD6LVs$m~q5^5s(M7igB-(vZ2CS#6LG zsx(`x`R42wDE8P=kW8MfF-m7t3Vm%Fm&F?b#c5j#l0|BrK^jsiI_pDyGi)1kP2l>% zE|*tEO1jll@<67Za(!})f*s9qvHFNA~1}$&#=D10Mj&v z&>i>iQ>a!Tsj^4Xg6`hq0S_o7c-{G@C)=s1S0KCJK3Uhj9{6r?xIK(4&9*_ZKxVN= z)&<9`iR|nKe-em}+9R5crp++GryLo2XNHcOQhyg%KDK4)@0>)g0jUpUbL03Uxjtk| z4my-HH@h!1r)S*>dN|D=JWm3EjEjkmYOVlaX zj~wirqf1leObW(V4@gI=w>F?PZ^ueaD)#2v=^S>3fW4Q>jVc#m2t`-A$0Gf^VW@WH zL=wL5-O-SU-dS0s*Mcr*dCqz-UfQq5I{zLYYmX4?2_e>FG~0ij4U*na8K(R>n#=aI zz;MEb;nz*s*fD_b$h7g-6IqLq$^e>!H*pXe%_fZL zLqB*~$z$t>5nLWe#5@LB%^e@b!UqcE%13h5bMF2?{5VW@qXf*)$@AcHn5fowtAO7Ri4Bm>!C zq-#2qI;)qw27y_~Yfl+Eu`CbnL)-VT?Z453ZU!fo`@<@1E|(U0ps*E@x=s&e_g{g1 zb99SU`9X>$&khfG(BVv783_jz?Bgp_IP5+FyPL@RCsnRthQa<=cuQdjUzN@=ye=@D zvSlDsdEDwG_)1|IT%E-+d`S^n{-3jo53KP6ceMH-t=QqA2)$OZizkZMm#x~jR`xuJT4IYccD|3Xo2D zqSQBg$$L;~nE{==T#EX3jFFZYQ0-avCZP{+82E+jJd_|kX`pX94iG;RI)8?~%OqN_ zOD1&vvcI&^fI2N1`T>K|?OlW?TaQ$QOxU(d?-7bJ;{V>xIL`lV(f>`{4SZK}_z{2U zYZc=qM{<~diI{(~pPo=VoaTG&`Tv_DRA^i~G@`~4X@Z9W33Ih(^x$6we` zeDT{*DO!b0IgrRfA_zpM&EQZfYcn7iZ9mt5W*v-_%2kGU4yJGnB?3dCU4~Dd3YW|( zL&eic9K$?;q17(KjAvq`%__sY&!lk-8wG}kiOkL8U~k$?Z6@H(*zKvNxURe|kPvx~xJHUr6Wj`bfy@11f9XeV=w0KgUSFstou+hGY1T!0?kD z2KHod_@y+6M5iv6lYJ-Y(0Fe8h4~1Zz$hQQPj#W#!6YbBAWsaA;UE)4NUjg9cFW-q zXi*@y4)d$JNrcRx3Y}K&y=dRZ4an(;5!NXb?MGsy0Rvk7K_NG9`|SgJe;*FdD8MVf zkLA)mD8}AzpJM0_5%8`;(eN_AIiC?J-mp*6dNdTiQ7GO!%5SzqBE>aZ3d5xwoi-11 z5s|eHjinu$`AQ^&pc9wrP`>?23Rh^5uP~GWRAEJ79byy-!L5b&#kGLvvE8*W^lC7E zRvylx<~6=o^_bRRu_JPjUKIL4mH<2W7_ zId=XJj-=D+a9rVd=5#*C@v6x2M>`zWTQM%qra@%KpZfYJ__q?}mDl;J;#XpnFU2Ti zJGZ(x;X4uQDBbkRFJ*Y4rC)85V*Jp_o2967CKH73sBrv;4^#l~?K@64nk!IQL6F_Ssuo6-^V52bxuh_l_|3gfv-+k|XeglwCHY>VUz z67Va^PyW;mIzU!3mE9qc0knf{k@ReVIsp?In@!0xbfX?laeq2 zeze{LZqena4Zw%i=6oV*)-Y@9C<2x)_{lm?2+k&7%2c}3&txhc={GW!I{JZ3r9b^T z2A{~cN0lSZK16AgDtg136$OpY( zO!#OjB+(=L<|Y~c-e69_$C(zhN&d+Tl0!%@utYu?!Y5W7?FE*QTXo z{}qu(`oMIin7|Z!d|;9z@sOLm@jMOl11EW}FE~0_22$h#e@HYe?8Kj5wU<=&;xq-v zSYOCvY=xA~yQjCaE4g_t{zxmiuVa3%Wnc{9h#e)UIktgZmd7!FC}C6us=`Gs2!K*+ zZ2(MWia6Ob5F+JGfnXX*MjO{lMti13{!<_{I`@*I$DzZwLgeHi@Rv=&;3iKqLN2r9 zXqIik;3A(l!Z>EhS1fawJXY2RL$rK71_I;@L69l+2Fk9%FpHeqgK;-$Bop)cIv5Iw zK_3R&$a!}dY$4~Aa2O!x*YM3T0~E-HFc{0ydLaUei1m5|9AMT4Vhxq|hC+yZF%mk7 z)er*{NE&YPmMEwpnopx(2lKDs{EtM#eZ&5{$$2ma4h+k|^6>=llvl+<2hm)QRpM31 zrg+Ge!=kbEi#RAH)}(lr`)l#AkwvLuUbslTY)ODd;`L1e%qHiWM8&H}-scM8kBo*E zhALC!KzZ+IsAI}Zf0o}EGJXJQC^t>?(%EN&_a?3 zPl2z=`J@T%lZVPdC-k>WkhYA6GUi@oWtqj4g^F^R-5~+IWY1g( zmoG7vVm=&`_~4#eQlt- z*Lu2UekwFm~B9poZPcuepfQx`!JL`%(UY`cR9sjHs|1l z8H8O=aht=r>64S^c24MSnctc`udC0ZxXk5T48(nG_`aZ;inG$fpT^snC4Pp4fC!iL@qUT)kTv_ zr>LImIHM3{J!jGvPM%g;S5-KzqM>xE3f@FL2GG@CV&qSXz}JJu+rn@yMj491&qQ_G z6&=n2cbtAvoZP##t4-yyC?0ZIF+@gFl&t9NWxgv=9w>&1EasEUv)d?tRt!;ND0;7= z!)QE&oqfGseZ9$D-JLB9+ZL&Df2(-WY||<7DMg2o9>sMPxb%v`rsC@QDy_xODn9b6 z5(spmxEBKDJtZ(Pn+k`R!#dJ-Ph4{IlH~b|TACN)*ZEr2zvGUn)e= zi;K5P_<`afrih##yuF zlSz1s#n+->X8eLPn&iFdkfx5=HN_-Gw(geB9&IY#sG zi4k}%;I6VMF}bv`u1ef;9OUJdP{68kX5OC|<##G!R10mXo1(*2+0g4bqcC+nIg@jB z{j{2TZ4G);TOYoVO`HrN(oLg0Z!)xb-ok2pS8sj_U)apIjq=|nL%2T#jTq5hVis*) zQy?1O{bWsn45`UUUN8mP@&E4Ri&LPIoFl7%{1;eWP=)Vr@cCR7l;AhVvR^g6MZ@PA z)lf&ygVp$c6rT+>c+VRnPpg4KM^d)jUju&fOEqA^+D~er0H4BZVO;-BoTHf>+DmX> z?-1!fibPU1vwX45nMmY7J>7`ZL_Y0z$G@<7BvFum6q-Gl!b??nGlie3@TZCaW9MS| zqgpVMg1)bXh<>B$5yT)NM6r?l!!DF5B2+~rQ^cr>Sf)r&6^TrdOcZqJQ%?&|v^;9szrK9tw!f)Zfp%U?f diff --git a/docs/.doctrees/get-started.doctree b/docs/.doctrees/get-started.doctree index 4c3f82bd25ce7b172fe725a98a0b915edaf8abc8..ef1d379719f875e98accb2e8500b276fdd369614 100644 GIT binary patch literal 43849 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 literal 45530 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 jq@+>pQ#V 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 E|9TVwiU0rr diff --git a/docs/.doctrees/reference.doctree b/docs/.doctrees/reference.doctree index b911739a90da9cd7e108f1769aea0f2d4f41708f..c5d76b576fe2f1474ddb770154f219c8e635bdb3 100644 GIT binary patch literal 176098 zcmeIb37j0obvP_pT3rZTAb~i{a2QsLb|oQkNPs~|0%RcxBmpKi*`1x~-I-=~W|;$N zv9UQ4g6xhj#&(>&)QhHrdlt-5QP^MOE-34)XMzpyOo8(+ymYr9M{_Z54(t2FmJL5 zXtcYP#jVj|u&CH>H>;zaHgt$+ JMfMPJeR4cYxa1*Zk>ct6qwV>RYlz)sCOE)yV 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%0A`*{Eyb>Cxs=8@Uk8 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¤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 - Contributors — lincs 0.10.3 documentation + Contributors — lincs 0.11.0 documentation - + diff --git a/docs/_downloads/88ec4004d09b5e85c9e1ff9b908b40ad/problem-schema.yml b/docs/_downloads/88ec4004d09b5e85c9e1ff9b908b40ad/problem-schema.yml index 79d94bc8..ab05943b 100644 --- a/docs/_downloads/88ec4004d09b5e85c9e1ff9b908b40ad/problem-schema.yml +++ b/docs/_downloads/88ec4004d09b5e85c9e1ff9b908b40ad/problem-schema.yml @@ -17,13 +17,13 @@ properties: name: type: string value_type: - description: May be extended in the future to handle criteria with integer values, or explicitely enumarated values. + description: May be extended in the future to handle criteria with integer values, or explicitly enumerated values. type: string enum: [real] - category_correlation: - description: May be extended in the future to handle single-peaked criteria, or criteria with unknown correlation. + preference_direction: + description: May be extended in the future to handle single-peaked criteria, or criteria with unknown preference direction. type: string - enum: [growing, decreasing] + enum: [increasing, isotone, decreasing, antitone] min_value: type: number max_value: @@ -31,13 +31,13 @@ properties: required: - name - value_type - - category_correlation + - preference_direction - min_value - max_value additionalProperties: false minItems: 1 - categories: - description: Structural information about categories in the classification problem. + ordered_categories: + description: Structural information about categories in the classification problem, ordered from the worst to the best. type: array items: type: object @@ -52,5 +52,5 @@ required: - kind - format_version - criteria - - categories + - ordered_categories additionalProperties: false diff --git a/docs/_images/alternatives.png b/docs/_images/alternatives.png index 7df2525d0573ba4ccbb3e7089635e9d7655c5808..ea23fb0ba5af78ca7f26a499444f3f3eea4661ee 100644 GIT binary patch literal 64056 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Ģhk22$GRk4(@WkT8Cz7&b9 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 IZXEo706fLSI{*Lx literal 61868 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 Kz9|zo4*VY?(bz2j diff --git a/docs/_images/model.png b/docs/_images/model.png index f823e6a1114c78f1ba9aa2891a387b668e5e98f2..2a7db9a03fbeeceac41d1ceb19f9f877a51fa0fe 100644 GIT binary patch literal 21730 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 literal 18957 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 - } - - .. STOP - - .. EXTEND virtual-cost/no-virtual.cpp - } - .. STOP - - .. START virtual-cost/yes-virtual.cpp - #include "lib.hpp" - - int main() { - .. STOP - - .. EXTEND virtual-cost/yes-virtual.cpp - - And the following code runs in ~1.12s:: - - Foo* foo = makeFoo(); - for (int i = 0; i != 1'000'000'000; ++i) { - foo->yes_virtual(); - } - - .. STOP - - .. EXTEND virtual-cost/yes-virtual.cpp - } - .. STOP - -So, although virtual function calls are useful, they must be used with care. +Virtual function calls are somewhat costly (see ``integration-tests/virtual-cost``) so, although they are useful, they must be used with care. It's best to keep them for cases where they are not called too often; up to a few thousands per learning should be OK. When polymorphism is required for frequent calls, it's best to use template-based static polymorphism. @@ -238,7 +141,7 @@ So, why not all templates? One could now consider using templates everywhere, and not use virtual function calls at all. This would have the following negative consequences: -The number of explicit template instantiations would explode incombinatorially. +The number of explicit template instantiations would explode in a combinatorial way. For example, the ``LinearProgram`` template parameter of ``.../optimize-weights/linear-program.hpp`` is currently instantiated explicitly for each LP solver in ``.../optimize-weights/linear-program.cpp``. If ``LearnMrsortByWeightsProfilesBreed`` was a template, it would have to be instantiated for the whole Cartesian product of all variants of each strategy, to a great maintenance cost. Note that this is not specific to explicit template instanciation, because we expose *lincs* as a Python library: diff --git a/docs/_sources/get-started.rst.txt b/docs/_sources/get-started.rst.txt index 9fe71b82..72363775 100644 --- a/docs/_sources/get-started.rst.txt +++ b/docs/_sources/get-started.rst.txt @@ -1,3 +1,5 @@ +.. WARNING: this file is generated from 'doc-sources/get-started.rst.tmpl'. MANUAL EDITS WILL BE LOST. + .. Copyright 2023 Vincent Jacques =========== @@ -11,6 +13,9 @@ Get *lincs* We provide binary wheels for *lincs* on Linux, Windows and macOS for x86_64 processors, so running ``pip install lincs --only-binary lincs`` should be enough on those systems. +We generally recommend you use ``pip`` in a virtual environment (``python -m venv``) or directly ``pipx`` to install any package, including *lincs*. +Recent Ubuntu systems will even enforce that, by `refusing to install PyPI packages `_ in the "externally managed" default environment. + If you're on a platform for which we don't make wheels, you'll need to build *lincs* from sources. We don't recommend you do that, because it can be a lot of work. If you really want to go that route, you may want to start by reading the `GitHub Actions workflow `_ we use to build the binary wheels. @@ -22,127 +27,112 @@ If you end up modifying *lincs* to make it work on your platform, we kindly ask Start using *lincs*' command-line interface =========================================== -.. START help/run.sh - set -o errexit - set -o nounset - set -o pipefail - trap 'echo "Error on line $LINENO"' ERR - - lincs --help >actual-help.txt - diff expected-help.txt actual-help.txt -.. STOP - -.. START help/expected-help.txt +If you're a Jupyter user, you can `download the notebook `_ this section is based on. .. highlight:: text The command-line interface is the easiest way to get started with *lincs*, starting with ``lincs --help``, which should output something like:: Usage: lincs [OPTIONS] COMMAND [ARGS]... - + lincs (Learn and Infer Non-Compensatory Sorting) is a set of tools for training and using MCDA models. - + Options: --version Show the version and exit. --help Show this message and exit. - + Commands: classification-accuracy Compute a classification accuracy. classify Classify alternatives. + describe Provide human-readable descriptions. generate Generate synthetic data. info Get information about lincs itself. learn Learn a model. visualize Make graphs from data. -.. STOP It's organized into sub-commands, the first one being ``generate``, to generate synthetic pseudo-random data. *lincs* is designed to handle real-world data, but it's often easier to start with synthetic data to get familiar with the tooling and required file formats. Synthetic data is described in our :ref:`conceptual overview documentation `. -.. START command-line-example/run.sh - set -o errexit - set -o nounset - set -o pipefail - trap 'echo "Error on line $LINENO"' ERR -.. STOP - .. highlight:: shell -.. EXTEND command-line-example/run.sh - So, start by generating a classification problem with 4 criteria and 3 categories:: lincs generate classification-problem 4 3 --output-problem problem.yml -.. APPEND-TO-LAST-LINE --random-seed 40 -.. STOP .. highlight:: yaml -.. START command-line-example/expected-problem.yml - The generated ``problem.yml`` should look like:: - # Reproduction command (with lincs version 0.10.3): lincs generate classification-problem 4 3 --random-seed 40 + # Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 40 kind: classification-problem format_version: 1 criteria: - name: Criterion 1 value_type: real - category_correlation: growing + preference_direction: increasing min_value: 0 max_value: 1 - name: Criterion 2 value_type: real - category_correlation: growing + preference_direction: increasing min_value: 0 max_value: 1 - name: Criterion 3 value_type: real - category_correlation: growing + preference_direction: increasing min_value: 0 max_value: 1 - name: Criterion 4 value_type: real - category_correlation: growing + preference_direction: increasing min_value: 0 max_value: 1 - categories: - - name: Category 1 - - name: Category 2 - - name: Category 3 + ordered_categories: + - name: Worst category + - name: Intermediate category 1 + - name: Best category -.. STOP You can edit this file to change the criteria names, the number of categories, *etc.* as long as you keep the same format. That format is explained in details in our :ref:`user guide `. The concept of "classification problem" is described in our :ref:`conceptual overview documentation `. -.. EXTEND command-line-example/run.sh - diff expected-problem.yml problem.yml -.. STOP +If you want a human-readable explanation of the problem, you can use:: -.. highlight:: shell + lincs describe classification-problem problem.yml -.. EXTEND command-line-example/run.sh +It will tell you something like:: + + This a classification problem into 3 ordered categories named "Worst category", "Intermediate category 1" and "Best category". + The best category is "Best category" and the worst category is "Worst category". + There are 4 classification criteria (in no particular order). + Criterion "Criterion 1" takes real values between 0.0 and 1.0 included. + Higher values of "Criterion 1" are known to be better. + Criterion "Criterion 2" takes real values between 0.0 and 1.0 included. + Higher values of "Criterion 2" are known to be better. + Criterion "Criterion 3" takes real values between 0.0 and 1.0 included. + Higher values of "Criterion 3" are known to be better. + Criterion "Criterion 4" takes real values between 0.0 and 1.0 included. + Higher values of "Criterion 4" are known to be better. + + +.. highlight:: shell Then generate an NCS classification model:: lincs generate classification-model problem.yml --output-model model.yml -.. APPEND-TO-LAST-LINE --random-seed 41 -.. STOP .. highlight:: yaml -.. START command-line-example/expected-model.yml - It should look like:: - # Reproduction command (with lincs version 0.10.3): lincs generate classification-model problem.yml --random-seed 41 --model-type mrsort + # Reproduction command (with lincs version 0.11.0): lincs generate classification-model problem.yml --random-seed 41 --model-type mrsort kind: ncs-classification-model format_version: 1 accepted_values: @@ -160,27 +150,15 @@ It should look like:: criterion_weights: [0.147771254, 0.618687689, 0.406786472, 0.0960085914] - *coalitions -.. STOP The file format, including the ``*coalitions`` YAML reference, is documented in our :ref:`user guide `. -.. EXTEND command-line-example/run.sh - diff expected-model.yml model.yml -.. STOP - .. highlight:: shell -.. EXTEND command-line-example/run.sh - You can visualize it using:: lincs visualize classification-model problem.yml model.yml model.png -.. STOP - -.. EXTEND command-line-example/run.sh - cp model.png ../../../../doc-sources -.. STOP It should output something like: @@ -188,14 +166,28 @@ It should output something like: :alt: Model visualization :align: center -.. EXTEND command-line-example/run.sh +The model format is quite generic to ensure *lincs* can evolve to handle future models, +so you may want to get a human-readable description of a model, including wether it's an MR-Sort or Uc-NCS model, using:: + + lincs describe classification-model problem.yml model.yml + +It should output something like:: + + This is a MR-Sort (a.k.a. 1-Uc-NCS) model: an NCS model where the sufficient coalitions are specified using the same criterion weights for all boundaries. + The weights associated to each criterion are: + - Criterion "Criterion 1": 0.15 + - Criterion "Criterion 2": 0.62 + - Criterion "Criterion 3": 0.41 + - Criterion "Criterion 4": 0.10 + To get into an upper category, an alternative must be better than the following profiles on a set of criteria whose weights add up to at least 1: + - For category "Intermediate category 1": at least 0.26 on criterion "Criterion 1", at least 0.06 on criterion "Criterion 2", at least 0.16 on criterion "Criterion 3", and at least 0.05 on criterion "Criterion 4" + - For category "Best category": at least 0.68 on criterion "Criterion 1", at least 0.32 on criterion "Criterion 2", at least 0.67 on criterion "Criterion 3", and at least 0.60 on criterion "Criterion 4" + And finally generate a set of classified alternatives:: lincs generate classified-alternatives problem.yml model.yml 1000 --output-alternatives learning-set.csv -.. APPEND-TO-LAST-LINE --random-seed 42 -.. STOP The file format is documented in our :ref:`reference documentation `. @@ -205,37 +197,23 @@ Then we'll need to think about the how the ``--max-imbalance`` option interacts .. highlight:: text -.. START command-line-example/expected-learning-set.csv - It should start with something like this, and contain 1000 alternatives:: - # Reproduction command (with lincs version 0.10.3): lincs generate classified-alternatives problem.yml model.yml 1000 --random-seed 42 --misclassified-count 0 + # Reproduction command (with lincs version 0.11.0): lincs generate classified-alternatives problem.yml model.yml 1000 --random-seed 42 --misclassified-count 0 name,"Criterion 1","Criterion 2","Criterion 3","Criterion 4",category - "Alternative 1",0.37454012,0.796543002,0.95071429,0.183434784,"Category 3" - "Alternative 2",0.731993914,0.779690981,0.598658502,0.596850157,"Category 2" - "Alternative 3",0.156018645,0.445832759,0.15599452,0.0999749228,"Category 1" - "Alternative 4",0.0580836125,0.4592489,0.866176128,0.333708614,"Category 3" - "Alternative 5",0.601114988,0.14286682,0.708072603,0.650888503,"Category 2" + "Alternative 1",0.37454012,0.796543002,0.95071429,0.183434784,"Best category" + "Alternative 2",0.731993914,0.779690981,0.598658502,0.596850157,"Intermediate category 1" + "Alternative 3",0.156018645,0.445832759,0.15599452,0.0999749228,"Worst category" + "Alternative 4",0.0580836125,0.4592489,0.866176128,0.333708614,"Best category" + "Alternative 5",0.601114988,0.14286682,0.708072603,0.650888503,"Intermediate category 1" -.. STOP - -.. EXTEND command-line-example/run.sh - diff expected-learning-set.csv <(head -n 7 learning-set.csv) -.. STOP .. highlight:: shell -.. EXTEND command-line-example/run.sh - You can visualize its first five alternatives using:: lincs visualize classification-model problem.yml model.yml --alternatives learning-set.csv --alternatives-count 5 alternatives.png -.. STOP - -.. EXTEND command-line-example/run.sh - cp alternatives.png ../../../../doc-sources -.. STOP It should output something like: @@ -247,27 +225,19 @@ It should output something like: .. highlight:: shell -.. EXTEND command-line-example/run.sh - You now have a (synthetic) learning set. You can use it to train a new model:: lincs learn classification-model problem.yml learning-set.csv --output-model trained-model.yml -.. APPEND-TO-LAST-LINE --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 -.. STOP .. highlight:: yaml -.. START command-line-example/expected-trained-model.yml - The trained model has the same structure as the original (synthetic) model because they are both MR-Sort models for the same problem. The learning set doesn't contain all the information from the original model, and the trained model was reconstituted from this partial information, so it is numerically different:: - # Reproduction command (with lincs version 0.10.3): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0 - # Termination condition: target accuracy reached - # Number of iterations: 22 + # Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0 kind: ncs-classification-model format_version: 1 accepted_values: @@ -285,100 +255,63 @@ so it is numerically different:: criterion_weights: [0, 1.01327896e-06, 0.999998987, 0] - *coalitions -.. STOP - -.. EXTEND command-line-example/run.sh - diff expected-trained-model.yml trained-model.yml -.. STOP If the training is effective, the resulting trained model should however behave closely to the original one. To see how close a trained model is to the original one, you can reclassify a testing set. .. highlight:: shell -.. EXTEND command-line-example/run.sh - First, generate a testing set from the original model:: lincs generate classified-alternatives problem.yml model.yml 3000 --output-alternatives testing-set.csv -.. APPEND-TO-LAST-LINE --random-seed 44 -.. STOP - .. highlight:: shell -.. EXTEND command-line-example/run.sh - Then ask the trained model to classify it:: lincs classify problem.yml trained-model.yml testing-set.csv --output-alternatives reclassified-testing-set.csv -.. STOP .. highlight:: shell -.. EXTEND command-line-example/run.sh - There are a few differences between the original testing set and the reclassified one:: diff testing-set.csv reclassified-testing-set.csv -.. APPEND-TO-LAST-LINE | tail -n +5 >classification-diff.txt || true -.. STOP - .. highlight:: diff -.. START command-line-example/expected-classification-diff.txt - That command should show a few alternatives that are not classified the same way by the original and the trained model:: 522c522 - < "Alternative 520",0.617141366,0.326259822,0.901315808,0.460642993,"Category 3" + < "Alternative 520",0.617141366,0.326259822,0.901315808,0.460642993,"Best category" --- - > "Alternative 520",0.617141366,0.326259822,0.901315808,0.460642993,"Category 2" + > "Alternative 520",0.617141366,0.326259822,0.901315808,0.460642993,"Intermediate category 1" 615c615 - < "Alternative 613",0.547554553,0.0552174859,0.690436542,0.511019647,"Category 2" + < "Alternative 613",0.547554553,0.0552174859,0.690436542,0.511019647,"Intermediate category 1" --- - > "Alternative 613",0.547554553,0.0552174859,0.690436542,0.511019647,"Category 1" + > "Alternative 613",0.547554553,0.0552174859,0.690436542,0.511019647,"Worst category" 2596c2596 - < "Alternative 2594",0.234433308,0.780464768,0.162389532,0.622178912,"Category 2" + < "Alternative 2594",0.234433308,0.780464768,0.162389532,0.622178912,"Intermediate category 1" --- - > "Alternative 2594",0.234433308,0.780464768,0.162389532,0.622178912,"Category 1" + > "Alternative 2594",0.234433308,0.780464768,0.162389532,0.622178912,"Worst category" 2610c2610 - < "Alternative 2608",0.881479025,0.055544015,0.82936728,0.853676081,"Category 2" + < "Alternative 2608",0.881479025,0.055544015,0.82936728,0.853676081,"Intermediate category 1" --- - > "Alternative 2608",0.881479025,0.055544015,0.82936728,0.853676081,"Category 1" + > "Alternative 2608",0.881479025,0.055544015,0.82936728,0.853676081,"Worst category" -.. STOP - -.. EXTEND command-line-example/run.sh - diff expected-classification-diff.txt classification-diff.txt -.. STOP .. highlight:: shell -.. EXTEND command-line-example/run.sh - You can also measure the classification accuracy of the trained model on that testing set:: lincs classification-accuracy problem.yml trained-model.yml testing-set.csv -.. APPEND-TO-LAST-LINE >classification-accuracy.txt -.. STOP - -.. START command-line-example/expected-classification-accuracy.txt - .. highlight:: text It should be close to 100%:: 2996/3000 -.. STOP - -.. EXTEND command-line-example/run.sh - diff expected-classification-accuracy.txt classification-accuracy.txt -.. STOP What now? diff --git a/docs/_sources/user-guide.rst.txt b/docs/_sources/user-guide.rst.txt index 540eca33..ffa6adcc 100644 --- a/docs/_sources/user-guide.rst.txt +++ b/docs/_sources/user-guide.rst.txt @@ -1,3 +1,5 @@ +.. WARNING: this file is generated from 'doc-sources/user-guide.rst.tmpl'. MANUAL EDITS WILL BE LOST. + .. Copyright 2023 Vincent Jacques ========== @@ -23,24 +25,6 @@ Formatting data for *lincs* The concept of classification problem is defined in our :ref:`conceptual overview `. To describe problems, *lincs* uses YAML files conforming to the `JSON schema `_ you'll find in our :ref:`reference documentation `. -.. START file-formats/run.sh - set -o errexit - set -o nounset - set -o pipefail - trap 'echo "Error on line $LINENO"' ERR - - lincs generate classification-model problem.yml --random-seed 42 --output-model mrsort-model.yml - diff <(tail -n +2 mrsort-model.yml) expected-mrsort-model.yml - - # Check that the NCS model is correct (we don't have explicit commands for that, so we use generate classified-alternatives) - lincs generate classified-alternatives problem.yml ncs-model.yml 1 >/dev/null - - lincs classify problem.yml mrsort-model.yml unclassified-alternatives.csv --output-alternatives classified-alternatives.csv - diff <(tail -n +2 classified-alternatives.csv) expected-classified-alternatives.csv -.. STOP - -.. START file-formats/problem.yml - Here is an example of a problem file:: kind: classification-problem @@ -48,20 +32,19 @@ Here is an example of a problem file:: criteria: - name: Criterion 1 value_type: real - category_correlation: growing + preference_direction: increasing min_value: 0 max_value: 20 - name: Criterion 2 value_type: real - category_correlation: decreasing + preference_direction: decreasing min_value: -5 max_value: 5 - categories: + ordered_categories: - name: Low - name: Medium - name: High -.. STOP The two first keys, ``kind`` and ``format_version`` are here to identify exactly the file format. For now, they must always be set to ``classification-problem`` and ``1`` respectively. @@ -77,13 +60,13 @@ Each criterion has a ``name``. Currently, criteria can only take floating point values, so their ``value_type`` is always ``real``. We expect this could evolve to also support criteria with integer or explicitly enumerated values. -Then, the ``category_correlation`` key describe what makes "good values" for this criterion. -If it is ``growing`` (resp. ``decreasing``), then higher (resp. lower) numerical values correspond to upper categories. -Note that this correlation comes from expert knowledge about the structure of the problem, +Then, the ``preference_direction`` key describe what makes "good values" for this criterion. +If it is ``increasing`` (resp. ``decreasing``), then higher (resp. lower) numerical values correspond to upper categories. +Note that this preference direction comes from expert knowledge about the structure of the problem, and will be used as an absolute truth when learning a model for this problem. -We expect the supported correlations could evolve to also support criteria with single-peaked correlation, +We expect the supported preference directions could evolve to also support single-peaked criteria, where intermediate numerical value correspond to upper categories, and extreme values to lower categories. -We also expect this could evolve to support criteria with unknown correlation, +We also expect this could evolve to support criteria with unknown preference direction, to support the case where no expert knowledge is available and delegate this choice to the learning process. Finally, for criteria with numerical ``value_type`` (currently all of them), @@ -114,8 +97,6 @@ referencing the problem file by name would not be robust because files can be re and referencing the problem file by content (using a hash) would forbid any change in the problem file. So it's the user's responsibility to keep track of that information and always give *lincs* the correct problem file along with a model file. -.. START file-formats/expected-mrsort-model.yml - Here is an example of a model file corresponding to the problem file above:: kind: ncs-classification-model @@ -131,7 +112,6 @@ Here is an example of a model file corresponding to the problem file above:: criterion_weights: [0.938825667, 0.343733728] - *coalitions -.. STOP Like for problem files, the two first keys must take exactly these values. @@ -149,21 +129,21 @@ For such a criterion, the determination of the accepted values will require two So our file format takes an transposed approach and focusses on criteria instead of profiles: for each criterion, it describes the method used to accept values at different category levels. -For current criteria (with ``growing`` or ``decreasing`` correlation), the method is always ``kind: thresholds``, +For current criteria (with ``increasing`` or ``decreasing`` preference direction), the method is always ``kind: thresholds``, and the ``thresholds`` attribute lists the successive values required to enter an upper category. It must have as many elements as there are boundaries between categories, *i.e.* as there are categories minus one. -It's always sorted, in increasing order for ``growing`` criteria and in decreasing order for ``decreasing`` criteria. +It's always sorted, in increasing order for ``increasing`` criteria and in decreasing order for ``decreasing`` criteria. Note that this list is not a profile: it does not describe the limits between categories. The matrix made of these lists is the transposed of the matrix made of the profiles. -When we support criteria with single-peaked or unknown correlation, +When we support single-peaked criteria or criteria with unknown preference direction, we'll introduce other ``kinds`` of accepted values with new attributes instead of ``thresholds``. ================================== ======================== ========================== -Criterion ``category_correlation`` Accepted values ``kind`` Accepted values attributes +Criterion ``preference_direction`` Accepted values ``kind`` Accepted values attributes ================================== ======================== ========================== -``growing`` ``thresholds`` ``thresholds`` +``increasing`` ``thresholds`` ``thresholds`` ``decreasing`` ``thresholds`` ``thresholds`` ================================== ======================== ========================== @@ -195,8 +175,6 @@ Sufficient coalitions ``kind`` Sufficient coalitions attributes ``roots`` ``upset_roots`` ============================== ================================ -.. START file-formats/ncs-model.yml - Here is another model corresponding to the problem file above, but this time using the ``roots`` kind of sufficient coalitions, and using different coalitions for the two boundaries (so, no YAML anchor):: @@ -215,7 +193,6 @@ and using different coalitions for the two boundaries (so, no YAML anchor):: upset_roots: - [0, 1] -.. STOP "Alternatives" files -------------------- @@ -227,8 +204,6 @@ Like model files, alternatives files are always associated to a problem file. .. highlight:: text -.. START file-formats/expected-classified-alternatives.csv - Here is an example corresponding to the problem above:: name,"Criterion 1","Criterion 2",category @@ -238,15 +213,12 @@ Here is an example corresponding to the problem above:: "Alternative 4",18.0154629,1.33949804,Medium "Alternative 5",9.30789757,2.66963387,Medium -.. STOP Its header line contains the names of its columns. Its first column, ``name``, contains the names of the alternatives. Its intermediate columns, named after the names of criteria, contain the values of the criteria for each alternative. Its last column, ``category``, contains the names of the categories in which each alternative is classified. -.. START file-formats/unclassified-alternatives.csv - Values in the ``category`` column can be empty to describe alternatives that are not (yet) classified:: name,"Criterion 1","Criterion 2",category @@ -256,7 +228,6 @@ Values in the ``category`` column can be empty to describe alternatives that are "Alternative 4",18.0154629,1.33949804, "Alternative 5",9.30789757,2.66963387, -.. STOP .. _user-comments-in-generated-files: @@ -294,39 +265,25 @@ In all cases, the :ref:`comments ` left by *li Generating a problem -------------------- -.. START synthetic-data/run.sh - set -o errexit - set -o nounset - set -o pipefail - trap 'echo "Error on line $LINENO"' ERR - With ``lincs generate classification-problem``, you can generate a classification problem file. Using its default settings, you just have to pass it the numbers of criteria and categories you want, as you saw in our :doc:`get started guide `:: lincs generate classification-problem 4 3 -.. APPEND-TO-LAST-LINE --output-problem problem.yml -.. STOP - The ``--help`` option on the command-line and our :ref:`reference documentation ` describe the options available to tweak the generated problem. Most notably: - ``--denormalized-min-max`` generates problems with pseudo-random ``min_value`` and ``max_value`` for each criterion. By default, they are always set at 0 and 1. -- ``--allow-decreasing-criteria`` chooses pseudo-randomly the ``category_corelation`` of each criterion between ``growing`` and ``decreasing``. By default, all criteria have ``growing`` correlation. +- ``--allow-decreasing-criteria`` chooses pseudo-randomly the ``preference_direction`` of each criterion between ``increasing`` and ``decreasing``. By default, all criteria have ``increasing`` preference direction. Generating a model ------------------ -.. EXTEND synthetic-data/run.sh - With ``lincs generate classification-model``, you can generate a classification model file. Using its default settings, you just have to pass it the problem file you want to use:: lincs generate classification-model problem.yml -.. APPEND-TO-LAST-LINE --output-model model.yml -.. STOP - For now, *lincs* can only generate MR-Sort models, so the ``--model-type`` option can only take its default value: ``mrsort``. We expect this could change if we implement the generation of other types of models. @@ -337,15 +294,10 @@ This effectively impacts how hard it is for alternatives to get into upper categ Generating alternatives ----------------------- -.. EXTEND synthetic-data/run.sh - With its default settings, ``lincs generate classified-alternatives`` requires only the problem and model files and the number of alternatives to generate:: lincs generate classified-alternatives problem.yml model.yml 100 -.. APPEND-TO-LAST-LINE --output-alternatives learning-set.csv -.. STOP - This generates 100 random alternatives, and then classifies them according to the model. By default, no effort is made to balance the number of alternatives in each category. @@ -370,16 +322,11 @@ After alternatives are generated and classified, this option randomly selects th Learning a model ================ -.. EXTEND synthetic-data/run.sh - As you've seen in our get started guide, the basic command to learn a classification model with *lincs* is ``lincs learn classification-model``. With its default settings, you just have to pass it a problem file and a learning set file (of classified alternatives):: lincs learn classification-model problem.yml learning-set.csv -.. APPEND-TO-LAST-LINE --output-model learned-model.yml -.. STOP - Its ``--help`` option and our reference documentation give you a list of the numerous options it accepts. An whole tree of options @@ -440,6 +387,9 @@ Or maybe a small multiple of that number. The ``--mrsort.weights-profiles-breed.verbose`` option can be used to make *lincs* display information about the progress of the learning. +The ``--mrsort.weights-profiles-breed.output-metadata`` options can be used to produce a YAML file giving information about the learning process: +the reason it stopped (accuracy reached, time limit, *etc.*), how many WPB iterations it took, *etc.* + Termination ........... @@ -462,50 +412,13 @@ That strategy uses a linear program, and lets you choose among several solvers w By default, it uses GLOP, which is a part of `Google's OR-Tools `_. -.. START alglib-learning/run.sh - set -o errexit - set -o nounset - set -o pipefail - trap 'echo "Error on line $LINENO"' ERR - - cp ../../get-started/command-line-example/{problem.yml,learning-set.csv} . - Here is an example using the `Alglib `_ solver:: lincs learn classification-model problem.yml learning-set.csv \ --mrsort.weights-profiles-breed.linear-program.solver alglib -.. APPEND-TO-LAST-LINE --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 -.. APPEND-TO-LAST-LINE --output-model alglib-trained-model.yml - - diff expected-alglib-trained-model.yml alglib-trained-model.yml - -.. STOP - It should produce a very similar model, with slight numerical differences. -.. START alglib-learning/expected-alglib-trained-model.yml - # Reproduction command (with lincs version 0.10.3): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver alglib --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0 - # Termination condition: target accuracy reached - # Number of iterations: 9 - kind: ncs-classification-model - format_version: 1 - accepted_values: - - kind: thresholds - thresholds: [0.924693644, 0.971395075] - - kind: thresholds - thresholds: [0.0556534864, 0.326433569] - - kind: thresholds - thresholds: [0.162616938, 0.671892762] - - kind: thresholds - thresholds: [0.942387044, 0.988728762] - sufficient_coalitions: - - &coalitions - kind: weights - criterion_weights: [0.293799639, 0.386859566, 0.613140464, 0.304567546] - - *coalitions -.. STOP - "Profiles" step ............... @@ -521,32 +434,11 @@ This is the case for example on macOS, where CUDA is not supported. Binary wheels for Linux and Windows do support it though. You can check with ``lincs info has-gpu``. -.. START gpu-learning/uses-gpu -.. STOP - -.. START gpu-learning/run.sh - set -o errexit - set -o nounset - set -o pipefail - trap 'echo "Error on line $LINENO"' ERR - - cp ../../get-started/command-line-example/{problem.yml,learning-set.csv} . - cp ../../get-started/command-line-example/expected-trained-model.yml . - - diff <(echo "lincs was compiled with CUDA support") <(lincs info has-gpu) - Here is an example:: lincs learn classification-model problem.yml learning-set.csv \ --mrsort.weights-profiles-breed.accuracy-heuristic.processor gpu -.. APPEND-TO-LAST-LINE --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 -.. APPEND-TO-LAST-LINE --output-model gpu-trained-model.yml - - diff <(sed s/cpu/gpu/ expected-trained-model.yml) gpu-trained-model.yml - -.. STOP - If you specify the random seed, it will produce the exact same model as when using the CPU; this is an important feature of *lincs*, that the GPU code has the same behavior as the CPU code. @@ -563,14 +455,6 @@ SAT-based strategies .. highlight:: shell -.. START sat-learnings/run.sh - set -o errexit - set -o nounset - set -o pipefail - trap 'echo "Error on line $LINENO"' ERR - - cp ../../get-started/command-line-example/{problem.yml,learning-set.csv} . - You can also use entirely different approaches using SAT and max-SAT solvers. The tradeoffs offered by these methods are highlighted in our :ref:`conceptual overview `. @@ -580,28 +464,16 @@ Here are two examples:: lincs learn classification-model problem.yml learning-set.csv \ --model-type ucncs --ucncs.strategy sat-by-coalitions -.. APPEND-TO-LAST-LINE --output-model sat-by-coalitions-trained-model.yml - And:: lincs learn classification-model problem.yml learning-set.csv \ --model-type ucncs --ucncs.strategy max-sat-by-separation -.. APPEND-TO-LAST-LINE --output-model max-sat-by-separation-trained-model.yml - -.. - diff expected-sat-by-coalitions-trained-model.yml sat-by-coalitions-trained-model.yml - diff expected-max-sat-by-separation-trained-model.yml max-sat-by-separation-trained-model.yml - -.. STOP - .. highlight:: yaml -.. START sat-learnings/expected-sat-by-coalitions-trained-model.yml - They produce a different kind of model, with the sufficient coalitions specified explicitly by their roots:: - # Reproduction command (with lincs version 0.10.3): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy sat-by-coalitions + # Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy sat-by-coalitions kind: ncs-classification-model format_version: 1 accepted_values: @@ -620,29 +492,6 @@ They produce a different kind of model, with the sufficient coalitions specified - [1, 2] - *coalitions -.. STOP - -.. START sat-learnings/expected-max-sat-by-separation-trained-model.yml - # Reproduction command (with lincs version 0.10.3): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy max-sat-by-separation - kind: ncs-classification-model - format_version: 1 - accepted_values: - - kind: thresholds - thresholds: [0.944162905, 0.944440365] - - kind: thresholds - thresholds: [0.0552680492, 0.325211823] - - kind: thresholds - thresholds: [0.161919117, 0.672662616] - - kind: thresholds - thresholds: [0.000378949801, 0.224962443] - sufficient_coalitions: - - &coalitions - kind: roots - upset_roots: - - [1, 2] - - *coalitions -.. STOP - Using a model ============= @@ -667,6 +516,12 @@ In that case, the ``category`` column must be populated as it serves as a refere That command displays the number of alternatives that were correctly classified and the total number of alternatives in the learning set. +Getting human-readable information about a problem or model +----------------------------------------------------------- + +You can use ``lincs describe classification-problem problem.yml`` to get a human-readable description of a problem, +and ``lincs describe classification-model problem.yml model.yml`` to get one for a model, including wether it's an MR-Sort or Uc-NCS model. + Visualizing a model and alternatives ------------------------------------ diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 06c0c5e5..9dc22d64 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.10.3', + VERSION: '0.11.0', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/changelog.html b/docs/changelog.html index fcdc4cb0..86fbcf71 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -5,11 +5,11 @@ - Changelog — lincs 0.10.3 documentation + Changelog — lincs 0.11.0 documentation - + @@ -34,6 +34,22 @@

Changelog

+
+

Version 0.11.0

+
    +
  • Breaking Rename category_correlation to preference_direction in problem files

  • +
  • Breaking Rename the growing preference direction to increasing in problem files

  • +
  • Breaking Rename the categories attribute in problem files to ordered_categories in problem files

  • +
  • Make names of generated categories more explicit (“Worst category”, “Intermediate category N”, “Best category”)

  • +
  • Support isotone (resp. antitone) as a synonym for increasing (resp. decreasing) in problem files

  • +
  • Add lincs describe command to produce human-readable descriptions of problems and models

  • +
  • Remove comments about termination conditions from learned models, but:

  • +
  • Add --mrsort.weights-profiles-breed.output-metadata to generate in YAML the data previously found in those comments

  • +
  • Provide a Jupyter notebook to help follow the “Get Started” guide (and use Jupyter for all integration tests)

  • +
  • Document the “externally managed” error on Ubuntu 23.4+

  • +
+

(In versions below, the term “category correlation” was used instead of “preference direction”.)

+

Versions 0.10.0 to 0.10.3

This is the first release candidate for version 1.0.0.

@@ -268,6 +284,7 @@

Navigation

  • Reference
  • Contributor guide
  • Changelog
      +
    • Version 0.11.0
    • Versions 0.10.0 to 0.10.3
    • Versions 0.9.0 to 0.9.2
    • Version 0.8.7
    • diff --git a/docs/conceptual-overview.html b/docs/conceptual-overview.html index a4b2d131..412e9cf0 100644 --- a/docs/conceptual-overview.html +++ b/docs/conceptual-overview.html @@ -5,11 +5,11 @@ - Conceptual overview — lincs 0.10.3 documentation + Conceptual overview — lincs 0.11.0 documentation - + diff --git a/docs/contributor-guide.html b/docs/contributor-guide.html index 8143c2f5..b0c2db75 100644 --- a/docs/contributor-guide.html +++ b/docs/contributor-guide.html @@ -5,11 +5,11 @@ - Contributor guide — lincs 0.10.3 documentation + Contributor guide — lincs 0.11.0 documentation - + @@ -112,21 +112,33 @@

      ./run-development-cycle.sh -
      ---skip-long
      -

      Skip long tests to save time. Implies –single-python-version. Please run the full development cycle at least once before submitting your changes.

      +
      +--skip-unit
      +

      Skip unit tests to save time.

      -
      ---skip-unit
      -

      Skip unit tests to save time. Please run the full development cycle at least once before submitting your changes.

      +
      +--skip-long-unit
      +

      Skip long unit tests to save time.

      +
      + +
      +
      +--skip-cpp-unit
      +

      Skip C++ unit tests to save time.

      +
      + +
      +
      +--skip-notebooks
      +

      Skip notebooks to save time.

      -
      ---stop-after-unit
      -

      Stop before integration tests to save time. Please run the full development cycle at least once before submitting your changes.

      +
      +--skip-unchanged-notebooks
      +

      Skip notebooks that have no ‘git diff’ to save time.

      @@ -155,6 +167,12 @@

      ./publish.sh
      ./publish.sh [OPTIONS] {patch|minor|major}
       
      +

      Options

      +
      +
      +--dry-run
      +
      +

      Arguments

      @@ -203,44 +221,7 @@

      Strategies

      But beware of virtual function calls

      -
      - -Virtual function calls are costly (click for details)

      Given these classes:

      -
      class Foo {
      - public:
      -  virtual void yes_virtual() = 0;
      -  void no_virtual();
      -};
      -
      -class ActualFoo : public Foo {
      - public:
      -  void yes_virtual() override;
      -};
      -
      -
      -

      And functions:

      -
      void Foo::no_virtual() {}
      -void ActualFoo::yes_virtual() {}
      -
      -Foo* makeFoo() { return new ActualFoo; }
      -
      -
      -

      The following code runs in ~0.93s:

      -
      Foo* foo = makeFoo();
      -
      -for (int i = 0; i != 1'000'000'000; ++i) {
      -  foo->no_virtual();
      -}
      -
      -
      -

      And the following code runs in ~1.12s:

      -
      Foo* foo = makeFoo();
      -for (int i = 0; i != 1'000'000'000; ++i) {
      -  foo->yes_virtual();
      -}
      -
      -
      -

      So, although virtual function calls are useful, they must be used with care. +

      Virtual function calls are somewhat costly (see integration-tests/virtual-cost) so, although they are useful, they must be used with care. It’s best to keep them for cases where they are not called too often; up to a few thousands per learning should be OK. When polymorphism is required for frequent calls, it’s best to use template-based static polymorphism.

      An example of that can be found in lincs/liblincs/learning/mrsort-by-weights-profiles-breed/optimize-weights/linear-program.hpp, @@ -250,7 +231,7 @@

      But beware of virtual function calls

      One could now consider using templates everywhere, and not use virtual function calls at all. This would have the following negative consequences:

      -

      The number of explicit template instantiations would explode incombinatorially. +

      The number of explicit template instantiations would explode in a combinatorial way. For example, the LinearProgram template parameter of .../optimize-weights/linear-program.hpp is currently instantiated explicitly for each LP solver in .../optimize-weights/linear-program.cpp. If LearnMrsortByWeightsProfilesBreed was a template, it would have to be instantiated for the whole Cartesian product of all variants of each strategy, to a great maintenance cost. Note that this is not specific to explicit template instanciation, because we expose lincs as a Python library: diff --git a/docs/genindex.html b/docs/genindex.html index 9f15758f..c0d3a453 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -4,11 +4,11 @@ - Index — lincs 0.10.3 documentation + Index — lincs 0.11.0 documentation - + @@ -79,6 +79,13 @@

      Symbols

      +
    • + --dry-run + +
    • @@ -200,6 +207,13 @@

      Symbols

    • +
    • + --mrsort.weights-profiles-breed.output-metadata + +
    • @@ -216,8 +230,6 @@

      Symbols

    • lincs-learn-classification-model command line option
  • - - + + +
  • + --output-description + +
  • @@ -290,24 +313,38 @@

    Symbols

  • - --skip-long + --skip-cpp-unit
  • - --skip-unit + --skip-long-unit
  • +
  • + --skip-notebooks + +
  • +
  • + --skip-unchanged-notebooks + +
  • - --stop-after-unit + --skip-unit
  • @@ -342,6 +379,8 @@

    Symbols

    ./publish.sh command line option
  • @@ -357,11 +396,15 @@

    Symbols

  • --single-python-version
  • -
  • --skip-long +
  • --skip-cpp-unit
  • -
  • --skip-unit +
  • --skip-long-unit +
  • +
  • --skip-notebooks
  • -
  • --stop-after-unit +
  • --skip-unchanged-notebooks +
  • +
  • --skip-unit
  • --unit-coverage
  • @@ -461,6 +504,26 @@

    L

  • MODEL
  • PROBLEM +
  • + +
  • + lincs-describe-classification-model command line option + +
  • +
  • + lincs-describe-classification-problem command line option + +
  • @@ -550,6 +613,8 @@

    L

  • --mrsort.weights-profiles-breed.max-iterations-without-progress
  • --mrsort.weights-profiles-breed.models-count +
  • +
  • --mrsort.weights-profiles-breed.output-metadata
  • --mrsort.weights-profiles-breed.profiles-strategy
  • @@ -598,6 +663,8 @@

    M

  • lincs-classification-accuracy command line option
  • lincs-classify command line option +
  • +
  • lincs-describe-classification-model command line option
  • lincs-generate-classified-alternatives command line option
  • @@ -630,6 +697,10 @@

    P

  • lincs-classification-accuracy command line option
  • lincs-classify command line option +
  • +
  • lincs-describe-classification-model command line option +
  • +
  • lincs-describe-classification-problem command line option
  • lincs-generate-classification-model command line option
  • diff --git a/docs/get-started.html b/docs/get-started.html index d20208e9..ee23777c 100644 --- a/docs/get-started.html +++ b/docs/get-started.html @@ -5,11 +5,11 @@ - Get started — lincs 0.10.3 documentation + Get started — lincs 0.11.0 documentation - + @@ -38,6 +38,8 @@

    Get started

    We provide binary wheels for lincs on Linux, Windows and macOS for x86_64 processors, so running pip install lincs --only-binary lincs should be enough on those systems.

    +

    We generally recommend you use pip in a virtual environment (python -m venv) or directly pipx to install any package, including lincs. +Recent Ubuntu systems will even enforce that, by refusing to install PyPI packages in the “externally managed” default environment.

    If you’re on a platform for which we don’t make wheels, you’ll need to build lincs from sources. We don’t recommend you do that, because it can be a lot of work. If you really want to go that route, you may want to start by reading the GitHub Actions workflow we use to build the binary wheels. @@ -46,6 +48,7 @@

    Get lincs

    Start using lincs’ command-line interface

    +

    If you’re a Jupyter user, you can download the notebook this section is based on.

    The command-line interface is the easiest way to get started with lincs, starting with lincs --help, which should output something like:

    Usage: lincs [OPTIONS] COMMAND [ARGS]...
     
    @@ -59,6 +62,7 @@ 

    Get lincsproblem.yml should look like:

    -
    # Reproduction command (with lincs version 0.10.3): lincs generate classification-problem 4 3 --random-seed 40
    +
    # Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 40
     kind: classification-problem
     format_version: 1
     criteria:
       - name: Criterion 1
         value_type: real
    -    category_correlation: growing
    +    preference_direction: increasing
         min_value: 0
         max_value: 1
       - name: Criterion 2
         value_type: real
    -    category_correlation: growing
    +    preference_direction: increasing
         min_value: 0
         max_value: 1
       - name: Criterion 3
         value_type: real
    -    category_correlation: growing
    +    preference_direction: increasing
         min_value: 0
         max_value: 1
       - name: Criterion 4
         value_type: real
    -    category_correlation: growing
    +    preference_direction: increasing
         min_value: 0
         max_value: 1
    -categories:
    -  - name: Category 1
    -  - name: Category 2
    -  - name: Category 3
    +ordered_categories:
    +  - name: Worst category
    +  - name: Intermediate category 1
    +  - name: Best category
     

    You can edit this file to change the criteria names, the number of categories, etc. as long as you keep the same format. That format is explained in details in our user guide. The concept of “classification problem” is described in our conceptual overview documentation.

    +

    If you want a human-readable explanation of the problem, you can use:

    +
    lincs describe classification-problem problem.yml
    +
    +
    +

    It will tell you something like:

    +
    This a classification problem into 3 ordered categories named "Worst category", "Intermediate category 1" and "Best category".
    +The best category is "Best category" and the worst category is "Worst category".
    +There are 4 classification criteria (in no particular order).
    +Criterion "Criterion 1" takes real values between 0.0 and 1.0 included.
    +Higher values of "Criterion 1" are known to be better.
    +Criterion "Criterion 2" takes real values between 0.0 and 1.0 included.
    +Higher values of "Criterion 2" are known to be better.
    +Criterion "Criterion 3" takes real values between 0.0 and 1.0 included.
    +Higher values of "Criterion 3" are known to be better.
    +Criterion "Criterion 4" takes real values between 0.0 and 1.0 included.
    +Higher values of "Criterion 4" are known to be better.
    +
    +

    Then generate an NCS classification model:

    lincs generate classification-model problem.yml --output-model model.yml
     

    It should look like:

    -
    # Reproduction command (with lincs version 0.10.3): lincs generate classification-model problem.yml --random-seed 41 --model-type mrsort
    +
    # Reproduction command (with lincs version 0.11.0): lincs generate classification-model problem.yml --random-seed 41 --model-type mrsort
     kind: ncs-classification-model
     format_version: 1
     accepted_values:
    @@ -137,6 +159,23 @@ 

    Get lincs +

    The model format is quite generic to ensure lincs can evolve to handle future models, +so you may want to get a human-readable description of a model, including wether it’s an MR-Sort or Uc-NCS model, using:

    +
    lincs describe classification-model problem.yml model.yml
    +
    +
    +

    It should output something like:

    +
    This is a MR-Sort (a.k.a. 1-Uc-NCS) model: an NCS model where the sufficient coalitions are specified using the same criterion weights for all boundaries.
    +The weights associated to each criterion are:
    +  - Criterion "Criterion 1": 0.15
    +  - Criterion "Criterion 2": 0.62
    +  - Criterion "Criterion 3": 0.41
    +  - Criterion "Criterion 4": 0.10
    +To get into an upper category, an alternative must be better than the following profiles on a set of criteria whose weights add up to at least 1:
    +  - For category "Intermediate category 1": at least 0.26 on criterion "Criterion 1", at least 0.06 on criterion "Criterion 2", at least 0.16 on criterion "Criterion 3", and at least 0.05 on criterion "Criterion 4"
    +  - For category "Best category": at least 0.68 on criterion "Criterion 1", at least 0.32 on criterion "Criterion 2", at least 0.67 on criterion "Criterion 3", and at least 0.60 on criterion "Criterion 4"
    +
    +

    And finally generate a set of classified alternatives:

    lincs generate classified-alternatives problem.yml model.yml 1000 --output-alternatives learning-set.csv
     
    @@ -146,13 +185,13 @@

    Get lincs--max-imbalance option interacts with that feature.

    It should start with something like this, and contain 1000 alternatives:

    -
    # Reproduction command (with lincs version 0.10.3): lincs generate classified-alternatives problem.yml model.yml 1000 --random-seed 42 --misclassified-count 0
    +
    # Reproduction command (with lincs version 0.11.0): lincs generate classified-alternatives problem.yml model.yml 1000 --random-seed 42 --misclassified-count 0
     name,"Criterion 1","Criterion 2","Criterion 3","Criterion 4",category
    -"Alternative 1",0.37454012,0.796543002,0.95071429,0.183434784,"Category 3"
    -"Alternative 2",0.731993914,0.779690981,0.598658502,0.596850157,"Category 2"
    -"Alternative 3",0.156018645,0.445832759,0.15599452,0.0999749228,"Category 1"
    -"Alternative 4",0.0580836125,0.4592489,0.866176128,0.333708614,"Category 3"
    -"Alternative 5",0.601114988,0.14286682,0.708072603,0.650888503,"Category 2"
    +"Alternative 1",0.37454012,0.796543002,0.95071429,0.183434784,"Best category"
    +"Alternative 2",0.731993914,0.779690981,0.598658502,0.596850157,"Intermediate category 1"
    +"Alternative 3",0.156018645,0.445832759,0.15599452,0.0999749228,"Worst category"
    +"Alternative 4",0.0580836125,0.4592489,0.866176128,0.333708614,"Best category"
    +"Alternative 5",0.601114988,0.14286682,0.708072603,0.650888503,"Intermediate category 1"
     

    You can visualize its first five alternatives using:

    @@ -170,9 +209,7 @@

    Get lincs
    # Reproduction command (with lincs version 0.10.3): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0
    -# Termination condition: target accuracy reached
    -# Number of iterations: 22
    +
    # Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0
     kind: ncs-classification-model
     format_version: 1
     accepted_values:
    @@ -207,21 +244,21 @@ 

    Get lincs
    522c522
    -< "Alternative 520",0.617141366,0.326259822,0.901315808,0.460642993,"Category 3"
    +< "Alternative 520",0.617141366,0.326259822,0.901315808,0.460642993,"Best category"
     ---
    -> "Alternative 520",0.617141366,0.326259822,0.901315808,0.460642993,"Category 2"
    +> "Alternative 520",0.617141366,0.326259822,0.901315808,0.460642993,"Intermediate category 1"
     615c615
    -< "Alternative 613",0.547554553,0.0552174859,0.690436542,0.511019647,"Category 2"
    +< "Alternative 613",0.547554553,0.0552174859,0.690436542,0.511019647,"Intermediate category 1"
     ---
    -> "Alternative 613",0.547554553,0.0552174859,0.690436542,0.511019647,"Category 1"
    +> "Alternative 613",0.547554553,0.0552174859,0.690436542,0.511019647,"Worst category"
     2596c2596
    -< "Alternative 2594",0.234433308,0.780464768,0.162389532,0.622178912,"Category 2"
    +< "Alternative 2594",0.234433308,0.780464768,0.162389532,0.622178912,"Intermediate category 1"
     ---
    -> "Alternative 2594",0.234433308,0.780464768,0.162389532,0.622178912,"Category 1"
    +> "Alternative 2594",0.234433308,0.780464768,0.162389532,0.622178912,"Worst category"
     2610c2610
    -< "Alternative 2608",0.881479025,0.055544015,0.82936728,0.853676081,"Category 2"
    +< "Alternative 2608",0.881479025,0.055544015,0.82936728,0.853676081,"Intermediate category 1"
     ---
    -> "Alternative 2608",0.881479025,0.055544015,0.82936728,0.853676081,"Category 1"
    +> "Alternative 2608",0.881479025,0.055544015,0.82936728,0.853676081,"Worst category"
     

    You can also measure the classification accuracy of the trained model on that testing set:

    diff --git a/docs/get-started.ipynb b/docs/get-started.ipynb new file mode 100644 index 00000000..14cf5b6c --- /dev/null +++ b/docs/get-started.ipynb @@ -0,0 +1,385 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "361e4c6f-f368-4a4f-87fe-7b577ed1b3a5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Usage: lincs [OPTIONS] COMMAND [ARGS]...\n", + "\n", + " lincs (Learn and Infer Non-Compensatory Sorting) is a set of tools for\n", + " training and using MCDA models.\n", + "\n", + "Options:\n", + " --version Show the version and exit.\n", + " --help Show this message and exit.\n", + "\n", + "Commands:\n", + " classification-accuracy Compute a classification accuracy.\n", + " classify Classify alternatives.\n", + " describe Provide human-readable descriptions.\n", + " generate Generate synthetic data.\n", + " info Get information about lincs itself.\n", + " learn Learn a model.\n", + " visualize Make graphs from data.\n" + ] + } + ], + "source": [ + "lincs --help" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a3e8e6c9-d553-4b3a-b9c3-8708b2036dc8", + "metadata": { + "append_to_source": [ + "--random-seed 40" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 40\n", + "kind: classification-problem\n", + "format_version: 1\n", + "criteria:\n", + " - name: Criterion 1\n", + " value_type: real\n", + " preference_direction: increasing\n", + " min_value: 0\n", + " max_value: 1\n", + " - name: Criterion 2\n", + " value_type: real\n", + " preference_direction: increasing\n", + " min_value: 0\n", + " max_value: 1\n", + " - name: Criterion 3\n", + " value_type: real\n", + " preference_direction: increasing\n", + " min_value: 0\n", + " max_value: 1\n", + " - name: Criterion 4\n", + " value_type: real\n", + " preference_direction: increasing\n", + " min_value: 0\n", + " max_value: 1\n", + "ordered_categories:\n", + " - name: Worst category\n", + " - name: Intermediate category 1\n", + " - name: Best category\n" + ] + } + ], + "source": [ + "lincs generate classification-problem 4 3 --output-problem problem.yml\n", + "cat problem.yml" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "74b56034-e9b3-45f3-85fb-ba05ddce97e1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This a classification problem into 3 ordered categories named \"Worst category\", \"Intermediate category 1\" and \"Best category\".\n", + "The best category is \"Best category\" and the worst category is \"Worst category\".\n", + "There are 4 classification criteria (in no particular order).\n", + "Criterion \"Criterion 1\" takes real values between 0.0 and 1.0 included.\n", + "Higher values of \"Criterion 1\" are known to be better.\n", + "Criterion \"Criterion 2\" takes real values between 0.0 and 1.0 included.\n", + "Higher values of \"Criterion 2\" are known to be better.\n", + "Criterion \"Criterion 3\" takes real values between 0.0 and 1.0 included.\n", + "Higher values of \"Criterion 3\" are known to be better.\n", + "Criterion \"Criterion 4\" takes real values between 0.0 and 1.0 included.\n", + "Higher values of \"Criterion 4\" are known to be better.\n" + ] + } + ], + "source": [ + "lincs describe classification-problem problem.yml" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b5c6832d-9133-4ee7-92c2-9d2e8fa78a3e", + "metadata": { + "append_to_source": [ + "--random-seed 41" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-model problem.yml --random-seed 41 --model-type mrsort\n", + "kind: ncs-classification-model\n", + "format_version: 1\n", + "accepted_values:\n", + " - kind: thresholds\n", + " thresholds: [0.255905151, 0.676961303]\n", + " - kind: thresholds\n", + " thresholds: [0.0551739037, 0.324553937]\n", + " - kind: thresholds\n", + " thresholds: [0.162252158, 0.673279881]\n", + " - kind: thresholds\n", + " thresholds: [0.0526000932, 0.598555863]\n", + "sufficient_coalitions:\n", + " - &coalitions\n", + " kind: weights\n", + " criterion_weights: [0.147771254, 0.618687689, 0.406786472, 0.0960085914]\n", + " - *coalitions\n" + ] + } + ], + "source": [ + "lincs generate classification-model problem.yml --output-model model.yml\n", + "cat model.yml" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "53873ac0-1b9c-4704-9b77-194be2ad8143", + "metadata": { + "append_to_source": [ + "", + "", + "cp model.png .." + ] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUT0lEQVR4nO3dd3hUVeLG8e+dkt5JSIGEQOgqvaN0VnbXAmtfFFnbqmDFuhZEURTsvayiq65lbetPXbuIohRpohQBQwepSWZSpt37+yMwEnq5yaS8n+fheZi57cydk5l3zj33HMOyLAsRERERsY0j0gUQERERqW8UsERERERs5op0AexkmiYbNmwgMTERwzAiXRwRERGpYyzLwuPxkJOTg8Nx5O1Q9Spgbdiwgdzc3EgXQ0REROq4tWvX0rRp0yPevl4FrMTERKDypCQlJdm6b9M0WbhwIQAdO3Y8qlQrciRUByXSVAcl0mqiDpaUlJCbmxvOFEeqXgWsXZcFk5KSqiVgJSQkhPevDxapaaqDEmmqgxJpNVkHj7arkf46RERERGymgCUiIiJiMwUsEREREZspYImIiIjYTAFLRERExGYKWCIiIiI2U8ASERERsZkCloiIiIjNjjhgDRgwgKuvvtrGooiIiIjUD7WyBWvatGkYhkFRUVGkiyIiIiJy2GplwBIRERGpy44qYAWDQcaOHUtycjLp6encdtttWJYFgM/n47rrrqNJkybEx8fTs2dPpk2bFt529erVnHzyyaSmphIfH88xxxzDRx99xKpVqxg4cCAAqampGIbB6NGjj6aYIiIiIjXqqCZ7fumll7jwwguZPXs2P/zwA5dccgl5eXlcfPHFjB07lsWLF/P666+Tk5PDu+++y7Bhw1i0aBGtWrVizJgx+P1+pk+fTnx8PIsXLyYhIYHc3FzefvttTjvtNJYtW0ZSUhKxsbGHVS7TNDFN82he2gH3afe+RQ6F6qBEmuqgRFpN1EG79ntUASs3N5eHHnoIwzBo06YNixYt4qGHHuLEE09k6tSprFmzhpycHACuu+46Pv74Y6ZOnco999zDmjVrOO200zjuuOMAaNGiRXi/aWlpADRu3JiUlJT9Ht/n8+Hz+cKPS0pKAFi4cGF4tm27mKbJsmXLCIQCVAQrNIu81DjTNPnll18AVAclIlQHJdJ21cFoZzRAtdRBr9dry36OKmD16tULwzDCj3v37s0DDzzAokWLCIVCtG7dusr6Pp+PRo0aAXDllVdy2WWX8emnnzJkyBBOO+00OnTocFjHnzRpEhMmTDial3DYVhatZNP6TfpgkRpnmiYbNm8AYHP8ZtVBqXGqgxJpu+pg96zukS7KQR1VwNofr9eL0+lk7ty5OJ3OKst2tSxddNFFnHjiiXz44Yd8+umnTJo0iQceeIArrrjikI9z8803c+2114Yfl5SUkJubS8eOHUlKSrLnxey0q8mwdHMpSc2T9MEiNc40Tdj5eya/Xb7qoNQ41UGJtF11sE1uGzp37lwtdXDX1bCjdVQBa9asWVUez5w5k1atWtG5c2dCoRCbN2/mhBNO2O/2ubm5XHrppVx66aXcfPPNPPfcc1xxxRVERUUBEAqFDnj86OhooqOj93re4XBUy0l3OBw4DEe17V/kYBxGZb1THZRIUR2USNv9e7i6vutt2c/RbLxmzRquvfZali1bxmuvvcZjjz3GVVddRevWrRk5ciSjRo3inXfeobCwkNmzZzNp0iQ+/PBDAK6++mo++eQTCgsLmTdvHl999RXt2rUDoFmzZhiGwQcffMCWLVtsux4qIiIiUhOOKmCNGjWK8vJyevTowZgxY7jqqqu45JJLAJg6dSqjRo1i3LhxtGnThuHDhzNnzhzy8vKAytapMWPG0K5dO4YNG0br1q158sknAWjSpAkTJkzgpptuIjMzk7Fjxx7lyxQRERGpOYa1a+CqeqCkpITk5GSKi4urpQ/W/PnzmffbPJJaqA+W1DzTNFm1eBUA+e3V/0VqnuqgRNquOjgobxBdu3Sttj5YdmQJ/XWIiIiI2EwBS0RERMRmClgiIiIiNlPAEhEREbGZApaIiIiIzRSwRERERGymgCUiIiJiMwUsEREREZspYImIiIjYTAFLRERExGYKWCIiIiI2U8ASERERsZkCloiIiIjNFLBEREREbKaAJSIiImIzBSwRERERmylgiYiIiNhMAUtERETEZgpYIiIiIjZTwBIRERGxmQKWiIiIiM0UsERERERspoAlIiIiYjMFLBERERGbKWCJiIiI2EwBS0RERMRmClgiIiIiNlPAEhEREbGZApaIiIiIzRSwRERERGymgCUiIiJiMwUsEREREZspYImIiIjYTAFLRERExGYKWCIiIiI2U8ASERERsZkCloiIiIjNFLBEREREbKaAJSIiImIzBSwRERERmylgiYiIiNhMAUtERETEZgpYIiIiIjZTwBIRERGxmQKWiIiIiM0UsERERERspoAlIiIiYjMFLBERERGbKWCJiIiI2EwBS0RERMRmClgiIiIiNlPAEhEREbGZApaIiIiIzRSwRERERGymgCUiIiJiMwUsEREREZspYImIiIjYTAFLRERExGYKWCIiIiI2U8ASERERsZkCloiIiIjNFLBEREREbKaAJSIiImIzBSwRERERmylgiYiIiNhMAUtERETEZgpYIiIiIjZTwBIRERGxmQKWiIiIiM0UsERERERspoAlIiIiYjMFLBERERGbKWCJiIiI2EwBS0RERMRmClgiIiIiNlPAEhEREbGZApaIiIiIzRSwRERERGymgCUiIiJiMwUsEREREZspYImIiIjYTAFLRERExGYKWCIiIiI2U8ASERERsZkCloiIiIjNFLBEREREbKaAJSIiImIzBSwRERERmylgiYiIiNhMAUtERETEZgpYIiIiIjZTwBIRERGxmQKWiIiIiM0UsERERERspoAlIiIiYjMFLBERERGbKWCJiIiI2EwBS0RERMRmClgiIiIiNlPAEhEREbGZApaIiIiIzRSwRERERGymgHWYWgdMUnBFuhgiIiJSiykpHKaEUJA+nmJ+TkxluSMY6eKIiNSobMtJTjBAftBBqcuFxwCPYVFqhbCMSJdOpPZQwDoCTsuik7eIxjHxzIly4seMdJFERKqV2zLoHICtZR4AWpSV4HD8fhEkZBh4XW5KXG68DhcehwOPYVFCiCBWpIotEjEKWEchp6KUoQE3s+Li2WqoNUtE6qdGuOhZXkasv4Kt+1nHaVkkB/wkB/x7LSt3uvG43HiclcGrxAAPJmWGfpxK/aWAdZTiQgEGeIpYHJ/EEoepJnIRqTcMC9qZTtqXFmHAEbfVx4YCxIYCNN7j+aDhqAxeLjcepxOPYeAxwGuFCBpq9ZK6TQHLBgZwTGkJjaPjmBXtolyXDEWkjovFQU9/kAyft9qO4bJMUgM+UgO+vZaVOaMoCbd6VQavEkwq1OoldYQClo0yfGUMDbj4ISGBDeiSoYjUTU0sF91KPUSZoYiVIS7kJy7kJ2uP5wOGkxK3G6/LvfNyo4HHsPBaJqZavaQWUcCyWbQZpG9JEcvjkvnRqT94Eak7nJZBx5BBQVlRpIuyX24rRCN/iEb+iirPW0CpKwqPK4oSp7Oy1YvKvl4+tXpJBChgVZNWZcWku2OYFRuNh8j9ChQRORRJloNeFT6S93G5ri4wgISgn4Sgn+w9lvkcrp19vVx4HE48DvBgUapWL6lGCljVKDVQweCQn/lxSazWmFkiUksVmC46lJbgsupnS0+0GSTaHyR9jxscTSqHlqhyhyMWHkIEFLzkKClgVTO3adLDW0RmXCLzXGg8GBGpNaJw0M0foklFUaSLEhEOLJKCfpKC+xpawoXXFYXH6aLE4djZ6mVSZulucTk0Clg1pFmZhzR3FLNi49ihDvAiEmEZuOhRWkpcKBDpotRKsaEgsaEgGXs8Xzmg6s47HB3O8B2OHg0tIXtQwKpBiQE/gwIBfkxIYrlD/bJEpOY5LIN2pkG7nWNbyeGpHFB1333VypxuPK4oPC7nzpHsK4eW0NA9DZMCVg1zYNHJW0xmTAJz3A7d3SIiNSbOctDTHyDdVx7potRLcaEAcaEAmXtkr4DDgdcZVdnXy+GgxPH70BIhtXrVWwpYEZJd4WVIwM3s+Hi26JKhiFSzppaLbl4Pbkut5zXNbZqkmhWkBvYeWqLMVRm8SnYbUNVjhahQ8KrzFLAiKC4UoH9JEUvik1ns0Ez0ImI/l2XQMQQtavHYVg2VAcQH/cQH9zegamUn+8pphKDE0NASdYkCVoQZQPvSYhpHVU6zo8lPRcQuqbjoUV62z7vkpHarHFC1nEZ7PG9iUOp243G6f7/D0bDwYOJXX69aRQGrlkj3lzE06OSH+ETWG7pkKCJHp5XpooO3GIeGhqlXHFgkBvwkBvYOzZUDqkZR4nKFO9l7DItSS1dIIkEBqxaJMkP08RSxIj6JHx2WOj+KyGGLthx0D5hkN9CxrRqyAw2o6nHv6mS/8w5HTDyYGlC1Gilg1UItS0tIj4phZoym2RGRQ5dpueheVkqsxraS3TjY/9AS5c49RrI3dg6oqu4qR00Bq5ZK8VcwJOBnfkISq3TJUEQOwGEZHGs6aFNaFOmiSB0TGwoQGwrQeI/ng4YD785O9iVOJx7DwIOFF1MDqh4iBaxazGWZdPcUkRmbyFy3ptkRkb0l4KSnz0eav+LgK4scIpdlkuKvIGUfy8qcO0ey321oiRJMKtTqVYUCVh2QV+4hLRDFrLg4tmvMLBHZqZnlpnNpMW5TX2xSc+JCfuJC+xhawuHYOZL9zgFVDQMPJqU0zD7FClh1RELQz8CSAIsSkvnFoZAl0pC5MOgagLzyHZEuikiY2zRJ81fs1ZpqAaWuqMo7HJ0752+ksq9XfZ7NRAGrDnFg0dFbRGZMPLPdznpdMUVk39IsFz3Ly0jQ2FZSRxhUNhIkBP1k77HM79htQFWHc+eYXhalWHV+QFUFrDooq6KUoQE3s+Pi2awO8CL1jwUOy4ETJ7t3vWxhOWlZ5sWBQQXRNV4sExOiEgCoIBoHjhovg9QzJiT4TBKoGr5MDMqcLkqdLkqdTkodDrxYeMwgca44ACoqKnA4Dr8OOp1OXC4XhlG9g4MpYNVRsaEA/TxFLI1PZrFDUyeI1BdO00maP4144jGo/AIwMIi2LJyWxeoIfmpbgKtFAQCr3C40dqVUOxMMExKo/JcJ5OVkYbjcrFq16ohDUlxcHNnZ2URFRdlZ2ioUsOowA2hXWkxGdCyzotwat0SkrrMg25dNYnQiKekpuFwu3IZBbMisFW1FFhblvsoxtmKj3eEAKFJTwnUwOpHY2NjDDliWZeH3+9myZQuFhYW0atXqiFrBDoUCVj2Q7itnaMCvaXZE6jiX5cJtuGmU2YiY2GhiLYMYMwQuZ6SLBlR+uZlWZWt5jAKWREC4DkZHExMTc0QtWLGxsbjdblavXo3f7ycmJqYaSkqt+FEkNtg1zU6XoAOnJp0SqZOMnX+7LoeDRNOqDFciYrvqarWqcoxqP4LUqIKyEgZX+EmidvziFZHD48IgIWTistSvUqQuU8Cqh5IDPgZ7PDS3dAVYpK5wWwYdgxBtmrrwJlIP6Bu4nnJZJt08RWTGJjDXZWjGdJFarBEuepWV4Qj5KdzPp/K/522u0TL9tcues9Pt39P/fJHrb72DHetW4HJVvgCv10tq01b07dWDaR//N7zutOkzGPin4az4cTYFLZrbXu4XX3mNq2+8laL1K23f9+52vY4d61aQkpJcrceSukktWPVcbrmXoeU+0tSaJVLrGBa0DzkZWFJEXKjuDhw6sN/xeL2l/DBvQfi5b76bSVZmY2b9MI+Kit9H9v5q+rfk5TY9onBlWRbBoG7k2Re/v+7Wn/pKAasBiA/6Gegppo2pkCVSW8TioL/f5JjS4jp/SbBN65ZkZ2Uy7ZsZ4eemffMdp/55GM2b5TFz9tzdnp/BwH59AfD5fFx53c00zm9HTKOmHD/0z8yZO//3dafPwEjI4H+ffk7X4wcTndaEb7+bxcJFPzHwj8NJzMonKbs5XY8fzA/zFjBt+gz+dumVFBeXYCRkYCRkcMfdk/db7v/76BO69xtKTKOmpOe1YcTZ54eXvfzam3Q7YQiJWflktWjPX//2dzZv3gLAqtVrGPin4QCkNm2JkZDB6L+PBcA0TSbd/zDNj+lKbHouHXsN4K13369y3Pc//JhWHXsQ06gpA/84nJdefR0jIYOiouLwOm+/938c0+14otOakN++Cw88+mSVfeS378Jd9z7AqIvHkJTdnEuuuJZBfxrB2GtvrLLeli1biUrN4Yuvpu//DZRqoYDVQDiw6OAt4gSfRYzedpGIamK5+IO3lAxfWaSLYpuB/Y7nq+nfhh9/Nf1bBpzQl/7H9wk/X15ezqwf5jGw3/EA3HDrBN7+7we89OxjzPv2C1q2aM6Jw89k+/aqcyzedPtE7r3zNpbMnUGHY9sz8oLLaNokhzlff8bcbz7npmuvxO120adXdx6+byJJSYlsXPkTG1f+xHVXXb7P8n748aeMOOd8/vSHIcyf8SVffPg2Pbp1Di8PBALcddtNLPx+Gu+9/i9WrVnL6EuvACC3aRPefnUqAMvmz2Tjyp94ZPI9AEy6/2H+9e83efqRKfw85xuuGft3zr3ocr7eGT4LV63m9HMvYPhJf2Lh99P4+wXnc8uEe6qUbe78hZw56iLOPn0Ei2ZN545/XM9td93Li6+8VmW9+x99go7HHcP8GV9y243juGj0ufz7P+/g8/nC67zyxls0yclm0IATDvGdFLuoSaOByfKVMiToZk58PL+hpnaRmuSyDDqEoKCsKNJFsd3Afn25+sZbCQaDlJdXMH/hIvof34dAIMjTz78IwPezfsDn8zGw3/GUlpby1D9f5MVnHuOPfxgCwHOPP8Rn7bvw/L9e5fqrx4b3feetNzJ00IDw4zXr1nH91WNo26YVAK1aFoSXJScnYRgGWZmZByzv3VMe5uzTRzDh1t9bfDoed2z4/xeMGhn+f4vm+Tw65R669xuK1+slISGBtNRUABpnpIf7YPl8Pu65/xE+/7+36N2ze3jbb7+fxTMv/Iv+J/TlmRdeok2rlky5+w6gsvXvp8VLuHvKQ+HjPfjYUwwe0I/bbhoHQOtWBSxe+gtTHn6C0eeeE15vUL8TGHfl7wGySU42Y8fdxH8/+B9nnjYcgBdfeZ3RI8+u9mlhZG9qymiAYkMB+pUUcVzIiUNjZonUiGScDKrwU1DmiXRRqsWAE/pSWlrGnLnz+ea772ndsoCMjHT6n9An3A9r2jczaNE8n7zcpqwsXEUgEKBvrx7hfbjdbnp07cKSZb9U2Xe3Lp2qPL527GVcNOYahpx0Gvc+8Agrfy087PIu+PEnBh+gVWfu/IWcfMZI8tp2IjErn/7DTgVgzdr1+91mxcpCysrKGHrK6SRkNgv/+9e/32Rl4SoAlv2yku5dq76eHt26VHm8ZNkvVc4LQN9ePVi+8ldCod/HRuvWpWOVdWJiYjjv7DN44eV/AzBvwUJ+WryE0eeevd8yS/VRC1YD1ra0mIyoWGbFuClF0+yIVJcC00XH0mKc9Xhsq5YFLWjaJIevpn/LjqJi+h/fB4Cc7Cxym+bw3cw5fDX9Wwb1P/6w9x0fF1fl8R233MBfzzyNDz/5jP99+gXj757M6y8+y4hT/nzI+4yN3f/o3aWlpZx46pmcOGQgrz7/FBnp6axZt44TTz0Tf2D/ncm9paUAfPjWv2mSk11lWXS0/ZNzx8fH7fXcReefS6c+A1m3fgNTX36NQf1PoFleru3HloNTC1YD18hfzlBPKU11l6GI7aItB338Fl28RfU6XO0ysN/xTPvmO6Z9M4MBJ/QJP9+vb2/+99kXzJ47P9z/qqB5PlFRUcyYOTu8XiAQYM68+bRv2+agx2rdqoBrxl7Kp+//h7+c8mem7uyfFBUVVaWVZ386HNOeL6Z9s89lS39Zwbbt27n3zts4oW9v2rZpxeYtW6usExXlBqhyrPZt2xAdHc2adetpWdCiyr/cpk0AaNO6gB/mLayyr9079gO0a9O6ynkBmDFzNq1bFuB0HngQ6eOObU+3Lp14burL/Ps/73DBeX894PpSfRSwBLcVoreniK4BA5cuGYrYorHlYkhZOU0qSiNdlBozsF9fvv1+Fgt+/CncggXQ//g+PPPCS/j9/vAdhPHx8Vx20Wiuv+UOPv7sCxYvWcbFY6+hrLycC3fr/7Sn8vJyxl57I9Omz2D1mrXM+H4Wc+bNp12b1gDk5+Xi9ZbyxVfT2bp1G2Vl+76RYPzN1/Paf95h/MT7WLL0Fxb9tJj7HnwUgLymTYiKiuKxp//Jr4WreP/Dj7nrvgeqbN8sLxfDMPjg40/ZsmUrXq+XxMQErrvycq658TZeevV1Vv5ayLwFC3nsqed46dXXAfj7Beez9Jfl3HjbnfyyfCVvvv0eL+5ctquf1LgrL+OLadO5694H+GX5Sl569XUef+b5/XbY39NF55/LvQ8+imVZjDjlT4e0jdhPAUvCWpR7GKRpdkSOisMyODbkpJ+niLhQINLFqVED+x1PeXk5LVs0JzPz94FK+x/fB4/HS5tWLcnOygo/f++dt3HaqSdx3kVj6HL8YFb8Wsgn771JamrKfo/hdDrZtn0Hoy4ZQ+tOvThz1EX8cehgJtxyAwB9evXg0gtHc9b5F5OR35bJDz2+z/0M6NeX/7z8PO9/9DGd+gxk0J//wuwf5gGQkZHOi08/xn/efZ/23Y7n3gcf5f67J1TZvklONhNuuZGbbr+LzBbtGTvuJgDuuv1mbrvxWibd/wjtuvZl2PCz+fCTz2jeLA+A5vnNeOuVF3jn/Q/o0Ks/T/3zRW65/hoAoqOjAOjSqSNv/uufvP7Wuxzb4wRun3gfd956Y5UO7gdyzhkjcLlcnHP6iGqbyFgOzrCs+tNuXVJSQnJyMsXFxSQlJdm6b9M0mT9/PqyeSeemMTUyUWSkBA0HCxOS+NXQXYa1iWmarFq8CoD89vn1ug7WVfE46FkRoJG//Ii2ryCaQlcrmuc1JSbabXPpjp6FRVlFZR+kuJgojDo/glftcPfkB3n6+ZdYu2zhwVc+BKtWr6HguO7Mmf4pXTp1PPgGdUi4DsakEBcXd8R3R1ZUVFBYWEjz5s33CqF2ZQl1vJG9uCyTrp4iGmuaHZFDlmu56Or14LYO3v9HGrYnn32B7l070ygtlRkzZzPlkScYe8mFR73fQCDAtu3bufXOSfTq0bXehau6RgFL9iu33EuaK4qZsXFsV2uWyD65LINOIWheD8e2kuqxfOWvTJz8INt3FJGX24RxV1zOzdddddT7nfH9bAb+aTitWxXw1ssv2FBSORoKWHJAldPsBPg5IZmlDoUskd2l4qJnRRmJB7h1X2RPD903kYfum2j7fgf064vl3WL7fuXIKGDJQTmwOM5bROPoeGZHOakwNGaWSCvTRQdvMQ50CV1E9qZesnLIMn2lDC0rI1NjZkkDFoODE/wWnbxFClcisl8KWHJYYkJB+nmK6KBpdqQByrRcDCktJ6sBjW0lIkdGTRFyRNqUFpOuaXakgXBYBseaDtqUFkW6KCJSR6gFS47Yrml2cnXJUOqxBJwM9AVoU1oc6aKISB2ib0Y5Km4rRC9PEY3jElnohKDGzJJ6JN9y06m0GLepVloROTxqwRJbtCjzMLjcR7Km2ZF6wIVBz4BBd88OhSvZyx13T6ZT7wHhx6P/PpbhZ4+KXIGkVlILltgmKehnsCfAwvhkVmrMLKmj0iwXPcvLSAjWsrGtFr5Ws8freGjz3u0y+u9jKSou4b3X/3XI2xgJGbz72ksMP7luT0j8yOR7OJxZ51atXkPzY7oy/7sv6dThuGos2cHdcfdk3vvgIxZ8Py2i5Tha06dPZ8qUKcydO5eNGzfy7rvvMnz48IiWSS1YYiunZdHFW0TvAESpekkdYljQ1nQx0FNc+8KVHFAgENlJtZOTk0hJSY5oGeqLI30vS0tL6dixI0888YTNJTpy+gaUatG03MvQ0grS1QFe6oAYq3Jsq+M0tpVtBgw7lSuvu5kbbp1AWm4rslq05467J4eX57fvAsCIc87HSMgIPwb47wf/o0vfQcQ0akqLY7sx4Z4pBIO/t4obCRk89dxUTjnzXOIbN+PuyQ+FL9u98K9XyWvbiYTMZlx+9Q2EQiEmP/QYWS3a0zi/HXdPfrBKOYuKirlozNVkNGtLUnZzBv1pBAsX/VRlnXsfeITM5u1JzMrnwsuvosJXUWX5npcIP/7sC44f+mdSmhTQKK81J53+V1b+Whhe3vyYrgB07jMIIyGDAcNODS/754sv065LH2IaNaVt5948+eyBp7wxTZPJDz1Gyw7diU5rQl7bTlVe44233UnrTj2Jy8ijxbHduO3OSeEQ8+IrrzFh0hQWLvoZIyEDIyGDF1957ZDPy8T7HqBxfjsSs/K5aMzV3HT7nVUunZqmyZ2T7qdp6w5EpzWhU+8BfPzZF+Hlq1avwUjI4I233qX/iacQ06gpz77wL5Kym/PWu+9XOdZ7//cR8Y2b4fF493ke/vjHPzJx4kRGjBhxwPNVkxSwpNrEhfwM8BTRLuREfd+ltsq2XPyhtIxMn8a2sttL/36D+Lg4Zn31MZMnjufOe+/nsy+nATDn608BmPr0o2xc+VP48TczvmfUJWO46vJLWPzDtzzz6P28+Orr3D35oSr7vuOeKYw4+U8smvU1F4z6KwArC1fxv0+/4ON33+C1qc/y/L9e5c+nncO69Rv4+uP3ue+u27j1zknMmjM3vJ8zzruQzVu28r93X2fuN5/TpVMHBv/5NLZv3wHAm2+/xx33TOGeO/7BD9M/Jzszkyefm3rA111aWsa1Yy/jh+mf8cUHb+NwOBhxzmjMnf35Zu98rZ//39tsXPkT7/z7RQBefeMtbp94H3eP/wdL5s7gnjtu4baJ9/LSq6/v91g3j5/IvQ8+ym03jmPxD9/y7xeeJrNxRnh5YkI8Lz79GIt/+JZHJt/Ncy++zEOPPw3AWacNZ9yVl3NMu7ZsXPkTG1f+xFmnDT+k8/LqG29x95SHue+u25j7zRfkNW3KU/98sUrZHnnyWR547Enuv3sCP878mhOHDOKUM89j+YqVVda7afxErrr8EpbMncFfTv0zZ582gqmvVL0kPvWV1zh9+EkkJiYc8NzXJmpekGplAMeWFtM4Oo5ZUS5NsyO1htMyOC7koJUmaa42HY5pz/h/XA9Aq5YFPP7M83wxbTpDBw0gIyMdgJTkZLIyM8PbTJh0PzddeyXnjzwbgBbN87nrtpu44dYJ4X0B/PXMv/C38/5a5XimafHCU4+SmJhA+3ZtGNivL8uWr+Sjd17H4XDQpnVL7nvwMb6a/i09u3fl2+9mMnvuPDYXLiE6OhqA+++ZwHsffMRb7/0fl1wwioeffJYLR/2VC88/F4CJ4//B59OmU1FRtRVrd6cNP7nK4xeefISM/LYsXrKMY49pR0Z6IwAaNUqt8trH330fD9xzJ3859SQAmuc3Y/HSZTzzwr/C52N3Ho+XR558lscfmBReXtCiOcf36RVe59Ybx4X/n98sj+uuGsPrb73LDddcQWxsLAnx8bhczirlOJTz8tjT/+TCUX8Nvwe333wdn375FV7v7z9U7n/kCW685grOPqOyVem+u27nq+nf8vATz/DEQ7+3Zl59+SXh1wxw0ehz6TP4T2zctInsrCw2b97CR598zuf/99Z+z3ltpIAlNaKxr4w/BFzMiU9go6EO8BJZiTjp5fOR4t//l6QcvQ7Htq/yODsrk81bth5wm4WLfmbGzNncPeX3FqtQyKSiooKysjLi4uIA6Nal017b5uflVmnhyGycgdPpxOFwVHluVxkWLvoZr7eURnmtq+ynvLyClYWrAFiy7BcuvfD8Kst79+jGV9O/3e9rWL5iJbdPvI9ZP8xj67Zt4ZarNevWcewx7fa5TWlpKSt/XcWFY67m4iuuCT8fDIZITkra5zZLlv2Cz+dj8IB++y3LG2+9y6NPP8fKX1fhLS0lGAyRlJi43/Xh0M7LsuUruPziv1VZ3qNrF778+hsASko8bNi4ib69elRZp2+vHixc9HOV5/Z8L3t068Ix7dry0qtvcNO4q3jljbdolteUfsf3OWC5axsFLKkx0WaQ4z1FLItP5ieHianrhhIBzS0XnbwluCy1plY3t9td5bFhGOGwsT/e0lIm3HIDfznlz3sti4mJCf8/fmfQqnq8ql9phmEcsAze0lKyszKZ9r/39tpXSvKRd1o/+YxzaZbXlOcee5Cc7CxM0+TYHifg9++/A/eulp/nHn+Qnt26VFnmdO57+JvY3c7Hvnw/aw4jL7yMCbfcwIlDBpGclMjrb73HA489ecDtquu87E98/N7v5UXnj+SJZ1/gpnFXMfXl1/jbuedgGAZWHeojqYAlNa5NaTEZUTHMionGSyjSxZEGwm0ZdA1a5JYXRboospPb7SYUqvoZ0KXTcSxbvoKWBS2q/fhdOnVg02+bcblc5DfL2+c67dq0ZtacuYz661nh52bu1odrT9u2bWfZ8hU89/iDnNC3N1B5yW13UVFRQGXL3C6ZmY3Jyc7i18LVjDzr9EMqf6uWLYiNjeWLadO5aPR5ey3/btYcmuXlcssN14afW7127R5lcVcpBxzaeWnTqiVz5s6vcl7mzJ0f/n9SUiI52VnMmDmb/if0DT8/Y+ZsenTtfNDXdu7ZZ3DDbXfy6JPPsnjpsn1eIq3tFLAkItL8FQwJ+pkXn8QaXTKUapZuuehZVkZcSMMv1Cb5zXL5Yto39O3dg+ioaFJTU7j9pus46fSR5DVtyunDT8bhcLBw0c/8tHgJE8f/w9bjDxnYn949ujH87FFMnjie1i0L2LBxEx9+/BkjTvkz3bp04qrLLmb0pVfSrUsn+vbqyatvvMXPS5bSIr/ZPveZmppCo7Q0np36MtlZmaxZu56bxt9VZZ3GGenExsby8Wdf0DQnm5iYGJKTk5hwyw1cef0tJCclMmzoYHw+Hz/MX8COomKuveKyvY4VExPDjddcwQ233UlUVBR9e/Vgy9Zt/LxkKReefy6tClqwZu06Xv/Pu3Tv2okPP/6Md//voyr7yG+WR+Hq1Sz4cRFNc3JITEw4pPNyxaUXcfHYa+nWpRN9enbnjbff48efF1c5L9dfPYbxd0+moHk+nTocx9RX/s2CH3/i1eefOuh7k5qawl9O+TPX3zqBPwweQNMmOQdc3+v1smLFivDjwsJCFixYQFpaGnl5+w6J1U13EUrEuE2Tnp4iugcMXJYR6eJIPWRY0N50MsBTpHBVCz1wz5189tU0ctt0onPfQQCcOGQQH7z1Kp9++RXd+/+BXoOG8dATT9MsL9f24xuGwUfvvE6/vr3526VX0rpTL84efQmr164L34l31ukjuO3Ga7nh1jvpesJgVq9dy2UX/W2/+3Q4HLz+0rPMnb+QY3v045qbbmPKxPFV1nG5XDw65W6eeeFf5LQ6jlPPqmx9umj0efzziYeY+sprHNezH/3/eCovvvI6zffTigRw203jGHfFZdw+8T7ade3LWedfHO5jdsqfh3HN2EsZO+4mOvUZyHez5nDbjddW2f60U09i2JBBDPzTCDLy2/Laf945pPMy8qzTuXncVVz3jzvocvxgClevYfTIs6tcxr3ysku4duxljPvHeI7r2Y+PP/uS9998mVYtCw7p/blw1Ej8fj8X7HEzw7788MMPdO7cmc6dK1vHrr32Wjp37sztt99+SMeqDoZ1OMPP1nIlJSUkJydTXFxM0n46BR4p0zSZP38+rJ5J56YxVTpNytErcUUxKy6OItSatT+mabJq8SoA8tvnqw4eRJzloKcvSLq/LNJFOWQVRFPoakXzvKbERLsPvkENs7Aoq6gMqnExURjoh5H8bujJp5OV2ZiX/3ngPl6H6uXX3uSaG29jw4pF4cuq4ToYk0JcXByGcWR1sKKigsLCQpo3b14lFIJ9WUKXCKVWSAr6GeQJ8GN8Eisc6pclR6eJ5aJbqYcoU3VJpDqUlZXx9PMvceLggTidTl77zzt8/tXXfGbDUAplZWVs3PQb9z7wKH+/YFQ4XNU1+gkstYbTsujsLaaP39I0O3JEXJZB16CDPp4ihSuRamQYBh998jn9hp1C1xOG8H//+4S3X53KkIH9j3rfkx96nLZd+pCV2Zibr7vKhtJGhlqwpNZpUlFKaqDykuFWdYCXQ5SMk54VFSQHfJEuiki9Fxsby+cfvF0t+77jlhu445YbqmXfNUnNBFIr7Zpmp33IoWl25KBaWi4Ge0oUrkSk1lALltRaBnBMaQkZ0XHMjnZRjgaGlKqiLQfdAiFyKooiXRQRkSrUgiW1XmNfGUO9ZWRb+j0gv2tsuRhaVk5OhSZpFpHaRwFL6oRd0+x0CjpxaMysBs1hGRwbctLPU0RsaP9Tj4iIRJKaBKROaVVWTLo7hlmx0Xg0zU6DE4+Dnr4AjfzlkS6KiMgBqQVL6pzUQAWDvR6amfp90JDkWi6GekoVrkSkTtA3lNRJbtOkh7eIzLhE5rkgWIdmWJfD48KgcwDyNUmziNQhClhSpzUr85DmjmJWbBw7NM1OvZOKi57lZSQGNI/gf379vxo93hktTj6s9Uf/fSwvvfpG+HFaWirdu3Ri8sTxdDj2GFvKdMfdk3nvg49Y8P00W/a3Py++8hpX33grRetXVutxpH7TJUKp8xIDfgaVFNNKlwzrldami0ElxQpXdciwoYPYuPInNq78iS8+eBuXy8VJp4+MdLHqvEBAN3PURQpYUi84sOjkLaKv3yLaUrWuy2JwcILPoqO3CIcu/dYp0dHRZGVmkpWZSacOx3HTtVeydt16tmzZGl5n7br1nHnehaQ0KSAttxWnnnUeq1avCS+fNn0GPfr/gfjGzUhpUkDfIX9i9Zq1vPjKa0yYNIWFi37GSMjASMjgxVde229ZXvjXqxzT7Xii05qQXXAMY6+9Mbzswcee4rge/Yhv3IzcNh25/Oob8Hq94eP/7dIrKS4uCR/njrsnA+Dz+bjuH+Np0uo44hs3o+eAE5k2fUaV4z439WVy23QkLiOPEWefz4OPPUVKk4Iq6zz13FQKjutOVGoObTr34uXX3qyy3EjI4KnnpnLKmecS37gZE+97kJYdunP/I09UWW/Bj4swEjJYsfLXQ3l7pIbpm0jqlZyKUoaUlZOhq991UqblYmhpGVk+jW1V13m9Xl55/S1aFjSnUaM0oLIl5sRTzyQxMYFvPvk/Znz2IQnx8QwbfhZ+v59gMMjwc0bR//g+/DhzGt9/8T8u+dsoDMPgrNOGM+7KyzmmXdtwK9lZpw3f57Gfem4qY669iUv+dh6LZk3n/TdfoWVB8/Byh8Pg0Sn38POcb3jpmcf58utvuOHWOwHo06s7D983kaSkxPBxrrvqcgDGjruJ72fP4fUXn+XHmdM4Y8QpDBtxFstXVF5KnPH9LC696jquuvwSFnz3FUMH9efuKQ9VKdu773/IVTfcwrgrLuOn2d/w9wvO52+XXslXX39bZb077pnCiJP/xKJZX3Ph+SO54Ly/MvXlqoFy6suv0a9vb1oWtDjyN0qqjb6FpN6JCwXoX1LEkvhkFjtCaNis2s9hGRxrOmhTWhTposhR+OB/n5KQ2QyA0tIysrMy+eCtV3E4Kn/Lv/H2e5imyT+feBjDqPzDnPr0o6Q0acm0b2bQrXMniotLOGnYUApaVAaidm1bh/efEB+Py+UkKzPzgOWYOPlBxl1xGVeN+Xv4ue5dO4f/f/WYS8P/z2+Wx8Tbb+bSq67nyYcnExUVRXJyEoZhVDnOmrXrmPrya6xZuoCc7CwArrtqDB9/9iVTX3mNe+64lcee/id//MNgrrtqDACtWxXw3aw5fPDxp+H93P/oE4weeTaXX3IBANe2uoyZs3/g/kefYGD/48Pr/fXMv/C38/4afjz63HO4feJ9zP5hHj26dSEQCPDvN9/h/nvuOOC5kMhRC5bUSwbQvrSYAT6TWFXzWi0RJ4MqArQpLY50UeQoDex3PAu++4oF333F7K8/5cQhA/njiHNYvWYtAAsX/cyKXwtJzMonIbMZCZnNSMttRUVFBSt/XUVaWiqjzz2bE4efxclnjOSRJ55h46ZNh1WGzZu3sGHjJgYP6LffdT7/6msG//kvNGl1HIlZ+Zx38Ri2bd9OWVnZfrdZ9PNiQqEQrTv1DJc9IbMZX3/7HSt/XQXAsuUr6NG1S5XteuwW7ACWLFtO3949qjzXt1cPlixbXuW5bl06VXmck53Fn4cN5YV//RuA//voE3x+H2eMOGW/ZZbIUguW1Gvp/jL+EHTyQ3wi6w3dZVjb5FtuOpUW4zY1z2R9EB8fV+Vy1T87PUxyTguem/oyE8f/A6+3lK6dO/Lq80/ttW1GejoAU59+jCsvu5iPP/uSN975L7feNYnP3n+LXj26HVIZYmNjD7h81eo1nHT6SC67aDR3j/8HaampfPv9TC68/Gr8/gBxcfvezustxel0MvebL3A6q/5oS0iIP6SyHY74fRTkovPP5byLL+eh++5i6iuvcdZpw4nbX4El4hSwpN6LMkP08RSxIj6JHx0WIUMdpyPNbRl0CUJe+Y5IF0WqkWEYOBwOyisqAOjSqQNvvPMejTMySEpK3O92nTt2oHPHDtx83dX0HvRH/v3m2/Tq0Y2oKDeh0IHDeGJiAvnN8vhi2vQql9x2mTt/IaZp8sCkO8OXLt98570q60RFRREKVZ0ponPHDoRCITZv2cIJfXvv89htWrVkzrz5VZ6bM29Blcft2rRixvezOX/k2eHnZsycTfvdLoXuz59OHEJ8XBxP/fNFPv7sS6Z/8v5Bt5HI0bUTaTBalpYwyBcgEWeki9KgpVkuhpb7yCv3RLooYjOfz8em335j02+/sWTpL1wx7ia83lJO/uOJAIw86zTSG6Vx6lnn8c2M7ylctZpp02dw5XU3s279BgpXrebm8Xfx/aw5rF6zlk+/+IrlK36lXZvK8JHfLI/C1atZ8OMitm7dhs/n22c57vjH9Tzw2FM8+uSzLF+xknkLFvLYU88B0LKgOYFAgMeeeo5fC1fx8mtv8vTzL1XZPj8vF6+3lC++ms7WrdsoKyujdasCRp51OqMuGcs7//2AwlWrmf3DPCbd/zAf7uxjdcWlF/HRJ5/z4GNPsXzFSp55/iX+9+kX4f5mANdfNZYXX32dp56byvIVK3nwsad45/0Pue7KMQc9v06nk9Ejz+bm8RNpVdCC3j27H/6bJDVGAUsalBR/BUM8HvItNd7WNMOCtqaLgZ5i4oMa26o++vizL8kuOJbsgmPpOfBE5sxbwH9efp4B/foCEBcXx/RP3icvtwl/+evfaNe1LxeOuZqKCh9JiYnExcaydNkKThv5N1p36sUlV4xjzCUX8PcLzwfgtFNPYtiQQQz80wgy8tvy2n/e2Wc5zh95Ng/fN5Enn5vKMd1P4KTTR7J851AGHY87lgfvvYv7HnqMY3v049U33mLShFurbN+nVw8uvXA0Z51/MRn5bZn80ONAZYf8Ueecybh/jKdN594MP3sUc+YuIK9pUwD69u7J04/cz4OPPUXH3gP5+LMvuWbs34mJjg7ve/jJf+KRyXdz/6NPckz3E3jmhZeY+vSj4XN0MBeePxK/38/fzjvnMN4ZiQTDsqx6c72kpKSE5ORkiouLSUpKsnXfpmkyf/58WD2Tzk1jwk3LUnetiU1krrvuTLNjmiarFq8CIL99fp2qgzGWg57+II19++9ELFBBNIWuVjTPa0pMtDvSxdmLhUVZRWU4jouJwkC36B7MxWOvYemy5Xzz2Qe27O+bGd8z+KTTWLt0AZmZjW3ZZ10SroMxKcTFxVVpHTwcFRUVFBYW0rx5c2JiYqossytL6Ge8NFh55R7SAlHMjNM0O9UpBxfdSr1EmzrHUv/d/8gTDB3Un/i4OP736Re89OobPPnQfUe9X5/Px5at27jjnimcMeKUBhmu6pq68xNYpBokBCun2WmtaXZs57QMOocc9C0pUriSBmP2D/MYevIZHNezP08//xKPTrmHi0afd9T7fe0/79CsXWeKiouZPHG8DSWV6qZvFWnwHFROy9I4JoE5bgc+Q0MGHK1EnPSuqCA5sO9OyCL11ZsvP18t+x197jmMPlf9ruoStWCJ7JRd4WVoWTmN1QH+qLSwXAzxeBSuRKRBU8AS2U1sKEA/TxHHhpxouKzDE4WD3gHo6inCZakVUEQaNv1UF9mDAbQrLSYjKo5Z0S7KdMnwoNItFz3LyogLafiFo1OZ6uvRzd0itVJN/I2pBUtkP9L9ZQwtLaWJLhnul2FBe9PJAE+RwpUN3ATBClHm07kUqU675p10u6tvOBR9c4gcwK5pdlbGJbHQqWl2dhdnOejpC5Lu90a6KPWGE5OU0DY2b6n80I+LjjricX6qg4WFz195R6jDMDQOltS4cB00fDgcjsP++7Asi7KyMjZv3kxKSgpOZ/XN7KGAJXIICspKSHdH831sDB5CB9+gnmtquejm9eC2dC7slsVmCMDm3wJg1K5pnSwgEKgMWG63S/FKaly4DrpjcUcd+Q+QlJQUsrKy7C3cHhSwRA5RcsDHkGCABQlJFBoNc1wnl2XQMQgtyosiXZR6ywCy2Uzj0FYCuHY+UzuYpsmSwo0AtGqeXadmE5D6IVwHWwygVevWR1QH3W53tbZc7aKAJXIYXJZJN08RmbEJzHUZBBrQJcNknPQqLydJ8wjWCCcmTmrXuTYxYecl4Rh8ONSNV2pYlToYU7unrVPAEjkCueVeUl1RzIqNY3sDaM1qaTrpUFqCU3e3iYgcktob/URquYSgn4GeYtrU42l2oi0Hff0Wnb3FClciIoeh/n4ziNQABxYdvEU0jo5nTrSTCurPmFmNLRc9ykqJDQUiXRQRkTpHLVgiNsjylTKktJzMevCbxWEZHBdy0s9TpHAlInKEFLBEbBIbCtCvpIjjQk4cVu258+twJOBkgC9I29LiWnTvmohI3VP3f26L1DJtS4tJj45ldrSb0jp0yTDPctFFY1uJiNhCLVgi1SDdV85QTylN68A0Oy4MugcMenqKFK5ERGyigCVSTdxWiN6eIroGHbhq6SXDVFwMKfeRX+6JdFFEROqV2v/zWqSOa1FWQiN3NDNjYyipRdPstDZdHOctxoGGXxARsZtasERqQHLAx2CPhxa14JJhDA5O8Fl09BYpXImIVJPIf9qLNBAuy6Srp4jGEZxmJwsX3Uu9xITq/+jzIiKRpIAlUsNyy72kuaKYWYPT7Dgsg2NNgzalRTVyPBGRhk6XCEUiIH7nNDtta2CanUScDKoI0Ka0pNqPJSIildSCJRIhDiyO8xaRUY3T7ORbLjp7S3BZdWc8LhGR+kAtWCIRluUrZWhpGZk2doB3WwY9AwbdPUUKVyIiEaCAJVILxISC9PMU0cGGaXbSLBdDy33kaWwrEZGI0SVCkVqkTWkx6VGxzIo5/Gl2DAvaWk7aa2wrEZGIUwuWSC3TyF85zU7uYVwyjMVBP7/JsQpXIiK1glqwRGohtxWil6eIxnFJLHRaBA8wZlYOLrp5vUSbGttKRKS2UMASqcValJWQ7opiZlwsO/a4ZOi0DDqYBi01tpWISK2jS4QitVxS0M9gTwkFu42ZlYSTwRV+WmpsKxGRWkktWCJ1gNOy6OItYnMQipxOBns8RB3dzYYiIlKNFLBE6pBMXxmZgMtKBUMN0CIitZU+oUVERERspoAlIiIiYjMFLBERERGbKWCJiIiI2EwBS0RERMRmClgiIiIiNlPAEhEREbGZApaIiIiIzRSwRERERGymgCUiIiJiMwUsEREREZspYImIiIjYTAFLRERExGYKWCIiIiI2U8ASERERsZkCloiIiIjNFLBEREREbKaAJSIiImIzBSwRERERmylgiYiIiNhMAUtERETEZgpYhyloOCNdBBEREanlXJEuQF2zwGxB0JFOW+cGGoW2RLo4IiIiUgspYB02g8JAGqtD6aQ4K2jn2kDT0DrcViDSBRMREZFaQgHrKBSFYvg+1AI3zWgVtZUC1pIYKo50sURERCTCFLBsEMDJYn8mi8kk2+WhrXM9maGNOCwz0kUTERGRCFDAstnGYCIbg22JNQpoH7WJZuZaYszySBdLREREapACVjUpt9zM9eUyj6Y0j9pBa2MtacGtkS6WiIiI1AAFrGpmYfCrP41fSSPVWb6zU/x6XOoULyIiUm8pYNWgHaFYvgsV4Caf1lFbKLDWkmCWRLpYIiIiYjMFrAgI4ORnfxY/k0WOq4S2zvU0Dm7CgTrFi4iI1AcKWBG2IZjEhmAScY4C2rs2kWetU6d4ERGROk4Bq5YoM6P4wZ/HXHJp4d5OK8c6dYoXERGpoxSwahkLg5WBRqykEanOctq7NtBEneJFRETqFAWsWmxHKJYZuzrFuzdTwDp1ihcREakDFLDqgABOfg5k8zPZNHGV0Ead4kVERGo1Baw6Zn0wifU7O8Uf495InrmOaLMi0sUSERGR3Shg1VFlZhRzfM34gTxauLfT2lhHakid4kVERGoDBaw6bvdO8WnOMtq5NqpTvIiISIQpYNUj20Nx4U7xbaK2UMAa4kOeSBdLRESkwVHAqocCOPnJn8VPZNHEVUJb5zoygr+pU7yIiEgNUcCq5yo7xbcnwVFAO/cmdYoXERGpAQpYDYTXjGaOr1nlSPFR22llrCM1uC3SxRIREamXFLAaGBMHK/zprCCdRs4y2rk2kBNaj8sKRrpoIiIi9YYCVgO2LRTHt6GWuI182kZtoYW5lnhTneJFRESOlgKWELBcLPJls4hsmrqKaeNYT0ZIneJFRESOlAKWVLEumMw6ksOd4puZ64hSp3gREZHDooAl+7R7p/gC93ZaGmtJDW2PdLFERETqBAUsOSATB8sD6Szf2Sm+vWs92aEN6hQvIiJyAApYcsi2heL4JtQKt9Gcdu7NNLfWqVO8iIjIPihgyWELWC5+9OfwIznkuotoY6wnPbRZneJFRER2UsCSo7I2kMJaUkh0tKSdeyN55np1ihcRkQZPAUts4TGjme3L5wfyaBW1jQLWkhLaEeliiYiIRIQCltjKxMEyfwbLyCDDVUpb5wZ1ihep4/yOaIqMFLY5EplnJBDEQZQrh8YODynmDs1vKrIPClhSbbYE49kSbEWU0Zx2Ub/R3FxHnOmNdLFE5ABMHJQ6E9lhpLDVSmJTKImiQEzlMtNkc6gEgIW+JjgcDgCSnBVkOz2kGyWkWTuID3nUJ1MaPAUsqXZ+y8VCXxMW0qSyU7xjPRnB3zCwIl00kQbPb0RR7ExhOyn8Fkrit2ACgZDzsPZREoqhJBTDMjIAcBMiy+0h0yghjSKSzSLcVqA6ii9SaylgSY3au1P8OqJMX6SLJdIgWBh4nUkUGclssZLYFEqmKBgDNl/BD+AM/61DHgCNnGVkOUtIN4pItYqIC5Xae1CRWkYBSyJCneJFqt/urVObzUQ2BRIPu3XKLttCcWwLxQFZAMQaAbLdHhobxaRZO0gyi3FYuqwo9YcClkTU7p3iGzu9tHVVdop3WqFIF02kTrEwKHUkssORUq2tU3Ypt9z86k/jV9KA5jgwyXSVkukoJp1iUqwiDfkidZoCltQam0MJbA61JspooU7xIgfhN6Iocaaw3UrmNyuJTcEEAqG6+5Fu4mBjMJGNJAJNAUh2VJDtKiHDKCbVLCLe9KjvptQZdfevUeqt3TvF57l30NpYT0Zosz5YpcHavXVq1519O4KxtbZ1yi7FZgzF/hiW0hgAtxEkx+WhsaOERhSRFCrGpc7zUkspYEmttiaQyhpSSXJW0M61iVx1ipcGoL61TtklYLlYHUhlNalAMwws0l07O89TTIq5g1izLNLFFAEUsKSOKAnFMCuUzxzyaB21lQLWkaxO8VIPNNTWKTtYGDvH24sHsgFIcPjIcnrIcJSQZu4g0SzRmFwSEQpYUqeYOFjqb8xSGqtTvNRJap2qXl4zmhVmNCtIB8BlhMh0VnaeT9vZyhVl+SNcSmkI9FctdVaVTvHu32jOWo2tI7WKhUGZM4EdRgpbrGS1TkVA0HKyPpjEepKAXABSnOVkO3d1nt9BvG6mkWqggCV1nt9ysdBf2Sk+372DVo51pAe3qFO81LiA4abYmcoOkvjNTGJjMFGtU7VQUSiWolAsS8gEICrceb54Z+f5IrWKy1HTX77UK6sCqaza2Sm+vWsjTUPrdDlAqsWerVO/hRLZHoxT61Qd5Ldc4c8OAAOLxq5SMh0lpFNEilVEjFke4VJKXaOAJfVSSSiGmaHmuIw8Wrq30pJ1JIWKIl0sqcMChpsSRwrbjWR+M5PYFEzEr9apesnC4LdgAr+RAOQAkLiz83xjRxFpVpEmtJaD0qeD1GtBy8lSfyZLySTT5aWNYz3Z5kY1/8sB7d46tdVKZtOu1ilpsDxmNB4zmuU7O8+7CZHp8pLpKKaRUUxyaIcmtJYqFLCkwaj8RdqGGKOAdlGbyDfXaswcASBouCne2Tq1xUxig1qn5CACOFkXTGYdyeHn0py/j8mVZhVpJooGTp8g0uBUWC7m+5oyn6bku3fQ2rGORuoU36D8Pu6UWqfEPttDcWzfY0LrLJencogIq4hEs1it5w2IApY0aLs6tiY7KmjnVqf4+ihouClxJrONFLVOSY0qt9wUBtIoJA0AByaNnaVkOotJp4RUa4cmtK7H9CkjQuWcZzN9lZ3iW7krR4pXp/i6aVfr1Lado6Jv0519UkuYONgUSmRTKDH8XJKzghxnCelGCalWEQmhErWm1xMKWCK7CVpOlvgzWbKzU3xb53qyQxtwWLpbqDZS65TUdSWhGEpCMbDbhNbZTg+ZzhLSrCKSTU1oXVfpk0hkP34LJvBbUJ3iaxO1Tkl9F7BcrAmmsiZYdULrTIeHdKOIVE1oXWcoYIkcxK5O8QvCI8WvV6f4GqDWKZHdJrQmnl2d5+McfrKdHho7Ski1tpNklqiVvRbSp5XIIbIwwh1WU5wVtHNtpEloLVFqvrdFmSNhtzv7ktgejMUKGpEulkitU2ZGsdJsxEoaAc1xYJLl8pLpLKGRVTnyfJTpi3QxGzwFLJEjUBSK4fvQ753iW7KWxFBxpItVZ+xqndpOMpvNZDYFE6lQ65TIETFxsCGYxIZgEtAUgBRnBVnOYjIoJo0i4kJetbrXMH2iiRyFPTvFt3OuIyu0Uc31e9i9dWqzmcjWYJxap0SqUVEohqJQDEv3nNDaKKYRxSSaRbgsdWCsTgpYIjap7BTfllijgHbuTeRb64hpgJ1Rg4YLjyOFbYZap0Rqi31NaJ3hLCXT5SGDIlLMogb5eVWd9KknYrNyy808f+7vI8Ub62gU2hLpYlWbMkcCRY5ktlop/LardQq1TonUZhYGm0MJbA4lANkAJDh8ZDtLyHBUDhGRECrRhNZHQQFLpJrs3Sl+A01D6+r0hLC7t05tMZPYGExS65RIPeE1o1luZrCcDABcBMl0lZHlrOzHlRwq0kwXh0GfjCI1oLJTfAvcNKNV1FYK6kin+DJHPEWOFLVOiTRAQVysDyaxPpgE5AKQ6igjy+khw1FMmrlDE1ofgAKWSA0K4GSxP5PFZJLt8tDWuZ7MWtIpXq1TInIwO8w4dphxLNnZeT7GCJLtKqGxo4Q0ikgKFWlC65306SkSIRuDiWzc2Sm+fdQmmplriTHLa+z4Zc54igy1TonIkauwXHtNaJ3hKiXLWUI6xaSYO4huoBNaK2CJRFi55WauL5d5NKV51A5aG2tJC2619RhBw4XHmcx2UthsJrEpmEh5yG3rMURETBz8Fkzkt2Ai0ASonNA62+kh3SghzdpBfMjTIDrPK2CJ1BIWBr/60/iVNFKd5bRzbqCJuf6IOsXvap3aRjK/BRPZEozXuFMiEhG7JrRetrPzvJsQWW4PmUblZcVks6hO3/yzPwpYIrXQjlAs34UKcJNP66gttGAd8eaOfa4bMpyUOFPUOiUidUIAJ2sDKawlBcgDoJGzrPKyolFEqlVEXKg0omW0gwKWSC0WwMnP/ix+JossRxEBZzkJVikbXU3Y7khV65SI1AvbQnFsC8Wxa0LrWCNAtttDY6OINKuIJLO4VtwMdDgUsETqiA3BJFYHmgPQzNcWh8MR4RKJiFSPcssd7jIBlZ3nM12lZDh3sN1ZSppR+39UKmCJiIhIrWbiYGMwkfVmPKsDxfyhDsxbrZ/AIiIiIjZTwBIRERGxmQKWiIiIiM0UsERERERspoAlIiIiYjMFLBERERGbKWCJiIiI2EwBS0RERMRmClgiIiIiNlPAEhEREbGZApaIiIiIzRSwRERERGxWawOWYRi89957kS6GiIiIyGGLSMDy+/2ROKyIiIhIjXDt68kPPviAc889l23btuF0OlmwYAGdO3fmxhtv5N577wXgoosuoqKigldeeYW3336b22+/nRUrVpCdnc0VV1zBuHHjwvvLz8/nwgsvZPny5bz33nv85S9/4dlnn+Xaa6/l7bffZseOHWRmZnLppZdy8803k5+fD8CIESMAaNasGatWrTrkF2WaJqZpHuEpOfA+q2PfIodi97qnOiiRoDookVYT38V27XefAeuEE07A4/Ewf/58unXrxtdff016ejrTpk0Lr/P1119z4403MnfuXM4880zuuOMOzjrrLL777jsuv/xyGjVqxOjRo8Pr33///dx+++2MHz8egEcffZT333+fN998k7y8PNauXcvatWsBmDNnDo0bN2bq1KkMGzYMp9O5z8L7fD58Pl/4cUlJCQALFy4kISHhqE7MnkzTZNmyZazdUEys14/DUWuvrko9ZZomG9f8Gn6sOig1TXVQIm1XHVzmLMLhMKqlDnq9Xlv2s8+AlZycTKdOnZg2bRrdunVj2rRpXHPNNUyYMAGv10txcTErVqygf//+3HHHHQwePJjbbrsNgNatW7N48WKmTJlSJWANGjSoSqvWmjVraNWqFccffzyGYdCsWbPwsoyMDABSUlLIysrab+EnTZrEhAkTjuoEHK6clBhycpL0wSI1zjRN4sriAWiuOigRoDookbarDjocRqSLclD7DFgA/fv3Z9q0aYwbN45vvvmGSZMm8eabb/Ltt9+yfft2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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "lincs visualize classification-model problem.yml model.yml model.png\n", + "cat model.png | display" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9cf24956-d8ef-4396-b32f-896ce1ae3f1a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This is a MR-Sort (a.k.a. 1-Uc-NCS) model: an NCS model where the sufficient coalitions are specified using the same criterion weights for all boundaries.\n", + "The weights associated to each criterion are:\n", + " - Criterion \"Criterion 1\": 0.15\n", + " - Criterion \"Criterion 2\": 0.62\n", + " - Criterion \"Criterion 3\": 0.41\n", + " - Criterion \"Criterion 4\": 0.10\n", + "To get into an upper category, an alternative must be better than the following profiles on a set of criteria whose weights add up to at least 1:\n", + " - For category \"Intermediate category 1\": at least 0.26 on criterion \"Criterion 1\", at least 0.06 on criterion \"Criterion 2\", at least 0.16 on criterion \"Criterion 3\", and at least 0.05 on criterion \"Criterion 4\"\n", + " - For category \"Best category\": at least 0.68 on criterion \"Criterion 1\", at least 0.32 on criterion \"Criterion 2\", at least 0.67 on criterion \"Criterion 3\", and at least 0.60 on criterion \"Criterion 4\"\n" + ] + } + ], + "source": [ + "lincs describe classification-model problem.yml model.yml" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b5bf08d4-a963-4a9c-89e6-3c9fefb718b0", + "metadata": { + "append_to_source": [ + "--random-seed 42" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Reproduction command (with lincs version 0.11.0): lincs generate classified-alternatives problem.yml model.yml 1000 --random-seed 42 --misclassified-count 0\n", + "name,\"Criterion 1\",\"Criterion 2\",\"Criterion 3\",\"Criterion 4\",category\n", + "\"Alternative 1\",0.37454012,0.796543002,0.95071429,0.183434784,\"Best category\"\n", + "\"Alternative 2\",0.731993914,0.779690981,0.598658502,0.596850157,\"Intermediate category 1\"\n", + "\"Alternative 3\",0.156018645,0.445832759,0.15599452,0.0999749228,\"Worst category\"\n", + "\"Alternative 4\",0.0580836125,0.4592489,0.866176128,0.333708614,\"Best category\"\n", + "\"Alternative 5\",0.601114988,0.14286682,0.708072603,0.650888503,\"Intermediate category 1\"\n" + ] + } + ], + "source": [ + "lincs generate classified-alternatives problem.yml model.yml 1000 --output-alternatives learning-set.csv\n", + "head -n 7 learning-set.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f5cd7bd4-b451-467b-a5cb-17eee19fb1d5", + "metadata": { + "append_to_source": [ + "", + "", + "cp alternatives.png .." + ] + }, + "outputs": [ + { + "data": { + "image/png": "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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "lincs visualize classification-model problem.yml model.yml --alternatives learning-set.csv --alternatives-count 5 alternatives.png\n", + "cat alternatives.png | display" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "754ae3aa-3f1d-4371-8a53-429d4267e6a8", + "metadata": { + "append_to_source": [ + "--mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 43 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", + "kind: ncs-classification-model\n", + "format_version: 1\n", + "accepted_values:\n", + " - kind: thresholds\n", + " thresholds: [0.339874953, 0.421424538]\n", + " - kind: thresholds\n", + " thresholds: [0.0556534864, 0.326433569]\n", + " - kind: thresholds\n", + " thresholds: [0.162616938, 0.67343241]\n", + " - kind: thresholds\n", + " thresholds: [0.0878681168, 0.252649099]\n", + "sufficient_coalitions:\n", + " - &coalitions\n", + " kind: weights\n", + " criterion_weights: [0, 1.01327896e-06, 0.999998987, 0]\n", + " - *coalitions\n" + ] + } + ], + "source": [ + "lincs learn classification-model problem.yml learning-set.csv --output-model trained-model.yml\n", + "cat trained-model.yml" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "97923a47-2ae8-4b2b-8400-cd43dc2e1426", + "metadata": { + "append_to_source": [ + "--random-seed 44" + ] + }, + "outputs": [], + "source": [ + "lincs generate classified-alternatives problem.yml model.yml 3000 --output-alternatives testing-set.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "f41d3d04-a669-4d82-98be-652b760f19ce", + "metadata": { + "append_to_source": [ + "", + "| tail -n +5" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "522c522\n", + "< \"Alternative 520\",0.617141366,0.326259822,0.901315808,0.460642993,\"Best category\"\n", + "---\n", + "> \"Alternative 520\",0.617141366,0.326259822,0.901315808,0.460642993,\"Intermediate category 1\"\n", + "615c615\n", + "< \"Alternative 613\",0.547554553,0.0552174859,0.690436542,0.511019647,\"Intermediate category 1\"\n", + "---\n", + "> \"Alternative 613\",0.547554553,0.0552174859,0.690436542,0.511019647,\"Worst category\"\n", + "2596c2596\n", + "< \"Alternative 2594\",0.234433308,0.780464768,0.162389532,0.622178912,\"Intermediate category 1\"\n", + "---\n", + "> \"Alternative 2594\",0.234433308,0.780464768,0.162389532,0.622178912,\"Worst category\"\n", + "2610c2610\n", + "< \"Alternative 2608\",0.881479025,0.055544015,0.82936728,0.853676081,\"Intermediate category 1\"\n", + "---\n", + "> \"Alternative 2608\",0.881479025,0.055544015,0.82936728,0.853676081,\"Worst category\"\n" + ] + } + ], + "source": [ + "lincs classify problem.yml trained-model.yml testing-set.csv --output-alternatives reclassified-testing-set.csv\n", + "diff testing-set.csv reclassified-testing-set.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "21f39e5a-f22b-45ca-bb64-3cfef5d7b05f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2996/3000\n" + ] + } + ], + "source": [ + "lincs classification-accuracy problem.yml trained-model.yml testing-set.csv" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Bash", + "language": "bash", + "name": "bash" + }, + "language_info": { + "codemirror_mode": "shell", + "file_extension": ".sh", + "mimetype": "text/x-sh", + "name": "bash" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/index.html b/docs/index.html index 6195b9b2..d3adcc67 100644 --- a/docs/index.html +++ b/docs/index.html @@ -5,11 +5,11 @@ - README — lincs 0.10.3 documentation + README — lincs 0.11.0 documentation - + diff --git a/docs/objects.inv b/docs/objects.inv index 84385b36426d75d1cf87b226a572d8c03db301a3..8a09f119749b4f24a97f1718368b9c5294f1f6a0 100644 GIT binary patch delta 1641 zcmV-v2A28f49X3Vbbp%5ZsRr-hWCC70yB$tK^3#@&dnG>fZSj^vno2EDOx5*B2|(~ z;uZz+8U@;y%aaVL`^^$9(;i?DjAWkwe23@oB8lEFak2@i+ml*B^a#k7iw*T5-U-f#bPCdvwgU;`3rxmCzUFkEf@38cZ*bB z-vRIw$nKXITzI9@JZxH*iB*C^Xo7vF>BL6?|Zd6F6X!F z#qxf>zJK|$SWWh10&56$+?-NB0|j$xh4hz%PbAi(le7~Vai4@$lCoy~Tg(yngC6?y z?a(Im@-R!c>xU60=3^YfHc7GIn~+3jO;he;N}>up$Nf|g_4SlqMD%*D4wiG)$7&yw zV`&DJ>$=t`LUN(JEq&G7u@^#vosv){kz=q!UVm&c^Sq~*ZqXXbwm1SYpGQ!Vd`IAn zrY>v;GqJ3PF^(zfYWSlt(T!_)oRd9mrS(D7jn zw|~6Ro3xwx8PS>^4ua_ltnW+B)Q?^vjW#Gm8sKEKmVQh97%VDlKVqIRwg+e|gNHF*N;D5uieVgE6h-_~vmFc=*?~++uRl4f!=4X2KSNPjFtTlC!!Ei-VAretIFQ{I++o@Y;SI zgre8*4VUC%Ar$@`pqDT2FFlMpj(@F!Ipw>-0BY|?gF%o4>n7)T$ZQE)z}zn8%lnBR z+6O?gvw}5g3zUg3Iz}kkuQ;BmOtRVOKyprbkvA;f|NibMplN%EBd}Wgg%P+(FUiJe zIT!x+D%A;2iT+p32nXJ?EX`JuH664u2=zaX$%3 ze)6d}as|=GY>=C{O`$_4xITOYb7Kse#+7tBn9WB#z1`b!Us}t;N+Vl3tSvu*-xYaP za{D*@2R!|O>zDUeD}cOj9`eB560Wpt<%VH^#iIx@-xL-Bl<5g% zi!e!z%|hLsMGs4@cLX$=8-Ys66mGR-56hT*Wo?@p^{=MG3PsDpK5J1wyVo=W%i?k- zb?xF^(?@nMYq`pPe?)<9Yfc85lBhbdb@H%zoX{lMT!O@W;s)t(eqw+77vTOhB$9|! zoiJtI$d_LO{Iow>8A)5$4vJ>kHKtk;l%{E)$V_`EGhMm&xBu=;yZ5*MJ0iWQ>6LiQ nTDC+wXFglD;7MPD>-3ao`cpZ@AUpWmygfi!Y0bU^c;1KSerYh6 delta 1541 zcmV+g2KxER4d)DybbngQZsRr--TNyD%q-dkHORI*H)8|=@`CNms_1~GXqgy^R7om{ zTNKD|6li~LzNDmHmMB@GZQ26_NkrXy&bhjm4^a$0rP(T`auevEyV;l79gr&g1t%d- z73B>X1ZyGnJc*`skT*{v!YB*LTkagA6^V^|)mnJnnt!#W z(glNrB4LxM(Og*H5L2Xi!(<0tS~pOOM>>fq!xG{cNqNH zGX+ts#{#C^UwURjH}-8WR)=zWx17x%rpwzev&GR&Ca@Mzhvt;}87P=jE2O_9bg$C` zpdxl66Mr6(SSKm}3)MCyhtdurH*uY%2+4&C*7S{p@RiVLqa>7B;#t@}7FU^NDdv}c zrL~Y<;A=I0iCa{~BBkOlq#vw(W3ciX-qMr(iWB#fqWh@9X3q*(o)k6nG zzQmPO14Qm(L&CU7P)z^SC7DniIePQ0vzNnNVt-khWrJ^V7P`BvGZcTN>5%fT1YJ*; zvzy2H?QHS&`tkW;>Al!=U+8c+i<{r-S?zXuMrmz^y~1<_HYaj3^rJUOlNE}Q7I3mO z3*SONL>85eo0w-z`4`v2aezb*i>y(JLyIp5i9S22EzPNy+LD^fJ5RmA)@83E5A701 zt$#6{RJGThqe6Vm>3ve{X`Qk)hZ`i#zLKt+KQc-V?r%+u5}|^R2@=fzI(R>9-y(Qe zM6ouN$~?Mg>r;t^e2AQCk*tUMHH~%dRzi2TpnetHkW5giC=Rp*CQ>{3SAL9$^8|Uq zaON}2zLD>QK=a@5e3j=$>md-zsG??_TYorRJfeO49zxRq+S#;50wsau@e8?JSLNi%o+pUGk*eHUS0qTa-zA4a7cCw_R(i=#RDb;i z;bP(0ydFZ)6W@wUaZy8|OC?0tb3DzjpA+LN49cE5(f`!~G~5_H_edw?u!k{uCu z)XvhFn$Et`h=|AM<3@S=sM}HYdmal^jtAuq)>^u52##NtZ(%?O(D$*^iZWKo# z?s=HSq�y9qfQ;Wmc7Kxox0*=R`hy1XJS-+Ri)Zyfd3GUkTA`*HAjc!W~92bvS!o zf!`E)Q*!+m{2M&~j+>Vc*9(AxZvhIx{Twbd?2d+EcXbas1(+u(VG=1W^nZ|VmO?B7 zKWT=acbIa^)P^XEVTcrRhF?@}z_?8sX&lM#Q-02^on~D_I=8g#X%*H-aLtnhvCtG2 z0hH+hWQ{P%oy|nu9Yyy;EjI+T%niT}$rSEx${vO>`6_JN7|lwxs8 rrWfL=u(UurC(A5f@T{-FO@5Xvzf})0$W8oRX%A3QT9f|)bS#`Dh1BS! diff --git a/docs/reference.html b/docs/reference.html index c573463f..fe7104e9 100644 --- a/docs/reference.html +++ b/docs/reference.html @@ -5,11 +5,11 @@ - Reference — lincs 0.10.3 documentation + Reference — lincs 0.11.0 documentation - + @@ -98,7 +98,7 @@

    File formats

    May be extended in the future to handle criteria with integer values, or explicitely enumarated values.

    +

    May be extended in the future to handle criteria with integer values, or explicitly enumerated values.

    type

    string

    @@ -107,16 +107,16 @@

    File formats
      -
    • category_correlation

    • +
    • preference_direction

    -

    May be extended in the future to handle single-peaked criteria, or criteria with unknown correlation.

    +

    May be extended in the future to handle single-peaked criteria, or criteria with unknown preference direction.

    type

    string

    enum

    -

    growing, decreasing

    +

    increasing, isotone, decreasing, antitone

    generate

    @@ -519,7 +577,7 @@
    classification-problem
    --allow-decreasing-criteria
    -

    Allow criteria to have decreasing correlation to categories. (By default, all criteria have growing correlation)

    +

    Allow criteria to have decreasing preference direction. (By default, all criteria have increasing preference direction)

    @@ -964,6 +1022,19 @@
    classification-model +
    +--mrsort.weights-profiles-breed.output-metadata <mrsort__weights_profiles_breed__output_metadata>
    +

    Write metadata about the learning process to this file.

    +
    +
    Only valid if:
    +
    +
      +
    • --model-type is mrsort

    • +
    • --mrsort.strategy is weights-profiles-breed

    • +
    +
    +

    Arguments

    diff --git a/docs/search.html b/docs/search.html index 8ba1d30e..d0055baa 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,12 +4,12 @@ - Search — lincs 0.10.3 documentation + Search — lincs 0.11.0 documentation - + diff --git a/docs/searchindex.js b/docs/searchindex.js index 0dd8fbb2..117aa55d 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["README", "changelog", "conceptual-overview", "contributor-guide", "get-started", "index", "reference", "user-guide"], "filenames": ["README.rst", "changelog.rst", "conceptual-overview.rst", "contributor-guide.rst", "get-started.rst", "index.rst", "reference.rst", "user-guide.rst"], "titles": ["Contributors", "Changelog", "Conceptual overview", "Contributor guide", "Get started", "README", "Reference", "User Guide"], "terms": {"learn": [0, 1, 3, 4, 5], "infer": [0, 4, 5, 6], "non": [0, 4, 5, 6], "compensatori": [0, 4, 5, 6], "sort": [0, 1, 4, 5, 6, 7], "i": [0, 1, 2, 3, 4, 5, 6, 7], "collect": [0, 5], "command": [0, 1, 3, 5, 7], "line": [0, 1, 3, 5, 7], "util": [0, 4, 5], "support": [0, 1, 5, 6, 7], "linux": [0, 1, 4, 5, 7], "maco": [0, 1, 4, 5, 7], "window": [0, 1, 4, 5, 7], "gpu": [0, 1, 3, 5, 7], "ar": [0, 1, 2, 3, 4, 5, 6, 7], "avail": [0, 5], "becaus": [0, 2, 3, 4, 5, 7], "cuda": [0, 1, 2, 3, 5, 6, 7], "On": [0, 3, 5], "3": [0, 2, 4, 5, 7], "os": [0, 5], "onli": [0, 1, 2, 3, 4, 5, 6, 7], "x86_64": [0, 4, 5], "cpu": [0, 1, 3, 4, 5, 6, 7], "licens": [0, 1, 5], "under": [0, 3, 5], "gnu": [0, 5], "lesser": [0, 5], "gener": [0, 1, 2, 4, 5], "public": [0, 1, 3, 5], "v3": [0, 5], "0": [0, 2, 3, 4, 5, 6, 7], "indic": [0, 5, 7], "two": [0, 2, 4, 5, 7], "copi": [0, 5], "instal": [0, 1, 3, 4, 5], "from": [0, 2, 3, 4, 5, 6, 7], "python": [0, 1, 2, 5], "packag": [0, 1, 3, 5], "index": [0, 2, 3, 5], "Its": [0, 2, 5, 6, 7], "document": [0, 1, 2, 4, 5, 7], "its": [0, 2, 3, 4, 5, 6, 7], "sourc": [0, 3, 4, 5, 6], "code": [0, 1, 3, 5, 6, 7], "github": [0, 3, 4, 5, 6], "question": [0, 2, 5, 7], "remark": [0, 5, 7], "bug": [0, 1, 3, 5], "want": [0, 2, 3, 4, 5, 7], "contribut": [0, 4, 5], "open": [0, 3, 5], "an": [0, 1, 2, 4, 5, 6], "issu": [0, 5], "discuss": [0, 3, 5], "todo": [0, 3, 4, 5], "featur": [0, 1, 3, 4, 5, 7], "later": [0, 3, 4, 5], "make": [0, 1, 3, 4, 5, 6, 7], "c": [0, 1, 5, 7], "librari": [0, 3, 5], "m1": [0, 5], "m2": [0, 5], "chip": [0, 5], "much": [0, 3, 5, 7], "arm": [0, 5], "processor": [0, 4, 5, 6, 7], "manag": [0, 5], "when": [0, 1, 2, 3, 5, 6, 7], "we": [0, 2, 3, 4, 5, 7], "publish": [0, 1, 5], "paper": [0, 5], "add": [0, 1, 5, 6, 7], "note": [0, 2, 3, 5, 7], "ask": [0, 4, 5], "academ": [0, 2, 5], "kindli": [0, 4, 5], "cite": [0, 5], "our": [0, 2, 3, 4, 5, 7], "work": [0, 3, 4, 5], "mic": [0, 3, 5, 6], "research": [0, 5], "team": [0, 5], "centralesup\u00e9lec": [0, 5], "main": [0, 2, 3, 5], "author": [0, 5], "alphabet": [0, 5], "order": [0, 2, 5, 7], "laurent": [0, 5], "cabaret": [0, 5], "perform": [0, 1, 2, 3, 5, 7], "optim": [0, 3, 5, 7], "vincent": [0, 5], "jacqu": [0, 5], "engin": [0, 5], "mousseau": [0, 5], "domain": [0, 1, 5], "expertis": [0, 5], "wassila": [0, 5], "ouerdan": [0, 5], "you": [0, 2, 3, 4, 5, 6, 7], "should": [0, 2, 3, 4, 5, 6, 7], "abl": [0, 5], "us": [0, 1, 2, 3, 5, 6], "without": [0, 1, 2, 3, 5, 6, 7], "being": [0, 2, 4, 5], "specialist": [0, 5], "nc": [0, 1, 4, 5, 7], "model": [0, 1, 2, 4, 5], "just": [0, 2, 3, 5, 6, 7], "follow": [0, 2, 3, 5, 6, 7], "section": [0, 3, 5, 7], "below": [0, 5], "design": [0, 4, 5], "easi": [0, 3, 5, 7], "extend": [0, 2, 5, 6, 7], "even": [0, 3, 5, 7], "replac": [0, 5], "part": [0, 1, 3, 5, 7], "exist": [0, 2, 5, 7], "see": [0, 1, 3, 4, 5, 6], "guid": [0, 1, 2, 4, 5, 6], "more": [0, 1, 2, 3, 4, 5, 7], "detail": [0, 1, 3, 4, 5, 7], "depend": [0, 1, 4, 5, 7], "your": [0, 2, 4, 5, 7], "favorit": [0, 5], "approach": [0, 1, 2, 4, 5, 6, 7], "can": [0, 2, 3, 4, 5, 6, 7], "either": [0, 5, 6, 7], "hand": [0, 5, 7], "conceptu": [0, 4, 5, 7], "overview": [0, 4, 5, 7], "The": [0, 2, 3, 4, 5, 7], "former": [0, 5], "show": [0, 4, 5, 6], "how": [0, 2, 4, 5, 7], "latter": [0, 5], "explain": [0, 3, 4, 5, 7], "concept": [0, 2, 4, 5, 7], "behind": [0, 5], "them": [0, 1, 2, 3, 4, 5, 7], "what": [0, 3, 5], "": [0, 1, 2, 3, 4, 5, 6], "etc": [0, 3, 4, 5, 7], "If": [0, 2, 3, 4, 5, 6, 7], "doubt": [0, 5], "highli": [0, 5], "recommend": [0, 2, 3, 4, 5, 7], "read": [0, 2, 3, 4, 5, 6, 7], "other": [0, 2, 3, 5, 7], "one": [0, 2, 3, 4, 5, 6, 7], "after": [0, 1, 3, 5, 7], "onc": [0, 3, 4, 5], "ve": [0, 4, 5, 7], "bit": [0, 5, 7], "up": [0, 2, 3, 4, 5, 6, 7], "user": [0, 1, 3, 4, 5, 6], "refer": [0, 4, 5, 7], "1": [0, 3, 4, 5, 6, 7], "semant": [0, 5], "api": [0, 1, 3, 5], "must": [0, 2, 3, 5, 6, 7], "declar": [0, 5], "accord": [0, 2, 5, 6, 7], "semver": [0, 5], "constitut": [0, 2, 5], "exclus": [0, 5], "level": [0, 2, 3, 5, 6, 7], "consid": [0, 2, 3, 5], "chang": [0, 1, 4, 5, 7], "backward": [0, 5, 7], "compat": [0, 5, 7], "client": [0, 5], "doesn": [0, 2, 4, 5], "t": [0, 2, 3, 4, 5, 6], "need": [0, 3, 4, 5, 7], "modifi": [0, 3, 4, 5, 7], "keep": [0, 3, 4, 5, 7], "requir": [0, 3, 4, 5, 6, 7], "recompil": [0, 5], "some": [0, 2, 3, 5, 7], "case": [0, 3, 5, 7], "futur": [0, 5, 6], "might": [0, 2, 3, 5], "behavior": [0, 5, 7], "especi": [0, 5], "regard": [0, 5], "pseudo": [0, 1, 2, 4, 5, 6, 7], "random": [0, 1, 2, 4, 5, 6], "plan": [0, 5], "do": [0, 2, 4, 5, 7], "ll": [0, 2, 3, 4, 5, 7], "interfac": [0, 3, 5], "In": [0, 2, 5, 7], "mean": [0, 5, 7], "time": [0, 1, 2, 3, 5, 7], "chose": [0, 5], "wai": [0, 2, 3, 4, 5, 6, 7], "expect": [0, 2, 3, 5, 7], "unanticip": [0, 5], "option": [0, 1, 3, 4, 5, 6], "argument": [0, 3, 5, 6], "thei": [0, 1, 2, 3, 4, 5, 7], "releas": [0, 1, 5], "find": [0, 2, 3, 5, 7], "better": [0, 2, 5], "most": [0, 2, 3, 5, 6, 7], "advic": [0, 5], "write": [0, 3, 5, 6], "script": [0, 3, 5], "explicit": [0, 3, 5, 6, 7], "where": [0, 2, 3, 5, 7], "matter": [0, 5], "reli": [0, 3, 5, 7], "implicit": [0, 5], "potenti": [0, 5], "improv": [0, 1, 5, 6, 7], "same": [0, 2, 3, 4, 5, 6, 7], "specif": [0, 3, 5, 7], "appli": [0, 2, 3, 5, 7], "produc": [0, 1, 2, 5, 7], "thi": [0, 1, 2, 3, 4, 5, 6, 7], "lead": [0, 5, 7], "about": [0, 3, 4, 5, 6], "allow": [0, 1, 2, 3, 5, 6, 7], "flexibl": [0, 1, 5], "input": [0, 5, 7], "both": [0, 3, 4, 5], "old": [0, 3, 5], "But": [0, 2, 5, 7], "incompat": [0, 5], "To": [0, 2, 3, 4, 5, 7], "solv": [0, 5, 6, 7], "impos": [0, 5], "addit": [0, 2, 5, 7], "constraint": [0, 2, 5], "motiv": [0, 3, 5], "That": [0, 3, 4, 5, 7], "know": [0, 3, 5, 7], "alreadi": [0, 2, 5, 7], "so": [0, 1, 2, 4, 5, 7], "adapt": [0, 1, 5], "first": [1, 2, 3, 4, 6, 7], "candid": 1, "break": 1, "descript": [1, 2, 6, 7], "accept": [1, 6], "valu": [1, 2, 3, 6], "json": [1, 6, 7], "schema": [1, 6, 7], "renam": [1, 7], "ucnc": [1, 6, 7], "strategi": [1, 4, 6], "output": [1, 4, 6, 7], "altern": [1, 2, 4], "fix": [1, 3, 6, 7], "end": [1, 4], "linc": [1, 2, 3], "visual": [1, 3, 4], "criteria": [1, 2, 4, 6], "min": [1, 2, 6, 7], "max": [1, 2, 3, 4, 6, 7], "categori": [1, 2, 4, 6], "correl": [1, 6, 7], "valid": [1, 6, 7], "consist": [1, 2, 3, 7], "problem": [1, 2, 4], "load": 1, "file": [1, 2, 3, 4], "reproduct": [1, 4, 7], "classifi": [1, 4], "pre": [1, 2, 6], "process": [1, 6, 7], "set": [1, 2, 3, 4, 6, 7], "befor": [1, 2, 3, 6, 7], "all": [1, 2, 4, 6, 7], "algorithm": [1, 2, 3], "possibl": [1, 2, 3], "each": [1, 2, 3, 6, 7], "criterion": [1, 2, 4, 6, 7], "list": [1, 7], "actual": [1, 2, 3, 6, 7], "start": [1, 2, 3, 6, 7], "now": [1, 2, 3, 7], "have": [1, 2, 3, 4, 6, 7], "increas": [1, 7], "rang": [1, 2, 7], "integ": [1, 2, 6, 7], "simplif": [1, 2], "implement": [1, 2, 3, 7], "weight": [1, 2, 3, 4, 6], "profil": [1, 2, 3, 4, 6], "breed": [1, 3, 4, 6], "expos": [1, 3], "sufficientcoalit": 1, "upset_root": [1, 6, 7], "name": [1, 4, 6, 7], "imbal": [1, 4, 6, 7], "cleaner": 1, "error": 1, "too": [1, 2, 3, 7], "tight": 1, "print": [1, 6, 7], "number": [1, 2, 3, 4, 6, 7], "iter": [1, 3, 4, 6], "wpb": [1, 2], "displai": [1, 7], "comment": [1, 6], "variou": 1, "readabl": 1, "integr": [1, 3], "compil": [1, 3, 6], "openmp": [1, 2], "distribut": 1, "binari": [1, 3, 4, 7], "wheel": [1, 3, 4, 7], "durat": [1, 2, 6, 7], "second": [1, 6, 7], "termin": [1, 3, 4, 6], "condit": [1, 4, 7], "chrone": [1, 3], "verbos": [1, 6, 7], "mode": 1, "pernici": 1, "memori": [1, 2], "bugfix": 1, "sure": [1, 6, 7], "built": [1, 3, 7], "build": [1, 3, 4], "nvcc": 1, "e": [1, 2, 3, 6, 7], "g": [1, 3, 6, 7], "provid": [1, 2, 3, 4], "info": [1, 4, 7], "ha": [1, 2, 3, 4, 7], "classif": [1, 3, 4], "help": [1, 2, 3, 4, 7], "sat": [1, 2, 3, 6], "coalit": [1, 2, 4, 6], "separ": [1, 2, 6, 7], "hopefulli": 1, "correct": [1, 3, 7], "yaml": [1, 2, 4, 6, 7], "anchor": [1, 7], "alias": 1, "limit": [1, 7], "repetit": [1, 7], "format": [1, 2, 4], "describ": [1, 2, 3, 4, 6, 7], "u": [1, 3, 7], "textsf": [1, 7], "specifi": [1, 2, 3, 6, 7], "minimum": [1, 2], "maximum": [1, 2, 6], "synthet": [1, 3, 4, 6], "data": [1, 3, 4, 6], "attribut": [1, 2, 7], "denorm": [1, 6, 7], "decreas": [1, 6, 7], "state": 1, "re": [1, 2, 3, 4, 7], "enough": [1, 2, 3, 4], "decim": 1, "store": [1, 2], "float": [1, 7], "point": [1, 7], "avoid": [1, 3, 7], "ani": [1, 3, 7], "loss": 1, "precis": 1, "log": 1, "final": [1, 2, 3, 4, 7], "accuraci": [1, 4], "mrsort": [1, 3, 4, 6, 7], "test": [1, 3, 4], "remov": [1, 4], "buggi": 1, "method": [1, 2, 7], "misclassify_altern": 1, "synthes": 1, "nois": [1, 7], "expend": 1, "suffici": [1, 2, 6], "root": [1, 3, 6, 7], "manylinux_2_31": 1, "flow": 1, "arrai": [1, 6], "scalar": 1, "between": [1, 2, 3, 4, 6, 7], "yet": [1, 2, 4, 7], "though": [1, 7], "control": [1, 7], "over": 1, "expans": 1, "except": 1, "fail": [1, 2], "develop": [1, 2], "machin": [1, 3, 7], "never": 1, "properli": 1, "heurist": [1, 2, 4, 6, 7], "introduc": [1, 2, 3, 7], "alglib": [1, 3, 6, 7], "lp": [1, 3], "solver": [1, 4, 6, 7], "docker": [1, 3], "imag": [1, 3, 6], "everywher": [1, 3], "lgplv3": 1, "miss": [1, 4], "header": [1, 6, 7], "mr": [1, 4, 7], "sobri": [1, 2], "sum": [1, 2, 6, 7], "pypi": [1, 3], "websit": 1, "kick": 1, "off": 1, "effort": [1, 7], "quit": [1, 2, 3, 7], "nice": 1, "readm": [1, 3, 7], "initi": [1, 4, 6, 7], "littl": 1, "function": [1, 2], "denot": 2, "interv": 2, "b": 2, "includ": [2, 4], "often": [2, 3, 4, 7], "zero": [2, 7], "choic": [2, 3, 7], "match": 2, "convent": 2, "program": [2, 3, 4, 6, 7], "languag": [2, 3], "close": [2, 4], "For": [2, 3, 6, 7], "4": [2, 4, 7], "2": [2, 4, 6, 7], "n": 2, "contain": [2, 3, 4, 6, 7], "element": [2, 7], "given": [2, 3, 7], "subset": [2, 7], "power": 2, "mathcal": 2, "p": 2, "focus": 2, "task": [2, 3], "worst": 2, "best": [2, 3, 7], "possibli": 2, "intermedi": [2, 6, 7], "assign": 2, "base": [2, 3, 4, 6], "itself": [2, 4, 6], "vocabulari": 2, "voluntarili": 2, "abstract": [2, 3], "wide": 2, "applic": 2, "concret": [2, 3], "let": [2, 7], "sai": 2, "scholarship": 2, "student": 2, "fund": 2, "polici": 2, "grade": 2, "get": [2, 3, 6, 7], "And": [2, 3, 4, 7], "favor": [2, 7], "younger": 2, "come": [2, 7], "modest": 2, "background": 2, "differ": [2, 3, 4, 6, 7], "topic": 2, "ag": 2, "famili": 2, "incom": 2, "could": [2, 3, 4, 7], "triag": 2, "patient": 2, "hospit": 2, "vital": 2, "sign": 2, "A": [2, 3, 7], "defin": [2, 3, 7], "mathbb": 2, "geq": 2, "x_i": 2, "_": 2, "total": [2, 7], "preccurlyeq_i": 2, "h": 2, "prec": 2, "confus": 2, "expon": 2, "cartesian": [2, 3], "product": [2, 3], "x": 2, "prod_": 2, "x_0": 2, "x_": 2, "inform": [2, 4, 6, 7], "csv": [2, 4, 6, 7], "autom": 2, "new": [2, 4, 7], "call": [2, 7], "train": [2, 4, 6], "ground": 2, "truth": [2, 6, 7], "phase": 2, "f": 2, "rightarrow": 2, "parametr": 2, "form": [2, 3, 7], "paramet": [2, 3], "fit": [2, 3], "higher": [2, 7], "sometim": 2, "import": [2, 3, 7], "compens": 2, "captur": [2, 7], "idea": [2, 3], "There": [2, 4], "mani": [2, 6, 7], "share": 2, "vari": 2, "were": [2, 7], "deni": 2, "bouyssou": 2, "thierri": 2, "marchant": 2, "articl": 2, "axiomat": 2, "noncompensatori": 2, "mcdm": 2, "ii": 2, "than": [2, 3, 7], "lower": [2, 7], "It": [2, 3, 4, 6, 7], "good": [2, 3, 7], "abov": [2, 3, 7], "sever": [2, 3, 7], "reach": [2, 4, 6, 7], "singl": [2, 3, 4, 6, 7], "addition": 2, "h_0": 2, "h_": 2, "still": [2, 3], "subseteq": 2, "With": [2, 7], "h_i": 2, "_i": 2, "inclus": 2, "imbric": 2, "supseteq": 2, "which": [2, 3, 4, 7], "default": [2, 4, 6, 7], "mapsto": 2, "cup": 2, "succcurlyeq_i": 2, "natur": [2, 3], "simplifi": 2, "mai": [2, 3, 4, 6, 7], "slightli": 2, "equival": 2, "somewhat": [2, 7], "simpl": [2, 7], "well": [2, 3], "ensur": [2, 6, 7], "behav": [2, 4], "intuit": 2, "ness": 2, "few": [2, 3, 4, 7], "upper": [2, 7], "select": [2, 3, 7], "ones": [2, 7], "continu": 2, "three": [2, 7], "partial": [2, 4], "full": [2, 3], "further": 2, "thing": [2, 3], "sacrif": 2, "interest": 2, "four": 2, "math": 2, "m": 2, "physic": [2, 7], "literatur": 2, "l": 2, "histori": 2, "normal": 2, "forget": 2, "clariti": 2, "instead": [2, 3, 6, 7], "x_m": 2, "x_p": 2, "x_l": 2, "x_h": 2, "1_m": 2, "1_p": 2, "1_l": 2, "1_h": 2, "6": 2, "55": 2, "7": [2, 7], "5": [2, 4, 6, 7], "2_m": 2, "2_p": 2, "2_l": 2, "2_h": 2, "75": 2, "9": [2, 4, 6, 7], "8": 2, "65": 2, "check": [2, 3, 6, 7], "satisfi": [2, 6], "1_i": 2, "2_i": 2, "look": [2, 3, 4], "like": [2, 3, 4, 7], "repres": [2, 6], "lattic": 2, "arrow": 2, "materi": 2, "relationship": 2, "black": 2, "grei": 2, "here": [2, 3, 7], "els": [2, 3], "ye": 2, "unus": 2, "85": 2, "No": 2, "d": [2, 3], "none": 2, "prose": 2, "formul": 2, "who": 2, "excel": 2, "least": [2, 3, 4, 6, 7], "subject": 2, "scientif": 2, "literari": 2, "back": [2, 4], "common": 2, "less": [2, 3], "computation": [2, 3], "simpler": 2, "previou": [2, 3, 7], "ne": 2, "threshold": [2, 4, 6, 7], "wa": [2, 3, 4, 6, 7], "agn\u00e8": 2, "leroi": 2, "et": 2, "al": 2, "multipl": [2, 3, 7], "w_i": 2, "sum_": 2, "again": 2, "answer": 2, "try": [2, 3, 4, 6, 7], "w_m": 2, "w_p": 2, "w_l": 2, "w_h": 2, "give": [2, 3, 6, 7], "16": 2, "equat": 2, "among": [2, 7], "lt": 2, "notin": 2, "ge": 2, "last": [2, 3, 6, 7], "solut": 2, "By": [2, 3, 6, 7], "contrast": 2, "express": 2, "greater": [2, 7], "fewer": 2, "success": [2, 7], "measur": [2, 3, 4], "metric": 2, "quicker": 2, "portion": [2, 4, 6, 7], "real": [2, 4, 6, 7], "world": [2, 4, 6], "noisi": 2, "inconsist": 2, "prevent": 2, "result": [2, 3, 4, 6, 7], "those": [2, 3, 4, 6, 7], "imposs": 2, "100": [2, 4, 7], "summari": 2, "typic": 2, "failur": [2, 3], "quickest": 2, "noth": [2, 3], "goal": 2, "far": [2, 7], "longest": 2, "simpli": [2, 7], "anyth": [2, 3, 6], "configur": [2, 3], "take": [2, 3, 7], "long": [2, 3, 4], "comput": [2, 4, 6], "resourc": 2, "alwai": [2, 7], "longer": [2, 3], "practic": 2, "ali": 2, "tlili": 2, "khale": 2, "belahc\u00e8n": 2, "effici": 2, "maxsat": 2, "conveni": 2, "gather": 2, "place": [2, 3, 4], "olivi": 2, "hi": 2, "ph": 2, "thesi": 2, "originali": 2, "emma": 2, "dixneuf": 2, "thibault": 2, "monsel": 2, "thoma": 2, "vindard": 2, "sequenti": 2, "parallel": [2, 7], "known": 2, "origin": [2, 4, 7], "compar": [2, 3], "evalu": 2, "qualiti": 2, "clean": 2, "haven": [2, 4], "done": [2, 3, 4], "strongli": [3, 7], "familiar": [3, 4], "rest": 3, "project": [3, 4], "also": [3, 4, 7], "exampl": [3, 7], "talk": 3, "pleas": [3, 7], "awar": 3, "progress": [3, 6, 7], "kind": [3, 4, 6, 7], "exercis": 3, "clairvoy": 3, "predict": 3, "got": 3, "wrong": 3, "hesit": 3, "contact": 3, "begin": [3, 7], "scale": [3, 7], "minor": 3, "major": 3, "refactor": 3, "typo": 3, "web": 3, "spare": 3, "clone": 3, "repositori": 3, "think": [3, 4], "entir": [3, 7], "architectur": 3, "deserv": 3, "rewrit": 3, "http": [3, 6], "com": 3, "lab": [3, 6], "don": [3, 4, 6], "spend": 3, "someth": [3, 4], "reject": 3, "reason": [3, 7], "appar": 3, "moment": 3, "yourself": 3, "tell": [3, 7], "report": 3, "everyth": [3, 7], "recogn": 3, "intimid": 3, "everyon": 3, "experi": [3, 7], "fluenci": 3, "tool": [3, 4, 6, 7], "willing": 3, "feedback": [3, 7], "assur": 3, "construct": 3, "manner": [3, 7], "similar": [3, 7], "inspir": 3, "git": 3, "grep": 3, "theoldth": 3, "thenewth": 3, "blame": 3, "identifi": [3, 7], "commit": 3, "next": 3, "recent": 3, "version": [3, 4, 6, 7], "bash": 3, "nvidia": 3, "runtim": 3, "loop": [3, 7], "repeat": [3, 7], "cach": 3, "subsequ": 3, "faster": 3, "unit": 3, "speed": 3, "eventu": 3, "maintain": 3, "pull": 3, "request": 3, "doc": 3, "io": [3, 6], "page": 3, "push": 3, "impact": [3, 7], "save": 3, "submit": 3, "coverag": 3, "stop": 3, "right": 3, "impli": 3, "skip": [3, 7], "forbid": [3, 7], "automat": 3, "warn": 3, "doe": [3, 7], "explicitli": [3, 7], "doctest": 3, "doctest_opt": 3, "pass": [3, 7], "verbatim": 3, "patch": 3, "thin": 3, "wrapper": 3, "basic": [3, 7], "rst": 3, "setup": 3, "py": 3, "manifest": 3, "licenc": 3, "local": 3, "render": 3, "current": [3, 4, 7], "dev": 3, "accompani": 3, "pattern": [3, 7], "inject": 3, "easili": 3, "switch": 3, "particularli": 3, "variant": 3, "benchmark": 3, "perspect": 3, "distinct": 3, "recurs": 3, "piec": 3, "learnmrsortbyweightsprofilesbre": 3, "weightsoptimizationstrategi": 3, "profilesimprovementstrategi": 3, "improveprofileswithaccuracyheuristiconcpu": 3, "improveprofileswithaccuracyheuristicongpu": 3, "costli": 3, "click": 3, "class": 3, "foo": 3, "void": 3, "yes_virtu": 3, "no_virtu": 3, "actualfoo": 3, "overrid": 3, "makefoo": 3, "return": [3, 6], "93": 3, "int": 3, "000": 3, "12": 3, "although": 3, "care": 3, "thousand": 3, "per": [3, 4, 6, 7], "ok": 3, "polymorph": 3, "frequent": 3, "found": [3, 6, 7], "liblinc": 3, "linear": [3, 4, 6, 7], "hpp": 3, "linearprogram": 3, "cost": 3, "One": 3, "would": [3, 7], "neg": 3, "consequ": 3, "instanti": 3, "explod": 3, "incombinatori": 3, "cpp": 3, "whole": 3, "great": 3, "mainten": 3, "instanci": 3, "modul": 3, "access": 3, "custom": 3, "side": 3, "happen": 3, "restructuredtext": 3, "sphinx": 3, "extent": 3, "edit": [3, 4], "html": [3, 6], "browser": 3, "anticip": [3, 7], "2024": 3, "famou": 3, "word": 3, "mind": [3, 4], "written": [3, 6, 7], "partli": 3, "usabl": 3, "arguabl": [3, 7], "easier": [3, 4], "core": [3, 7], "intens": 3, "interpret": 3, "multi": 3, "thread": 3, "suggest": [3, 4], "someon": 3, "becom": 3, "counter": 3, "through": 3, "breedingstrategi": 3, "reduc": [3, 7], "high": [3, 7], "optimizeweightsusingglop": 3, "spent": 3, "locat": 3, "rare": 3, "signific": 3, "advertis": 3, "boil": 3, "down": 3, "veri": [3, 7], "effect": [3, 4, 7], "unless": 3, "clear": 3, "bilion": 3, "step": 3, "previous": 3, "mimic": 3, "null": 3, "As": [3, 7], "via": 3, "duck": 3, "type": [3, 4, 6, 7], "dockerfil": 3, "foobar": 3, "typedef": 3, "liblincs_modul": 3, "__init__": 3, "command_line_interfac": 3, "txt": 3, "accordingli": 3, "procedur": 3, "0a790ef": 3, "modif": 3, "had": 3, "been": 3, "restructur": 3, "sinc": 3, "besid": 3, "run": 4, "pip": 4, "system": 4, "platform": 4, "lot": 4, "realli": 4, "go": 4, "rout": 4, "action": 4, "workflow": 4, "probabl": 4, "easiest": 4, "usag": 4, "arg": [4, 6], "mcda": [4, 6], "exit": [4, 6], "messag": 4, "graph": [4, 6, 7], "organ": 4, "sub": 4, "handl": [4, 6], "yml": [4, 7], "10": [4, 7], "seed": [4, 6, 7], "40": 4, "format_vers": [4, 6, 7], "value_typ": [4, 6, 7], "category_correl": [4, 6, 7], "grow": [4, 6, 7], "min_valu": [4, 6, 7], "max_valu": [4, 6, 7], "Then": [4, 7], "41": 4, "accepted_valu": [4, 6, 7], "255905151": 4, "676961303": 4, "0551739037": 4, "324553937": 4, "162252158": 4, "673279881": 4, "0526000932": 4, "598555863": 4, "sufficient_coalit": [4, 6, 7], "criterion_weight": [4, 6, 7], "147771254": 4, "618687689": 4, "406786472": 4, "0960085914": 4, "png": [4, 6, 7], "1000": 4, "split": 4, "interact": 4, "42": 4, "misclassifi": [4, 6, 7], "count": [4, 6, 7], "37454012": 4, "796543002": 4, "95071429": 4, "183434784": 4, "731993914": 4, "779690981": 4, "598658502": 4, "596850157": 4, "156018645": 4, "445832759": 4, "15599452": 4, "0999749228": 4, "0580836125": 4, "4592489": 4, "866176128": 4, "333708614": 4, "601114988": 4, "14286682": 4, "708072603": 4, "650888503": 4, "five": 4, "legend": 4, "directli": 4, "structur": [4, 6, 7], "reconstitut": 4, "numer": [4, 7], "43": 4, "maxim": [4, 6], "discrimin": [4, 6], "glop": [4, 6, 7], "reiniti": [4, 6, 7], "accur": [4, 6, 7], "target": [4, 6, 7], "22": 4, "339874953": 4, "421424538": 4, "0556534864": 4, "326433569": 4, "162616938": 4, "67343241": 4, "0878681168": 4, "252649099": 4, "01327896e": 4, "06": 4, "999998987": 4, "howev": 4, "reclassifi": 4, "3000": 4, "diff": 4, "522c522": 4, "520": 4, "617141366": 4, "326259822": 4, "901315808": 4, "460642993": 4, "615c615": 4, "613": 4, "547554553": 4, "0552174859": 4, "690436542": 4, "511019647": 4, "2596c2596": 4, "2594": 4, "234433308": 4, "780464768": 4, "162389532": 4, "622178912": 4, "2610c2610": 4, "2608": 4, "881479025": 4, "055544015": 4, "82936728": 4, "853676081": 4, "2996": 4, "demonstr": 4, "comfort": 4, "text": 6, "standard": [6, 7], "object": 6, "properti": 6, "string": 6, "const": 6, "item": [6, 7], "enumar": 6, "enum": 6, "peak": [6, 7], "unknown": [6, 7], "additionalproperti": 6, "fals": 6, "minitem": 6, "determin": [6, 7], "oneof": 6, "lowest": 6, "comma": 6, "ignor": [6, 7], "quot": 6, "whitespac": 6, "column": [6, 7], "associ": [6, 7], "Their": 6, "empti": [6, 7], "unclassifi": 6, "testing_set": 6, "output_altern": 6, "output_model": 6, "random_se": 6, "model_typ": 6, "mrsort__fixed_weights_sum": 6, "criteria_count": 6, "categories_count": 6, "output_problem": 6, "alternatives_count": 6, "max_imbal": 6, "balanc": [6, 7], "forc": 6, "size": [6, 7], "perfectli": [6, 7], "fraction": [6, 7], "misclassified_count": 6, "whether": 6, "otherwis": 6, "quiet": 6, "learning_set": 6, "ucncs__strategi": 6, "transform": 6, "mrsort__strategi": 6, "top": [6, 7], "mrsort__weights_profiles_breed__target_accuraci": 6, "mrsort__weights_profiles_breed__max_iter": 6, "mrsort__weights_profiles_breed__max_iterations_without_progress": 6, "mrsort__weights_profiles_breed__max_dur": 6, "mrsort__weights_profiles_breed__max_duration_without_progress": 6, "mrsort__weights_profiles_breed__models_count": 6, "temporari": 6, "mrsort__weights_profiles_breed__initialization_strategi": 6, "mrsort__weights_profiles_breed__weights_strategi": 6, "mrsort__weights_profiles_breed__linear_program__solv": 6, "mrsort__weights_profiles_breed__profiles_strategi": 6, "mrsort__weights_profiles_breed__accuracy_heuristic__random_se": 6, "mrsort__weights_profiles_breed__accuracy_heuristic__processor": 6, "mrsort__weights_profiles_breed__breed_strategi": 6, "mrsort__weights_profiles_breed__reinitialize_least_accurate__port": 6, "stderr": 6, "while": 6, "establish": 7, "manipul": 7, "conform": 7, "20": 7, "low": 7, "medium": 7, "kei": 7, "exactli": 7, "respect": 7, "third": 7, "evolv": 7, "enumer": 7, "resp": 7, "correspond": 7, "expert": 7, "knowledg": 7, "absolut": 7, "extrem": 7, "deleg": 7, "fourth": 7, "rel": 7, "fact": 7, "technic": 7, "embed": 7, "unwant": 7, "referenc": 7, "robust": 7, "content": 7, "hash": 7, "respons": 7, "track": 7, "along": 7, "49331188": 7, "15": 7, "9249287": 7, "49812794": 7, "15932083": 7, "938825667": 7, "343733728": 7, "lack": 7, "transpos": 7, "focuss": 7, "enter": 7, "boundari": 7, "minu": 7, "matrix": 7, "made": 7, "ident": 7, "upset": 7, "anoth": 7, "8156891": 7, "39045048": 7, "25551182": 7, "45864725": 7, "18": 7, "4786396": 7, "31117153": 7, "0154629": 7, "33949804": 7, "30789757": 7, "66963387": 7, "These": 7, "reproduc": 7, "parent": 7, "left": 7, "saw": 7, "tweak": 7, "notabl": 7, "choos": 7, "randomli": 7, "category_corel": 7, "equal": 7, "hard": 7, "600": 7, "200": 7, "160": 7, "240": 7, "significantli": 7, "popul": 7, "lenient": 7, "seen": 7, "own": 7, "goe": 7, "sens": 7, "branch": 7, "realiti": 7, "dot": 7, "scheme": 7, "abil": 7, "collis": 7, "join": 7, "smaller": 7, "softwar": 7, "reus": 7, "directori": 7, "small": 7, "difficult": 7, "Or": 7, "mayb": 7, "met": 7, "exceed": 7, "googl": 7, "OR": 7, "slight": 7, "capabl": 7, "exact": 7, "pick": 7, "Not": 7, "said": 7, "tradeoff": 7, "offer": 7, "highlight": 7, "999706864": 7, "0552680492": 7, "325211823": 7, "161919117": 7, "672662616": 7, "995402098": 7, "996754646": 7, "craft": 7, "similarli": 7, "serv": 7, "correctli": 7, "creat": 7, "graphic": 7, "represent": 7, "pretti": 7, "feel": 7, "free": 7, "out": 7}, "objects": {"./publish.sh": [[3, 0, 1, "cmdoption-.-publish.sh-arg-LEVEL", "LEVEL"]], "./run-development-cycle.sh": [[3, 0, 1, "cmdoption-.-run-development-cycle.sh-doctest-option", "--doctest-option"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-forbid-chrones", "--forbid-chrones"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-forbid-gpu", "--forbid-gpu"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-single-python-version", "--single-python-version"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-skip-long", "--skip-long"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-skip-unit", "--skip-unit"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-stop-after-unit", "--stop-after-unit"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-unit-coverage", "--unit-coverage"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-with-docs", "--with-docs"]], "lincs-classification-accuracy": [[6, 0, 1, "cmdoption-lincs-classification-accuracy-arg-MODEL", "MODEL"], [6, 0, 1, "cmdoption-lincs-classification-accuracy-arg-PROBLEM", "PROBLEM"], [6, 0, 1, "cmdoption-lincs-classification-accuracy-arg-TESTING_SET", "TESTING_SET"]], "lincs-classify": [[6, 0, 1, "cmdoption-lincs-classify-output-alternatives", "--output-alternatives"], [6, 0, 1, "cmdoption-lincs-classify-arg-ALTERNATIVES", "ALTERNATIVES"], [6, 0, 1, "cmdoption-lincs-classify-arg-MODEL", "MODEL"], [6, 0, 1, "cmdoption-lincs-classify-arg-PROBLEM", "PROBLEM"]], "lincs-generate-classification-model": [[6, 0, 1, "cmdoption-lincs-generate-classification-model-model-type", "--model-type"], [6, 0, 1, "cmdoption-lincs-generate-classification-model-output-model", "--output-model"], [6, 0, 1, "cmdoption-lincs-generate-classification-model-random-seed", "--random-seed"], [6, 0, 1, "cmdoption-lincs-generate-classification-model-arg-PROBLEM", "PROBLEM"]], "lincs-generate-classification-model.--mrsort": [[6, 0, 1, "cmdoption-lincs-generate-classification-model-mrsort.fixed-weights-sum", "fixed-weights-sum"]], "lincs-generate-classification-problem": [[6, 0, 1, "cmdoption-lincs-generate-classification-problem-allow-decreasing-criteria", "--allow-decreasing-criteria"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-denormalized-min-max", "--denormalized-min-max"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-output-problem", "--output-problem"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-random-seed", "--random-seed"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-arg-CATEGORIES_COUNT", "CATEGORIES_COUNT"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-arg-CRITERIA_COUNT", "CRITERIA_COUNT"]], "lincs-generate-classified-alternatives": [[6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-max-imbalance", "--max-imbalance"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-misclassified-count", "--misclassified-count"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-output-alternatives", "--output-alternatives"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-random-seed", "--random-seed"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-arg-ALTERNATIVES_COUNT", "ALTERNATIVES_COUNT"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-arg-MODEL", "MODEL"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-arg-PROBLEM", "PROBLEM"]], "lincs-info-has-gpu": [[6, 0, 1, "cmdoption-lincs-info-has-gpu-quiet", "--quiet"]], "lincs-learn-classification-model": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-model-type", "--model-type"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-output-model", "--output-model"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-arg-LEARNING_SET", "LEARNING_SET"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-arg-PROBLEM", "PROBLEM"]], "lincs-learn-classification-model.--mrsort": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.strategy", "strategy"]], "lincs-learn-classification-model.--mrsort.weights-profiles-breed.accuracy-heuristic": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.processor", "processor"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.random-seed", "random-seed"]], "lincs-learn-classification-model.--mrsort.weights-profiles-breed": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.breed-strategy", "breed-strategy"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.initialization-strategy", "initialization-strategy"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration", "max-duration"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration-without-progress", "max-duration-without-progress"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations", "max-iterations"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations-without-progress", "max-iterations-without-progress"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.models-count", "models-count"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.profiles-strategy", "profiles-strategy"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.target-accuracy", "target-accuracy"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.verbose", "verbose"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.weights-strategy", "weights-strategy"]], "lincs-learn-classification-model.--mrsort.weights-profiles-breed.linear-program": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.linear-program.solver", "solver"]], "lincs-learn-classification-model.--mrsort.weights-profiles-breed.reinitialize-least-accurate": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.reinitialize-least-accurate.portion", "portion"]], "lincs-learn-classification-model.--ucncs": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-ucncs.strategy", "strategy"]], "lincs-visualize-classification-model": [[6, 0, 1, "cmdoption-lincs-visualize-classification-model-alternatives", "--alternatives"], [6, 0, 1, "cmdoption-lincs-visualize-classification-model-alternatives-count", "--alternatives-count"], [6, 0, 1, "cmdoption-lincs-visualize-classification-model-arg-MODEL", "MODEL"], [6, 0, 1, "cmdoption-lincs-visualize-classification-model-arg-OUTPUT", "OUTPUT"], [6, 0, 1, "cmdoption-lincs-visualize-classification-model-arg-PROBLEM", "PROBLEM"]], "lincs": [[6, 0, 1, "cmdoption-lincs-version", "--version"]]}, "objtypes": {"0": "std:cmdoption"}, "objnames": {"0": ["std", "cmdoption", "program option"]}, "titleterms": {"contributor": [0, 3, 5], "project": [0, 5], "goal": [0, 5], "provid": [0, 5], "mcda": [0, 5], "tool": [0, 5], "usabl": [0, 5], "out": [0, 5], "box": [0, 5], "base": [0, 5, 7], "develop": [0, 3, 5], "new": [0, 3, 5], "algorithm": [0, 5], "get": [0, 4, 5], "start": [0, 4, 5], "version": [0, 1, 5], "except": [0, 5], "default": [0, 3, 5], "valu": [0, 5, 7], "file": [0, 5, 6, 7], "format": [0, 5, 6, 7], "linc": [0, 4, 5, 6, 7], "itself": [0, 5], "changelog": 1, "0": 1, "10": 1, "3": 1, "9": 1, "2": 1, "8": 1, "7": 1, "5": 1, "6": 1, "4": 1, "1": [1, 2], "conceptu": 2, "overview": 2, "notat": 2, "about": [2, 7], "classif": [2, 6, 7], "formal": 2, "definit": [2, 3], "learn": [2, 6, 7], "classifi": [2, 6, 7], "non": 2, "compensatori": 2, "sort": 2, "nc": [2, 6], "exampl": 2, "particular": 2, "case": 2, "u": 2, "c": [2, 3], "textsf": 2, "k": 2, "mr": 2, "accuraci": [2, 6, 7], "synthet": [2, 7], "data": [2, 7], "next": [2, 7], "guid": [3, 7], "do": 3, "contribut": 3, "depend": 3, "cycl": 3, "run": 3, "sh": 3, "publish": 3, "directori": 3, "structur": 3, "gener": [3, 6, 7], "design": 3, "strategi": [3, 7], "But": 3, "bewar": 3, "virtual": 3, "function": 3, "call": 3, "so": 3, "why": 3, "all": 3, "templat": 3, "how": 3, "tos": 3, "updat": 3, "document": 3, "choos": 3, "python": 3, "your": 3, "chang": 3, "tweak": 3, "an": [3, 7], "exist": 3, "add": 3, "extens": 3, "point": 3, "dynam": 3, "static": 3, "behavior": 3, "backward": 3, "compat": 3, "extern": 3, "solver": 3, "us": [4, 7], "command": [4, 6], "line": [4, 6], "interfac": [4, 6], "what": [4, 7], "now": 4, "readm": 5, "refer": 6, "The": 6, "problem": [6, 7], "model": [6, 7], "altern": [6, 7], "info": 6, "ha": 6, "gpu": 6, "visual": [6, 7], "user": 7, "criteria": 7, "categori": 7, "accept": 7, "suffici": 7, "coalit": 7, "comment": 7, "random": 7, "whole": 7, "tree": 7, "option": 7, "avail": 7, "sub": 7, "weight": 7, "profil": 7, "breed": 7, "wpb": 7, "termin": 7, "step": 7, "sat": 7, "comput": 7, "": 7}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"Contributors": [[0, "contributors"], [5, "contributors"]], "Project goals": [[0, "project-goals"], [5, "project-goals"]], "Provide MCDA tools usable out of the box": [[0, "provide-mcda-tools-usable-out-of-the-box"], [5, "provide-mcda-tools-usable-out-of-the-box"]], "Provide a base for developing new MCDA algorithms": [[0, "provide-a-base-for-developing-new-mcda-algorithms"], [5, "provide-a-base-for-developing-new-mcda-algorithms"]], "Get started": [[0, "get-started"], [4, "get-started"], [5, "get-started"]], "Versioning": [[0, "versioning"], [5, "versioning"]], "Exceptions": [[0, "exceptions"], [5, "exceptions"]], "Default values": [[0, "default-values"], [5, "default-values"]], "File formats": [[0, "file-formats"], [5, "file-formats"], [6, "file-formats"]], "Develop lincs itself": [[0, "develop-lincs-itself"], [5, "develop-lincs-itself"]], "Get lincs": [[4, "get-lincs"]], "Start using lincs\u2019 command-line interface": [[4, "start-using-lincs-command-line-interface"]], "What now?": [[4, "what-now"]], "README": [[5, "readme"]], "Changelog": [[1, "changelog"]], "Versions 0.10.0 to 0.10.3": [[1, "versions-0-10-0-to-0-10-3"]], "Versions 0.9.0 to 0.9.2": [[1, "versions-0-9-0-to-0-9-2"]], "Version 0.8.7": [[1, "version-0-8-7"]], "Versions 0.8.5 to 0.8.6": [[1, "versions-0-8-5-to-0-8-6"]], "Versions 0.8.0 to 0.8.4": [[1, "versions-0-8-0-to-0-8-4"]], "Version 0.7.0": [[1, "version-0-7-0"]], "Version 0.6.0": [[1, "version-0-6-0"]], "Version 0.5.1": [[1, "version-0-5-1"]], "Version 0.5.0": [[1, "version-0-5-0"]], "Version 0.4.5": [[1, "version-0-4-5"]], "Versions 0.4.1 to 0.4.4": [[1, "versions-0-4-1-to-0-4-4"]], "Version 0.4.0": [[1, "version-0-4-0"]], "Versions 0.3.4 to 0.3.7": [[1, "versions-0-3-4-to-0-3-7"]], "Version 0.3.3": [[1, "version-0-3-3"]], "Version 0.3.2": [[1, "version-0-3-2"]], "Version 0.3.1": [[1, "version-0-3-1"]], "Version 0.3.0": [[1, "version-0-3-0"]], "Version 0.2.2": [[1, "version-0-2-2"]], "Version 0.2.1": [[1, "version-0-2-1"]], "Version 0.2.0": [[1, "version-0-2-0"]], "Version 0.1.3": [[1, "version-0-1-3"]], "Contributor guide": [[3, "contributor-guide"]], "Do contribute!": [[3, "do-contribute"]], "Development dependencies": [[3, "development-dependencies"]], "Development cycle": [[3, "development-cycle"]], "./run-development-cycle.sh": [[3, "run-development-cycle-sh"]], "./publish.sh": [[3, "publish-sh"]], "Directory structure": [[3, "directory-structure"]], "General design": [[3, "general-design"]], "Strategies": [[3, "strategies"], [7, "strategies"]], "But beware of virtual function calls": [[3, "but-beware-of-virtual-function-calls"]], "So, why not all templates?": [[3, "so-why-not-all-templates"]], "How-tos": [[3, "how-tos"]], "Update the documentation": [[3, "update-the-documentation"]], "Choose Python or C++ for your change": [[3, "choose-python-or-c-for-your-change"]], "Tweak an existing strategy": [[3, "tweak-an-existing-strategy"]], "Add a new strategy": [[3, "add-a-new-strategy"]], "Add a new extension point": [[3, "add-a-new-extension-point"]], "Dynamic or static?": [[3, "dynamic-or-static"]], "Definition of an dynamic extension point": [[3, "definition-of-an-dynamic-extension-point"]], "Definition of an static extension point": [[3, "definition-of-an-static-extension-point"]], "Default behavior for backward compatibility": [[3, "default-behavior-for-backward-compatibility"]], "Add an external solver": [[3, "add-an-external-solver"]], "Conceptual overview": [[2, "conceptual-overview"]], "Notation": [[2, "notation"]], "About classification": [[2, "about-classification"]], "Formal definition": [[2, null], [2, null], [2, null], [2, null], [2, null]], "Learning and classifying": [[2, "learning-and-classifying"]], "Non-compensatory sorting (NCS)": [[2, "non-compensatory-sorting-ncs"]], "Example": [[2, "example"], [2, "id1"]], "Particular cases": [[2, "particular-cases"]], "U^c \\textsf{-} NCS": [[2, "u-c-textsf-ncs"]], "1 \\textsf{-} U^c \\textsf{-} NCS a.k.a. MR-Sort": [[2, "textsf-u-c-textsf-ncs-a-k-a-mr-sort"]], "Classification accuracy": [[2, "classification-accuracy"]], "Synthetic data": [[2, "synthetic-data"]], "Next": [[2, "next"]], "User Guide": [[7, "user-guide"]], "Formatting data for lincs": [[7, "formatting-data-for-lincs"]], "\u201cProblem\u201d files": [[7, "problem-files"]], "Criteria": [[7, "criteria"]], "Categories": [[7, "categories"]], "\u201cModel\u201d files": [[7, "model-files"]], "Accepted values": [[7, "accepted-values"]], "Sufficient coalitions": [[7, "sufficient-coalitions"]], "\u201cAlternatives\u201d files": [[7, "alternatives-files"]], "Comments in generated files": [[7, "comments-in-generated-files"]], "Generating synthetic data": [[7, "generating-synthetic-data"]], "About randomness": [[7, "about-randomness"]], "Generating a problem": [[7, "generating-a-problem"]], "Generating a model": [[7, "generating-a-model"]], "Generating alternatives": [[7, "generating-alternatives"]], "Learning a model": [[7, "learning-a-model"]], "An whole tree of options": [[7, "an-whole-tree-of-options"]], "Available learning (sub-)strategies": [[7, "available-learning-sub-strategies"]], "Weights, profiles, breed (WPB)": [[7, "weights-profiles-breed-wpb"]], "General options": [[7, "general-options"]], "Termination": [[7, "termination"]], "\u201cWeights\u201d step": [[7, "weights-step"]], "\u201cProfiles\u201d step": [[7, "profiles-step"]], "\u201cBreed\u201d step": [[7, "breed-step"]], "SAT-based strategies": [[7, "sat-based-strategies"]], "Using a model": [[7, "using-a-model"]], "Classifying alternatives": [[7, "classifying-alternatives"]], "Computing a classification accuracy": [[7, "computing-a-classification-accuracy"]], "Visualizing a model and alternatives": [[7, "visualizing-a-model-and-alternatives"]], "What\u2019s next?": [[7, "what-s-next"]], "Reference": [[6, "reference"]], "The problem file": [[6, "the-problem-file"]], "The NCS model file": [[6, "the-ncs-model-file"]], "The alternatives file": [[6, "the-alternatives-file"]], "Command-line interface": [[6, "command-line-interface"]], "lincs": [[6, "lincs"]], "classification-accuracy": [[6, "lincs-classification-accuracy"]], "classify": [[6, "lincs-classify"]], "generate": [[6, "lincs-generate"]], "classification-model": [[6, "lincs-generate-classification-model"], [6, "lincs-learn-classification-model"], [6, "lincs-visualize-classification-model"]], "classification-problem": [[6, "lincs-generate-classification-problem"]], "classified-alternatives": [[6, "lincs-generate-classified-alternatives"]], "info": [[6, "lincs-info"]], "has-gpu": [[6, "lincs-info-has-gpu"]], "learn": [[6, "lincs-learn"]], "visualize": [[6, "lincs-visualize"]]}, "indexentries": {"--doctest-option": [[3, "cmdoption-.-run-development-cycle.sh-doctest-option"]], "--forbid-chrones": [[3, "cmdoption-.-run-development-cycle.sh-forbid-chrones"]], "--forbid-gpu": [[3, "cmdoption-.-run-development-cycle.sh-forbid-gpu"]], "--single-python-version": [[3, "cmdoption-.-run-development-cycle.sh-single-python-version"]], "--skip-long": [[3, "cmdoption-.-run-development-cycle.sh-skip-long"]], "--skip-unit": [[3, "cmdoption-.-run-development-cycle.sh-skip-unit"]], "--stop-after-unit": [[3, "cmdoption-.-run-development-cycle.sh-stop-after-unit"]], "--unit-coverage": [[3, "cmdoption-.-run-development-cycle.sh-unit-coverage"]], "--with-docs": [[3, "cmdoption-.-run-development-cycle.sh-with-docs"]], "./publish.sh command line option": [[3, "cmdoption-.-publish.sh-arg-LEVEL"]], "./run-development-cycle.sh command line option": [[3, "cmdoption-.-run-development-cycle.sh-doctest-option"], [3, "cmdoption-.-run-development-cycle.sh-forbid-chrones"], [3, "cmdoption-.-run-development-cycle.sh-forbid-gpu"], [3, "cmdoption-.-run-development-cycle.sh-single-python-version"], [3, "cmdoption-.-run-development-cycle.sh-skip-long"], [3, "cmdoption-.-run-development-cycle.sh-skip-unit"], [3, "cmdoption-.-run-development-cycle.sh-stop-after-unit"], [3, "cmdoption-.-run-development-cycle.sh-unit-coverage"], [3, "cmdoption-.-run-development-cycle.sh-with-docs"]], "level": [[3, "cmdoption-.-publish.sh-arg-LEVEL"]], "--allow-decreasing-criteria": [[6, "cmdoption-lincs-generate-classification-problem-allow-decreasing-criteria"]], "--alternatives": [[6, "cmdoption-lincs-visualize-classification-model-alternatives"]], "--alternatives-count": [[6, "cmdoption-lincs-visualize-classification-model-alternatives-count"]], "--denormalized-min-max": [[6, "cmdoption-lincs-generate-classification-problem-denormalized-min-max"]], "--max-imbalance": [[6, "cmdoption-lincs-generate-classified-alternatives-max-imbalance"]], "--misclassified-count": [[6, "cmdoption-lincs-generate-classified-alternatives-misclassified-count"]], "--model-type": [[6, "cmdoption-lincs-generate-classification-model-model-type"], [6, "cmdoption-lincs-learn-classification-model-model-type"]], "--mrsort.fixed-weights-sum": [[6, "cmdoption-lincs-generate-classification-model-mrsort.fixed-weights-sum"]], "--mrsort.strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.strategy"]], "--mrsort.weights-profiles-breed.accuracy-heuristic.processor": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.processor"]], "--mrsort.weights-profiles-breed.accuracy-heuristic.random-seed": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.random-seed"]], "--mrsort.weights-profiles-breed.breed-strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.breed-strategy"]], "--mrsort.weights-profiles-breed.initialization-strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.initialization-strategy"]], "--mrsort.weights-profiles-breed.linear-program.solver": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.linear-program.solver"]], "--mrsort.weights-profiles-breed.max-duration": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration"]], "--mrsort.weights-profiles-breed.max-duration-without-progress": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration-without-progress"]], "--mrsort.weights-profiles-breed.max-iterations": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations"]], "--mrsort.weights-profiles-breed.max-iterations-without-progress": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations-without-progress"]], "--mrsort.weights-profiles-breed.models-count": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.models-count"]], "--mrsort.weights-profiles-breed.profiles-strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.profiles-strategy"]], "--mrsort.weights-profiles-breed.reinitialize-least-accurate.portion": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.reinitialize-least-accurate.portion"]], "--mrsort.weights-profiles-breed.target-accuracy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.target-accuracy"]], "--mrsort.weights-profiles-breed.verbose": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.verbose"]], "--mrsort.weights-profiles-breed.weights-strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.weights-strategy"]], "--output-alternatives": [[6, "cmdoption-lincs-classify-output-alternatives"], [6, "cmdoption-lincs-generate-classified-alternatives-output-alternatives"]], "--output-model": [[6, "cmdoption-lincs-generate-classification-model-output-model"], [6, "cmdoption-lincs-learn-classification-model-output-model"]], "--output-problem": [[6, "cmdoption-lincs-generate-classification-problem-output-problem"]], "--quiet": [[6, "cmdoption-lincs-info-has-gpu-quiet"]], "--random-seed": [[6, "cmdoption-lincs-generate-classification-model-random-seed"], [6, "cmdoption-lincs-generate-classification-problem-random-seed"], [6, "cmdoption-lincs-generate-classified-alternatives-random-seed"]], "--ucncs.strategy": [[6, "cmdoption-lincs-learn-classification-model-ucncs.strategy"]], "--version": [[6, "cmdoption-lincs-version"]], "alternatives": [[6, "cmdoption-lincs-classify-arg-ALTERNATIVES"]], "alternatives_count": [[6, "cmdoption-lincs-generate-classified-alternatives-arg-ALTERNATIVES_COUNT"]], "categories_count": [[6, "cmdoption-lincs-generate-classification-problem-arg-CATEGORIES_COUNT"]], "criteria_count": [[6, "cmdoption-lincs-generate-classification-problem-arg-CRITERIA_COUNT"]], "learning_set": [[6, "cmdoption-lincs-learn-classification-model-arg-LEARNING_SET"]], "model": [[6, "cmdoption-lincs-classification-accuracy-arg-MODEL"], [6, "cmdoption-lincs-classify-arg-MODEL"], [6, "cmdoption-lincs-generate-classified-alternatives-arg-MODEL"], [6, "cmdoption-lincs-visualize-classification-model-arg-MODEL"]], "output": [[6, "cmdoption-lincs-visualize-classification-model-arg-OUTPUT"]], "problem": [[6, "cmdoption-lincs-classification-accuracy-arg-PROBLEM"], [6, "cmdoption-lincs-classify-arg-PROBLEM"], [6, "cmdoption-lincs-generate-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-generate-classified-alternatives-arg-PROBLEM"], [6, "cmdoption-lincs-learn-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-visualize-classification-model-arg-PROBLEM"]], "testing_set": [[6, "cmdoption-lincs-classification-accuracy-arg-TESTING_SET"]], "lincs command line option": [[6, "cmdoption-lincs-version"]], "lincs-classification-accuracy command line option": [[6, "cmdoption-lincs-classification-accuracy-arg-MODEL"], [6, "cmdoption-lincs-classification-accuracy-arg-PROBLEM"], [6, "cmdoption-lincs-classification-accuracy-arg-TESTING_SET"]], "lincs-classify command line option": [[6, "cmdoption-lincs-classify-arg-ALTERNATIVES"], [6, "cmdoption-lincs-classify-arg-MODEL"], [6, "cmdoption-lincs-classify-arg-PROBLEM"], [6, "cmdoption-lincs-classify-output-alternatives"]], "lincs-generate-classification-model command line option": [[6, "cmdoption-lincs-generate-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-generate-classification-model-model-type"], [6, "cmdoption-lincs-generate-classification-model-mrsort.fixed-weights-sum"], [6, "cmdoption-lincs-generate-classification-model-output-model"], [6, "cmdoption-lincs-generate-classification-model-random-seed"]], "lincs-generate-classification-problem command line option": [[6, "cmdoption-lincs-generate-classification-problem-allow-decreasing-criteria"], [6, "cmdoption-lincs-generate-classification-problem-arg-CATEGORIES_COUNT"], [6, "cmdoption-lincs-generate-classification-problem-arg-CRITERIA_COUNT"], [6, "cmdoption-lincs-generate-classification-problem-denormalized-min-max"], [6, "cmdoption-lincs-generate-classification-problem-output-problem"], [6, "cmdoption-lincs-generate-classification-problem-random-seed"]], "lincs-generate-classified-alternatives command line option": [[6, "cmdoption-lincs-generate-classified-alternatives-arg-ALTERNATIVES_COUNT"], [6, "cmdoption-lincs-generate-classified-alternatives-arg-MODEL"], [6, "cmdoption-lincs-generate-classified-alternatives-arg-PROBLEM"], [6, "cmdoption-lincs-generate-classified-alternatives-max-imbalance"], [6, "cmdoption-lincs-generate-classified-alternatives-misclassified-count"], [6, "cmdoption-lincs-generate-classified-alternatives-output-alternatives"], [6, "cmdoption-lincs-generate-classified-alternatives-random-seed"]], "lincs-info-has-gpu command line option": [[6, "cmdoption-lincs-info-has-gpu-quiet"]], "lincs-learn-classification-model command line option": [[6, "cmdoption-lincs-learn-classification-model-arg-LEARNING_SET"], [6, "cmdoption-lincs-learn-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-learn-classification-model-model-type"], [6, "cmdoption-lincs-learn-classification-model-mrsort.strategy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.processor"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.random-seed"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.breed-strategy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.initialization-strategy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.linear-program.solver"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration-without-progress"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations-without-progress"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.models-count"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.profiles-strategy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.reinitialize-least-accurate.portion"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.target-accuracy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.verbose"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.weights-strategy"], [6, "cmdoption-lincs-learn-classification-model-output-model"], [6, "cmdoption-lincs-learn-classification-model-ucncs.strategy"]], "lincs-visualize-classification-model command line option": [[6, "cmdoption-lincs-visualize-classification-model-alternatives"], [6, "cmdoption-lincs-visualize-classification-model-alternatives-count"], [6, "cmdoption-lincs-visualize-classification-model-arg-MODEL"], [6, "cmdoption-lincs-visualize-classification-model-arg-OUTPUT"], [6, "cmdoption-lincs-visualize-classification-model-arg-PROBLEM"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["README", "changelog", "conceptual-overview", "contributor-guide", "get-started", "index", "reference", "user-guide"], "filenames": ["README.rst", "changelog.rst", "conceptual-overview.rst", "contributor-guide.rst", "get-started.rst", "index.rst", "reference.rst", "user-guide.rst"], "titles": ["Contributors", "Changelog", "Conceptual overview", "Contributor guide", "Get started", "README", "Reference", "User Guide"], "terms": {"learn": [0, 1, 3, 4, 5], "infer": [0, 4, 5, 6], "non": [0, 4, 5, 6], "compensatori": [0, 4, 5, 6], "sort": [0, 1, 4, 5, 6, 7], "i": [0, 1, 2, 3, 4, 5, 6, 7], "collect": [0, 5], "command": [0, 1, 3, 5, 7], "line": [0, 1, 3, 5, 7], "util": [0, 4, 5], "support": [0, 1, 5, 6, 7], "linux": [0, 1, 4, 5, 7], "maco": [0, 1, 4, 5, 7], "window": [0, 1, 4, 5, 7], "gpu": [0, 1, 3, 5, 7], "ar": [0, 1, 2, 3, 4, 5, 6, 7], "avail": [0, 5], "becaus": [0, 2, 3, 4, 5, 7], "cuda": [0, 1, 2, 3, 5, 6, 7], "On": [0, 3, 5], "3": [0, 2, 4, 5, 7], "os": [0, 5], "onli": [0, 1, 2, 3, 4, 5, 6, 7], "x86_64": [0, 4, 5], "cpu": [0, 1, 3, 4, 5, 6, 7], "licens": [0, 1, 5], "under": [0, 3, 5], "gnu": [0, 5], "lesser": [0, 5], "gener": [0, 1, 2, 4, 5], "public": [0, 1, 5], "v3": [0, 5], "0": [0, 2, 4, 5, 6, 7], "indic": [0, 5, 7], "two": [0, 2, 4, 5, 7], "copi": [0, 5], "instal": [0, 1, 3, 4, 5], "from": [0, 1, 2, 3, 4, 5, 6, 7], "python": [0, 1, 2, 4, 5], "packag": [0, 1, 3, 4, 5], "index": [0, 2, 3, 5], "Its": [0, 2, 5, 6, 7], "document": [0, 1, 2, 4, 5, 7], "its": [0, 2, 3, 4, 5, 6, 7], "sourc": [0, 3, 4, 5, 6], "code": [0, 1, 3, 5, 6, 7], "github": [0, 3, 4, 5, 6], "question": [0, 2, 5, 7], "remark": [0, 5, 7], "bug": [0, 1, 3, 5], "want": [0, 2, 3, 4, 5, 7], "contribut": [0, 4, 5], "open": [0, 3, 5], "an": [0, 1, 2, 4, 5, 6], "issu": [0, 5], "discuss": [0, 3, 5], "todo": [0, 3, 4, 5], "featur": [0, 1, 3, 4, 5, 7], "later": [0, 3, 4, 5], "make": [0, 1, 3, 4, 5, 6, 7], "c": [0, 1, 5, 7], "librari": [0, 3, 5], "m1": [0, 5], "m2": [0, 5], "chip": [0, 5], "much": [0, 3, 5, 7], "arm": [0, 5], "processor": [0, 4, 5, 6, 7], "manag": [0, 1, 4, 5], "when": [0, 1, 2, 3, 5, 6, 7], "we": [0, 2, 3, 4, 5, 7], "publish": [0, 1, 5], "paper": [0, 5], "add": [0, 1, 4, 5, 6, 7], "note": [0, 2, 3, 5, 7], "ask": [0, 4, 5], "academ": [0, 2, 5], "kindli": [0, 4, 5], "cite": [0, 5], "our": [0, 2, 3, 4, 5, 7], "work": [0, 3, 4, 5], "mic": [0, 3, 5, 6], "research": [0, 5], "team": [0, 5], "centralesup\u00e9lec": [0, 5], "main": [0, 2, 3, 5], "author": [0, 5], "alphabet": [0, 5], "order": [0, 2, 4, 5, 6, 7], "laurent": [0, 5], "cabaret": [0, 5], "perform": [0, 1, 2, 3, 5, 7], "optim": [0, 3, 5, 7], "vincent": [0, 5], "jacqu": [0, 5], "engin": [0, 5], "mousseau": [0, 5], "domain": [0, 1, 5], "expertis": [0, 5], "wassila": [0, 5], "ouerdan": [0, 5], "you": [0, 2, 3, 4, 5, 6, 7], "should": [0, 2, 3, 4, 5, 6, 7], "abl": [0, 5], "us": [0, 1, 2, 3, 5, 6], "without": [0, 1, 2, 3, 5, 6, 7], "being": [0, 2, 4, 5], "specialist": [0, 5], "nc": [0, 1, 4, 5, 7], "model": [0, 1, 2, 4, 5], "just": [0, 2, 3, 5, 6, 7], "follow": [0, 1, 2, 3, 4, 5, 6, 7], "section": [0, 3, 4, 5, 7], "below": [0, 1, 5], "design": [0, 4, 5], "easi": [0, 3, 5, 7], "extend": [0, 2, 5, 6, 7], "even": [0, 3, 4, 5, 7], "replac": [0, 5], "part": [0, 1, 3, 5, 7], "exist": [0, 2, 5, 7], "see": [0, 1, 3, 4, 5, 6], "guid": [0, 1, 2, 4, 5, 6], "more": [0, 1, 2, 3, 4, 5, 7], "detail": [0, 1, 3, 4, 5, 7], "depend": [0, 1, 4, 5, 7], "your": [0, 2, 4, 5, 7], "favorit": [0, 5], "approach": [0, 1, 2, 4, 5, 6, 7], "can": [0, 2, 3, 4, 5, 6, 7], "either": [0, 5, 6, 7], "hand": [0, 5, 7], "conceptu": [0, 4, 5, 7], "overview": [0, 4, 5, 7], "The": [0, 2, 3, 4, 5, 7], "former": [0, 5], "show": [0, 4, 5, 6], "how": [0, 2, 4, 5, 7], "latter": [0, 5], "explain": [0, 3, 4, 5, 7], "concept": [0, 2, 4, 5, 7], "behind": [0, 5], "them": [0, 1, 2, 3, 4, 5, 7], "what": [0, 3, 5], "": [0, 1, 2, 3, 4, 5, 6], "etc": [0, 3, 4, 5, 7], "If": [0, 2, 3, 4, 5, 6, 7], "doubt": [0, 5], "highli": [0, 5], "recommend": [0, 2, 3, 4, 5, 7], "read": [0, 2, 3, 4, 5, 6, 7], "other": [0, 2, 3, 5, 7], "one": [0, 2, 3, 4, 5, 6, 7], "after": [0, 1, 3, 5, 7], "onc": [0, 3, 4, 5], "ve": [0, 4, 5, 7], "bit": [0, 5, 7], "up": [0, 2, 3, 4, 5, 6, 7], "user": [0, 1, 3, 4, 5, 6], "refer": [0, 4, 5, 7], "1": [0, 4, 5, 6, 7], "semant": [0, 5], "api": [0, 1, 3, 5], "must": [0, 2, 3, 4, 5, 6, 7], "declar": [0, 5], "accord": [0, 2, 5, 6, 7], "semver": [0, 5], "constitut": [0, 2, 5], "exclus": [0, 5], "level": [0, 2, 3, 5, 6, 7], "consid": [0, 2, 3, 5], "chang": [0, 1, 4, 5, 7], "backward": [0, 5, 7], "compat": [0, 5, 7], "client": [0, 5], "doesn": [0, 2, 4, 5], "t": [0, 2, 3, 4, 5, 6], "need": [0, 3, 4, 5, 7], "modifi": [0, 3, 4, 5, 7], "keep": [0, 3, 4, 5, 7], "requir": [0, 3, 4, 5, 6, 7], "recompil": [0, 5], "some": [0, 2, 3, 5, 7], "case": [0, 3, 5, 7], "futur": [0, 4, 5, 6], "might": [0, 2, 3, 5], "behavior": [0, 5, 7], "especi": [0, 5], "regard": [0, 5], "pseudo": [0, 1, 2, 4, 5, 6, 7], "random": [0, 1, 2, 4, 5, 6], "plan": [0, 5], "do": [0, 2, 4, 5, 7], "ll": [0, 2, 3, 4, 5, 7], "interfac": [0, 3, 5], "In": [0, 1, 2, 5, 7], "mean": [0, 5, 7], "time": [0, 1, 2, 3, 5, 7], "chose": [0, 5], "wai": [0, 2, 3, 4, 5, 6, 7], "expect": [0, 2, 3, 5, 7], "unanticip": [0, 5], "option": [0, 1, 3, 4, 5, 6], "argument": [0, 3, 5, 6], "thei": [0, 1, 2, 3, 4, 5, 7], "releas": [0, 1, 5], "find": [0, 2, 3, 5, 7], "better": [0, 2, 4, 5], "most": [0, 2, 3, 5, 6, 7], "advic": [0, 5], "write": [0, 3, 5, 6], "script": [0, 3, 5], "explicit": [0, 1, 3, 5, 7], "where": [0, 2, 3, 4, 5, 7], "matter": [0, 5], "reli": [0, 3, 5, 7], "implicit": [0, 5], "potenti": [0, 5], "improv": [0, 1, 5, 6, 7], "same": [0, 2, 3, 4, 5, 6, 7], "specif": [0, 3, 5, 7], "appli": [0, 2, 3, 5, 7], "produc": [0, 1, 2, 5, 7], "thi": [0, 1, 2, 3, 4, 5, 6, 7], "lead": [0, 5, 7], "about": [0, 1, 3, 4, 5, 6], "allow": [0, 1, 2, 3, 5, 6, 7], "flexibl": [0, 1, 5], "input": [0, 5, 7], "both": [0, 3, 4, 5], "old": [0, 3, 5], "But": [0, 2, 5, 7], "incompat": [0, 5], "To": [0, 2, 3, 4, 5, 7], "solv": [0, 5, 6, 7], "impos": [0, 5], "addit": [0, 2, 5, 7], "constraint": [0, 2, 5], "motiv": [0, 3, 5], "That": [0, 3, 4, 5, 7], "know": [0, 3, 5, 7], "alreadi": [0, 2, 5, 7], "so": [0, 1, 2, 4, 5, 7], "adapt": [0, 1, 5], "break": 1, "renam": [1, 7], "category_correl": 1, "preference_direct": [1, 4, 6, 7], "problem": [1, 2, 4], "file": [1, 2, 3, 4], "grow": 1, "prefer": [1, 6, 7], "direct": [1, 6, 7], "increas": [1, 4, 6, 7], "categori": [1, 2, 4, 6], "attribut": [1, 2, 7], "ordered_categori": [1, 4, 6, 7], "name": [1, 4, 6, 7], "worst": [1, 2, 4, 6], "intermedi": [1, 2, 4, 6, 7], "n": [1, 2], "best": [1, 2, 3, 4, 6, 7], "isoton": [1, 6], "resp": [1, 7], "antiton": [1, 6], "synonym": 1, "decreas": [1, 6, 7], "linc": [1, 2, 3], "describ": [1, 2, 3, 4, 7], "human": [1, 4, 6], "readabl": [1, 4, 6], "descript": [1, 2, 4, 6, 7], "remov": [1, 4], "comment": [1, 6], "termin": [1, 3, 6], "condit": [1, 7], "mrsort": [1, 3, 4, 6, 7], "weight": [1, 2, 3, 4, 6], "profil": [1, 2, 3, 4, 6], "breed": [1, 3, 4, 6], "output": [1, 4, 6, 7], "metadata": [1, 6, 7], "yaml": [1, 2, 4, 6, 7], "data": [1, 3, 4, 6], "previous": [1, 3], "found": [1, 3, 6, 7], "those": [1, 2, 3, 4, 6, 7], "provid": [1, 2, 3, 4, 6], "jupyt": [1, 4], "notebook": [1, 3, 4], "help": [1, 2, 3, 4, 7], "get": [1, 2, 3, 6], "start": [1, 2, 3, 6, 7], "all": [1, 2, 4, 6, 7], "integr": [1, 3], "test": [1, 3, 4], "extern": [1, 4], "error": 1, "ubuntu": [1, 4], "23": 1, "term": 1, "correl": 1, "wa": [1, 2, 3, 4, 6, 7], "instead": [1, 2, 3, 6, 7], "first": [1, 2, 3, 4, 6, 7], "candid": 1, "accept": [1, 6], "valu": [1, 2, 3, 4, 6], "json": [1, 6, 7], "schema": [1, 6, 7], "ucnc": [1, 6, 7], "strategi": [1, 4, 6], "altern": [1, 2, 4], "fix": [1, 3, 6, 7], "end": [1, 4], "visual": [1, 3, 4], "criteria": [1, 2, 4, 6], "min": [1, 2, 6, 7], "max": [1, 2, 3, 4, 6, 7], "valid": [1, 6, 7], "consist": [1, 2, 3, 7], "load": 1, "reproduct": [1, 4, 7], "classifi": [1, 4], "pre": [1, 2, 6], "process": [1, 6, 7], "set": [1, 2, 3, 4, 6, 7], "befor": [1, 2, 3, 6, 7], "algorithm": [1, 2, 3], "possibl": [1, 2, 3], "each": [1, 2, 3, 4, 6, 7], "criterion": [1, 2, 4, 6, 7], "list": [1, 7], "actual": [1, 2, 3, 6, 7], "now": [1, 2, 3, 7], "have": [1, 2, 3, 4, 6, 7], "rang": [1, 2, 7], "integ": [1, 2, 6, 7], "simplif": [1, 2], "implement": [1, 2, 3, 7], "expos": [1, 3], "sufficientcoalit": 1, "upset_root": [1, 6, 7], "imbal": [1, 4, 6, 7], "cleaner": 1, "too": [1, 2, 3, 7], "tight": 1, "print": [1, 6, 7], "number": [1, 2, 3, 4, 6, 7], "iter": [1, 3, 4, 6, 7], "wpb": [1, 2], "displai": [1, 7], "variou": 1, "compil": [1, 3, 6], "openmp": [1, 2], "distribut": 1, "binari": [1, 3, 4, 7], "wheel": [1, 3, 4, 7], "durat": [1, 2, 6, 7], "second": [1, 6, 7], "chrone": [1, 3], "verbos": [1, 6, 7], "mode": 1, "pernici": 1, "memori": [1, 2], "bugfix": 1, "sure": [1, 6, 7], "built": [1, 3, 7], "build": [1, 3, 4], "nvcc": 1, "e": [1, 2, 3, 6, 7], "g": [1, 3, 6, 7], "info": [1, 4, 7], "ha": [1, 2, 3, 4, 7], "classif": [1, 3, 4], "sat": [1, 2, 3, 6], "coalit": [1, 2, 4, 6], "separ": [1, 2, 6, 7], "hopefulli": 1, "correct": [1, 3, 7], "anchor": [1, 7], "alias": 1, "limit": [1, 7], "repetit": [1, 7], "format": [1, 2, 4], "u": [1, 3, 7], "textsf": [1, 7], "specifi": [1, 2, 3, 4, 6, 7], "minimum": [1, 2], "maximum": [1, 2, 6], "synthet": [1, 3, 4, 6], "denorm": [1, 6, 7], "state": 1, "re": [1, 2, 3, 4, 7], "enough": [1, 2, 3, 4], "decim": 1, "store": [1, 2], "float": [1, 7], "point": [1, 7], "avoid": [1, 3, 7], "ani": [1, 3, 4, 7], "loss": 1, "precis": 1, "log": 1, "final": [1, 2, 3, 4, 7], "accuraci": [1, 4], "buggi": 1, "method": [1, 2, 7], "misclassify_altern": 1, "synthes": 1, "nois": [1, 7], "expend": 1, "suffici": [1, 2, 4, 6], "root": [1, 3, 6, 7], "manylinux_2_31": 1, "flow": 1, "arrai": [1, 6], "scalar": 1, "between": [1, 2, 3, 4, 6, 7], "yet": [1, 2, 4, 7], "though": [1, 7], "control": [1, 7], "over": 1, "expans": 1, "except": 1, "fail": [1, 2], "develop": [1, 2], "machin": [1, 3, 7], "never": 1, "properli": 1, "heurist": [1, 2, 4, 6, 7], "introduc": [1, 2, 3, 7], "alglib": [1, 3, 6, 7], "lp": [1, 3], "solver": [1, 4, 6, 7], "docker": [1, 3], "imag": [1, 3, 6], "everywher": [1, 3], "lgplv3": 1, "miss": [1, 4], "header": [1, 6, 7], "mr": [1, 4, 7], "sobri": [1, 2], "sum": [1, 2, 6, 7], "pypi": [1, 3, 4], "websit": 1, "kick": 1, "off": 1, "effort": [1, 7], "quit": [1, 2, 3, 4, 7], "nice": 1, "readm": [1, 3, 7], "initi": [1, 4, 6, 7], "littl": 1, "function": [1, 2], "denot": 2, "interv": 2, "b": 2, "includ": [2, 4, 7], "often": [2, 3, 4, 7], "zero": [2, 7], "choic": [2, 3, 7], "match": 2, "convent": 2, "program": [2, 3, 4, 6, 7], "languag": [2, 3], "close": [2, 4], "For": [2, 3, 4, 6, 7], "4": [2, 4, 7], "2": [2, 4, 6, 7], "contain": [2, 3, 4, 6, 7], "element": [2, 7], "given": [2, 7], "subset": [2, 7], "power": 2, "mathcal": 2, "p": 2, "focus": 2, "task": [2, 3], "possibli": 2, "assign": 2, "base": [2, 3, 4, 6], "itself": [2, 4, 6], "vocabulari": 2, "voluntarili": 2, "abstract": [2, 3], "wide": 2, "applic": 2, "concret": [2, 3], "let": [2, 7], "sai": 2, "scholarship": 2, "student": 2, "fund": 2, "polici": 2, "grade": 2, "And": [2, 3, 4, 7], "favor": [2, 7], "younger": 2, "come": [2, 7], "modest": 2, "background": 2, "differ": [2, 3, 4, 6, 7], "topic": 2, "ag": 2, "famili": 2, "incom": 2, "could": [2, 3, 4, 7], "triag": 2, "patient": 2, "hospit": 2, "vital": 2, "sign": 2, "A": [2, 3, 7], "defin": [2, 3, 7], "mathbb": 2, "geq": 2, "x_i": 2, "_": 2, "total": [2, 7], "preccurlyeq_i": 2, "h": 2, "prec": 2, "confus": 2, "expon": 2, "cartesian": [2, 3], "product": [2, 3], "x": 2, "prod_": 2, "x_0": 2, "x_": 2, "inform": [2, 4, 6], "csv": [2, 4, 6, 7], "autom": 2, "new": [2, 4, 7], "call": [2, 7], "train": [2, 4, 6], "ground": 2, "truth": [2, 6, 7], "phase": 2, "f": 2, "rightarrow": 2, "parametr": 2, "form": [2, 3, 7], "paramet": [2, 3], "fit": [2, 3], "higher": [2, 4, 7], "sometim": 2, "import": [2, 3, 7], "compens": 2, "captur": [2, 7], "idea": [2, 3], "There": [2, 4], "mani": [2, 6, 7], "share": 2, "vari": 2, "were": [2, 7], "deni": 2, "bouyssou": 2, "thierri": 2, "marchant": 2, "articl": 2, "axiomat": 2, "noncompensatori": 2, "mcdm": 2, "ii": 2, "than": [2, 3, 4, 7], "lower": [2, 7], "It": [2, 3, 4, 6, 7], "good": [2, 3, 7], "abov": [2, 3, 7], "sever": [2, 3, 7], "reach": [2, 6, 7], "singl": [2, 3, 4, 6, 7], "addition": 2, "h_0": 2, "h_": 2, "still": [2, 3], "subseteq": 2, "With": [2, 7], "h_i": 2, "_i": 2, "inclus": 2, "imbric": 2, "supseteq": 2, "which": [2, 3, 4, 7], "default": [2, 4, 6, 7], "mapsto": 2, "cup": 2, "succcurlyeq_i": 2, "natur": [2, 3], "simplifi": 2, "mai": [2, 3, 4, 6, 7], "slightli": 2, "equival": 2, "somewhat": [2, 3, 7], "simpl": [2, 7], "well": [2, 3], "ensur": [2, 4, 6, 7], "behav": [2, 4], "intuit": 2, "ness": 2, "few": [2, 3, 4, 7], "upper": [2, 4, 7], "select": [2, 3, 7], "ones": [2, 7], "continu": 2, "three": [2, 7], "partial": [2, 4], "full": [2, 3], "further": 2, "thing": [2, 3], "sacrif": 2, "interest": 2, "four": 2, "math": 2, "m": [2, 4], "physic": [2, 7], "literatur": 2, "l": 2, "histori": 2, "normal": 2, "forget": 2, "clariti": 2, "x_m": 2, "x_p": 2, "x_l": 2, "x_h": 2, "1_m": 2, "1_p": 2, "1_l": 2, "1_h": 2, "6": 2, "55": 2, "7": [2, 7], "5": [2, 4, 6, 7], "2_m": 2, "2_p": 2, "2_l": 2, "2_h": 2, "75": 2, "9": [2, 4, 6, 7], "8": 2, "65": 2, "check": [2, 3, 6, 7], "satisfi": [2, 6], "1_i": 2, "2_i": 2, "look": [2, 3, 4], "like": [2, 3, 4, 7], "repres": [2, 6], "lattic": 2, "arrow": 2, "materi": 2, "relationship": 2, "black": 2, "grei": 2, "here": [2, 3, 7], "els": [2, 3], "ye": 2, "unus": 2, "85": 2, "No": 2, "d": [2, 3], "none": 2, "prose": 2, "formul": 2, "who": 2, "excel": 2, "least": [2, 3, 4, 6, 7], "subject": 2, "scientif": 2, "literari": 2, "back": [2, 4], "common": 2, "less": [2, 3], "computation": [2, 3], "simpler": 2, "previou": [2, 3, 7], "ne": 2, "threshold": [2, 4, 6, 7], "agn\u00e8": 2, "leroi": 2, "et": 2, "al": 2, "multipl": [2, 3, 7], "w_i": 2, "sum_": 2, "again": 2, "answer": 2, "try": [2, 3, 4, 6, 7], "w_m": 2, "w_p": 2, "w_l": 2, "w_h": 2, "give": [2, 3, 6, 7], "16": [2, 4], "equat": 2, "among": [2, 7], "lt": 2, "notin": 2, "ge": 2, "last": [2, 3, 6, 7], "solut": 2, "By": [2, 3, 6, 7], "contrast": 2, "express": 2, "greater": [2, 7], "fewer": 2, "success": [2, 7], "measur": [2, 3, 4], "metric": 2, "quicker": 2, "portion": [2, 4, 6, 7], "real": [2, 4, 6, 7], "world": [2, 4, 6], "noisi": 2, "inconsist": 2, "prevent": 2, "result": [2, 3, 4, 6, 7], "imposs": 2, "100": [2, 4, 7], "summari": 2, "typic": 2, "failur": [2, 3], "quickest": 2, "noth": [2, 3], "goal": 2, "far": [2, 7], "longest": 2, "simpli": [2, 7], "anyth": [2, 3, 6], "configur": [2, 3], "take": [2, 3, 4, 7], "long": [2, 3, 4], "comput": [2, 4, 6], "resourc": 2, "alwai": [2, 7], "longer": [2, 3], "practic": 2, "ali": 2, "tlili": 2, "khale": 2, "belahc\u00e8n": 2, "effici": 2, "maxsat": 2, "conveni": 2, "gather": 2, "place": [2, 3, 4], "olivi": 2, "hi": 2, "ph": 2, "thesi": 2, "originali": 2, "emma": 2, "dixneuf": 2, "thibault": 2, "monsel": 2, "thoma": 2, "vindard": 2, "sequenti": 2, "parallel": [2, 7], "known": [2, 4], "origin": [2, 4, 7], "compar": [2, 3], "evalu": 2, "qualiti": 2, "clean": 2, "haven": [2, 4], "done": [2, 3, 4], "strongli": [3, 7], "familiar": [3, 4], "rest": 3, "project": [3, 4], "also": [3, 4, 7], "exampl": [3, 7], "talk": 3, "pleas": [3, 7], "awar": 3, "progress": [3, 6, 7], "kind": [3, 4, 6, 7], "exercis": 3, "clairvoy": 3, "predict": 3, "got": 3, "wrong": 3, "hesit": 3, "contact": 3, "begin": [3, 7], "scale": [3, 7], "minor": 3, "major": 3, "refactor": 3, "typo": 3, "web": 3, "spare": 3, "clone": 3, "repositori": 3, "think": [3, 4], "entir": [3, 7], "architectur": 3, "deserv": 3, "rewrit": 3, "http": [3, 6], "com": 3, "lab": [3, 6], "don": [3, 4, 6], "spend": 3, "someth": [3, 4], "reject": 3, "reason": [3, 7], "appar": 3, "moment": 3, "yourself": 3, "tell": [3, 4, 7], "report": 3, "everyth": [3, 7], "recogn": 3, "intimid": 3, "everyon": 3, "experi": [3, 7], "fluenci": 3, "tool": [3, 4, 6, 7], "willing": 3, "feedback": [3, 7], "assur": 3, "construct": 3, "manner": [3, 7], "similar": [3, 7], "inspir": 3, "git": 3, "grep": 3, "theoldth": 3, "thenewth": 3, "blame": 3, "identifi": [3, 7], "commit": 3, "next": 3, "recent": [3, 4], "version": [3, 4, 6, 7], "bash": 3, "nvidia": 3, "runtim": 3, "loop": [3, 7], "repeat": [3, 7], "cach": 3, "subsequ": 3, "faster": 3, "unit": 3, "speed": 3, "eventu": 3, "maintain": 3, "pull": 3, "request": 3, "doc": 3, "io": [3, 6], "page": 3, "push": 3, "impact": [3, 7], "save": 3, "submit": 3, "coverag": 3, "stop": [3, 7], "right": 3, "impli": 3, "skip": [3, 7], "cpp": 3, "unchang": 3, "diff": [3, 4], "forbid": [3, 7], "automat": 3, "warn": 3, "doe": [3, 7], "explicitli": [3, 6, 7], "doctest": 3, "doctest_opt": 3, "pass": [3, 7], "verbatim": 3, "patch": 3, "dry": 3, "thin": 3, "wrapper": 3, "basic": [3, 7], "rst": 3, "setup": 3, "py": 3, "manifest": 3, "licenc": 3, "local": 3, "render": 3, "current": [3, 4, 7], "dev": 3, "accompani": 3, "pattern": [3, 7], "inject": 3, "easili": 3, "switch": 3, "particularli": 3, "variant": 3, "benchmark": 3, "perspect": 3, "distinct": 3, "recurs": 3, "piec": 3, "learnmrsortbyweightsprofilesbre": 3, "weightsoptimizationstrategi": 3, "profilesimprovementstrategi": 3, "improveprofileswithaccuracyheuristiconcpu": 3, "improveprofileswithaccuracyheuristicongpu": 3, "costli": 3, "cost": 3, "although": 3, "care": 3, "thousand": 3, "per": [3, 4, 6, 7], "ok": 3, "polymorph": 3, "frequent": 3, "liblinc": 3, "linear": [3, 4, 6, 7], "hpp": 3, "linearprogram": 3, "One": 3, "would": [3, 7], "neg": 3, "consequ": 3, "instanti": 3, "explod": 3, "combinatori": 3, "whole": 3, "great": 3, "mainten": 3, "instanci": 3, "modul": 3, "access": 3, "custom": 3, "side": 3, "happen": 3, "restructuredtext": 3, "sphinx": 3, "extent": 3, "click": 3, "edit": [3, 4], "html": [3, 6], "browser": 3, "anticip": [3, 7], "2024": 3, "famou": 3, "word": 3, "mind": [3, 4], "written": [3, 6, 7], "partli": 3, "usabl": 3, "arguabl": [3, 7], "easier": [3, 4], "core": [3, 7], "intens": 3, "interpret": 3, "multi": 3, "thread": 3, "suggest": [3, 4], "someon": 3, "becom": 3, "counter": 3, "through": 3, "breedingstrategi": 3, "reduc": [3, 7], "high": [3, 7], "optimizeweightsusingglop": 3, "spent": 3, "locat": 3, "rare": 3, "signific": 3, "advertis": 3, "boil": 3, "down": 3, "veri": [3, 7], "effect": [3, 4, 7], "unless": 3, "clear": 3, "bilion": 3, "step": 3, "mimic": 3, "null": 3, "As": [3, 7], "via": 3, "class": 3, "duck": 3, "type": [3, 4, 6, 7], "dockerfil": 3, "foobar": 3, "typedef": 3, "liblincs_modul": 3, "__init__": 3, "command_line_interfac": 3, "txt": 3, "accordingli": 3, "procedur": 3, "0a790ef": 3, "modif": 3, "had": 3, "been": 3, "restructur": 3, "sinc": 3, "besid": 3, "run": 4, "pip": 4, "system": 4, "virtual": 4, "environ": 4, "venv": 4, "directli": 4, "pipx": 4, "enforc": 4, "refus": 4, "platform": 4, "lot": 4, "realli": 4, "go": 4, "rout": 4, "action": 4, "workflow": 4, "probabl": 4, "download": 4, "easiest": 4, "usag": 4, "arg": [4, 6], "mcda": [4, 6], "exit": [4, 6], "messag": 4, "graph": [4, 6, 7], "organ": 4, "sub": 4, "handl": [4, 6], "yml": [4, 7], "11": [4, 7], "seed": [4, 6, 7], "40": 4, "format_vers": [4, 6, 7], "value_typ": [4, 6, 7], "min_valu": [4, 6, 7], "max_valu": [4, 6, 7], "explan": 4, "particular": 4, "Then": [4, 7], "41": 4, "accepted_valu": [4, 6, 7], "255905151": 4, "676961303": 4, "0551739037": 4, "324553937": 4, "162252158": 4, "673279881": 4, "0526000932": 4, "598555863": 4, "sufficient_coalit": [4, 6, 7], "criterion_weight": [4, 6, 7], "147771254": 4, "618687689": 4, "406786472": 4, "0960085914": 4, "png": [4, 6, 7], "evolv": [4, 7], "wether": [4, 7], "uc": [4, 7], "k": 4, "boundari": [4, 7], "associ": [4, 6, 7], "15": [4, 7], "62": 4, "10": [4, 7], "whose": 4, "26": 4, "06": 4, "05": 4, "68": 4, "32": 4, "67": 4, "60": 4, "1000": 4, "split": 4, "interact": 4, "42": 4, "misclassifi": [4, 6, 7], "count": [4, 6, 7], "37454012": 4, "796543002": 4, "95071429": 4, "183434784": 4, "731993914": 4, "779690981": 4, "598658502": 4, "596850157": 4, "156018645": 4, "445832759": 4, "15599452": 4, "0999749228": 4, "0580836125": 4, "4592489": 4, "866176128": 4, "333708614": 4, "601114988": 4, "14286682": 4, "708072603": 4, "650888503": 4, "five": 4, "legend": 4, "structur": [4, 6, 7], "reconstitut": 4, "numer": [4, 7], "43": 4, "maxim": [4, 6], "discrimin": [4, 6], "glop": [4, 6, 7], "reiniti": [4, 6, 7], "accur": [4, 6, 7], "target": [4, 6, 7], "339874953": 4, "421424538": 4, "0556534864": 4, "326433569": 4, "162616938": 4, "67343241": 4, "0878681168": 4, "252649099": 4, "01327896e": 4, "999998987": 4, "howev": 4, "reclassifi": 4, "3000": 4, "522c522": 4, "520": 4, "617141366": 4, "326259822": 4, "901315808": 4, "460642993": 4, "615c615": 4, "613": 4, "547554553": 4, "0552174859": 4, "690436542": 4, "511019647": 4, "2596c2596": 4, "2594": 4, "234433308": 4, "780464768": 4, "162389532": 4, "622178912": 4, "2610c2610": 4, "2608": 4, "881479025": 4, "055544015": 4, "82936728": 4, "853676081": 4, "2996": 4, "demonstr": 4, "comfort": 4, "text": 6, "standard": [6, 7], "object": 6, "properti": 6, "string": 6, "const": 6, "item": [6, 7], "enumer": [6, 7], "enum": 6, "peak": [6, 7], "unknown": [6, 7], "additionalproperti": 6, "fals": 6, "minitem": 6, "determin": [6, 7], "oneof": 6, "lowest": 6, "comma": 6, "ignor": [6, 7], "quot": 6, "whitespac": 6, "column": [6, 7], "Their": 6, "empti": [6, 7], "unclassifi": 6, "testing_set": 6, "output_altern": 6, "output_descript": 6, "output_model": 6, "random_se": 6, "model_typ": 6, "mrsort__fixed_weights_sum": 6, "criteria_count": 6, "categories_count": 6, "output_problem": 6, "alternatives_count": 6, "max_imbal": 6, "balanc": [6, 7], "forc": 6, "size": [6, 7], "perfectli": [6, 7], "fraction": [6, 7], "misclassified_count": 6, "whether": 6, "return": 6, "otherwis": 6, "quiet": 6, "learning_set": 6, "ucncs__strategi": 6, "transform": 6, "mrsort__strategi": 6, "top": [6, 7], "mrsort__weights_profiles_breed__target_accuraci": 6, "mrsort__weights_profiles_breed__max_iter": 6, "mrsort__weights_profiles_breed__max_iterations_without_progress": 6, "mrsort__weights_profiles_breed__max_dur": 6, "mrsort__weights_profiles_breed__max_duration_without_progress": 6, "mrsort__weights_profiles_breed__models_count": 6, "temporari": 6, "mrsort__weights_profiles_breed__initialization_strategi": 6, "mrsort__weights_profiles_breed__weights_strategi": 6, "mrsort__weights_profiles_breed__linear_program__solv": 6, "mrsort__weights_profiles_breed__profiles_strategi": 6, "mrsort__weights_profiles_breed__accuracy_heuristic__random_se": 6, "mrsort__weights_profiles_breed__accuracy_heuristic__processor": 6, "mrsort__weights_profiles_breed__breed_strategi": 6, "mrsort__weights_profiles_breed__reinitialize_least_accurate__port": 6, "stderr": 6, "while": 6, "mrsort__weights_profiles_breed__output_metadata": 6, "establish": 7, "manipul": 7, "conform": 7, "20": 7, "low": 7, "medium": 7, "kei": 7, "exactli": 7, "respect": 7, "third": 7, "correspond": 7, "expert": 7, "knowledg": 7, "absolut": 7, "extrem": 7, "deleg": 7, "fourth": 7, "rel": 7, "fact": 7, "technic": 7, "embed": 7, "unwant": 7, "referenc": 7, "robust": 7, "content": 7, "hash": 7, "respons": 7, "track": 7, "along": 7, "49331188": 7, "9249287": 7, "49812794": 7, "15932083": 7, "938825667": 7, "343733728": 7, "lack": 7, "transpos": 7, "focuss": 7, "enter": 7, "minu": 7, "matrix": 7, "made": 7, "ident": 7, "upset": 7, "anoth": 7, "8156891": 7, "39045048": 7, "25551182": 7, "45864725": 7, "18": 7, "4786396": 7, "31117153": 7, "0154629": 7, "33949804": 7, "30789757": 7, "66963387": 7, "These": 7, "reproduc": 7, "parent": 7, "left": 7, "saw": 7, "tweak": 7, "notabl": 7, "choos": 7, "randomli": 7, "equal": 7, "hard": 7, "600": 7, "200": 7, "160": 7, "240": 7, "significantli": 7, "popul": 7, "lenient": 7, "seen": 7, "own": 7, "goe": 7, "sens": 7, "branch": 7, "realiti": 7, "dot": 7, "scheme": 7, "abil": 7, "collis": 7, "join": 7, "smaller": 7, "softwar": 7, "reus": 7, "directori": 7, "small": 7, "difficult": 7, "Or": 7, "mayb": 7, "took": 7, "met": 7, "exceed": 7, "googl": 7, "OR": 7, "slight": 7, "capabl": 7, "exact": 7, "pick": 7, "Not": 7, "said": 7, "tradeoff": 7, "offer": 7, "highlight": 7, "999706864": 7, "0552680492": 7, "325211823": 7, "161919117": 7, "672662616": 7, "995402098": 7, "996754646": 7, "craft": 7, "similarli": 7, "serv": 7, "correctli": 7, "creat": 7, "graphic": 7, "represent": 7, "pretti": 7, "feel": 7, "free": 7, "out": 7}, "objects": {"./publish.sh": [[3, 0, 1, "cmdoption-.-publish.sh-dry-run", "--dry-run"], [3, 0, 1, "cmdoption-.-publish.sh-arg-LEVEL", "LEVEL"]], "./run-development-cycle.sh": [[3, 0, 1, "cmdoption-.-run-development-cycle.sh-doctest-option", "--doctest-option"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-forbid-chrones", "--forbid-chrones"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-forbid-gpu", "--forbid-gpu"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-single-python-version", "--single-python-version"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-skip-cpp-unit", "--skip-cpp-unit"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-skip-long-unit", "--skip-long-unit"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-skip-notebooks", "--skip-notebooks"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-skip-unchanged-notebooks", "--skip-unchanged-notebooks"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-skip-unit", "--skip-unit"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-unit-coverage", "--unit-coverage"], [3, 0, 1, "cmdoption-.-run-development-cycle.sh-with-docs", "--with-docs"]], "lincs-classification-accuracy": [[6, 0, 1, "cmdoption-lincs-classification-accuracy-arg-MODEL", "MODEL"], [6, 0, 1, "cmdoption-lincs-classification-accuracy-arg-PROBLEM", "PROBLEM"], [6, 0, 1, "cmdoption-lincs-classification-accuracy-arg-TESTING_SET", "TESTING_SET"]], "lincs-classify": [[6, 0, 1, "cmdoption-lincs-classify-output-alternatives", "--output-alternatives"], [6, 0, 1, "cmdoption-lincs-classify-arg-ALTERNATIVES", "ALTERNATIVES"], [6, 0, 1, "cmdoption-lincs-classify-arg-MODEL", "MODEL"], [6, 0, 1, "cmdoption-lincs-classify-arg-PROBLEM", "PROBLEM"]], "lincs-describe-classification-model": [[6, 0, 1, "cmdoption-lincs-describe-classification-model-output-description", "--output-description"], [6, 0, 1, "cmdoption-lincs-describe-classification-model-arg-MODEL", "MODEL"], [6, 0, 1, "cmdoption-lincs-describe-classification-model-arg-PROBLEM", "PROBLEM"]], "lincs-describe-classification-problem": [[6, 0, 1, "cmdoption-lincs-describe-classification-problem-output-description", "--output-description"], [6, 0, 1, "cmdoption-lincs-describe-classification-problem-arg-PROBLEM", "PROBLEM"]], "lincs-generate-classification-model": [[6, 0, 1, "cmdoption-lincs-generate-classification-model-model-type", "--model-type"], [6, 0, 1, "cmdoption-lincs-generate-classification-model-output-model", "--output-model"], [6, 0, 1, "cmdoption-lincs-generate-classification-model-random-seed", "--random-seed"], [6, 0, 1, "cmdoption-lincs-generate-classification-model-arg-PROBLEM", "PROBLEM"]], "lincs-generate-classification-model.--mrsort": [[6, 0, 1, "cmdoption-lincs-generate-classification-model-mrsort.fixed-weights-sum", "fixed-weights-sum"]], "lincs-generate-classification-problem": [[6, 0, 1, "cmdoption-lincs-generate-classification-problem-allow-decreasing-criteria", "--allow-decreasing-criteria"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-denormalized-min-max", "--denormalized-min-max"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-output-problem", "--output-problem"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-random-seed", "--random-seed"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-arg-CATEGORIES_COUNT", "CATEGORIES_COUNT"], [6, 0, 1, "cmdoption-lincs-generate-classification-problem-arg-CRITERIA_COUNT", "CRITERIA_COUNT"]], "lincs-generate-classified-alternatives": [[6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-max-imbalance", "--max-imbalance"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-misclassified-count", "--misclassified-count"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-output-alternatives", "--output-alternatives"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-random-seed", "--random-seed"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-arg-ALTERNATIVES_COUNT", "ALTERNATIVES_COUNT"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-arg-MODEL", "MODEL"], [6, 0, 1, "cmdoption-lincs-generate-classified-alternatives-arg-PROBLEM", "PROBLEM"]], "lincs-info-has-gpu": [[6, 0, 1, "cmdoption-lincs-info-has-gpu-quiet", "--quiet"]], "lincs-learn-classification-model": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-model-type", "--model-type"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-output-model", "--output-model"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-arg-LEARNING_SET", "LEARNING_SET"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-arg-PROBLEM", "PROBLEM"]], "lincs-learn-classification-model.--mrsort": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.strategy", "strategy"]], "lincs-learn-classification-model.--mrsort.weights-profiles-breed.accuracy-heuristic": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.processor", "processor"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.random-seed", "random-seed"]], "lincs-learn-classification-model.--mrsort.weights-profiles-breed": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.breed-strategy", "breed-strategy"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.initialization-strategy", "initialization-strategy"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration", "max-duration"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration-without-progress", "max-duration-without-progress"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations", "max-iterations"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations-without-progress", "max-iterations-without-progress"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.models-count", "models-count"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.output-metadata", "output-metadata"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.profiles-strategy", "profiles-strategy"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.target-accuracy", "target-accuracy"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.verbose", "verbose"], [6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.weights-strategy", "weights-strategy"]], "lincs-learn-classification-model.--mrsort.weights-profiles-breed.linear-program": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.linear-program.solver", "solver"]], "lincs-learn-classification-model.--mrsort.weights-profiles-breed.reinitialize-least-accurate": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.reinitialize-least-accurate.portion", "portion"]], "lincs-learn-classification-model.--ucncs": [[6, 0, 1, "cmdoption-lincs-learn-classification-model-ucncs.strategy", "strategy"]], "lincs-visualize-classification-model": [[6, 0, 1, "cmdoption-lincs-visualize-classification-model-alternatives", "--alternatives"], [6, 0, 1, "cmdoption-lincs-visualize-classification-model-alternatives-count", "--alternatives-count"], [6, 0, 1, "cmdoption-lincs-visualize-classification-model-arg-MODEL", "MODEL"], [6, 0, 1, "cmdoption-lincs-visualize-classification-model-arg-OUTPUT", "OUTPUT"], [6, 0, 1, "cmdoption-lincs-visualize-classification-model-arg-PROBLEM", "PROBLEM"]], "lincs": [[6, 0, 1, "cmdoption-lincs-version", "--version"]]}, "objtypes": {"0": "std:cmdoption"}, "objnames": {"0": ["std", "cmdoption", "program option"]}, "titleterms": {"contributor": [0, 3, 5], "project": [0, 5], "goal": [0, 5], "provid": [0, 5], "mcda": [0, 5], "tool": [0, 5], "usabl": [0, 5], "out": [0, 5], "box": [0, 5], "base": [0, 5, 7], "develop": [0, 3, 5], "new": [0, 3, 5], "algorithm": [0, 5], "get": [0, 4, 5, 7], "start": [0, 4, 5], "version": [0, 1, 5], "except": [0, 5], "default": [0, 3, 5], "valu": [0, 5, 7], "file": [0, 5, 6, 7], "format": [0, 5, 6, 7], "linc": [0, 4, 5, 6, 7], "itself": [0, 5], "changelog": 1, "0": 1, "11": 1, "10": 1, "3": 1, "9": 1, "2": 1, "8": 1, "7": 1, "5": 1, "6": 1, "4": 1, "1": [1, 2], "conceptu": 2, "overview": 2, "notat": 2, "about": [2, 7], "classif": [2, 6, 7], "formal": 2, "definit": [2, 3], "learn": [2, 6, 7], "classifi": [2, 6, 7], "non": 2, "compensatori": 2, "sort": 2, "nc": [2, 6], "exampl": 2, "particular": 2, "case": 2, "u": 2, "c": [2, 3], "textsf": 2, "k": 2, "mr": 2, "accuraci": [2, 6, 7], "synthet": [2, 7], "data": [2, 7], "next": [2, 7], "guid": [3, 7], "do": 3, "contribut": 3, "depend": 3, "cycl": 3, "run": 3, "sh": 3, "publish": 3, "directori": 3, "structur": 3, "gener": [3, 6, 7], "design": 3, "strategi": [3, 7], "But": 3, "bewar": 3, "virtual": 3, "function": 3, "call": 3, "so": 3, "why": 3, "all": 3, "templat": 3, "how": 3, "tos": 3, "updat": 3, "document": 3, "choos": 3, "python": 3, "your": 3, "chang": 3, "tweak": 3, "an": [3, 7], "exist": 3, "add": 3, "extens": 3, "point": 3, "dynam": 3, "static": 3, "behavior": 3, "backward": 3, "compat": 3, "extern": 3, "solver": 3, "us": [4, 7], "command": [4, 6], "line": [4, 6], "interfac": [4, 6], "what": [4, 7], "now": 4, "readm": 5, "refer": 6, "The": 6, "problem": [6, 7], "model": [6, 7], "altern": [6, 7], "describ": 6, "info": 6, "ha": 6, "gpu": 6, "visual": [6, 7], "user": 7, "criteria": 7, "categori": 7, "accept": 7, "suffici": 7, "coalit": 7, "comment": 7, "random": 7, "whole": 7, "tree": 7, "option": 7, "avail": 7, "sub": 7, "weight": 7, "profil": 7, "breed": 7, "wpb": 7, "termin": 7, "step": 7, "sat": 7, "comput": 7, "human": 7, "readabl": 7, "inform": 7, "": 7}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"Contributors": [[0, "contributors"], [5, "contributors"]], "Project goals": [[0, "project-goals"], [5, "project-goals"]], "Provide MCDA tools usable out of the box": [[0, "provide-mcda-tools-usable-out-of-the-box"], [5, "provide-mcda-tools-usable-out-of-the-box"]], "Provide a base for developing new MCDA algorithms": [[0, "provide-a-base-for-developing-new-mcda-algorithms"], [5, "provide-a-base-for-developing-new-mcda-algorithms"]], "Get started": [[0, "get-started"], [4, "get-started"], [5, "get-started"]], "Versioning": [[0, "versioning"], [5, "versioning"]], "Exceptions": [[0, "exceptions"], [5, "exceptions"]], "Default values": [[0, "default-values"], [5, "default-values"]], "File formats": [[0, "file-formats"], [5, "file-formats"], [6, "file-formats"]], "Develop lincs itself": [[0, "develop-lincs-itself"], [5, "develop-lincs-itself"]], "Changelog": [[1, "changelog"]], "Version 0.11.0": [[1, "version-0-11-0"]], "Versions 0.10.0 to 0.10.3": [[1, "versions-0-10-0-to-0-10-3"]], "Versions 0.9.0 to 0.9.2": [[1, "versions-0-9-0-to-0-9-2"]], "Version 0.8.7": [[1, "version-0-8-7"]], "Versions 0.8.5 to 0.8.6": [[1, "versions-0-8-5-to-0-8-6"]], "Versions 0.8.0 to 0.8.4": [[1, "versions-0-8-0-to-0-8-4"]], "Version 0.7.0": [[1, "version-0-7-0"]], "Version 0.6.0": [[1, "version-0-6-0"]], "Version 0.5.1": [[1, "version-0-5-1"]], "Version 0.5.0": [[1, "version-0-5-0"]], "Version 0.4.5": [[1, "version-0-4-5"]], "Versions 0.4.1 to 0.4.4": [[1, "versions-0-4-1-to-0-4-4"]], "Version 0.4.0": [[1, "version-0-4-0"]], "Versions 0.3.4 to 0.3.7": [[1, "versions-0-3-4-to-0-3-7"]], "Version 0.3.3": [[1, "version-0-3-3"]], "Version 0.3.2": [[1, "version-0-3-2"]], "Version 0.3.1": [[1, "version-0-3-1"]], "Version 0.3.0": [[1, "version-0-3-0"]], "Version 0.2.2": [[1, "version-0-2-2"]], "Version 0.2.1": [[1, "version-0-2-1"]], "Version 0.2.0": [[1, "version-0-2-0"]], "Version 0.1.3": [[1, "version-0-1-3"]], "Get lincs": [[4, "get-lincs"]], "Start using lincs\u2019 command-line interface": [[4, "start-using-lincs-command-line-interface"]], "What now?": [[4, "what-now"]], "README": [[5, "readme"]], "Conceptual overview": [[2, "conceptual-overview"]], "Notation": [[2, "notation"]], "About classification": [[2, "about-classification"]], "Formal definition": [[2, null], [2, null], [2, null], [2, null], [2, null]], "Learning and classifying": [[2, "learning-and-classifying"]], "Non-compensatory sorting (NCS)": [[2, "non-compensatory-sorting-ncs"]], "Example": [[2, "example"], [2, "id1"]], "Particular cases": [[2, "particular-cases"]], "U^c \\textsf{-} NCS": [[2, "u-c-textsf-ncs"]], "1 \\textsf{-} U^c \\textsf{-} NCS a.k.a. MR-Sort": [[2, "textsf-u-c-textsf-ncs-a-k-a-mr-sort"]], "Classification accuracy": [[2, "classification-accuracy"]], "Synthetic data": [[2, "synthetic-data"]], "Next": [[2, "next"]], "User Guide": [[7, "user-guide"]], "Formatting data for lincs": [[7, "formatting-data-for-lincs"]], "\u201cProblem\u201d files": [[7, "problem-files"]], "Criteria": [[7, "criteria"]], "Categories": [[7, "categories"]], "\u201cModel\u201d files": [[7, "model-files"]], "Accepted values": [[7, "accepted-values"]], "Sufficient coalitions": [[7, "sufficient-coalitions"]], "\u201cAlternatives\u201d files": [[7, "alternatives-files"]], "Comments in generated files": [[7, "comments-in-generated-files"]], "Generating synthetic data": [[7, "generating-synthetic-data"]], "About randomness": [[7, "about-randomness"]], "Generating a problem": [[7, "generating-a-problem"]], "Generating a model": [[7, "generating-a-model"]], "Generating alternatives": [[7, "generating-alternatives"]], "Learning a model": [[7, "learning-a-model"]], "An whole tree of options": [[7, "an-whole-tree-of-options"]], "Strategies": [[7, "strategies"], [3, "strategies"]], "Available learning (sub-)strategies": [[7, "available-learning-sub-strategies"]], "Weights, profiles, breed (WPB)": [[7, "weights-profiles-breed-wpb"]], "General options": [[7, "general-options"]], "Termination": [[7, "termination"]], "\u201cWeights\u201d step": [[7, "weights-step"]], "\u201cProfiles\u201d step": [[7, "profiles-step"]], "\u201cBreed\u201d step": [[7, "breed-step"]], "SAT-based strategies": [[7, "sat-based-strategies"]], "Using a model": [[7, "using-a-model"]], "Classifying alternatives": [[7, "classifying-alternatives"]], "Computing a classification accuracy": [[7, "computing-a-classification-accuracy"]], "Getting human-readable information about a problem or model": [[7, "getting-human-readable-information-about-a-problem-or-model"]], "Visualizing a model and alternatives": [[7, "visualizing-a-model-and-alternatives"]], "What\u2019s next?": [[7, "what-s-next"]], "Contributor guide": [[3, "contributor-guide"]], "Do contribute!": [[3, "do-contribute"]], "Development dependencies": [[3, "development-dependencies"]], "Development cycle": [[3, "development-cycle"]], "./run-development-cycle.sh": [[3, "run-development-cycle-sh"]], "./publish.sh": [[3, "publish-sh"]], "Directory structure": [[3, "directory-structure"]], "General design": [[3, "general-design"]], "But beware of virtual function calls": [[3, "but-beware-of-virtual-function-calls"]], "So, why not all templates?": [[3, "so-why-not-all-templates"]], "How-tos": [[3, "how-tos"]], "Update the documentation": [[3, "update-the-documentation"]], "Choose Python or C++ for your change": [[3, "choose-python-or-c-for-your-change"]], "Tweak an existing strategy": [[3, "tweak-an-existing-strategy"]], "Add a new strategy": [[3, "add-a-new-strategy"]], "Add a new extension point": [[3, "add-a-new-extension-point"]], "Dynamic or static?": [[3, "dynamic-or-static"]], "Definition of an dynamic extension point": [[3, "definition-of-an-dynamic-extension-point"]], "Definition of an static extension point": [[3, "definition-of-an-static-extension-point"]], "Default behavior for backward compatibility": [[3, "default-behavior-for-backward-compatibility"]], "Add an external solver": [[3, "add-an-external-solver"]], "Reference": [[6, "reference"]], "The problem file": [[6, "the-problem-file"]], "The NCS model file": [[6, "the-ncs-model-file"]], "The alternatives file": [[6, "the-alternatives-file"]], "Command-line interface": [[6, "command-line-interface"]], "lincs": [[6, "lincs"]], "classification-accuracy": [[6, "lincs-classification-accuracy"]], "classify": [[6, "lincs-classify"]], "describe": [[6, "lincs-describe"]], "classification-model": [[6, "lincs-describe-classification-model"], [6, "lincs-generate-classification-model"], [6, "lincs-learn-classification-model"], [6, "lincs-visualize-classification-model"]], "classification-problem": [[6, "lincs-describe-classification-problem"], [6, "lincs-generate-classification-problem"]], "generate": [[6, "lincs-generate"]], "classified-alternatives": [[6, "lincs-generate-classified-alternatives"]], "info": [[6, "lincs-info"]], "has-gpu": [[6, "lincs-info-has-gpu"]], "learn": [[6, "lincs-learn"]], "visualize": [[6, "lincs-visualize"]]}, "indexentries": {"--doctest-option": [[3, "cmdoption-.-run-development-cycle.sh-doctest-option"]], "--dry-run": [[3, "cmdoption-.-publish.sh-dry-run"]], "--forbid-chrones": [[3, "cmdoption-.-run-development-cycle.sh-forbid-chrones"]], "--forbid-gpu": [[3, "cmdoption-.-run-development-cycle.sh-forbid-gpu"]], "--single-python-version": [[3, "cmdoption-.-run-development-cycle.sh-single-python-version"]], "--skip-cpp-unit": [[3, "cmdoption-.-run-development-cycle.sh-skip-cpp-unit"]], "--skip-long-unit": [[3, "cmdoption-.-run-development-cycle.sh-skip-long-unit"]], "--skip-notebooks": [[3, "cmdoption-.-run-development-cycle.sh-skip-notebooks"]], "--skip-unchanged-notebooks": [[3, "cmdoption-.-run-development-cycle.sh-skip-unchanged-notebooks"]], "--skip-unit": [[3, "cmdoption-.-run-development-cycle.sh-skip-unit"]], "--unit-coverage": [[3, "cmdoption-.-run-development-cycle.sh-unit-coverage"]], "--with-docs": [[3, "cmdoption-.-run-development-cycle.sh-with-docs"]], "./publish.sh command line option": [[3, "cmdoption-.-publish.sh-arg-LEVEL"], [3, "cmdoption-.-publish.sh-dry-run"]], "./run-development-cycle.sh command line option": [[3, "cmdoption-.-run-development-cycle.sh-doctest-option"], [3, "cmdoption-.-run-development-cycle.sh-forbid-chrones"], [3, "cmdoption-.-run-development-cycle.sh-forbid-gpu"], [3, "cmdoption-.-run-development-cycle.sh-single-python-version"], [3, "cmdoption-.-run-development-cycle.sh-skip-cpp-unit"], [3, "cmdoption-.-run-development-cycle.sh-skip-long-unit"], [3, "cmdoption-.-run-development-cycle.sh-skip-notebooks"], [3, "cmdoption-.-run-development-cycle.sh-skip-unchanged-notebooks"], [3, "cmdoption-.-run-development-cycle.sh-skip-unit"], [3, "cmdoption-.-run-development-cycle.sh-unit-coverage"], [3, "cmdoption-.-run-development-cycle.sh-with-docs"]], "level": [[3, "cmdoption-.-publish.sh-arg-LEVEL"]], "--allow-decreasing-criteria": [[6, "cmdoption-lincs-generate-classification-problem-allow-decreasing-criteria"]], "--alternatives": [[6, "cmdoption-lincs-visualize-classification-model-alternatives"]], "--alternatives-count": [[6, "cmdoption-lincs-visualize-classification-model-alternatives-count"]], "--denormalized-min-max": [[6, "cmdoption-lincs-generate-classification-problem-denormalized-min-max"]], "--max-imbalance": [[6, "cmdoption-lincs-generate-classified-alternatives-max-imbalance"]], "--misclassified-count": [[6, "cmdoption-lincs-generate-classified-alternatives-misclassified-count"]], "--model-type": [[6, "cmdoption-lincs-generate-classification-model-model-type"], [6, "cmdoption-lincs-learn-classification-model-model-type"]], "--mrsort.fixed-weights-sum": [[6, "cmdoption-lincs-generate-classification-model-mrsort.fixed-weights-sum"]], "--mrsort.strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.strategy"]], "--mrsort.weights-profiles-breed.accuracy-heuristic.processor": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.processor"]], "--mrsort.weights-profiles-breed.accuracy-heuristic.random-seed": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.random-seed"]], "--mrsort.weights-profiles-breed.breed-strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.breed-strategy"]], "--mrsort.weights-profiles-breed.initialization-strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.initialization-strategy"]], "--mrsort.weights-profiles-breed.linear-program.solver": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.linear-program.solver"]], "--mrsort.weights-profiles-breed.max-duration": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration"]], "--mrsort.weights-profiles-breed.max-duration-without-progress": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration-without-progress"]], "--mrsort.weights-profiles-breed.max-iterations": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations"]], "--mrsort.weights-profiles-breed.max-iterations-without-progress": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations-without-progress"]], "--mrsort.weights-profiles-breed.models-count": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.models-count"]], "--mrsort.weights-profiles-breed.output-metadata": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.output-metadata"]], "--mrsort.weights-profiles-breed.profiles-strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.profiles-strategy"]], "--mrsort.weights-profiles-breed.reinitialize-least-accurate.portion": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.reinitialize-least-accurate.portion"]], "--mrsort.weights-profiles-breed.target-accuracy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.target-accuracy"]], "--mrsort.weights-profiles-breed.verbose": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.verbose"]], "--mrsort.weights-profiles-breed.weights-strategy": [[6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.weights-strategy"]], "--output-alternatives": [[6, "cmdoption-lincs-classify-output-alternatives"], [6, "cmdoption-lincs-generate-classified-alternatives-output-alternatives"]], "--output-description": [[6, "cmdoption-lincs-describe-classification-model-output-description"], [6, "cmdoption-lincs-describe-classification-problem-output-description"]], "--output-model": [[6, "cmdoption-lincs-generate-classification-model-output-model"], [6, "cmdoption-lincs-learn-classification-model-output-model"]], "--output-problem": [[6, "cmdoption-lincs-generate-classification-problem-output-problem"]], "--quiet": [[6, "cmdoption-lincs-info-has-gpu-quiet"]], "--random-seed": [[6, "cmdoption-lincs-generate-classification-model-random-seed"], [6, "cmdoption-lincs-generate-classification-problem-random-seed"], [6, "cmdoption-lincs-generate-classified-alternatives-random-seed"]], "--ucncs.strategy": [[6, "cmdoption-lincs-learn-classification-model-ucncs.strategy"]], "--version": [[6, "cmdoption-lincs-version"]], "alternatives": [[6, "cmdoption-lincs-classify-arg-ALTERNATIVES"]], "alternatives_count": [[6, "cmdoption-lincs-generate-classified-alternatives-arg-ALTERNATIVES_COUNT"]], "categories_count": [[6, "cmdoption-lincs-generate-classification-problem-arg-CATEGORIES_COUNT"]], "criteria_count": [[6, "cmdoption-lincs-generate-classification-problem-arg-CRITERIA_COUNT"]], "learning_set": [[6, "cmdoption-lincs-learn-classification-model-arg-LEARNING_SET"]], "model": [[6, "cmdoption-lincs-classification-accuracy-arg-MODEL"], [6, "cmdoption-lincs-classify-arg-MODEL"], [6, "cmdoption-lincs-describe-classification-model-arg-MODEL"], [6, "cmdoption-lincs-generate-classified-alternatives-arg-MODEL"], [6, "cmdoption-lincs-visualize-classification-model-arg-MODEL"]], "output": [[6, "cmdoption-lincs-visualize-classification-model-arg-OUTPUT"]], "problem": [[6, "cmdoption-lincs-classification-accuracy-arg-PROBLEM"], [6, "cmdoption-lincs-classify-arg-PROBLEM"], [6, "cmdoption-lincs-describe-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-describe-classification-problem-arg-PROBLEM"], [6, "cmdoption-lincs-generate-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-generate-classified-alternatives-arg-PROBLEM"], [6, "cmdoption-lincs-learn-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-visualize-classification-model-arg-PROBLEM"]], "testing_set": [[6, "cmdoption-lincs-classification-accuracy-arg-TESTING_SET"]], "lincs command line option": [[6, "cmdoption-lincs-version"]], "lincs-classification-accuracy command line option": [[6, "cmdoption-lincs-classification-accuracy-arg-MODEL"], [6, "cmdoption-lincs-classification-accuracy-arg-PROBLEM"], [6, "cmdoption-lincs-classification-accuracy-arg-TESTING_SET"]], "lincs-classify command line option": [[6, "cmdoption-lincs-classify-arg-ALTERNATIVES"], [6, "cmdoption-lincs-classify-arg-MODEL"], [6, "cmdoption-lincs-classify-arg-PROBLEM"], [6, "cmdoption-lincs-classify-output-alternatives"]], "lincs-describe-classification-model command line option": [[6, "cmdoption-lincs-describe-classification-model-arg-MODEL"], [6, "cmdoption-lincs-describe-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-describe-classification-model-output-description"]], "lincs-describe-classification-problem command line option": [[6, "cmdoption-lincs-describe-classification-problem-arg-PROBLEM"], [6, "cmdoption-lincs-describe-classification-problem-output-description"]], "lincs-generate-classification-model command line option": [[6, "cmdoption-lincs-generate-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-generate-classification-model-model-type"], [6, "cmdoption-lincs-generate-classification-model-mrsort.fixed-weights-sum"], [6, "cmdoption-lincs-generate-classification-model-output-model"], [6, "cmdoption-lincs-generate-classification-model-random-seed"]], "lincs-generate-classification-problem command line option": [[6, "cmdoption-lincs-generate-classification-problem-allow-decreasing-criteria"], [6, "cmdoption-lincs-generate-classification-problem-arg-CATEGORIES_COUNT"], [6, "cmdoption-lincs-generate-classification-problem-arg-CRITERIA_COUNT"], [6, "cmdoption-lincs-generate-classification-problem-denormalized-min-max"], [6, "cmdoption-lincs-generate-classification-problem-output-problem"], [6, "cmdoption-lincs-generate-classification-problem-random-seed"]], "lincs-generate-classified-alternatives command line option": [[6, "cmdoption-lincs-generate-classified-alternatives-arg-ALTERNATIVES_COUNT"], [6, "cmdoption-lincs-generate-classified-alternatives-arg-MODEL"], [6, "cmdoption-lincs-generate-classified-alternatives-arg-PROBLEM"], [6, "cmdoption-lincs-generate-classified-alternatives-max-imbalance"], [6, "cmdoption-lincs-generate-classified-alternatives-misclassified-count"], [6, "cmdoption-lincs-generate-classified-alternatives-output-alternatives"], [6, "cmdoption-lincs-generate-classified-alternatives-random-seed"]], "lincs-info-has-gpu command line option": [[6, "cmdoption-lincs-info-has-gpu-quiet"]], "lincs-learn-classification-model command line option": [[6, "cmdoption-lincs-learn-classification-model-arg-LEARNING_SET"], [6, "cmdoption-lincs-learn-classification-model-arg-PROBLEM"], [6, "cmdoption-lincs-learn-classification-model-model-type"], [6, "cmdoption-lincs-learn-classification-model-mrsort.strategy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.processor"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.accuracy-heuristic.random-seed"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.breed-strategy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.initialization-strategy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.linear-program.solver"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-duration-without-progress"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.max-iterations-without-progress"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.models-count"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.output-metadata"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.profiles-strategy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.reinitialize-least-accurate.portion"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.target-accuracy"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.verbose"], [6, "cmdoption-lincs-learn-classification-model-mrsort.weights-profiles-breed.weights-strategy"], [6, "cmdoption-lincs-learn-classification-model-output-model"], [6, "cmdoption-lincs-learn-classification-model-ucncs.strategy"]], "lincs-visualize-classification-model command line option": [[6, "cmdoption-lincs-visualize-classification-model-alternatives"], [6, "cmdoption-lincs-visualize-classification-model-alternatives-count"], [6, "cmdoption-lincs-visualize-classification-model-arg-MODEL"], [6, "cmdoption-lincs-visualize-classification-model-arg-OUTPUT"], [6, "cmdoption-lincs-visualize-classification-model-arg-PROBLEM"]]}}) \ No newline at end of file diff --git a/docs/user-guide.html b/docs/user-guide.html index f2b1d177..610b168b 100644 --- a/docs/user-guide.html +++ b/docs/user-guide.html @@ -5,11 +5,11 @@ - User Guide — lincs 0.10.3 documentation + User Guide — lincs 0.11.0 documentation - + @@ -50,15 +50,15 @@

    Formatting data for lincscriteria: - name: Criterion 1 value_type: real - category_correlation: growing + preference_direction: increasing min_value: 0 max_value: 20 - name: Criterion 2 value_type: real - category_correlation: decreasing + preference_direction: decreasing min_value: -5 max_value: 5 -categories: +ordered_categories: - name: Low - name: Medium - name: High @@ -73,13 +73,13 @@

    Criterianame.

    Currently, criteria can only take floating point values, so their value_type is always real. We expect this could evolve to also support criteria with integer or explicitly enumerated values.

    -

    Then, the category_correlation key describe what makes “good values” for this criterion. -If it is growing (resp. decreasing), then higher (resp. lower) numerical values correspond to upper categories. -Note that this correlation comes from expert knowledge about the structure of the problem, +

    Then, the preference_direction key describe what makes “good values” for this criterion. +If it is increasing (resp. decreasing), then higher (resp. lower) numerical values correspond to upper categories. +Note that this preference direction comes from expert knowledge about the structure of the problem, and will be used as an absolute truth when learning a model for this problem. -We expect the supported correlations could evolve to also support criteria with single-peaked correlation, +We expect the supported preference directions could evolve to also support single-peaked criteria, where intermediate numerical value correspond to upper categories, and extreme values to lower categories. -We also expect this could evolve to support criteria with unknown correlation, +We also expect this could evolve to support criteria with unknown preference direction, to support the case where no expert knowledge is available and delegate this choice to the learning process.

    Finally, for criteria with numerical value_type (currently all of them), the min_value and max_value keys describe the range of values the criterion can take.

    @@ -128,23 +128,23 @@

    Accepted valuesgrowing or decreasing correlation), the method is always kind: thresholds, +

    For current criteria (with increasing or decreasing preference direction), the method is always kind: thresholds, and the thresholds attribute lists the successive values required to enter an upper category. It must have as many elements as there are boundaries between categories, i.e. as there are categories minus one. -It’s always sorted, in increasing order for growing criteria and in decreasing order for decreasing criteria.

    +It’s always sorted, in increasing order for increasing criteria and in decreasing order for decreasing criteria.

    Note that this list is not a profile: it does not describe the limits between categories. The matrix made of these lists is the transposed of the matrix made of the profiles.

    -

    When we support criteria with single-peaked or unknown correlation, +

    When we support single-peaked criteria or criteria with unknown preference direction, we’ll introduce other kinds of accepted values with new attributes instead of thresholds.

    - + - + @@ -266,7 +266,7 @@

    Generating a problem
    • --denormalized-min-max generates problems with pseudo-random min_value and max_value for each criterion. By default, they are always set at 0 and 1.

    • -
    • --allow-decreasing-criteria chooses pseudo-randomly the category_corelation of each criterion between growing and decreasing. By default, all criteria have growing correlation.

    • +
    • --allow-decreasing-criteria chooses pseudo-randomly the preference_direction of each criterion between increasing and decreasing. By default, all criteria have increasing preference direction.

    @@ -356,6 +356,8 @@
    General options--mrsort.weights-profiles-breed.verbose option can be used to make lincs display information about the progress of the learning.

    +

    The --mrsort.weights-profiles-breed.output-metadata options can be used to produce a YAML file giving information about the learning process: +the reason it stopped (accuracy reached, time limit, etc.), how many WPB iterations it took, etc.

    Termination
    @@ -423,7 +425,7 @@

    SAT-based strategies

    They produce a different kind of model, with the sufficient coalitions specified explicitly by their roots:

    -

    +
    +

    Getting human-readable information about a problem or model

    +

    You can use lincs describe classification-problem problem.yml to get a human-readable description of a problem, +and lincs describe classification-model problem.yml model.yml to get one for a model, including wether it’s an MR-Sort or Uc-NCS model.

    +

    Visualizing a model and alternatives

    And you can use lincs visualize classification-model problem.yml model.yml to create a graphical representation of a model (a .png file), diff --git a/integration-tests/all-options-of-problem-generation/all-options-of-problem-generation.ipynb b/integration-tests/all-options-of-problem-generation/all-options-of-problem-generation.ipynb index 543d7cd5..309287df 100644 --- a/integration-tests/all-options-of-problem-generation/all-options-of-problem-generation.ipynb +++ b/integration-tests/all-options-of-problem-generation/all-options-of-problem-generation.ipynb @@ -10,7 +10,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-problem 4 3 --random-seed 42 --denormalized-min-max --allow-decreasing-criteria\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 42 --denormalized-min-max --allow-decreasing-criteria\n", "kind: classification-problem\n", "format_version: 1\n", "criteria:\n", diff --git a/integration-tests/fail-generating-balanced-alternatives/fail-generating-balanced-alternatives.ipynb b/integration-tests/fail-generating-balanced-alternatives/fail-generating-balanced-alternatives.ipynb index 2803d8ea..ce1e4fb5 100644 --- a/integration-tests/fail-generating-balanced-alternatives/fail-generating-balanced-alternatives.ipynb +++ b/integration-tests/fail-generating-balanced-alternatives/fail-generating-balanced-alternatives.ipynb @@ -22,7 +22,7 @@ "output_type": "stream", "text": [ "ERROR: lincs is unable to generate a balanced set of classified alternatives. Try to increase the allowed imbalance, or use a more lenient model?\n", - "Reproduction command (with lincs version 0.10.4-dev): lincs generate classified-alternatives problem.yml model.yml 100 --random-seed 42 --max-imbalance 0.0 --misclassified-count 0\n" + "Reproduction command (with lincs version 0.11.0): lincs generate classified-alternatives problem.yml model.yml 100 --random-seed 42 --max-imbalance 0.0 --misclassified-count 0\n" ] } ], diff --git a/integration-tests/learning-failure-exception/learning-failure-exception.ipynb b/integration-tests/learning-failure-exception/learning-failure-exception.ipynb index 4729b163..5d071ea8 100644 --- a/integration-tests/learning-failure-exception/learning-failure-exception.ipynb +++ b/integration-tests/learning-failure-exception/learning-failure-exception.ipynb @@ -23,7 +23,7 @@ "output_type": "stream", "text": [ "ERROR: lincs is unable to learn from this learning set using this algorithm and these parameters.\n", - "Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy sat-by-coalitions\n" + "Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type ucncs --ucncs.strategy sat-by-coalitions\n" ] } ], diff --git a/integration-tests/python-module-is-executable/python-module-is-executable.ipynb b/integration-tests/python-module-is-executable/python-module-is-executable.ipynb index 19fb1954..7b557f9e 100644 --- a/integration-tests/python-module-is-executable/python-module-is-executable.ipynb +++ b/integration-tests/python-module-is-executable/python-module-is-executable.ipynb @@ -11,7 +11,7 @@ "output_type": "stream", "text": [ "Python 3.7\n", - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-problem 4 3 --random-seed 208978669\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 208978669\n", "kind: classification-problem\n", "format_version: 1\n", "criteria:\n", @@ -40,7 +40,7 @@ " - name: Intermediate category 1\n", " - name: Best category\n", "Python 3.8\n", - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-problem 4 3 --random-seed 208978669\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 208978669\n", "kind: classification-problem\n", "format_version: 1\n", "criteria:\n", @@ -69,7 +69,7 @@ " - name: Intermediate category 1\n", " - name: Best category\n", "Python 3.9\n", - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-problem 4 3 --random-seed 208978669\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 208978669\n", "kind: classification-problem\n", "format_version: 1\n", "criteria:\n", @@ -98,7 +98,7 @@ " - name: Intermediate category 1\n", " - name: Best category\n", "Python 3.10\n", - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-problem 4 3 --random-seed 208978669\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 208978669\n", "kind: classification-problem\n", "format_version: 1\n", "criteria:\n", @@ -127,7 +127,7 @@ " - name: Intermediate category 1\n", " - name: Best category\n", "Python 3.11\n", - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-problem 4 3 --random-seed 208978669\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-problem 4 3 --random-seed 208978669\n", "kind: classification-problem\n", "format_version: 1\n", "criteria:\n", diff --git a/integration-tests/read-from-stdin/read-from-stdin.ipynb b/integration-tests/read-from-stdin/read-from-stdin.ipynb index 600c8562..12515f87 100644 --- a/integration-tests/read-from-stdin/read-from-stdin.ipynb +++ b/integration-tests/read-from-stdin/read-from-stdin.ipynb @@ -10,7 +10,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "# Reproduction command (with lincs version 0.10.4-dev): lincs generate classification-model - --random-seed 45 --model-type mrsort\n", + "# Reproduction command (with lincs version 0.11.0): lincs generate classification-model - --random-seed 45 --model-type mrsort\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", diff --git a/integration-tests/verbose/verbose.ipynb b/integration-tests/verbose/verbose.ipynb index 718fb846..deb43906 100644 --- a/integration-tests/verbose/verbose.ipynb +++ b/integration-tests/verbose/verbose.ipynb @@ -58,7 +58,7 @@ "Best accuracy (after 34 iterations): 198\n", "Best accuracy (after 35 iterations): 198\n", "Final accuracy (after 36 iterations): 200\n", - "# Reproduction command (with lincs version 0.10.4-dev): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 42 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", + "# Reproduction command (with lincs version 0.11.0): lincs learn classification-model problem.yml learning-set.csv --model-type mrsort --mrsort.strategy weights-profiles-breed --mrsort.weights-profiles-breed.models-count 9 --mrsort.weights-profiles-breed.accuracy-heuristic.random-seed 42 --mrsort.weights-profiles-breed.initialization-strategy maximize-discrimination-per-criterion --mrsort.weights-profiles-breed.weights-strategy linear-program --mrsort.weights-profiles-breed.linear-program.solver glop --mrsort.weights-profiles-breed.profiles-strategy accuracy-heuristic --mrsort.weights-profiles-breed.accuracy-heuristic.processor cpu --mrsort.weights-profiles-breed.breed-strategy reinitialize-least-accurate --mrsort.weights-profiles-breed.reinitialize-least-accurate.portion 0.5 --mrsort.weights-profiles-breed.target-accuracy 1.0\n", "kind: ncs-classification-model\n", "format_version: 1\n", "accepted_values:\n", diff --git a/lincs/__init__.py b/lincs/__init__.py index 2d35f782..091f94fb 100644 --- a/lincs/__init__.py +++ b/lincs/__init__.py @@ -1,6 +1,6 @@ # Copyright 2023 Vincent Jacques -__version__ = "0.10.4-dev" +__version__ = "0.11.0" # I/O from liblincs import DataValidationException

    Criterion category_correlation

    Criterion preference_direction

    Accepted values kind

    Accepted values attributes

    growing

    increasing

    thresholds

    thresholds