docs/changelog

Source   Edit  

Navigation: nimCSO (core) | Changelog | nimcso/bitArrayAutoconfigured

v0.6.5 (Sep 24st, 2024)

Major Changes

  • Numerous improvements of the associated manuscript and tutorials as a part of the JOSS review process. These include some more general-audience analogies of underlying applications and should be more straightforward to grasp. E.g.,

`nimcso`'s target application problems also exists in everyday contexts, such as study of cooking ingredients, which interact in various recipes, giving rise to questions like "Given 100 spices at the supermarket, which 20, 30, or 40 should I stock in my pantry to maximize the number of unique dishes I can spice according to recipe?". Critically, this is not as simple as frequency-based selection because, e.g., removing less common nutmeg and cinnamon from your shopping list will prevent many recipes with the frequent vanilla, but won't affect those using black pepper.

  • Improved testing pipeline, including version matrix on Linux from 1.6.x to the current stable version of nim.

Minor Changes

  • Improved documentation, including installation instructions and contribution guidelines.
  • Updated benchmarking results against better-optimized Python implementations.
  • Pre-commit checks in .pre-commit-config.yamll for improved consistency.

New Contributors

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.4...v0.6.5

v0.6.4 (Mar 4st, 2024)

Minor Changes:

  • Paper finalized for the JOSS submission.
  • Automated changelog generation for the documentation page based on the GitHub releases.
  • General documentation improvements.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.3...v0.6.4

v0.6.3 (Mar 3st, 2024)

Major Changes:

  • Added quickstart.ipynb notebook explaining basics of usage, result interpretation, and some quick discussion of real results.
  • Added new --singleSolution/-ss routine for easy manual evaluation a single solution based on the elements provided as arguments after the flag. It can be neatly stacked on itself like:

    ./nimcso -ss Ta W Hf Si  -ss V W Hf Si  --singleSolution Ta V

  • Finalized the documentation and README

Minor Changes:

  • Improved printouts of several routines, including geneticSearch and mostCommon.
  • Added ability to skip usage of Arraymancer if needed, with a simple -d:noarraymancer flag.
  • Removed the --development/-d flags deprecated since v0.4.0.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.2...v0.6.3

v0.6.2 (Mar 1st, 2024)

Major Changes:

  • Complete overhaul of the core documentation structure and content, in preparation for releasing it soon. Also, propagated to README.
  • Added examples directory with a QuickStart guide.
  • Added Codespaces environment definition through Dockerfile and devcontainer.json, enabling one-click ready runtime with all dependencies installed. ![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)

Minor Changes:

  • Navigation improvements in the documentation.
  • Minor updates to the LICENSE, dotfiles, and other support files.

New Contributors

  • @zikuiliu made his first contribution (0b48b360181e3f2dd8a04908a1d4c340bef778ab) by revising the manuscript `paper.md`
  • @dovahkiin0022 made his first contribution (f018e2f31275cf4d5c0a5f16f0ce61beccde8204) by revising the manuscript `paper.md`, reviewing the code, and polishing details in the documentation
  • @lukeamyers made his first contribution (47f20d6f6a298b213f6bea191450a8dd6f6e5d53) by fixing a typo in the README

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.1...v0.6.2

v0.6.1 (Feb 29st, 2024)

Major Changes

  • Manuscript draft completed!
  • Change alloyList to dataList and alloyN to dataN to be more general.

Minor Changes:

  • Improved terminal printouts.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.0...v0.6.1

v0.6.0 (Feb 27st, 2024)

Major Changes:

  • Finalized implementation of bruteForceInt workflow based on representing solutions as (compile-time optimized) fixed length array of integers (uint64). This sacrifices extensibility, limits the number of elements to 64, but is really high performance (400 times faster than native Python and 50 times faster than NumPy) brute force algorithm for finding the optimal solution for the problem of which N elements to remove from dataset to loose the least data.
  • All (1) supporting functions like preventedData, (2) CLI interface, (3) testing routine, and (4) benchmarking were implemented for the above.

Minor Changes:

  • Additional polishing of the API documentation all around. Now, everything has both pretty good what and why.
  • Improved testing workflow and integration through the tests/runAll script.
  • Improved triggers for GitHub Actions.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.5.1...v0.6.0

v0.5.1 (Feb 27st, 2024)

Major Changes:

  • Benchmarking directory was added comparing nimCSO, pythonNative, and pythonNumPy in terms of speed and memory usage. Documentation explaining usage and expected results has been added alongside it.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.5.0...v0.5.1

v0.5.0 (Feb 27st, 2024)

Major Changes

  • Completed the documentation of all procedures across both the core nimCSO library and our custom bitArrayAutoconfigured.
  • The geneticSearch routine now exposes several settings allowing for customizing it to problems through scripting. These are: initialSolutionsN: Natural = 100, searchWidth: Natural = 100, maxIterations: Natural = 1000, minIterations: Natural = 10, and mutationsN: Natural = 1.
  • Improved terminal printouts generated by all routines, for clean and easy visualization. <img width="300" alt="Screenshot 2024-02-25 at 22 52 08" src="https://github.com/amkrajewski/nimCSO/assets/54290107/23b987c7-b2fa-448e-8947-9ce44854590e">
  • Added testing suites for algorithmSearch and leastPreventing. Improved past testing suites too.

Minor Changes:

  • Created and added helper figures for mutate and crosslink functions.
  • Added convenience script runAll for running all tests with a quick:

    nim c -r -f -d:release --threads:off -d:configPath=tests/config.yaml tests/runAll

  • Numerous general performance and style improvements around the codebase.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.4.1...v0.5.0

v0.4.1 (Feb 24st, 2024)

Major Changes:

Minor Changes:

  • Comment and organization improvements
  • Testing, documentation, and pdf-generating workflows were generally improved and use updated versions of actions.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.4.0...v0.4.1

v0.4.0 (Feb 24st, 2024)

Major Changes:

  • Breaking changes to the software structure:
    • Modified directory structure to better match nimble expectations.
    • Renamed development procedure name to the algorithmSearch former naming scheme, but retaining the command line flags for now.
  • Added new top-level routines leastPreventing and mostCommon, which are pretty self-explanatory. They produce equivalent results in the opposite order.
  • Added tests for runtime testing and correctness of the brute-force approach against a reference.
  • Automated testing across Linux, Windows, MacOS on Intel, and ARM MacOS on M1.
  • Several new helper functions:
    • Added a function presentInData for finding the number of times elemental solution occurred in the database, based on either bit or bool arrays (pBAs: seq[BitArray] | seq[seq[bool]]).
    • Added a helper function saveResults for persisting search results to CSV from seq[ElSolution].
    • Added a helper function saveFilteredDataset to save dataset after it has been filtered based on the config file. Default is results.csv.
    • Implemented additional newElSolution for creating solutions from symbol string sequences.
  • Added output (of seq[ElSolution] type) to search strategies.

Minor Changes:

  • Added verbose option in several places to suppress printouts.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.3.1...v0.4.0

v0.3.1 (Oct 23st, 2023)

Major Changes:

  • Custom configuration file can now be passed at compile time by defining (-d) the configPath other than the default config.yaml. For instance, to run a genetic algorithm search over RHEAs
    nim c -r -d:configPath=config_rhea.yaml -d:release --passC:-flto --passL:-flto  nimcso/nimcso -gs

Minor Changes:

  • Added config_rhea.yaml problem configuration file based on Senkov 2018 RHEA review paper.
  • Documentation is now autogenerated with GitHub Actions

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.3.0...v0.3.1

v0.3.0 (Oct 13st, 2023)

Major Changes:

  • Finished implementing the Genetic Search Method available under --geneticSearch and -gs flags, and in the process, implemented associated mutate and crossover procedures. The implementation may seem unusual because the total number of removed (set) elements had to be constant.

Minor Changes:

  • Polished the Brute Force method
  • Some helper functions.

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.2.1...v0.3.0

v0.2.1 (Oct 13st, 2023)

Major Changes:

  • Added input sanitization (in preparation for releasing nimcso into the wild), where alloys with elements not present in the configuration (read at compile time) are omitted from the analysis
  • Major reorganization of code routines for clarity
  • Added Brute Force Method as an option under --bruteForce and -bf flags.

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.2.0...v0.2.1

v0.2.0 (Oct 11st, 2023)

Major Changes:

  • All (already heavily modified) bitty BitArray code has moved to inside this project and dependency has been removed.
  • Major speed increase thanks to compile time optimizations based on the config.yaml in both the nimcso and in (now called) bitArrayAutoconfigured. The array of considered elements is used to determine, e.g., the memory length of the BitArray type.

Minor Changes:

  • Style improvements.

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.1.4...v0.2.0

Benchmarking results per 1 step (Apple M2 MAX 32GB & nim v2.0.0_1):

Coverage:

v0.1.4 (Oct 6st, 2023)

Major Changes:

  • Major overhaul towards generalizability:
    - Moved the list of considered elements to `config.yaml` and added metadata to it.
    - Renamed default dataset and made presence parsers more generic.
  • Add MIT license.

Minor Changes:

  • Started working on the associated manuscript in the paper directory.

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.1.3...v0.1.4

v0.1.3 (Sep 13st, 2023)

Major Changes:

  • Implemented handling of the literature alloy dataset in the form of Boolean Arrays (seq[seq[bool]] to be precise) rather than BitArray arrays (seq[BitArray]), giving a significant improvement (see notes below) in speed under default compile settings at the cost of higher memory requirements for the calculation (possibly affecting some low-cache machines) but the same for solution graph storage. Dangerous compilation with optimizations gives similar results as before (see below).
  • Improved benchmarking and project structure

Benchmarking results per 1 step (Apple M2 MAX 32GB & nim v2.0.0_1):

Coverage:

  • nim c --run -d:release --threads:on src/nimcso -cb Running coverage benchmark with BitArray representation 1111110000000000000000000000000000000 CPU Time bitty+randomizing 33.7us FeCrNiCoAlTi->1955

    Running coverage benchmark with bool arrays representation (BitArray graph retained) CPU Time bit&boolArrays+randomizing 21.6us FeCrNiCoAlTi->1955

  • nim c --run -d:danger --threads:off --passC:-flto src/nimcso -cb Running coverage benchmark with BitArray representation 1111110000000000000000000000000000000 CPU Time bitty+randomizing 19.3us FeCrNiCoAlTi->1955 Prevented count:1955

    Running coverage benchmark with bool arrays representation (BitArray graph retained) CPU Time bit&boolArrays+randomizing 19.0us FeCrNiCoAlTi->1955

Expansion:

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.1.1...v0.1.2

v0.1.1 (Sep 13st, 2023)

Minor Changes:

  • The code has been made about 20% faster through several minor optimizations in intermediate representations.

v0.1.0 (Sep 11st, 2023)

First version that should be usable by other people! 😃

Though, you probably shouldn't, as it is neither clean nor documented or well-tested yet (but will be soon). It is hard-coded to the composition space of "Fe", "Cr", "Ni", "Co", "Al", "Ti", "Nb", "Cu", "Mo", "Ta", "Zr", "V", "Hf", "W", "Mn", "Si", "Re", "B", "Ru", "C", "Sn", "Mg", "Zn", "Li", "O", "Y", "Pd", "N", "Ca", "Ir", "Sc", "Ge", "Be", "Ag", "Nd", "S", "Ga" or all elements reported from experiments in the ULTERA database from over 500 HEA publications.

If you still want to run it, you simply fill elementLists.txt with one row of element symbols per alloy, like:

Al,Co,Cr,Fe,Ni
Hf,Nb,Ti,V,Zr
Al,Co,Cr,Mo,Ni,Ta,Ti,W
B,Co,Re
...

and then compile-run it with nim like:

nim c --run nimcso -d

or if you want it to be faster (but give less feedback if something goes wrong)

nim c --run -d:release --threads:off nimcso -d

Lastly, you can also benchmark different approaches that are available by considering their speed in checking how many alloys would be prevented if element was removed

nim c --run -d:release --threads:off nimcso -cb

and how fast the solution graph can be expanded

nim c --run -d:release --threads:off nimcso -eb

Good luck!