diff options
| author | Ethan Werner <mail@ethanwerner.com> | 2024-04-17 16:00:00 -0700 |
|---|---|---|
| committer | Ethan Werner <mail@ethanwerner.com> | 2026-06-08 16:01:49 +0400 |
| commit | f6a144987cc403de8ad6bddd055f756120f8d405 (patch) | |
| tree | 3b4cfc8c76db7adba8504dc0e079466e2a0d336c /README.md | |
archival commit
Diffstat (limited to 'README.md')
| -rwxr-xr-x | README.md | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100755 index 0000000..a3f2732 --- /dev/null +++ b/README.md @@ -0,0 +1,86 @@ +# C Header Libraries + +The following libraries are *highly* experimental and should be treated as such. The intent of this repository is archival in nature. While I do use many of the following libraries in my projects, they are not production ready. + +Please feel free to create issues, and pull requests are always welcome. + +## ann.h - Artifical Neural Network + +This library provides an implementation of a fully connected, artifical neural network with backpropagation. The entirety of the ANN is stored in a single memory allocation, allowing for ease in persisting models and training via external methods. + +### Activation Functions + +The activation function for hidden layers can be chosen independently from that used for the output layer. + +- Identity +- Binary +- Sigmoid +- RELU +- ELU +- LRELU +- Tanh + +## bin.h - Flat File Block Storage + +This library is an experiment in storing ordered numerical data as binary "flat files". The contained data must be of a fixed block size. The primary goal of the library is to provide a simple method of persisting and caching data that is time-series in nature. The resulting files should be short lived. + +### Format + +The file header contains two 64 bit unsigned integers, block count and block size. The rest of the file contains the block data. + +Each block must possess a numerical key/index as the first element. Prior to using the library, a ```typedef [numerical_type] bin_key_t``` must be declared in the implementation file. + +**Operations:** read, write, insert, append, search, and fuzzy search + +This is a naive library, and as such, does not provide input validation. If data is placed out of order, *there it will remain.* + +## escape.h - ANSI Escape Codes + +This library provides utility functions/macros for an assortment of ANSI escape codes. + +## flat.h - Directory Traversal + +This library provides a simple wrapper for traversing POSIX file systems. The intention for this library is to be used alongside bin.h, for the purpose of traversing hierarchial directory structures. + +## genetic.h - Genetic Algorithm + +An implementation of a genetic algorithm. The library exposes a single function for creating a new generation of individuals. The function is "generic", meaning that the respective operations for crossover, mutation, and fitness are passed as as function pointers. + +### Algorithm Overview + +**1. Crossover** + +- Determine the selection cutoff for the population. +- Replace all unfit individuals by preforming a crossover operation with two randomly selected fit indivuals. + +**2. Mutation** + +- Determine the number of mutation operations, and perform those on a randomly selected individual. + +**3. Fitness** + +- Sort the population by descending fitness, in preparation for the next generation. + +## pool.h - Memory Pool + +A free-list based memory pool. The pool has a fixed size after allocation. + +**Note:** The size of a block must be greater than or equal to ```sizeof(void *)``` + +## stack.h - Stack Implementation + +A stack implementation to be used with pushdown.h + +**Note:** A pop operation on an empty stack will return 0/NULL. + +## pushdown.h - A Pushdown/Stack Automata + +This file provides an implementation of a pushdown/stack automata. + +## ufo.h - Universal Functions Originator + + An implementation of the symbolic regression technique known as a Universal Functions Originator. The originating paper can be found [here](https://doi.org/10.1016/j.asoc.2020.106417). + +## uri.h - URI Builder + +A simple, and likely incomplete, implementation of a "builder" pattern to generate URIs as defined by [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). The URIs are stored interally as separate blocks, enabling sequential URIs to be generated with ease. |