Coder Social home page Coder Social logo

ttarkowski / quile Goto Github PK

View Code? Open in Web Editor NEW
11.0 1.0 2.0 1.09 MB

C++ genetic algorithms scientific library

License: MIT License

C++ 95.05% TeX 4.95%
genetic-algorithm cplusplus-20 header-only library cpp cpp-lib cpp-libraries cpp-library cpp20 cpp20-lib cpp20-library evolutionary-algorithm evolutionary-algorithms evolutionary-computation genetic-algorithms header-only-library

quile's Introduction

Quilë  is  a  C++20  header-only general  purpose  genetic  algorithms
library  with  no  external  dependencies  supporting   floating-point,
integer, binary and permutation  representations. It is released under
the terms of the MIT License (please see LICENSE file).

The name  of this library  origins from fictional  language Neo-Quenya
and means “color”.

This software strives to be minimal.

List of contents

  doc/          Documentation.
    examples/     Short examples of the library features use.

  examples/     Examples.
    benchmark/    Benchmark programs and benchmark results.
    common/       Common files.
    evenstar/     Crystal structure prediction of nanowires.
    example_1/    Floating-point representation example.
    example_2/    Permutation representation example.
    mithril/      Crystal structure prediction of nanotubes.

  logo/         Logo artwork.
  paper/        Paper to The Journal of Open Source Software.
  quile/        The Quilë library itself.
  tutorial/     Tutorial.

Installation

  The library  is header-only,  therefore  installation  on the user's
  system  is done  by  copying  the library  source code.   In case of
  GNU/Linux operating system  it can be achieved by invoking following
  command in terminal in some directory,  e.g. in  /home/${USER}/repos
  directory:

    git clone https://github.com/ttarkowski/quile.git

  Please see the tutorial for more details.

  The latest stable release is v1.0.0 available for download at:

    https://github.com/ttarkowski/quile/releases/tag/v1.0.0

  and described in following paper:

    Tomasz Tarkowski, Quilë: C++ genetic algorithms scientific library,
    Journal  of  Open  Source  Software,  8 (82),  4902  (2023).   doi:
    10.21105/joss.04902

List of dependencies

  The library  does not  depend  on any other software.  The user only
  need  C++  compiler  supporting  C++20 standard of  the language  to
  compile programs  written with use of  the library.  The software is
  known to work with both GCC and Clang compilers   (the  library  was
  tested on GCC 10.2.1 and Clang 13.0.1).

Compilation

  To compile programs written with use of the library,  please use the
  following command:

    g++ -std=c++20 -DNDEBUG -O3 -Wall -Wextra -pedantic \
      -I/home/${USER}/repos/quile/ -pthread your_program.cc

  or similar. Please see documentation and tutorial for more details.

Documentation

  Documentation for the library  can be generated from the source code
  with use of  the Doxygen  tool.  Please  see  the tutorial for  more
  details.

  Autogenerated  library  documentation  for  v1.0.0  is  available at
  https://doi.org/10.5281/zenodo.7603809 .

Tutorial

  If you need an easy introduction to the library, please see tutorial/
  tutorial.txt file.

Support

  If you need support, please visit:

    https://github.com/ttarkowski/quile/discussions

  and ask a question there.

Reporting issues or problems

  If you find a bug in the library, please visit:

    https://github.com/ttarkowski/quile/issues

  and create an issue.

Contributing to the software & Feature requests

  The Quilë library does not support  code contributions.  However, if
  you need some feature to be implemented in code, please visit:

    https://github.com/ttarkowski/quile/discussions

  and describe your  feature request.  However,  please note that your
  request  might be declined  or  permanently unresolved  due  to many
  reasons———including the facts that the library strives to be minimal
  and is intentionally developed as an one-person project.

Test suite

  Test suite in form of the short examples of the library features use
  is located in doc/examples/ directory. The Makefile for GCC compiler
  is provided, so tests execution can be performed with make command.

Code statistics

  * https://github.com/ttarkowski/quile/pulse
  * https://www.openhub.net/p/quile

                                 * * *

This work  is a result of  the project funded  by the National Science
Centre  of Poland   (Twardowskiego 16,   PL-30312 Kraków,       Poland,
http://www.ncn.gov.pl/) under the grant number UMO-2016/23/B/ST3/03575.

quile's People

Contributors

danielskatz avatar ttarkowski avatar vissarion avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

quile's Issues

[JOSS Review] Reproducibility and functionality

Dear author,

Generally speaking, the library works as described in the readme file of the repo, and the examples can be set up by following the instruction. However, there are minor fixes that can improve the quality of the submission:

  • gnuplot is needed to run example1 and generate the output. The instruction for building/running the example can be briefly mentioned in a readme file (similar to mentioning the requirement of BGL for the mithril example). The same thing applies to example 2.
  • The mithril example compiles and runs, but there is no output written to the file evolution.dat after 15 minutes. Maybe you need to mention any estimation of the time needed.
  • The evanstar example is difficult to evaluate. I think some sample output showing the results the user will get in the end can help to understand what this example tries to do (like the ones presented for the benchmark examples).

P.S. This issue is related to openjournals/joss-reviews#4902

[JOSS Review] Summary and statement of need in the paper

Dear author,

The paper is written well, but some minor things can be improved.

  • The JOSS guidelines require the summary to be “a clear description of the high-level functionality and purpose of the software for a diverse, non-specialist audience”. The current summary is not appropriate for non-specialist audiences and is a bit technical. You may consider moving the functionality and theory to another section and adding a more high-level introduction to GA and the developed library.
  • “The software is therefore well suited for optimization tasks with computationally expensive fitness functions, where computation time is of the order of magnitude of seconds or more, like ab initio calculations in condensed matter physics." I wonder if there is any correlation between an expensive computation and the order of magnitude of the simulation time in computational sciences. I think this sentence needs a revision since any type of simulation (like a finite element simulation) can be expensive, making the fitness function an expensive expression to evaluate.
  • For the shown example usages, it can be beneficial to mention explicitly that the figures can be reproduced by running example 1 and example 2. You also need to specify how example 2 should be run to produce the results presented in figure 2 (which may need a script on the repo to reproduce this figure).
  • I think it is beneficial if you mention the limitations of the library briefly.

P.S. This issue is related to openjournals/joss-reviews#4902

[JOSS Review] Tests

Dear author,

The library has a set of small test cases with a Makefile intended to build and run these small test units. However, at the end of this process, it’s not clear whether the test is successful or not. As an improvement, I suggest that it reports to the user if each test passes or fails.

P.S. This issue is related to openjournals/joss-reviews#4902

[JOSS Review] Repository references in paper

There are many references in the JOSS paper the refer to the main branch of the code repository e.g. https://github.com/ttarkowski/quile/blob/main/tutorial/tutorial.txt and https://github.com/ttarkowski/quile/blob/main/README Since the main branch could be changed after the publication of the paper that could potentially create broken links. I think it would be better to create a tagged release of the code in github (the version of that release will be referred in the paper anyways) and create (permanent) links to files of that release.

[JOSS Review] publications and projects using the software

In this section of the paper there is a mention in a search project in computational materials science (in ack the grant number is referred UMO-2016/23/B/ST3/03575) It would have been better to provide a link to that grant because it is not easy accessible through http://www.ncn.gov.pl/

Also regarding the sentence "PhD thesis (to be published on-line)", could you be more specific i.e. what is the title of the thesis, the author's name and the university. It is better to skip the note "to be published on-line" and instead create a bibliographic reference and cite that reference in the text.

[JOSS Review] Documentation

Dear author,

The compiler requirement is elaborated in the tutorial file, but not enough information is provided in the readme file as the main documentation of the code. It took me some time to find out that I need GCC 10.2.1 to correctly build the examples. I first started with GCC 8 (with support for C++ 20 as described by the readme file), and then faced a couple of issues (like the #include <concepts> statement).

So, I suggest that you elaborate on the compiler-related things by bringing the relevant stuff from the tutorial file up to the readme file.

P.S. This issue is related to openjournals/joss-reviews#4902

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.