Compare commits

...

No commits in common. "master" and "gh-pages" have entirely different histories.

45 changed files with 855 additions and 5459 deletions

7
.gitignore vendored
View File

@ -1,7 +0,0 @@
.venv/
modules/__pycache__/
runs/
*.swp
build/
dist/
karoo_gp_kstaats.egg-info/

Binary file not shown.

View File

@ -1,19 +0,0 @@
# Karoo GP License
The MIT License (MIT)
Copyright (c) 2015-2018 Kai Staats (www.kaistaats.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,6 +0,0 @@
recursive-include files *
recursive-include modules *
include *.py
include *.md
include *.txt
include *.pdf

View File

@ -1,37 +0,0 @@
# pip archive creation
HOWTO create and upload an archive to PyPI (pip).
Create accounts on the main PyPI server and the Test PyPI server:
* https://pypi.org/account/register/
* https://test.pypi.org/account/register/
Then run commands like this, changing the username "jebba" to your username.
```
# Install dependencies
python3 -m pip install --user --upgrade setuptools wheel twine
# Remove old build
rm -rf build dist karoo_gp_*.egg-info
# Create Archive
python3 setup.py sdist bdist_wheel
# Upload to Test Archive
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
# Check Test Archive
https://test.pypi.org/project/karoo_gp-jebba
# Install Test Archive
python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps karoo_gp-jebba
# Upload to Main Archive
python3 -m twine upload dist/*
# Install Main Archive
python3 -m pip install karoo_gp-jebba
```

View File

@ -1,44 +0,0 @@
# SpaceCruft Fork
This is a SpaceCruft fork of https://github.com/kstaats/karoo_gp
# Karoo GP
Karoo GP is an evolutionary algorithm, a genetic programming application suite written in Python which supports both
symbolic regression and classification data analysis. It is ready to work with your datasets, is multicore and GPU
enabled by means of the powerful library TensorFlow. The packge includes a Desktop application with an intuitive user
interface, and a Server application which supports fully scripted runs. Output is automatically archived. Batteries
included. No programming required.
For an interesting read on scalar vs vector, and CPU vs GPU performance with Karoo GP:
https://arxiv.org/abs/1708.03157
Be certain to read the User Guide!!!
Learn more at <a href="http://kstaats.github.io/karoo_gp/">kstaats.github.io/karoo_gp/</a> ...
# Debian Install
To install on Debian (Buster, Stable, 10):
```
# Install Dependencies:
sudo apt install python3 python3-pip python3-venv
# Clone repo (choose this one or upstream):
# git clone https://github.com/kstaats/karoo_gp
git clone https://spacecruft.org/spacecruft/karoo_gp
# Setup
cd karoo_gp
python3 -m venv .venv
source .venv/bin/activate
# Install python dependencies
pip3 install wheel
pip3 install numpy==1.16.4 sympy==1.4 tensorflow==1.13.1 scikit-learn==0.21.2
# Run application
python3 karoo_gp.py
```

View File

@ -1,664 +0,0 @@
2019 06/08
Finally! Full Python 3.6 support!!!
And with this update, a substantial number of improvements and modifications. Most are related to the user interface
and associated menu. Namely, the (pause) menu is no longer built upon nested loops, therefore the user does not find
him or herself unable to conduct a clean exit. The code that supports the text-based queries is reduced in its
complexity, and in many cases made more brief. Some re-coloring of the interface text keeps like items in like
color schemes. Simple, and does not improve performance, but looks better, overall.
"Per my prior note (below), I do appreciate your patience and support, and do look forward to your feedback." --kai
2019 05/18
"My apology to the users of Karoo GP for the incredible gap between the most recent and this update. My research and
work have for the past year taken me in other directions. This update marks my return to an active effort in working on
Karoo, and GP applied to a growing research space. I appreciate your patience and understanding." --kai
NOTE: this is the *final* update to the Python 2.7 version of Karoo. All future development will be in Python 3.x.
And now, the updates:
Fixed the Test function to evaluate the Tree selected by the user.
Modified the menu option from 't'est to 'e'valulate from the Pause menu.
Added a user defined (m)in node count, (f)ull set of features, or (b)oth as the gene_pool regulator. For more about
the "full set of features" see 2018 04/19 and the new 'swim' variable.
2018 05/18
Fixed a bug which automically re-engaged the run after selecting a pause menu option if mid generation. Now, it again
requires ENTER before continuing.
2018 05/10
Returned full_path = os.path.realpath(__file__) (approx. line 342) to support bash scripting of automated runs. This
remains commented, but can be readily re-activated (remember to comment the next line down).
2018 04/22
1) Completed the isolation of the user interface from the base_class such that all mid-run parameter configurations and
population summaries are now conducted in menu.pause(), and any associatede executions (Tree validation) are conducted
fully in the base_class.
karoo_gp.py imports karoo_gp_base_class.py
karoo_gp_base_class.py imports karoo_gp_pause.py
The user's initial run configuration is conducted in karoo_gp.py. Those settings are passed into karoo_gp_base_class.py
where they are used to guide the run. At each 'pause' (generation, interactive, or debug display modes; or end of run)
the user is taken into menu.pause where additional queries and configurations are conducted. Those value changes are
returned to the base_class where they are executed. When a run is completed (Server or Desktop), the user is returned
to the original karoo_gp.py for salutations and run termination.
Finally, the Karoo GP Python pasta is no longer spaghetti!
2) Modified the function of 'cont' such that it either continues if you yet have additional generations to go, or
querie the user if gen_id = gen_max and the prior run is done.
3) Replaced 'generation_id' with 'gen_id' and 'generation_max' with 'gen_max'.
4) Conducted a full set of unit tests on every user interface query in menu.pause().
5) Cleaned up the code beneath the user interface (menu.pause), making the while-true loops consistent with those in
karoo_gp_pause.py.
6) Merged 'fx_karoo_continue' into 'fx_karoo_gp' such that a simple while loop maintains an active evolutionary process
until the either the Server script is complete, or the user has terminated the run. This allows for the simple addition
of generations to an existing run. A far better solution than what I had previously coded.
7) Discovered that the loading of seed population_s is far too delicate. Even the slightest change and it fails. I have
disabled the load function for now, until I have time to rebuild it.
8) Please note that all modules are now stored in modules/
2018 04/19
Added a new kind of gene_pool filter (environmental pressure) such that you can select partial or full inclusion of
the operands (features). While not yet incorporated into the user interface (desktop or server), the new 'swim' setting
enables you to build consecutive gene pools that have *only* Trees that include at least one instance of each feature.
This may be helpful for regression problems moreso than classification, as regression tends to fall to a minimum
feature set, depending upon the nature of the solution (fixed or rolling value). I desire to merge tree_depth_min
setting and this new 'swim' into one user defined system that controls the gene_pool.
Discovered 3 more functions that did not include a "Called by: ___" statement. Updated.
Fixed a long-standing issue of total failure if you enter 1 for the total number of generations. This setting, while
it may seem odd, allows Karoo GP to be used to create populations of stochastic multivariate expressions based upon the
given dataset for use in other applications. Simple fix. The population is written to the runs/ directory as with all
other modes of operation, including Play.
2018 04/12c
Updated the User Guide to match the Desktop and Serve merger, and modified a help print statement in the sys args of
the Server function.
2018 04/12b
Created the 'modules/' directory to hold karoo_base_class and in the future, more modules.
2018 04/12a
1) Merged 'Karoo GP Server' and 'Karoo GP Main' into a single 'Karoo GP'. So, just one user script now that provides the
user interface (TUI) or scripting (comnand line). There are now 3 ways to run Karoo:
a) $ run karoo_gp.py
b) $ run karoo_gp.py [path/][dataset.csv]
c) $ run karoo_gp.py -fil [path/][dataset.csv] -[arg] [val] -[arg] [val] ... etc.
Where [arg][val] are the sysargs defined in the body of karoo_gp.py and the User Guide. Both (a) and (b) will auto-
run the Desktop interface, providing a user query for each entry and holding the user within the script until quit;
(c) will skip the user query and go directly into execution, dropping the user back to the command line at the end of
the run (for scripting).
2) Merged the 'menu' ranges into the while loops, directly (to reduce line count).
3) Added the 2**(tree_depth_base +1) - 1 to the tree_depth_min calculation (could have done this a long time ago).
4) Auto-calc the number of trees entered into the Tournament (was previously hard coded to 7 assuming a pop 100).
5) Added [-evr, -evp, -evb, -evc] to the sysargs to support a change in the balance of the genetic operators mid-run.
6) Merged fx_evolve_branch_top_copy with fx_evolve_branch_body_copy as they were alway called sequencially and required
the same input values.
7) Merged fx_evolve_tree_renum into fx_eval_generation as both are used only once, as the former was but 2 lines of code.
8) Finally finished commenting all "Called by: ___" statements in each function header.
I've been productive!
2018 04/01
Two major updates, as follows:
1) I have returned to the basic structure of Karoo GP and worked to make it properly Pythonic. For those of you who
recognised the error in my ways, I appreciate your patience. What I have updated with this v1.1 release does not
improve performance nor stability (already rock solid), rather, it keeps properly trained developers from cringing
when they read my code.
In the prior versions, I used one of the loose functions of Python that allows the initiation of a variable outside of
the base_class. Meaning, I imported the base_class to karoo_gp_main.py and karoo_gp_server.py, called a dozen global
variables by "gp.___" and as such initiated them from the user scripts. Yes, it works. But it caused a certain
individual with whom I worked at the SKA to yell at me and shake her head (and I had just met her a few days prior).
I don't like being yelled at, so I fixed it.
Now, all user configurations are set as local variables and their values are passed to the base_class.
To make thing a bit easier to read and follow, I have renamed and reorganized several functions (methods) as follows:
a) Created a new category for data and archiving, moving/renaming all related functions to fx_data_.
b) Renamed all fx_gen_ to fx_init_ as this is the initial population.
c) Moved the four top-level functions used to construct the next generation of trees into their own fx_nextgen_
category: fx_karoo_reproduce, fx_nextgen_point_mutate, fx_nextgen_branch_mutate, fx_nextgen_crossover
The final breakdown is as follows:
fx_karoo_ Methods to Run Karoo GP
fx_data_ Methods to Load and Archive Data
fx_init_ Methods to Construct the 1st Generation
fx_eval_ Methods to Evaluate a Tree
fx_fitness_ Methods to Train and Test a Tree for Fitness
fx_nextgen_ Methods to Construct the next Generation
fx_evolve_ Methods to Evolve a Population
fx_display_ Methods to Visualize a Tree
That's it! --kai
2018 02/27
Updated the Python library versions and improved some explanation of Operators and Operands in the User Guide.
2017 10/26
An upgrade from Tensorflow 1.1 to 1.3 caused the Classify kernel test to break. Fixed by Iurii by replacing [] with ()
in the 'fx_fitness_eval' method.
2017 10/17
To be consistent with the anticipated Machine Learning vocabulary, replaced the term 'label' with 'pred_labels'
(predicted labels) in the TF graph methods.
2017 08/10
Iurii fixed a minor bug in which the MATCHING function (used only for demonstrations) would not find a match despite
the output being (apprently) correct. This was discovered to be due to the way in which TensorFlow was handling
floating points and precision, as follows:
[ -0.29999995 0.69999981 13.69999981 16.70000076 19.70000076
22.70000076 25.70000076 28.70000076 31.70000076 34.70000076]
[ -0.30000001 0.69999999 13.69999981 16.70000076 19.70000076
22.70000076 25.70000076 28.70000076 31.70000076 34.70000076]
As you can see, the values are close, but not equal and so a "match" was not resolved. Iurii used numpy.allclose.html
as a reference to resolve the situation.
I also modified the autosave to the runs/ directory such that if you are using an external dataset (quite likely), the
new directory (for each run) will be saved as [filename]-[date_time_stamp]/ The idea (thank you Marco) is to help keep
multiple, automated runs organized and more readily, visually inspected by name alone.
2017 07/21
In a rather embarrassing, live demo in which I asked for the audience to create the dataset for Karoo, I discovered a
bug in the MATCH kernel in which a negative value in the dataset would cause that row to be discarded from the fitness
function --FIXED.
I merged the 3 methods fx_fitness_train_classify, fx_fitness_train_regress, fx_fitness_train_match into fx_fitness_eval
in order to reduce the quantity of lines of code and simplify the workflow.
2017 07/03
I am pleased to announce that Karoo GP is now updated to include a full suite of mathematical operators. I thank the
expert code development of Iurii Milovanov. He was instrumental in bringing TensorFlow into Karoo last year, and has
now provided this important improvement.
Iurii has prpared an efficient and elegant solution for the addition of a full range of operators, adding support for
boolean operations (a and b or c), comparison ops (a > b <= c == d) and generally speaking any function available in
TensorFlow, as given here: https://www.tensorflow.org/api_guides/python/math_ops
Now there is a mapping in Karoo GP that connects an expression to the TF function:
OPERATOR EXAMPLE
add a + b
subtract a - b
multiply a * b
divide a / b
pow a ** 2
negative -a
logical_and a and b
logical_or a or b
logical_not not a
equal a == b
not_equal a != b
less a < b
less_equal a <= b
greater a > b
greater_equal a >= 1
abs abs(a)
sign sign(a)
square square(a)
sqrt sqrt(a)
pow pow(a, b)
log log(a)
log1p log1p(a)
cos cos(a)
sin sin(a)
tan tan(a)
acos acos(a)
asin asin(a)
atan atan(a)
Now when Karoo parses an expression like "asin(x + 10)" it first parses and transforms the args "x + 10" and passes
the output to “tf.asin” function. So now Karoo is able to evaluate incredibly complx mathematical expressions.
It is important to refer to karoo_gp/files/templates/operators_list.txt to learn how to enage operators_[KERNEL].csv
In its current form Karoo requires some operators, such as abs, cos, and sin to have a unique formating:
+ sin,2
- sin,2
* sin,2
/ sin,2
In a future version of Karoo, this will be managed automatically by the recursive function which extracts the
expression from a GP Tree.
2017 06/06
A number of changes applied in March and April. My apologies for the delayed updates to github.
A timer is added. This is helpful when conducting comparisons of run times, given various configurations and datasets.
If you go looking for this code, search for 'time.time' in _main.py for the Desktop interface, and in _base_class.py
for the Server interface.
Raised tree_depth_max to 100 in _main in order to essentially remove the tree depth ceiling, allowing for the multi-
generational increase in tree depth. While this re-introduces bloat, it does provide for a greater degree of
experimental freedom. A reminder that the _server has always allowed for tree_depth_max to be set to any level.
Changed the balance of operators (reproduction, mutation, crossover) from a percentage to a fixed quantity in both the
default settings and in the user defined alteration.
The User Guide is updated with some minor adjustments to wording.
I have removed tools/ from Karoo package, as these will be re-launched as their own set of packages and associated
github repository. I am working to give each a proper interface and more broad functionality outside of the
Karoo package. Stay tuned!
Please also note that the variable os.environ (line 28 in _base_class.py) can be set to [0, 1, 2] to trigger 3 levels
of on-screen, TensorFlow run-time error logging. You can experiment with this to determine what is right for you.
The much desired trig operators will be returned to Karoo GP v1.0.4. Log and boolean operators shortly thereafter. I
offer my apology for the delay, as I know this has inhibited some expanded uses of Karoo in the past few months.
2017 02/13
Returned 'cwd = os.getcwd()' to 'cwd = os.path.dirname(full_path)' in fx_karoo_data_load in order to sustain chron
compliance (sorry Marco). Then split end-of-run logging into 2 files: runtime_config.txt and test.txt. Looking to the
future in which the test log, in particular, might be stored in such a way as to be readily parsed by an external
script for automated comparison of multiple runs.
Ideas are welcomed!
2017 02/09
The User Guide has been updated to match the functions of Karoo GP v1.0.1.
2017 02/08
The parameters.txt file now captures the full run-time configuration of both karoo_gp_main.py and karoo_gp_server.py.
This file is written to a unique (datetime stamp) directory in karoo_gp/runs/ at the auto-termination of _server.py
and with the user executed 'q'uit of _main.py.
The final list of best fit evolved Trees and the test of the highest numbered (usually the highest performing) Tree is
also recorded, with the test automatically executed based upon the original kernel designation. This functionality
supports the fully hands-off execution of Karoo GP on a remote server, from a bash or Python script, for parallel or
multiple serial evolutionary runs.
Thank you Marco Cavaglia for guiding the addition of this functionality to Karoo GP!
2017 02/06
Graphics Processing Units (GPU) are now supported with the introduction of the Python library TensorFlow. The end
result is a staggering improvement in performance. With one comparison of a 10,000 data points (rows) x 9 features
(columns) dataset on a 40 core Intel Xeon motherboard versus a 2000 core Nvidia GPU card, the wall time was reduced
from 50 hours to less than 4 minutes. On CPU-only computers, the performance on a single core is as much as 10x
improved due to the vectorisation of the data and application of the C-based TensorFlow maths library.
To install TensorFlow, I recommend visiting https://www.tensorflow.org/get_started/ It is straight forward for Ubuntu,
but unfortunately can be rather challenging with OSX. Have patience. Review the forums. It's worth the effort.
I owe many thanks to the expertise of Iurii Milovanov, a contract developer whom I engaged for this effort. While the
number of lines of Karoo GP modified were initially less than a dozen (replacing the multi-core pprocess calls), I asked
Iurii to also rewrite the test functions. As such, both Training and Testing are now fully GPU enabled. Thank you!
A number of other changes have been integrated, including:
- Karoo GP is now developed against Python 2.7 as provided with Ubuntu Desktop 16.04.1.
- A number of Python methods have been deleted, added, modified and/or renamed. In particular, in the category
'fx_fitness_' If you have built your own code based on the Karoo methods, please review this section carefully.
- The user engaged 'bal'ance function (pause menu) has been rebuilt to anticipate exact quantities instead of
percentages, enabling the user to define precisely how many of each of the four genetic operators will be applied
with the construction of each subsequent population.
- Activation of the 'test' is now conducted with only the letter 't' and the option to engage a specific number of
'c'ores is removed. Therefore, the 't'imer mode is also removed, as this was a means to discover the optimal number
for multi-core processing which is now automated by TensorFlow.
- The libraries 'pprocess' and 'time' are no longer required nor imported.
- The population_* files (.csv) are now written into unique directories created inside of karoo_gp/runs/ with the
launch of each run. A .txt file is also written to each directory which captures the run-time configuration of
Karoo GP. This enables truly scriptable runs of Karoo.
- The Server interface to Karoo GP (karoo_gp_server.py) now terminates completely, kicking back to the command line.
This enables bash or chron launches of multiple sequential or parallel runs, enabling the exploration of multiple
runs with identical configuration, or that of varied configuration parameters.
Finally, Karoo GP is now a 1.0 release. I never know when to transition from beta to real, so please forgive me if I
jumped the gun. But with GPU support and the revised Server script, I have find Karoo GP to be a fully functional,
powerful machine learning tool. I hope you will agree --kai
2016 09/20
Fixed the genetic operator (b)alance function to work with large than 100 trees per population.
Introduced the pause for all runtime modes in the Desktop application, such that the user can apply configurations prior
to the run (eg: change the balance of the genetic operators or the number of engaged cores).
2016 09/19b
After another 2 hours of trouble shooting, I learned that sympy.subs throws the 'zoo' error for a divide-by-zero if
working with integers--and stalls (as I witnessed last year when developing Karoo), but if throws 'inf' or '-inf' if
working with floats and continues to process unencumbered. This means the 'zoo' trap has not been used for over a year.
It is now removed from the method fx_eval_subs().
2016 09/19
All experiments with lambdify are on hold as it is throwing 'divide by zero' errors when no 0 exists in the data.
In the evaluation of this issue, I returned to the means by which I deal with 'divide by zero', independent of the
library used to process the trees. Originally, 'result' was replaced by the value 1. But a colleague suggested that I
might be tossing genetic material of value to future generations. So, now a tree which produces a 'divide by zero'
error ('zoo' in .subs) is retained, but given a fitness score of 0.
Method fx_eval_subs() is updated to assign an 'error' tag to any tree which exhibits 'divide by zero' behaviour.
Method fx_fitness_eval() is updated to bypass processing of a tree which has been tagged with an 'error' tag.
Methods fx_test_classify(), fx_test_regress(), and fx_test_match() are each updated to send the 'tree_id' to
fx_eval_subs() as is now required.
For now, it is not recommended that you use the lambdify function in fx_eval_subs(), unless you know how to fix it.
2016 09/16
With the 09/14 update I failed to upload the new coefficients.csv file to the files/ directory. While not yet engaged,
this will be the means by which the user can define the constants desired for the Karoo GP run. If you had run Karoo GP
v0.9.2.0 in the past 24 hours without this file, it would have complained. My apology.
Also, a bit of a road map for the 2nd half of 2016, into 2017
- validate the new (faster) sympy.lambdify and fully replace the current (slower) sympy.subs
- replace the row-by-row dictionaries with vectors for what should be a significant performance increase
- complete the introduction of constants in a manner more well defined than is currently supported
- investigate replacing pprocess with the multi-core library
- introduce Theano or Tensor Flow for GPU support
I welcome any assistance with these, if anyone has experience and time.
2016 09/14 - version 0.9.2.0
In karoo_gp_base_class.py
- Removed redundant lines in the method 'fx_karoo_data_load()'
- Added support for the Sympy 'lambdify' function in 'fx_karoo_data_load' (see explanation below)
- Added a draft means of catching divide-by-zero errors in the new 'lambdify' function
- Discovered the prior 'fx_eval_subs' uncorrectly applied a value of 1 to the variable 'result' as a means to
replace the 'zoo' function for divide by zero errors. However, this could inadvertently undermine the success of
Classification and Regression runs. My apology for not catching this sooner.
"While attending the CHEAPR 2016 workshop hosted by the Center for Cosmology and Astro-Particle Physics, The Ohio State
University, Michael Zevin of Northwestern University proposed that Karoo GP *should* be able to process trees far faster
than what we were seeing. I looked into the Sympy functions I was at that time using. Indeed, '.subs' is noted as easy
to use, but terribly slow as it relies upon an internal, Python mathematical library. I therefore replaced '.subs' with
'.lambdify' which calls upon the C-based Numpy maths library. It is slated to be 500x faster than '.subs', but I am
seeing only a 2x performance increase. Clearly, there are yet other barriers to remove.
In the new 'fx_eval_subs' method you will find both sympy.subs (active) and sympy.lambdify. While preliminary tests
worked well, I witnessed an erratic outcome which I yet need to reproduce and investigate. Feel free to comment the
.subs and uncomment the .lambdify sections and take it for a spin.
I believe there are 2 more steps to increase performance: removing the dictionaries which contain each row, such that
Karoo is working directly with the Numpy array again, and then processing the array as a vector instead. But this will
require substantial recoding.
I'll keep you informed ..." --kai
2016 08/08 - version 0.9.1.9
In karoo_gp_base_class.py
- Created a new method 'fx_eval_subs()' which conducts the SymPy subs function for both train and test data.
- Consolidated duplicate SymPy sub calls in both Train and Test methods, at Erik H. suggestion --thank you!
- Consolidated duplicate lines into single lines in both Train and Test methods.
- Fixed bug in which Ramped 50/50 trees would not print in Play mode; removed Ramped 50/50 option from Play mode as
it does not make sense for a single Tree
2016 07/24 - version 0.9.1.8b
Sorry. Switched all references to "LOGIC" back to "BOOLEAN". Don't ask.
2016 07/18 - version 0.9.1.8
In karoo_gp_base_class.py
- removed some programmer's comments from experiments resolved
- modified the screen output for the multi-class classifier such that it is more clear that p (a) is actually
predicted (actual) with the addition of the tag "label"
2016 07/15 - version 0.9.1.7
In karoo_gp_base_class.py
- Ramped Half/Half, as originally designed by John Koza is now implemented!
- this offers a greater diversity of trees in the initial population
- added *** Crossover *** to this method for debug display mode
2016 07/14 - version 0.9.1.6b
In karoo_gp_base_class.py
- fixed 'debug' display output for branch mutation
- fixed a few bugs in branch mutation that reduced evolutionary efficiency
- updated all ERROR messages to be uniform in output
- added (y/n) to "Are you certain you want to quit?" message --thanks Hunter!
In karoo_gp_main.py
- reset default evolutionary balance to .1/.1/.1/.7
2016 07/13 - version 0.9.1.6
In karoo_gp_base_class.py
- enabled auto counting of labels (right column) in loaded data (data_y)
- re-ordered presentation of screen modes, in order of decreasing feedback [i, g, m, s]
- added argparse to further enhance karoo_gp_server.py as a scriptable tool --FINALLY! :)
In karoo_gp_main.py
- removed user query for number of class labels
- re-ordered presentation of screen modes, in order of decreasing feedback [i, g, m, s]
In karoo_go_server.py
- re-ordered presentation of screen modes, in order of decreasing feedback [i, g, m, s]
- argparse to further enhance karoo_gp_server.py as a scriptable tool
2016 07/11 - version 0.9.1.5
In karoo_gp_base_class.py
- renamed kernel (fitness function) type from 'a' to 'r' for regression
- renamed all associated variable and methods to match switch from 'abs_value' to 'regression'
- reorganised validation methods to match order of fitness functions
- added [other] place holder to validation methods
In karoo_gp_main.py
- renamed kernel (fitness function) type from 'a' to 'r' for regression
- adjusted upper boundary for qty of generations from 1000 to 100
In karoo_go_server.py
- renamed kernel (fitness function) type from 'a' to 'r' for regression
In files/ data_ABS.csv and functions_ABS.csv were rename data_REGRESS.csv and functions_REGRESS.csv accordingly.
2016 07/10-11 - version 0.9.1.4
In karoo_gp_base_class.py
- renamed variable 'tree_depth_max' to 'tree_depth_base'
- renamed variable 'tree_depth_adj' to 'tree_depth_max'
- renamed variable 'gp.pop_tree_depth_max' to 'gp.pop_tree_depth_base'
- enabled 2 children to be produced by each Crossover function
- extensive testing of Crossover in debug to validate process
- reduced # of crossover functions per run by 1/2
- improved on-screen output for all 4 genetic operators
- removed not-in-use 'accuracy' test
- added 'Arguments required:' to each method notes
- edited a number of method notes
In karoo_gp_main.py
- renamed variables (according to karoo_gp_base_class.py)
In karoo_go_server.py
- renamed variables (according to karoo_gp_base_class.py)
2016 07/08-09 - version 0.9.1.3
In karoo_gp_base_class.py
- added CTRL-C catch to the (pause) menu; removes potential to accidentally kill a run when attempting to
copy/paste an on-screen function to research notes (use the mouse instead).
- rebuilt each (pause) menu function for improved exception handling
- added the new gp.tree_depth_adj user defined variable to branch mutation and crossover, enabling Trees to grow
beyond their original size which adds opportunity for more complex solutions, as well as the unavoidable bloat
- reduced complexity of a few lines in both branch mutation and crossover methods
- tested, tested, tested
In karoo_gp_main.py
- added CTRL-C catch to the at-launch user menu.
- renamed the method gp.fx_karoo_crossover_reproduction() to gp.fx_karoo_crossover()
- added user input for the new global variable gp.tree_depth_adj
In karoo_go_server.py
- added new gp.tree_depth_adj variable
2016 07/07 - version 0.9.1.2
In preparation for public launch of Karoo GP, a number of updates are complete or underway.
The Quick Start Tutorial is being fully revised. A number of corrections were made, but more importantly, all new
content has been added relevant to preparation of datasets and the use of the Karoo GP Tools accordingly. The genetic
operators descriptions now feature visuals and revised descriptions, as to many other sections.
In the karoo_gp/tools/ directory, all scripts have undergone updates, 2 of which now offer automated scaling and a
user interface that in the original versions were not present, as follows:
karoo_data_sort.py (formerly karoo_features_sort.py)
This script now engages the user with a query for the number of class labels and the number of data points (rows)
for the new, randomly generated subset of the parent dataset. This script is designed to be used prior to
karoo_normalise.py.
karoo_normalise.py
This script now auto-scales to any number of columns and rows (within the limit of your computer's capability),
and features a text-based user interface. This script is designed to be used following karoo_data_sort.py.
karoo_multi-classifier.py
This script functions as before, but with a minor bug fixed in which the final class was mislabeled.
karoo_iris_plot.py
This script functions as before, but with improved in-script documentation and cleaner code.
In development now are a number of updates and improvements to the base_class such that Karoo GP will more readily
conform to the GP standards, as follows:
1) Karoo GP currently produces only 1 offspring for each parent, where it should produce 2.
2) The tree generation method 'Ramped Half/Half', in its current state, produces a 50/50 split of Full and Grow
methods, not a graduated ramp through all depths.
3) Karoo GP currently engages a bloat inhibitor, that is, an upper limit on tree depth which is maintained through
all modes of mutation and crossover. This will become a user defined setting such that it can be adjusted, enabling
growth of trees beyond the original, user defined limit.
4) Karoo GP will be made to launch as a single, command-line function with all required parameters included, SciKit
Learn style.
2015 12/23 - version 0.9.1.1
It was discovered that when loading external datasets, Karoo was yet extracting variables (terminals) from the data in
the files/ directory, according to the selected kernel.
This is fixed.
2015 11/04 - version 0.9.1.0
Initial development of Karoo GP began in February 2015, on a Python-based evolutionary algorithm for an MSc research
project at the University of Cape Town (UCT) / African Institute for Mathematical Sciences (AIMS) and the Square
Kilometer Array (SKA). The myriad debug statements evolved into the user interface while the classic Machine Learning
test cases became the built-in example runs.
In the course of six months development, the code base grew to become a flexible, easy-to-use platform for Genetic
Programming.
Karoo GP has been thoroughly tested on a 40-core server at the Square Kilometer Array offices in Cape Town, South
Africa, where for one month it chewed through 10,000 rows of data for up to 50 hours without incident. It is proved
as a fully functional, multi-core workhorse.
With all development to date conducted locally, this version 0.9 marks the first release to github.
This initial github release is private, shared with select collaborators only. Please do not distribute any part of
the code until it is made public.
Kai Staats
www.kaistaats.com/research/
www.kaistaats.com/film/

View File

View File

@ -1,69 +0,0 @@
1. Title: Iris Plants Database
Updated Sept 21 by C.Blake - Added discrepency information
2. Sources:
(a) Creator: R.A. Fisher
(b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
(c) Date: July, 1988
3. Past Usage:
- Publications: too many to mention!!! Here are a few.
1. Fisher,R.A. "The use of multiple measurements in taxonomic problems"
Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions
to Mathematical Statistics" (John Wiley, NY, 1950).
2. Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis.
(Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218.
3. Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System
Structure and Classification Rule for Recognition in Partially Exposed
Environments". IEEE Transactions on Pattern Analysis and Machine
Intelligence, Vol. PAMI-2, No. 1, 67-71.
-- Results:
-- very low misclassification rates (0% for the setosa class)
4. Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule". IEEE
Transactions on Information Theory, May 1972, 431-433.
-- Results:
-- very low misclassification rates again
5. See also: 1988 MLC Proceedings, 54-64. Cheeseman et al's AUTOCLASS II
conceptual clustering system finds 3 classes in the data.
4. Relevant Information:
--- This is perhaps the best known database to be found in the pattern
recognition literature. Fisher's paper is a classic in the field
and is referenced frequently to this day. (See Duda & Hart, for
example.) The data set contains 3 classes of 50 instances each,
where each class refers to a type of iris plant. One class is
linearly separable from the other 2; the latter are NOT linearly
separable from each other.
--- Predicted attribute: class of iris plant.
--- This is an exceedingly simple domain.
--- This data differs from the data presented in Fishers article
(identified by Steve Chadwick, spchadwick@espeedaz.net )
The 35th sample should be: 4.9,3.1,1.5,0.2,"Iris-setosa"
where the error is in the fourth feature.
The 38th sample: 4.9,3.6,1.4,0.1,"Iris-setosa"
where the errors are in the second and third features.
5. Number of Instances: 150 (50 in each of three classes)
6. Number of Attributes: 4 numeric, predictive attributes and the class
7. Attribute Information:
1. sepal length in cm
2. sepal width in cm
3. petal length in cm
4. petal width in cm
5. class:
-- Iris Setosa
-- Iris Versicolour
-- Iris Virginica
8. Missing Attribute Values: None
Summary Statistics:
Min Max Mean SD Class Correlation
sepal length: 4.3 7.9 5.84 0.83 0.7826
sepal width: 2.0 4.4 3.05 0.43 -0.4194
petal length: 1.0 6.9 3.76 1.76 0.9490 (high!)
petal width: 0.1 2.5 1.20 0.76 0.9565 (high!)
9. Class Distribution: 33.3% for each of 3 classes.

View File

@ -1,101 +0,0 @@
a,b,c,s
5.1,3.5,1.4,0
4.9,3,1.4,0
4.7,3.2,1.3,0
4.6,3.1,1.5,0
5,3.6,1.4,0
5.4,3.9,1.7,0
4.6,3.4,1.4,0
5,3.4,1.5,0
4.4,2.9,1.4,0
4.9,3.1,1.5,0
5.4,3.7,1.5,0
4.8,3.4,1.6,0
4.8,3,1.4,0
4.3,3,1.1,0
5.8,4,1.2,0
5.7,4.4,1.5,0
5.4,3.9,1.3,0
5.1,3.5,1.4,0
5.7,3.8,1.7,0
5.1,3.8,1.5,0
5.4,3.4,1.7,0
5.1,3.7,1.5,0
4.6,3.6,1,0
5.1,3.3,1.7,0
4.8,3.4,1.9,0
5,3,1.6,0
5,3.4,1.6,0
5.2,3.5,1.5,0
5.2,3.4,1.4,0
4.7,3.2,1.6,0
4.8,3.1,1.6,0
5.4,3.4,1.5,0
5.2,4.1,1.5,0
5.5,4.2,1.4,0
4.9,3.1,1.5,0
5,3.2,1.2,0
5.5,3.5,1.3,0
4.9,3.6,1.4,0
4.4,3,1.3,0
5.1,3.4,1.5,0
5,3.5,1.3,0
4.5,2.3,1.3,0
4.4,3.2,1.3,0
5,3.5,1.6,0
5.1,3.8,1.9,0
4.8,3,1.4,0
5.1,3.8,1.6,0
4.6,3.2,1.4,0
5.3,3.7,1.5,0
5,3.3,1.4,0
7,3.2,4.7,1
6.4,3.2,4.5,1
6.9,3.1,4.9,1
5.5,2.3,4,1
6.5,2.8,4.6,1
5.7,2.8,4.5,1
6.3,3.3,4.7,1
4.9,2.4,3.3,1
6.6,2.9,4.6,1
5.2,2.7,3.9,1
5,2,3.5,1
5.9,3,4.2,1
6,2.2,4,1
6.1,2.9,4.7,1
5.6,2.9,3.6,1
6.7,3.1,4.4,1
5.6,3,4.5,1
5.8,2.7,4.1,1
6.2,2.2,4.5,1
5.6,2.5,3.9,1
5.9,3.2,4.8,1
6.1,2.8,4,1
6.3,2.5,4.9,1
6.1,2.8,4.7,1
6.4,2.9,4.3,1
6.6,3,4.4,1
6.8,2.8,4.8,1
6.7,3,5,1
6,2.9,4.5,1
5.7,2.6,3.5,1
5.5,2.4,3.8,1
5.5,2.4,3.7,1
5.8,2.7,3.9,1
6,2.7,5.1,1
5.4,3,4.5,1
6,3.4,4.5,1
6.7,3.1,4.7,1
6.3,2.3,4.4,1
5.6,3,4.1,1
5.5,2.5,4,1
5.5,2.6,4.4,1
6.1,3,4.6,1
5.8,2.6,4,1
5,2.3,3.3,1
5.6,2.7,4.2,1
5.7,3,4.2,1
5.7,2.9,4.2,1
6.2,2.9,4.3,1
5.1,2.5,3,1
5.7,2.8,4.1,1
1 a b c s
2 5.1 3.5 1.4 0
3 4.9 3 1.4 0
4 4.7 3.2 1.3 0
5 4.6 3.1 1.5 0
6 5 3.6 1.4 0
7 5.4 3.9 1.7 0
8 4.6 3.4 1.4 0
9 5 3.4 1.5 0
10 4.4 2.9 1.4 0
11 4.9 3.1 1.5 0
12 5.4 3.7 1.5 0
13 4.8 3.4 1.6 0
14 4.8 3 1.4 0
15 4.3 3 1.1 0
16 5.8 4 1.2 0
17 5.7 4.4 1.5 0
18 5.4 3.9 1.3 0
19 5.1 3.5 1.4 0
20 5.7 3.8 1.7 0
21 5.1 3.8 1.5 0
22 5.4 3.4 1.7 0
23 5.1 3.7 1.5 0
24 4.6 3.6 1 0
25 5.1 3.3 1.7 0
26 4.8 3.4 1.9 0
27 5 3 1.6 0
28 5 3.4 1.6 0
29 5.2 3.5 1.5 0
30 5.2 3.4 1.4 0
31 4.7 3.2 1.6 0
32 4.8 3.1 1.6 0
33 5.4 3.4 1.5 0
34 5.2 4.1 1.5 0
35 5.5 4.2 1.4 0
36 4.9 3.1 1.5 0
37 5 3.2 1.2 0
38 5.5 3.5 1.3 0
39 4.9 3.6 1.4 0
40 4.4 3 1.3 0
41 5.1 3.4 1.5 0
42 5 3.5 1.3 0
43 4.5 2.3 1.3 0
44 4.4 3.2 1.3 0
45 5 3.5 1.6 0
46 5.1 3.8 1.9 0
47 4.8 3 1.4 0
48 5.1 3.8 1.6 0
49 4.6 3.2 1.4 0
50 5.3 3.7 1.5 0
51 5 3.3 1.4 0
52 7 3.2 4.7 1
53 6.4 3.2 4.5 1
54 6.9 3.1 4.9 1
55 5.5 2.3 4 1
56 6.5 2.8 4.6 1
57 5.7 2.8 4.5 1
58 6.3 3.3 4.7 1
59 4.9 2.4 3.3 1
60 6.6 2.9 4.6 1
61 5.2 2.7 3.9 1
62 5 2 3.5 1
63 5.9 3 4.2 1
64 6 2.2 4 1
65 6.1 2.9 4.7 1
66 5.6 2.9 3.6 1
67 6.7 3.1 4.4 1
68 5.6 3 4.5 1
69 5.8 2.7 4.1 1
70 6.2 2.2 4.5 1
71 5.6 2.5 3.9 1
72 5.9 3.2 4.8 1
73 6.1 2.8 4 1
74 6.3 2.5 4.9 1
75 6.1 2.8 4.7 1
76 6.4 2.9 4.3 1
77 6.6 3 4.4 1
78 6.8 2.8 4.8 1
79 6.7 3 5 1
80 6 2.9 4.5 1
81 5.7 2.6 3.5 1
82 5.5 2.4 3.8 1
83 5.5 2.4 3.7 1
84 5.8 2.7 3.9 1
85 6 2.7 5.1 1
86 5.4 3 4.5 1
87 6 3.4 4.5 1
88 6.7 3.1 4.7 1
89 6.3 2.3 4.4 1
90 5.6 3 4.1 1
91 5.5 2.5 4 1
92 5.5 2.6 4.4 1
93 6.1 3 4.6 1
94 5.8 2.6 4 1
95 5 2.3 3.3 1
96 5.6 2.7 4.2 1
97 5.7 3 4.2 1
98 5.7 2.9 4.2 1
99 6.2 2.9 4.3 1
100 5.1 2.5 3 1
101 5.7 2.8 4.1 1

View File

@ -1,101 +0,0 @@
a,b,c,d,s
5.1,3.5,1.4,0.2,0
4.9,3.0,1.4,0.2,0
4.7,3.2,1.3,0.2,0
4.6,3.1,1.5,0.2,0
5.0,3.6,1.4,0.2,0
5.4,3.9,1.7,0.4,0
4.6,3.4,1.4,0.3,0
5.0,3.4,1.5,0.2,0
4.4,2.9,1.4,0.2,0
4.9,3.1,1.5,0.1,0
5.4,3.7,1.5,0.2,0
4.8,3.4,1.6,0.2,0
4.8,3.0,1.4,0.1,0
4.3,3.0,1.1,0.1,0
5.8,4.0,1.2,0.2,0
5.7,4.4,1.5,0.4,0
5.4,3.9,1.3,0.4,0
5.1,3.5,1.4,0.3,0
5.7,3.8,1.7,0.3,0
5.1,3.8,1.5,0.3,0
5.4,3.4,1.7,0.2,0
5.1,3.7,1.5,0.4,0
4.6,3.6,1.0,0.2,0
5.1,3.3,1.7,0.5,0
4.8,3.4,1.9,0.2,0
5.0,3.0,1.6,0.2,0
5.0,3.4,1.6,0.4,0
5.2,3.5,1.5,0.2,0
5.2,3.4,1.4,0.2,0
4.7,3.2,1.6,0.2,0
4.8,3.1,1.6,0.2,0
5.4,3.4,1.5,0.4,0
5.2,4.1,1.5,0.1,0
5.5,4.2,1.4,0.2,0
4.9,3.1,1.5,0.2,0
5.0,3.2,1.2,0.2,0
5.5,3.5,1.3,0.2,0
4.9,3.6,1.4,0.1,0
4.4,3.0,1.3,0.2,0
5.1,3.4,1.5,0.2,0
5.0,3.5,1.3,0.3,0
4.5,2.3,1.3,0.3,0
4.4,3.2,1.3,0.2,0
5.0,3.5,1.6,0.6,0
5.1,3.8,1.9,0.4,0
4.8,3.0,1.4,0.3,0
5.1,3.8,1.6,0.2,0
4.6,3.2,1.4,0.2,0
5.3,3.7,1.5,0.2,0
5.0,3.3,1.4,0.2,0
7.0,3.2,4.7,1.4,1
6.4,3.2,4.5,1.5,1
6.9,3.1,4.9,1.5,1
5.5,2.3,4.0,1.3,1
6.5,2.8,4.6,1.5,1
5.7,2.8,4.5,1.3,1
6.3,3.3,4.7,1.6,1
4.9,2.4,3.3,1.0,1
6.6,2.9,4.6,1.3,1
5.2,2.7,3.9,1.4,1
5.0,2.0,3.5,1.0,1
5.9,3.0,4.2,1.5,1
6.0,2.2,4.0,1.0,1
6.1,2.9,4.7,1.4,1
5.6,2.9,3.6,1.3,1
6.7,3.1,4.4,1.4,1
5.6,3.0,4.5,1.5,1
5.8,2.7,4.1,1.0,1
6.2,2.2,4.5,1.5,1
5.6,2.5,3.9,1.1,1
5.9,3.2,4.8,1.8,1
6.1,2.8,4.0,1.3,1
6.3,2.5,4.9,1.5,1
6.1,2.8,4.7,1.2,1
6.4,2.9,4.3,1.3,1
6.6,3.0,4.4,1.4,1
6.8,2.8,4.8,1.4,1
6.7,3.0,5.0,1.7,1
6.0,2.9,4.5,1.5,1
5.7,2.6,3.5,1.0,1
5.5,2.4,3.8,1.1,1
5.5,2.4,3.7,1.0,1
5.8,2.7,3.9,1.2,1
6.0,2.7,5.1,1.6,1
5.4,3.0,4.5,1.5,1
6.0,3.4,4.5,1.6,1
6.7,3.1,4.7,1.5,1
6.3,2.3,4.4,1.3,1
5.6,3.0,4.1,1.3,1
5.5,2.5,4.0,1.3,1
5.5,2.6,4.4,1.2,1
6.1,3.0,4.6,1.4,1
5.8,2.6,4.0,1.2,1
5.0,2.3,3.3,1.0,1
5.6,2.7,4.2,1.3,1
5.7,3.0,4.2,1.2,1
5.7,2.9,4.2,1.3,1
6.2,2.9,4.3,1.3,1
5.1,2.5,3.0,1.1,1
5.7,2.8,4.1,1.3,1
1 a b c d s
2 5.1 3.5 1.4 0.2 0
3 4.9 3.0 1.4 0.2 0
4 4.7 3.2 1.3 0.2 0
5 4.6 3.1 1.5 0.2 0
6 5.0 3.6 1.4 0.2 0
7 5.4 3.9 1.7 0.4 0
8 4.6 3.4 1.4 0.3 0
9 5.0 3.4 1.5 0.2 0
10 4.4 2.9 1.4 0.2 0
11 4.9 3.1 1.5 0.1 0
12 5.4 3.7 1.5 0.2 0
13 4.8 3.4 1.6 0.2 0
14 4.8 3.0 1.4 0.1 0
15 4.3 3.0 1.1 0.1 0
16 5.8 4.0 1.2 0.2 0
17 5.7 4.4 1.5 0.4 0
18 5.4 3.9 1.3 0.4 0
19 5.1 3.5 1.4 0.3 0
20 5.7 3.8 1.7 0.3 0
21 5.1 3.8 1.5 0.3 0
22 5.4 3.4 1.7 0.2 0
23 5.1 3.7 1.5 0.4 0
24 4.6 3.6 1.0 0.2 0
25 5.1 3.3 1.7 0.5 0
26 4.8 3.4 1.9 0.2 0
27 5.0 3.0 1.6 0.2 0
28 5.0 3.4 1.6 0.4 0
29 5.2 3.5 1.5 0.2 0
30 5.2 3.4 1.4 0.2 0
31 4.7 3.2 1.6 0.2 0
32 4.8 3.1 1.6 0.2 0
33 5.4 3.4 1.5 0.4 0
34 5.2 4.1 1.5 0.1 0
35 5.5 4.2 1.4 0.2 0
36 4.9 3.1 1.5 0.2 0
37 5.0 3.2 1.2 0.2 0
38 5.5 3.5 1.3 0.2 0
39 4.9 3.6 1.4 0.1 0
40 4.4 3.0 1.3 0.2 0
41 5.1 3.4 1.5 0.2 0
42 5.0 3.5 1.3 0.3 0
43 4.5 2.3 1.3 0.3 0
44 4.4 3.2 1.3 0.2 0
45 5.0 3.5 1.6 0.6 0
46 5.1 3.8 1.9 0.4 0
47 4.8 3.0 1.4 0.3 0
48 5.1 3.8 1.6 0.2 0
49 4.6 3.2 1.4 0.2 0
50 5.3 3.7 1.5 0.2 0
51 5.0 3.3 1.4 0.2 0
52 7.0 3.2 4.7 1.4 1
53 6.4 3.2 4.5 1.5 1
54 6.9 3.1 4.9 1.5 1
55 5.5 2.3 4.0 1.3 1
56 6.5 2.8 4.6 1.5 1
57 5.7 2.8 4.5 1.3 1
58 6.3 3.3 4.7 1.6 1
59 4.9 2.4 3.3 1.0 1
60 6.6 2.9 4.6 1.3 1
61 5.2 2.7 3.9 1.4 1
62 5.0 2.0 3.5 1.0 1
63 5.9 3.0 4.2 1.5 1
64 6.0 2.2 4.0 1.0 1
65 6.1 2.9 4.7 1.4 1
66 5.6 2.9 3.6 1.3 1
67 6.7 3.1 4.4 1.4 1
68 5.6 3.0 4.5 1.5 1
69 5.8 2.7 4.1 1.0 1
70 6.2 2.2 4.5 1.5 1
71 5.6 2.5 3.9 1.1 1
72 5.9 3.2 4.8 1.8 1
73 6.1 2.8 4.0 1.3 1
74 6.3 2.5 4.9 1.5 1
75 6.1 2.8 4.7 1.2 1
76 6.4 2.9 4.3 1.3 1
77 6.6 3.0 4.4 1.4 1
78 6.8 2.8 4.8 1.4 1
79 6.7 3.0 5.0 1.7 1
80 6.0 2.9 4.5 1.5 1
81 5.7 2.6 3.5 1.0 1
82 5.5 2.4 3.8 1.1 1
83 5.5 2.4 3.7 1.0 1
84 5.8 2.7 3.9 1.2 1
85 6.0 2.7 5.1 1.6 1
86 5.4 3.0 4.5 1.5 1
87 6.0 3.4 4.5 1.6 1
88 6.7 3.1 4.7 1.5 1
89 6.3 2.3 4.4 1.3 1
90 5.6 3.0 4.1 1.3 1
91 5.5 2.5 4.0 1.3 1
92 5.5 2.6 4.4 1.2 1
93 6.1 3.0 4.6 1.4 1
94 5.8 2.6 4.0 1.2 1
95 5.0 2.3 3.3 1.0 1
96 5.6 2.7 4.2 1.3 1
97 5.7 3.0 4.2 1.2 1
98 5.7 2.9 4.2 1.3 1
99 6.2 2.9 4.3 1.3 1
100 5.1 2.5 3.0 1.1 1
101 5.7 2.8 4.1 1.3 1

View File

@ -1,100 +0,0 @@
7,3.2,4.7,0
6.4,3.2,4.5,0
6.9,3.1,4.9,0
5.5,2.3,4,0
6.5,2.8,4.6,0
5.7,2.8,4.5,0
6.3,3.3,4.7,0
4.9,2.4,3.3,0
6.6,2.9,4.6,0
5.2,2.7,3.9,0
5,2,3.5,0
5.9,3,4.2,0
6,2.2,4,0
6.1,2.9,4.7,0
5.6,2.9,3.6,0
6.7,3.1,4.4,0
5.6,3,4.5,0
5.8,2.7,4.1,0
6.2,2.2,4.5,0
5.6,2.5,3.9,0
5.9,3.2,4.8,0
6.1,2.8,4,0
6.3,2.5,4.9,0
6.1,2.8,4.7,0
6.4,2.9,4.3,0
6.6,3,4.4,0
6.8,2.8,4.8,0
6.7,3,5,0
6,2.9,4.5,0
5.7,2.6,3.5,0
5.5,2.4,3.8,0
5.5,2.4,3.7,0
5.8,2.7,3.9,0
6,2.7,5.1,0
5.4,3,4.5,0
6,3.4,4.5,0
6.7,3.1,4.7,0
6.3,2.3,4.4,0
5.6,3,4.1,0
5.5,2.5,4,0
5.5,2.6,4.4,0
6.1,3,4.6,0
5.8,2.6,4,0
5,2.3,3.3,0
5.6,2.7,4.2,0
5.7,3,4.2,0
5.7,2.9,4.2,0
6.2,2.9,4.3,0
5.1,2.5,3,0
5.7,2.8,4.1,0
6.3,3.3,6,1
5.8,2.7,5.1,1
7.1,3,5.9,1
6.3,2.9,5.6,1
6.5,3,5.8,1
7.6,3,6.6,1
4.9,2.5,4.5,1
7.3,2.9,6.3,1
6.7,2.5,5.8,1
7.2,3.6,6.1,1
6.5,3.2,5.1,1
6.4,2.7,5.3,1
6.8,3,5.5,1
5.7,2.5,5,1
5.8,2.8,5.1,1
6.4,3.2,5.3,1
6.5,3,5.5,1
7.7,3.8,6.7,1
7.7,2.6,6.9,1
6,2.2,5,1
6.9,3.2,5.7,1
5.6,2.8,4.9,1
7.7,2.8,6.7,1
6.3,2.7,4.9,1
6.7,3.3,5.7,1
7.2,3.2,6,1
6.2,2.8,4.8,1
6.1,3,4.9,1
6.4,2.8,5.6,1
7.2,3,5.8,1
7.4,2.8,6.1,1
7.9,3.8,6.4,1
6.4,2.8,5.6,1
6.3,2.8,5.1,1
6.1,2.6,5.6,1
7.7,3,6.1,1
6.3,3.4,5.6,1
6.4,3.1,5.5,1
6,3,4.8,1
6.9,3.1,5.4,1
6.7,3.1,5.6,1
6.9,3.1,5.1,1
5.8,2.7,5.1,1
6.8,3.2,5.9,1
6.7,3.3,5.7,1
6.7,3,5.2,1
6.3,2.5,5,1
6.5,3,5.2,1
6.2,3.4,5.4,1
5.9,3,5.1,1
1 7 3.2 4.7 0
2 6.4 3.2 4.5 0
3 6.9 3.1 4.9 0
4 5.5 2.3 4 0
5 6.5 2.8 4.6 0
6 5.7 2.8 4.5 0
7 6.3 3.3 4.7 0
8 4.9 2.4 3.3 0
9 6.6 2.9 4.6 0
10 5.2 2.7 3.9 0
11 5 2 3.5 0
12 5.9 3 4.2 0
13 6 2.2 4 0
14 6.1 2.9 4.7 0
15 5.6 2.9 3.6 0
16 6.7 3.1 4.4 0
17 5.6 3 4.5 0
18 5.8 2.7 4.1 0
19 6.2 2.2 4.5 0
20 5.6 2.5 3.9 0
21 5.9 3.2 4.8 0
22 6.1 2.8 4 0
23 6.3 2.5 4.9 0
24 6.1 2.8 4.7 0
25 6.4 2.9 4.3 0
26 6.6 3 4.4 0
27 6.8 2.8 4.8 0
28 6.7 3 5 0
29 6 2.9 4.5 0
30 5.7 2.6 3.5 0
31 5.5 2.4 3.8 0
32 5.5 2.4 3.7 0
33 5.8 2.7 3.9 0
34 6 2.7 5.1 0
35 5.4 3 4.5 0
36 6 3.4 4.5 0
37 6.7 3.1 4.7 0
38 6.3 2.3 4.4 0
39 5.6 3 4.1 0
40 5.5 2.5 4 0
41 5.5 2.6 4.4 0
42 6.1 3 4.6 0
43 5.8 2.6 4 0
44 5 2.3 3.3 0
45 5.6 2.7 4.2 0
46 5.7 3 4.2 0
47 5.7 2.9 4.2 0
48 6.2 2.9 4.3 0
49 5.1 2.5 3 0
50 5.7 2.8 4.1 0
51 6.3 3.3 6 1
52 5.8 2.7 5.1 1
53 7.1 3 5.9 1
54 6.3 2.9 5.6 1
55 6.5 3 5.8 1
56 7.6 3 6.6 1
57 4.9 2.5 4.5 1
58 7.3 2.9 6.3 1
59 6.7 2.5 5.8 1
60 7.2 3.6 6.1 1
61 6.5 3.2 5.1 1
62 6.4 2.7 5.3 1
63 6.8 3 5.5 1
64 5.7 2.5 5 1
65 5.8 2.8 5.1 1
66 6.4 3.2 5.3 1
67 6.5 3 5.5 1
68 7.7 3.8 6.7 1
69 7.7 2.6 6.9 1
70 6 2.2 5 1
71 6.9 3.2 5.7 1
72 5.6 2.8 4.9 1
73 7.7 2.8 6.7 1
74 6.3 2.7 4.9 1
75 6.7 3.3 5.7 1
76 7.2 3.2 6 1
77 6.2 2.8 4.8 1
78 6.1 3 4.9 1
79 6.4 2.8 5.6 1
80 7.2 3 5.8 1
81 7.4 2.8 6.1 1
82 7.9 3.8 6.4 1
83 6.4 2.8 5.6 1
84 6.3 2.8 5.1 1
85 6.1 2.6 5.6 1
86 7.7 3 6.1 1
87 6.3 3.4 5.6 1
88 6.4 3.1 5.5 1
89 6 3 4.8 1
90 6.9 3.1 5.4 1
91 6.7 3.1 5.6 1
92 6.9 3.1 5.1 1
93 5.8 2.7 5.1 1
94 6.8 3.2 5.9 1
95 6.7 3.3 5.7 1
96 6.7 3 5.2 1
97 6.3 2.5 5 1
98 6.5 3 5.2 1
99 6.2 3.4 5.4 1
100 5.9 3 5.1 1

View File

@ -1,101 +0,0 @@
a,b,c,d,s
7.0,3.2,4.7,1.4,0
6.4,3.2,4.5,1.5,0
6.9,3.1,4.9,1.5,0
5.5,2.3,4.0,1.3,0
6.5,2.8,4.6,1.5,0
5.7,2.8,4.5,1.3,0
6.3,3.3,4.7,1.6,0
4.9,2.4,3.3,1.0,0
6.6,2.9,4.6,1.3,0
5.2,2.7,3.9,1.4,0
5.0,2.0,3.5,1.0,0
5.9,3.0,4.2,1.5,0
6.0,2.2,4.0,1.0,0
6.1,2.9,4.7,1.4,0
5.6,2.9,3.6,1.3,0
6.7,3.1,4.4,1.4,0
5.6,3.0,4.5,1.5,0
5.8,2.7,4.1,1.0,0
6.2,2.2,4.5,1.5,0
5.6,2.5,3.9,1.1,0
5.9,3.2,4.8,1.8,0
6.1,2.8,4.0,1.3,0
6.3,2.5,4.9,1.5,0
6.1,2.8,4.7,1.2,0
6.4,2.9,4.3,1.3,0
6.6,3.0,4.4,1.4,0
6.8,2.8,4.8,1.4,0
6.7,3.0,5.0,1.7,0
6.0,2.9,4.5,1.5,0
5.7,2.6,3.5,1.0,0
5.5,2.4,3.8,1.1,0
5.5,2.4,3.7,1.0,0
5.8,2.7,3.9,1.2,0
6.0,2.7,5.1,1.6,0
5.4,3.0,4.5,1.5,0
6.0,3.4,4.5,1.6,0
6.7,3.1,4.7,1.5,0
6.3,2.3,4.4,1.3,0
5.6,3.0,4.1,1.3,0
5.5,2.5,4.0,1.3,0
5.5,2.6,4.4,1.2,0
6.1,3.0,4.6,1.4,0
5.8,2.6,4.0,1.2,0
5.0,2.3,3.3,1.0,0
5.6,2.7,4.2,1.3,0
5.7,3.0,4.2,1.2,0
5.7,2.9,4.2,1.3,0
6.2,2.9,4.3,1.3,0
5.1,2.5,3.0,1.1,0
5.7,2.8,4.1,1.3,0
6.3,3.3,6.0,2.5,1
5.8,2.7,5.1,1.9,1
7.1,3.0,5.9,2.1,1
6.3,2.9,5.6,1.8,1
6.5,3.0,5.8,2.2,1
7.6,3.0,6.6,2.1,1
4.9,2.5,4.5,1.7,1
7.3,2.9,6.3,1.8,1
6.7,2.5,5.8,1.8,1
7.2,3.6,6.1,2.5,1
6.5,3.2,5.1,2.0,1
6.4,2.7,5.3,1.9,1
6.8,3.0,5.5,2.1,1
5.7,2.5,5.0,2.0,1
5.8,2.8,5.1,2.4,1
6.4,3.2,5.3,2.3,1
6.5,3.0,5.5,1.8,1
7.7,3.8,6.7,2.2,1
7.7,2.6,6.9,2.3,1
6.0,2.2,5.0,1.5,1
6.9,3.2,5.7,2.3,1
5.6,2.8,4.9,2.0,1
7.7,2.8,6.7,2.0,1
6.3,2.7,4.9,1.8,1
6.7,3.3,5.7,2.1,1
7.2,3.2,6.0,1.8,1
6.2,2.8,4.8,1.8,1
6.1,3.0,4.9,1.8,1
6.4,2.8,5.6,2.1,1
7.2,3.0,5.8,1.6,1
7.4,2.8,6.1,1.9,1
7.9,3.8,6.4,2.0,1
6.4,2.8,5.6,2.2,1
6.3,2.8,5.1,1.5,1
6.1,2.6,5.6,1.4,1
7.7,3.0,6.1,2.3,1
6.3,3.4,5.6,2.4,1
6.4,3.1,5.5,1.8,1
6.0,3.0,4.8,1.8,1
6.9,3.1,5.4,2.1,1
6.7,3.1,5.6,2.4,1
6.9,3.1,5.1,2.3,1
5.8,2.7,5.1,1.9,1
6.8,3.2,5.9,2.3,1
6.7,3.3,5.7,2.5,1
6.7,3.0,5.2,2.3,1
6.3,2.5,5.0,1.9,1
6.5,3.0,5.2,2.0,1
6.2,3.4,5.4,2.3,1
5.9,3.0,5.1,1.8,1
1 a b c d s
2 7.0 3.2 4.7 1.4 0
3 6.4 3.2 4.5 1.5 0
4 6.9 3.1 4.9 1.5 0
5 5.5 2.3 4.0 1.3 0
6 6.5 2.8 4.6 1.5 0
7 5.7 2.8 4.5 1.3 0
8 6.3 3.3 4.7 1.6 0
9 4.9 2.4 3.3 1.0 0
10 6.6 2.9 4.6 1.3 0
11 5.2 2.7 3.9 1.4 0
12 5.0 2.0 3.5 1.0 0
13 5.9 3.0 4.2 1.5 0
14 6.0 2.2 4.0 1.0 0
15 6.1 2.9 4.7 1.4 0
16 5.6 2.9 3.6 1.3 0
17 6.7 3.1 4.4 1.4 0
18 5.6 3.0 4.5 1.5 0
19 5.8 2.7 4.1 1.0 0
20 6.2 2.2 4.5 1.5 0
21 5.6 2.5 3.9 1.1 0
22 5.9 3.2 4.8 1.8 0
23 6.1 2.8 4.0 1.3 0
24 6.3 2.5 4.9 1.5 0
25 6.1 2.8 4.7 1.2 0
26 6.4 2.9 4.3 1.3 0
27 6.6 3.0 4.4 1.4 0
28 6.8 2.8 4.8 1.4 0
29 6.7 3.0 5.0 1.7 0
30 6.0 2.9 4.5 1.5 0
31 5.7 2.6 3.5 1.0 0
32 5.5 2.4 3.8 1.1 0
33 5.5 2.4 3.7 1.0 0
34 5.8 2.7 3.9 1.2 0
35 6.0 2.7 5.1 1.6 0
36 5.4 3.0 4.5 1.5 0
37 6.0 3.4 4.5 1.6 0
38 6.7 3.1 4.7 1.5 0
39 6.3 2.3 4.4 1.3 0
40 5.6 3.0 4.1 1.3 0
41 5.5 2.5 4.0 1.3 0
42 5.5 2.6 4.4 1.2 0
43 6.1 3.0 4.6 1.4 0
44 5.8 2.6 4.0 1.2 0
45 5.0 2.3 3.3 1.0 0
46 5.6 2.7 4.2 1.3 0
47 5.7 3.0 4.2 1.2 0
48 5.7 2.9 4.2 1.3 0
49 6.2 2.9 4.3 1.3 0
50 5.1 2.5 3.0 1.1 0
51 5.7 2.8 4.1 1.3 0
52 6.3 3.3 6.0 2.5 1
53 5.8 2.7 5.1 1.9 1
54 7.1 3.0 5.9 2.1 1
55 6.3 2.9 5.6 1.8 1
56 6.5 3.0 5.8 2.2 1
57 7.6 3.0 6.6 2.1 1
58 4.9 2.5 4.5 1.7 1
59 7.3 2.9 6.3 1.8 1
60 6.7 2.5 5.8 1.8 1
61 7.2 3.6 6.1 2.5 1
62 6.5 3.2 5.1 2.0 1
63 6.4 2.7 5.3 1.9 1
64 6.8 3.0 5.5 2.1 1
65 5.7 2.5 5.0 2.0 1
66 5.8 2.8 5.1 2.4 1
67 6.4 3.2 5.3 2.3 1
68 6.5 3.0 5.5 1.8 1
69 7.7 3.8 6.7 2.2 1
70 7.7 2.6 6.9 2.3 1
71 6.0 2.2 5.0 1.5 1
72 6.9 3.2 5.7 2.3 1
73 5.6 2.8 4.9 2.0 1
74 7.7 2.8 6.7 2.0 1
75 6.3 2.7 4.9 1.8 1
76 6.7 3.3 5.7 2.1 1
77 7.2 3.2 6.0 1.8 1
78 6.2 2.8 4.8 1.8 1
79 6.1 3.0 4.9 1.8 1
80 6.4 2.8 5.6 2.1 1
81 7.2 3.0 5.8 1.6 1
82 7.4 2.8 6.1 1.9 1
83 7.9 3.8 6.4 2.0 1
84 6.4 2.8 5.6 2.2 1
85 6.3 2.8 5.1 1.5 1
86 6.1 2.6 5.6 1.4 1
87 7.7 3.0 6.1 2.3 1
88 6.3 3.4 5.6 2.4 1
89 6.4 3.1 5.5 1.8 1
90 6.0 3.0 4.8 1.8 1
91 6.9 3.1 5.4 2.1 1
92 6.7 3.1 5.6 2.4 1
93 6.9 3.1 5.1 2.3 1
94 5.8 2.7 5.1 1.9 1
95 6.8 3.2 5.9 2.3 1
96 6.7 3.3 5.7 2.5 1
97 6.7 3.0 5.2 2.3 1
98 6.3 2.5 5.0 1.9 1
99 6.5 3.0 5.2 2.0 1
100 6.2 3.4 5.4 2.3 1
101 5.9 3.0 5.1 1.8 1

View File

@ -1,101 +0,0 @@
a,b,c,s
5.1,3.5,1.4,0
4.9,3,1.4,0
4.7,3.2,1.3,0
4.6,3.1,1.5,0
5,3.6,1.4,0
5.4,3.9,1.7,0
4.6,3.4,1.4,0
5,3.4,1.5,0
4.4,2.9,1.4,0
4.9,3.1,1.5,0
5.4,3.7,1.5,0
4.8,3.4,1.6,0
4.8,3,1.4,0
4.3,3,1.1,0
5.8,4,1.2,0
5.7,4.4,1.5,0
5.4,3.9,1.3,0
5.1,3.5,1.4,0
5.7,3.8,1.7,0
5.1,3.8,1.5,0
5.4,3.4,1.7,0
5.1,3.7,1.5,0
4.6,3.6,1,0
5.1,3.3,1.7,0
4.8,3.4,1.9,0
5,3,1.6,0
5,3.4,1.6,0
5.2,3.5,1.5,0
5.2,3.4,1.4,0
4.7,3.2,1.6,0
4.8,3.1,1.6,0
5.4,3.4,1.5,0
5.2,4.1,1.5,0
5.5,4.2,1.4,0
4.9,3.1,1.5,0
5,3.2,1.2,0
5.5,3.5,1.3,0
4.9,3.6,1.4,0
4.4,3,1.3,0
5.1,3.4,1.5,0
5,3.5,1.3,0
4.5,2.3,1.3,0
4.4,3.2,1.3,0
5,3.5,1.6,0
5.1,3.8,1.9,0
4.8,3,1.4,0
5.1,3.8,1.6,0
4.6,3.2,1.4,0
5.3,3.7,1.5,0
5,3.3,1.4,0
6.3,3.3,6,1
5.8,2.7,5.1,1
7.1,3,5.9,1
6.3,2.9,5.6,1
6.5,3,5.8,1
7.6,3,6.6,1
4.9,2.5,4.5,1
7.3,2.9,6.3,1
6.7,2.5,5.8,1
7.2,3.6,6.1,1
6.5,3.2,5.1,1
6.4,2.7,5.3,1
6.8,3,5.5,1
5.7,2.5,5,1
5.8,2.8,5.1,1
6.4,3.2,5.3,1
6.5,3,5.5,1
7.7,3.8,6.7,1
7.7,2.6,6.9,1
6,2.2,5,1
6.9,3.2,5.7,1
5.6,2.8,4.9,1
7.7,2.8,6.7,1
6.3,2.7,4.9,1
6.7,3.3,5.7,1
7.2,3.2,6,1
6.2,2.8,4.8,1
6.1,3,4.9,1
6.4,2.8,5.6,1
7.2,3,5.8,1
7.4,2.8,6.1,1
7.9,3.8,6.4,1
6.4,2.8,5.6,1
6.3,2.8,5.1,1
6.1,2.6,5.6,1
7.7,3,6.1,1
6.3,3.4,5.6,1
6.4,3.1,5.5,1
6,3,4.8,1
6.9,3.1,5.4,1
6.7,3.1,5.6,1
6.9,3.1,5.1,1
5.8,2.7,5.1,1
6.8,3.2,5.9,1
6.7,3.3,5.7,1
6.7,3,5.2,1
6.3,2.5,5,1
6.5,3,5.2,1
6.2,3.4,5.4,1
5.9,3,5.1,1
1 a b c s
2 5.1 3.5 1.4 0
3 4.9 3 1.4 0
4 4.7 3.2 1.3 0
5 4.6 3.1 1.5 0
6 5 3.6 1.4 0
7 5.4 3.9 1.7 0
8 4.6 3.4 1.4 0
9 5 3.4 1.5 0
10 4.4 2.9 1.4 0
11 4.9 3.1 1.5 0
12 5.4 3.7 1.5 0
13 4.8 3.4 1.6 0
14 4.8 3 1.4 0
15 4.3 3 1.1 0
16 5.8 4 1.2 0
17 5.7 4.4 1.5 0
18 5.4 3.9 1.3 0
19 5.1 3.5 1.4 0
20 5.7 3.8 1.7 0
21 5.1 3.8 1.5 0
22 5.4 3.4 1.7 0
23 5.1 3.7 1.5 0
24 4.6 3.6 1 0
25 5.1 3.3 1.7 0
26 4.8 3.4 1.9 0
27 5 3 1.6 0
28 5 3.4 1.6 0
29 5.2 3.5 1.5 0
30 5.2 3.4 1.4 0
31 4.7 3.2 1.6 0
32 4.8 3.1 1.6 0
33 5.4 3.4 1.5 0
34 5.2 4.1 1.5 0
35 5.5 4.2 1.4 0
36 4.9 3.1 1.5 0
37 5 3.2 1.2 0
38 5.5 3.5 1.3 0
39 4.9 3.6 1.4 0
40 4.4 3 1.3 0
41 5.1 3.4 1.5 0
42 5 3.5 1.3 0
43 4.5 2.3 1.3 0
44 4.4 3.2 1.3 0
45 5 3.5 1.6 0
46 5.1 3.8 1.9 0
47 4.8 3 1.4 0
48 5.1 3.8 1.6 0
49 4.6 3.2 1.4 0
50 5.3 3.7 1.5 0
51 5 3.3 1.4 0
52 6.3 3.3 6 1
53 5.8 2.7 5.1 1
54 7.1 3 5.9 1
55 6.3 2.9 5.6 1
56 6.5 3 5.8 1
57 7.6 3 6.6 1
58 4.9 2.5 4.5 1
59 7.3 2.9 6.3 1
60 6.7 2.5 5.8 1
61 7.2 3.6 6.1 1
62 6.5 3.2 5.1 1
63 6.4 2.7 5.3 1
64 6.8 3 5.5 1
65 5.7 2.5 5 1
66 5.8 2.8 5.1 1
67 6.4 3.2 5.3 1
68 6.5 3 5.5 1
69 7.7 3.8 6.7 1
70 7.7 2.6 6.9 1
71 6 2.2 5 1
72 6.9 3.2 5.7 1
73 5.6 2.8 4.9 1
74 7.7 2.8 6.7 1
75 6.3 2.7 4.9 1
76 6.7 3.3 5.7 1
77 7.2 3.2 6 1
78 6.2 2.8 4.8 1
79 6.1 3 4.9 1
80 6.4 2.8 5.6 1
81 7.2 3 5.8 1
82 7.4 2.8 6.1 1
83 7.9 3.8 6.4 1
84 6.4 2.8 5.6 1
85 6.3 2.8 5.1 1
86 6.1 2.6 5.6 1
87 7.7 3 6.1 1
88 6.3 3.4 5.6 1
89 6.4 3.1 5.5 1
90 6 3 4.8 1
91 6.9 3.1 5.4 1
92 6.7 3.1 5.6 1
93 6.9 3.1 5.1 1
94 5.8 2.7 5.1 1
95 6.8 3.2 5.9 1
96 6.7 3.3 5.7 1
97 6.7 3 5.2 1
98 6.3 2.5 5 1
99 6.5 3 5.2 1
100 6.2 3.4 5.4 1
101 5.9 3 5.1 1

View File

@ -1,101 +0,0 @@
a,b,c,d,s
5.1,3.5,1.4,0.2,0
4.9,3.0,1.4,0.2,0
4.7,3.2,1.3,0.2,0
4.6,3.1,1.5,0.2,0
5.0,3.6,1.4,0.2,0
5.4,3.9,1.7,0.4,0
4.6,3.4,1.4,0.3,0
5.0,3.4,1.5,0.2,0
4.4,2.9,1.4,0.2,0
4.9,3.1,1.5,0.1,0
5.4,3.7,1.5,0.2,0
4.8,3.4,1.6,0.2,0
4.8,3.0,1.4,0.1,0
4.3,3.0,1.1,0.1,0
5.8,4.0,1.2,0.2,0
5.7,4.4,1.5,0.4,0
5.4,3.9,1.3,0.4,0
5.1,3.5,1.4,0.3,0
5.7,3.8,1.7,0.3,0
5.1,3.8,1.5,0.3,0
5.4,3.4,1.7,0.2,0
5.1,3.7,1.5,0.4,0
4.6,3.6,1.0,0.2,0
5.1,3.3,1.7,0.5,0
4.8,3.4,1.9,0.2,0
5.0,3.0,1.6,0.2,0
5.0,3.4,1.6,0.4,0
5.2,3.5,1.5,0.2,0
5.2,3.4,1.4,0.2,0
4.7,3.2,1.6,0.2,0
4.8,3.1,1.6,0.2,0
5.4,3.4,1.5,0.4,0
5.2,4.1,1.5,0.1,0
5.5,4.2,1.4,0.2,0
4.9,3.1,1.5,0.2,0
5.0,3.2,1.2,0.2,0
5.5,3.5,1.3,0.2,0
4.9,3.6,1.4,0.1,0
4.4,3.0,1.3,0.2,0
5.1,3.4,1.5,0.2,0
5.0,3.5,1.3,0.3,0
4.5,2.3,1.3,0.3,0
4.4,3.2,1.3,0.2,0
5.0,3.5,1.6,0.6,0
5.1,3.8,1.9,0.4,0
4.8,3.0,1.4,0.3,0
5.1,3.8,1.6,0.2,0
4.6,3.2,1.4,0.2,0
5.3,3.7,1.5,0.2,0
5.0,3.3,1.4,0.2,0
6.3,3.3,6.0,2.5,1
5.8,2.7,5.1,1.9,1
7.1,3.0,5.9,2.1,1
6.3,2.9,5.6,1.8,1
6.5,3.0,5.8,2.2,1
7.6,3.0,6.6,2.1,1
4.9,2.5,4.5,1.7,1
7.3,2.9,6.3,1.8,1
6.7,2.5,5.8,1.8,1
7.2,3.6,6.1,2.5,1
6.5,3.2,5.1,2.0,1
6.4,2.7,5.3,1.9,1
6.8,3.0,5.5,2.1,1
5.7,2.5,5.0,2.0,1
5.8,2.8,5.1,2.4,1
6.4,3.2,5.3,2.3,1
6.5,3.0,5.5,1.8,1
7.7,3.8,6.7,2.2,1
7.7,2.6,6.9,2.3,1
6.0,2.2,5.0,1.5,1
6.9,3.2,5.7,2.3,1
5.6,2.8,4.9,2.0,1
7.7,2.8,6.7,2.0,1
6.3,2.7,4.9,1.8,1
6.7,3.3,5.7,2.1,1
7.2,3.2,6.0,1.8,1
6.2,2.8,4.8,1.8,1
6.1,3.0,4.9,1.8,1
6.4,2.8,5.6,2.1,1
7.2,3.0,5.8,1.6,1
7.4,2.8,6.1,1.9,1
7.9,3.8,6.4,2.0,1
6.4,2.8,5.6,2.2,1
6.3,2.8,5.1,1.5,1
6.1,2.6,5.6,1.4,1
7.7,3.0,6.1,2.3,1
6.3,3.4,5.6,2.4,1
6.4,3.1,5.5,1.8,1
6.0,3.0,4.8,1.8,1
6.9,3.1,5.4,2.1,1
6.7,3.1,5.6,2.4,1
6.9,3.1,5.1,2.3,1
5.8,2.7,5.1,1.9,1
6.8,3.2,5.9,2.3,1
6.7,3.3,5.7,2.5,1
6.7,3.0,5.2,2.3,1
6.3,2.5,5.0,1.9,1
6.5,3.0,5.2,2.0,1
6.2,3.4,5.4,2.3,1
5.9,3.0,5.1,1.8,1
1 a b c d s
2 5.1 3.5 1.4 0.2 0
3 4.9 3.0 1.4 0.2 0
4 4.7 3.2 1.3 0.2 0
5 4.6 3.1 1.5 0.2 0
6 5.0 3.6 1.4 0.2 0
7 5.4 3.9 1.7 0.4 0
8 4.6 3.4 1.4 0.3 0
9 5.0 3.4 1.5 0.2 0
10 4.4 2.9 1.4 0.2 0
11 4.9 3.1 1.5 0.1 0
12 5.4 3.7 1.5 0.2 0
13 4.8 3.4 1.6 0.2 0
14 4.8 3.0 1.4 0.1 0
15 4.3 3.0 1.1 0.1 0
16 5.8 4.0 1.2 0.2 0
17 5.7 4.4 1.5 0.4 0
18 5.4 3.9 1.3 0.4 0
19 5.1 3.5 1.4 0.3 0
20 5.7 3.8 1.7 0.3 0
21 5.1 3.8 1.5 0.3 0
22 5.4 3.4 1.7 0.2 0
23 5.1 3.7 1.5 0.4 0
24 4.6 3.6 1.0 0.2 0
25 5.1 3.3 1.7 0.5 0
26 4.8 3.4 1.9 0.2 0
27 5.0 3.0 1.6 0.2 0
28 5.0 3.4 1.6 0.4 0
29 5.2 3.5 1.5 0.2 0
30 5.2 3.4 1.4 0.2 0
31 4.7 3.2 1.6 0.2 0
32 4.8 3.1 1.6 0.2 0
33 5.4 3.4 1.5 0.4 0
34 5.2 4.1 1.5 0.1 0
35 5.5 4.2 1.4 0.2 0
36 4.9 3.1 1.5 0.2 0
37 5.0 3.2 1.2 0.2 0
38 5.5 3.5 1.3 0.2 0
39 4.9 3.6 1.4 0.1 0
40 4.4 3.0 1.3 0.2 0
41 5.1 3.4 1.5 0.2 0
42 5.0 3.5 1.3 0.3 0
43 4.5 2.3 1.3 0.3 0
44 4.4 3.2 1.3 0.2 0
45 5.0 3.5 1.6 0.6 0
46 5.1 3.8 1.9 0.4 0
47 4.8 3.0 1.4 0.3 0
48 5.1 3.8 1.6 0.2 0
49 4.6 3.2 1.4 0.2 0
50 5.3 3.7 1.5 0.2 0
51 5.0 3.3 1.4 0.2 0
52 6.3 3.3 6.0 2.5 1
53 5.8 2.7 5.1 1.9 1
54 7.1 3.0 5.9 2.1 1
55 6.3 2.9 5.6 1.8 1
56 6.5 3.0 5.8 2.2 1
57 7.6 3.0 6.6 2.1 1
58 4.9 2.5 4.5 1.7 1
59 7.3 2.9 6.3 1.8 1
60 6.7 2.5 5.8 1.8 1
61 7.2 3.6 6.1 2.5 1
62 6.5 3.2 5.1 2.0 1
63 6.4 2.7 5.3 1.9 1
64 6.8 3.0 5.5 2.1 1
65 5.7 2.5 5.0 2.0 1
66 5.8 2.8 5.1 2.4 1
67 6.4 3.2 5.3 2.3 1
68 6.5 3.0 5.5 1.8 1
69 7.7 3.8 6.7 2.2 1
70 7.7 2.6 6.9 2.3 1
71 6.0 2.2 5.0 1.5 1
72 6.9 3.2 5.7 2.3 1
73 5.6 2.8 4.9 2.0 1
74 7.7 2.8 6.7 2.0 1
75 6.3 2.7 4.9 1.8 1
76 6.7 3.3 5.7 2.1 1
77 7.2 3.2 6.0 1.8 1
78 6.2 2.8 4.8 1.8 1
79 6.1 3.0 4.9 1.8 1
80 6.4 2.8 5.6 2.1 1
81 7.2 3.0 5.8 1.6 1
82 7.4 2.8 6.1 1.9 1
83 7.9 3.8 6.4 2.0 1
84 6.4 2.8 5.6 2.2 1
85 6.3 2.8 5.1 1.5 1
86 6.1 2.6 5.6 1.4 1
87 7.7 3.0 6.1 2.3 1
88 6.3 3.4 5.6 2.4 1
89 6.4 3.1 5.5 1.8 1
90 6.0 3.0 4.8 1.8 1
91 6.9 3.1 5.4 2.1 1
92 6.7 3.1 5.6 2.4 1
93 6.9 3.1 5.1 2.3 1
94 5.8 2.7 5.1 1.9 1
95 6.8 3.2 5.9 2.3 1
96 6.7 3.3 5.7 2.5 1
97 6.7 3.0 5.2 2.3 1
98 6.3 2.5 5.0 1.9 1
99 6.5 3.0 5.2 2.0 1
100 6.2 3.4 5.4 2.3 1
101 5.9 3.0 5.1 1.8 1

View File

@ -1,150 +0,0 @@
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3,1.4,0.1,Iris-setosa
4.3,3,1.1,0.1,Iris-setosa
5.8,4,1.2,0.2,Iris-setosa
5.7,4.4,1.5,0.4,Iris-setosa
5.4,3.9,1.3,0.4,Iris-setosa
5.1,3.5,1.4,0.3,Iris-setosa
5.7,3.8,1.7,0.3,Iris-setosa
5.1,3.8,1.5,0.3,Iris-setosa
5.4,3.4,1.7,0.2,Iris-setosa
5.1,3.7,1.5,0.4,Iris-setosa
4.6,3.6,1,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
4.8,3.4,1.9,0.2,Iris-setosa
5,3,1.6,0.2,Iris-setosa
5,3.4,1.6,0.4,Iris-setosa
5.2,3.5,1.5,0.2,Iris-setosa
5.2,3.4,1.4,0.2,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.8,3.1,1.6,0.2,Iris-setosa
5.4,3.4,1.5,0.4,Iris-setosa
5.2,4.1,1.5,0.1,Iris-setosa
5.5,4.2,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.2,Iris-setosa
5,3.2,1.2,0.2,Iris-setosa
5.5,3.5,1.3,0.2,Iris-setosa
4.9,3.6,1.4,0.1,Iris-setosa
4.4,3,1.3,0.2,Iris-setosa
5.1,3.4,1.5,0.2,Iris-setosa
5,3.5,1.3,0.3,Iris-setosa
4.5,2.3,1.3,0.3,Iris-setosa
4.4,3.2,1.3,0.2,Iris-setosa
5,3.5,1.6,0.6,Iris-setosa
5.1,3.8,1.9,0.4,Iris-setosa
4.8,3,1.4,0.3,Iris-setosa
5.1,3.8,1.6,0.2,Iris-setosa
4.6,3.2,1.4,0.2,Iris-setosa
5.3,3.7,1.5,0.2,Iris-setosa
5,3.3,1.4,0.2,Iris-setosa
7,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
5.7,2.8,4.5,1.3,Iris-versicolor
6.3,3.3,4.7,1.6,Iris-versicolor
4.9,2.4,3.3,1,Iris-versicolor
6.6,2.9,4.6,1.3,Iris-versicolor
5.2,2.7,3.9,1.4,Iris-versicolor
5,2,3.5,1,Iris-versicolor
5.9,3,4.2,1.5,Iris-versicolor
6,2.2,4,1,Iris-versicolor
6.1,2.9,4.7,1.4,Iris-versicolor
5.6,2.9,3.6,1.3,Iris-versicolor
6.7,3.1,4.4,1.4,Iris-versicolor
5.6,3,4.5,1.5,Iris-versicolor
5.8,2.7,4.1,1,Iris-versicolor
6.2,2.2,4.5,1.5,Iris-versicolor
5.6,2.5,3.9,1.1,Iris-versicolor
5.9,3.2,4.8,1.8,Iris-versicolor
6.1,2.8,4,1.3,Iris-versicolor
6.3,2.5,4.9,1.5,Iris-versicolor
6.1,2.8,4.7,1.2,Iris-versicolor
6.4,2.9,4.3,1.3,Iris-versicolor
6.6,3,4.4,1.4,Iris-versicolor
6.8,2.8,4.8,1.4,Iris-versicolor
6.7,3,5,1.7,Iris-versicolor
6,2.9,4.5,1.5,Iris-versicolor
5.7,2.6,3.5,1,Iris-versicolor
5.5,2.4,3.8,1.1,Iris-versicolor
5.5,2.4,3.7,1,Iris-versicolor
5.8,2.7,3.9,1.2,Iris-versicolor
6,2.7,5.1,1.6,Iris-versicolor
5.4,3,4.5,1.5,Iris-versicolor
6,3.4,4.5,1.6,Iris-versicolor
6.7,3.1,4.7,1.5,Iris-versicolor
6.3,2.3,4.4,1.3,Iris-versicolor
5.6,3,4.1,1.3,Iris-versicolor
5.5,2.5,4,1.3,Iris-versicolor
5.5,2.6,4.4,1.2,Iris-versicolor
6.1,3,4.6,1.4,Iris-versicolor
5.8,2.6,4,1.2,Iris-versicolor
5,2.3,3.3,1,Iris-versicolor
5.6,2.7,4.2,1.3,Iris-versicolor
5.7,3,4.2,1.2,Iris-versicolor
5.7,2.9,4.2,1.3,Iris-versicolor
6.2,2.9,4.3,1.3,Iris-versicolor
5.1,2.5,3,1.1,Iris-versicolor
5.7,2.8,4.1,1.3,Iris-versicolor
6.3,3.3,6,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
7.1,3,5.9,2.1,Iris-virginica
6.3,2.9,5.6,1.8,Iris-virginica
6.5,3,5.8,2.2,Iris-virginica
7.6,3,6.6,2.1,Iris-virginica
4.9,2.5,4.5,1.7,Iris-virginica
7.3,2.9,6.3,1.8,Iris-virginica
6.7,2.5,5.8,1.8,Iris-virginica
7.2,3.6,6.1,2.5,Iris-virginica
6.5,3.2,5.1,2,Iris-virginica
6.4,2.7,5.3,1.9,Iris-virginica
6.8,3,5.5,2.1,Iris-virginica
5.7,2.5,5,2,Iris-virginica
5.8,2.8,5.1,2.4,Iris-virginica
6.4,3.2,5.3,2.3,Iris-virginica
6.5,3,5.5,1.8,Iris-virginica
7.7,3.8,6.7,2.2,Iris-virginica
7.7,2.6,6.9,2.3,Iris-virginica
6,2.2,5,1.5,Iris-virginica
6.9,3.2,5.7,2.3,Iris-virginica
5.6,2.8,4.9,2,Iris-virginica
7.7,2.8,6.7,2,Iris-virginica
6.3,2.7,4.9,1.8,Iris-virginica
6.7,3.3,5.7,2.1,Iris-virginica
7.2,3.2,6,1.8,Iris-virginica
6.2,2.8,4.8,1.8,Iris-virginica
6.1,3,4.9,1.8,Iris-virginica
6.4,2.8,5.6,2.1,Iris-virginica
7.2,3,5.8,1.6,Iris-virginica
7.4,2.8,6.1,1.9,Iris-virginica
7.9,3.8,6.4,2,Iris-virginica
6.4,2.8,5.6,2.2,Iris-virginica
6.3,2.8,5.1,1.5,Iris-virginica
6.1,2.6,5.6,1.4,Iris-virginica
7.7,3,6.1,2.3,Iris-virginica
6.3,3.4,5.6,2.4,Iris-virginica
6.4,3.1,5.5,1.8,Iris-virginica
6,3,4.8,1.8,Iris-virginica
6.9,3.1,5.4,2.1,Iris-virginica
6.7,3.1,5.6,2.4,Iris-virginica
6.9,3.1,5.1,2.3,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
6.8,3.2,5.9,2.3,Iris-virginica
6.7,3.3,5.7,2.5,Iris-virginica
6.7,3,5.2,2.3,Iris-virginica
6.3,2.5,5,1.9,Iris-virginica
6.5,3,5.2,2,Iris-virginica
6.2,3.4,5.4,2.3,Iris-virginica
5.9,3,5.1,1.8,Iris-virginica
1 5.1 3.5 1.4 0.2 Iris-setosa
2 4.9 3 1.4 0.2 Iris-setosa
3 4.7 3.2 1.3 0.2 Iris-setosa
4 4.6 3.1 1.5 0.2 Iris-setosa
5 5 3.6 1.4 0.2 Iris-setosa
6 5.4 3.9 1.7 0.4 Iris-setosa
7 4.6 3.4 1.4 0.3 Iris-setosa
8 5 3.4 1.5 0.2 Iris-setosa
9 4.4 2.9 1.4 0.2 Iris-setosa
10 4.9 3.1 1.5 0.1 Iris-setosa
11 5.4 3.7 1.5 0.2 Iris-setosa
12 4.8 3.4 1.6 0.2 Iris-setosa
13 4.8 3 1.4 0.1 Iris-setosa
14 4.3 3 1.1 0.1 Iris-setosa
15 5.8 4 1.2 0.2 Iris-setosa
16 5.7 4.4 1.5 0.4 Iris-setosa
17 5.4 3.9 1.3 0.4 Iris-setosa
18 5.1 3.5 1.4 0.3 Iris-setosa
19 5.7 3.8 1.7 0.3 Iris-setosa
20 5.1 3.8 1.5 0.3 Iris-setosa
21 5.4 3.4 1.7 0.2 Iris-setosa
22 5.1 3.7 1.5 0.4 Iris-setosa
23 4.6 3.6 1 0.2 Iris-setosa
24 5.1 3.3 1.7 0.5 Iris-setosa
25 4.8 3.4 1.9 0.2 Iris-setosa
26 5 3 1.6 0.2 Iris-setosa
27 5 3.4 1.6 0.4 Iris-setosa
28 5.2 3.5 1.5 0.2 Iris-setosa
29 5.2 3.4 1.4 0.2 Iris-setosa
30 4.7 3.2 1.6 0.2 Iris-setosa
31 4.8 3.1 1.6 0.2 Iris-setosa
32 5.4 3.4 1.5 0.4 Iris-setosa
33 5.2 4.1 1.5 0.1 Iris-setosa
34 5.5 4.2 1.4 0.2 Iris-setosa
35 4.9 3.1 1.5 0.2 Iris-setosa
36 5 3.2 1.2 0.2 Iris-setosa
37 5.5 3.5 1.3 0.2 Iris-setosa
38 4.9 3.6 1.4 0.1 Iris-setosa
39 4.4 3 1.3 0.2 Iris-setosa
40 5.1 3.4 1.5 0.2 Iris-setosa
41 5 3.5 1.3 0.3 Iris-setosa
42 4.5 2.3 1.3 0.3 Iris-setosa
43 4.4 3.2 1.3 0.2 Iris-setosa
44 5 3.5 1.6 0.6 Iris-setosa
45 5.1 3.8 1.9 0.4 Iris-setosa
46 4.8 3 1.4 0.3 Iris-setosa
47 5.1 3.8 1.6 0.2 Iris-setosa
48 4.6 3.2 1.4 0.2 Iris-setosa
49 5.3 3.7 1.5 0.2 Iris-setosa
50 5 3.3 1.4 0.2 Iris-setosa
51 7 3.2 4.7 1.4 Iris-versicolor
52 6.4 3.2 4.5 1.5 Iris-versicolor
53 6.9 3.1 4.9 1.5 Iris-versicolor
54 5.5 2.3 4 1.3 Iris-versicolor
55 6.5 2.8 4.6 1.5 Iris-versicolor
56 5.7 2.8 4.5 1.3 Iris-versicolor
57 6.3 3.3 4.7 1.6 Iris-versicolor
58 4.9 2.4 3.3 1 Iris-versicolor
59 6.6 2.9 4.6 1.3 Iris-versicolor
60 5.2 2.7 3.9 1.4 Iris-versicolor
61 5 2 3.5 1 Iris-versicolor
62 5.9 3 4.2 1.5 Iris-versicolor
63 6 2.2 4 1 Iris-versicolor
64 6.1 2.9 4.7 1.4 Iris-versicolor
65 5.6 2.9 3.6 1.3 Iris-versicolor
66 6.7 3.1 4.4 1.4 Iris-versicolor
67 5.6 3 4.5 1.5 Iris-versicolor
68 5.8 2.7 4.1 1 Iris-versicolor
69 6.2 2.2 4.5 1.5 Iris-versicolor
70 5.6 2.5 3.9 1.1 Iris-versicolor
71 5.9 3.2 4.8 1.8 Iris-versicolor
72 6.1 2.8 4 1.3 Iris-versicolor
73 6.3 2.5 4.9 1.5 Iris-versicolor
74 6.1 2.8 4.7 1.2 Iris-versicolor
75 6.4 2.9 4.3 1.3 Iris-versicolor
76 6.6 3 4.4 1.4 Iris-versicolor
77 6.8 2.8 4.8 1.4 Iris-versicolor
78 6.7 3 5 1.7 Iris-versicolor
79 6 2.9 4.5 1.5 Iris-versicolor
80 5.7 2.6 3.5 1 Iris-versicolor
81 5.5 2.4 3.8 1.1 Iris-versicolor
82 5.5 2.4 3.7 1 Iris-versicolor
83 5.8 2.7 3.9 1.2 Iris-versicolor
84 6 2.7 5.1 1.6 Iris-versicolor
85 5.4 3 4.5 1.5 Iris-versicolor
86 6 3.4 4.5 1.6 Iris-versicolor
87 6.7 3.1 4.7 1.5 Iris-versicolor
88 6.3 2.3 4.4 1.3 Iris-versicolor
89 5.6 3 4.1 1.3 Iris-versicolor
90 5.5 2.5 4 1.3 Iris-versicolor
91 5.5 2.6 4.4 1.2 Iris-versicolor
92 6.1 3 4.6 1.4 Iris-versicolor
93 5.8 2.6 4 1.2 Iris-versicolor
94 5 2.3 3.3 1 Iris-versicolor
95 5.6 2.7 4.2 1.3 Iris-versicolor
96 5.7 3 4.2 1.2 Iris-versicolor
97 5.7 2.9 4.2 1.3 Iris-versicolor
98 6.2 2.9 4.3 1.3 Iris-versicolor
99 5.1 2.5 3 1.1 Iris-versicolor
100 5.7 2.8 4.1 1.3 Iris-versicolor
101 6.3 3.3 6 2.5 Iris-virginica
102 5.8 2.7 5.1 1.9 Iris-virginica
103 7.1 3 5.9 2.1 Iris-virginica
104 6.3 2.9 5.6 1.8 Iris-virginica
105 6.5 3 5.8 2.2 Iris-virginica
106 7.6 3 6.6 2.1 Iris-virginica
107 4.9 2.5 4.5 1.7 Iris-virginica
108 7.3 2.9 6.3 1.8 Iris-virginica
109 6.7 2.5 5.8 1.8 Iris-virginica
110 7.2 3.6 6.1 2.5 Iris-virginica
111 6.5 3.2 5.1 2 Iris-virginica
112 6.4 2.7 5.3 1.9 Iris-virginica
113 6.8 3 5.5 2.1 Iris-virginica
114 5.7 2.5 5 2 Iris-virginica
115 5.8 2.8 5.1 2.4 Iris-virginica
116 6.4 3.2 5.3 2.3 Iris-virginica
117 6.5 3 5.5 1.8 Iris-virginica
118 7.7 3.8 6.7 2.2 Iris-virginica
119 7.7 2.6 6.9 2.3 Iris-virginica
120 6 2.2 5 1.5 Iris-virginica
121 6.9 3.2 5.7 2.3 Iris-virginica
122 5.6 2.8 4.9 2 Iris-virginica
123 7.7 2.8 6.7 2 Iris-virginica
124 6.3 2.7 4.9 1.8 Iris-virginica
125 6.7 3.3 5.7 2.1 Iris-virginica
126 7.2 3.2 6 1.8 Iris-virginica
127 6.2 2.8 4.8 1.8 Iris-virginica
128 6.1 3 4.9 1.8 Iris-virginica
129 6.4 2.8 5.6 2.1 Iris-virginica
130 7.2 3 5.8 1.6 Iris-virginica
131 7.4 2.8 6.1 1.9 Iris-virginica
132 7.9 3.8 6.4 2 Iris-virginica
133 6.4 2.8 5.6 2.2 Iris-virginica
134 6.3 2.8 5.1 1.5 Iris-virginica
135 6.1 2.6 5.6 1.4 Iris-virginica
136 7.7 3 6.1 2.3 Iris-virginica
137 6.3 3.4 5.6 2.4 Iris-virginica
138 6.4 3.1 5.5 1.8 Iris-virginica
139 6 3 4.8 1.8 Iris-virginica
140 6.9 3.1 5.4 2.1 Iris-virginica
141 6.7 3.1 5.6 2.4 Iris-virginica
142 6.9 3.1 5.1 2.3 Iris-virginica
143 5.8 2.7 5.1 1.9 Iris-virginica
144 6.8 3.2 5.9 2.3 Iris-virginica
145 6.7 3.3 5.7 2.5 Iris-virginica
146 6.7 3 5.2 2.3 Iris-virginica
147 6.3 2.5 5 1.9 Iris-virginica
148 6.5 3 5.2 2 Iris-virginica
149 6.2 3.4 5.4 2.3 Iris-virginica
150 5.9 3 5.1 1.8 Iris-virginica

View File

@ -1,151 +0,0 @@
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3.0,1.4,0.1,Iris-setosa
4.3,3.0,1.1,0.1,Iris-setosa
5.8,4.0,1.2,0.2,Iris-setosa
5.7,4.4,1.5,0.4,Iris-setosa
5.4,3.9,1.3,0.4,Iris-setosa
5.1,3.5,1.4,0.3,Iris-setosa
5.7,3.8,1.7,0.3,Iris-setosa
5.1,3.8,1.5,0.3,Iris-setosa
5.4,3.4,1.7,0.2,Iris-setosa
5.1,3.7,1.5,0.4,Iris-setosa
4.6,3.6,1.0,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
4.8,3.4,1.9,0.2,Iris-setosa
5.0,3.0,1.6,0.2,Iris-setosa
5.0,3.4,1.6,0.4,Iris-setosa
5.2,3.5,1.5,0.2,Iris-setosa
5.2,3.4,1.4,0.2,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.8,3.1,1.6,0.2,Iris-setosa
5.4,3.4,1.5,0.4,Iris-setosa
5.2,4.1,1.5,0.1,Iris-setosa
5.5,4.2,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.0,3.2,1.2,0.2,Iris-setosa
5.5,3.5,1.3,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
4.4,3.0,1.3,0.2,Iris-setosa
5.1,3.4,1.5,0.2,Iris-setosa
5.0,3.5,1.3,0.3,Iris-setosa
4.5,2.3,1.3,0.3,Iris-setosa
4.4,3.2,1.3,0.2,Iris-setosa
5.0,3.5,1.6,0.6,Iris-setosa
5.1,3.8,1.9,0.4,Iris-setosa
4.8,3.0,1.4,0.3,Iris-setosa
5.1,3.8,1.6,0.2,Iris-setosa
4.6,3.2,1.4,0.2,Iris-setosa
5.3,3.7,1.5,0.2,Iris-setosa
5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4.0,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
5.7,2.8,4.5,1.3,Iris-versicolor
6.3,3.3,4.7,1.6,Iris-versicolor
4.9,2.4,3.3,1.0,Iris-versicolor
6.6,2.9,4.6,1.3,Iris-versicolor
5.2,2.7,3.9,1.4,Iris-versicolor
5.0,2.0,3.5,1.0,Iris-versicolor
5.9,3.0,4.2,1.5,Iris-versicolor
6.0,2.2,4.0,1.0,Iris-versicolor
6.1,2.9,4.7,1.4,Iris-versicolor
5.6,2.9,3.6,1.3,Iris-versicolor
6.7,3.1,4.4,1.4,Iris-versicolor
5.6,3.0,4.5,1.5,Iris-versicolor
5.8,2.7,4.1,1.0,Iris-versicolor
6.2,2.2,4.5,1.5,Iris-versicolor
5.6,2.5,3.9,1.1,Iris-versicolor
5.9,3.2,4.8,1.8,Iris-versicolor
6.1,2.8,4.0,1.3,Iris-versicolor
6.3,2.5,4.9,1.5,Iris-versicolor
6.1,2.8,4.7,1.2,Iris-versicolor
6.4,2.9,4.3,1.3,Iris-versicolor
6.6,3.0,4.4,1.4,Iris-versicolor
6.8,2.8,4.8,1.4,Iris-versicolor
6.7,3.0,5.0,1.7,Iris-versicolor
6.0,2.9,4.5,1.5,Iris-versicolor
5.7,2.6,3.5,1.0,Iris-versicolor
5.5,2.4,3.8,1.1,Iris-versicolor
5.5,2.4,3.7,1.0,Iris-versicolor
5.8,2.7,3.9,1.2,Iris-versicolor
6.0,2.7,5.1,1.6,Iris-versicolor
5.4,3.0,4.5,1.5,Iris-versicolor
6.0,3.4,4.5,1.6,Iris-versicolor
6.7,3.1,4.7,1.5,Iris-versicolor
6.3,2.3,4.4,1.3,Iris-versicolor
5.6,3.0,4.1,1.3,Iris-versicolor
5.5,2.5,4.0,1.3,Iris-versicolor
5.5,2.6,4.4,1.2,Iris-versicolor
6.1,3.0,4.6,1.4,Iris-versicolor
5.8,2.6,4.0,1.2,Iris-versicolor
5.0,2.3,3.3,1.0,Iris-versicolor
5.6,2.7,4.2,1.3,Iris-versicolor
5.7,3.0,4.2,1.2,Iris-versicolor
5.7,2.9,4.2,1.3,Iris-versicolor
6.2,2.9,4.3,1.3,Iris-versicolor
5.1,2.5,3.0,1.1,Iris-versicolor
5.7,2.8,4.1,1.3,Iris-versicolor
6.3,3.3,6.0,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
7.1,3.0,5.9,2.1,Iris-virginica
6.3,2.9,5.6,1.8,Iris-virginica
6.5,3.0,5.8,2.2,Iris-virginica
7.6,3.0,6.6,2.1,Iris-virginica
4.9,2.5,4.5,1.7,Iris-virginica
7.3,2.9,6.3,1.8,Iris-virginica
6.7,2.5,5.8,1.8,Iris-virginica
7.2,3.6,6.1,2.5,Iris-virginica
6.5,3.2,5.1,2.0,Iris-virginica
6.4,2.7,5.3,1.9,Iris-virginica
6.8,3.0,5.5,2.1,Iris-virginica
5.7,2.5,5.0,2.0,Iris-virginica
5.8,2.8,5.1,2.4,Iris-virginica
6.4,3.2,5.3,2.3,Iris-virginica
6.5,3.0,5.5,1.8,Iris-virginica
7.7,3.8,6.7,2.2,Iris-virginica
7.7,2.6,6.9,2.3,Iris-virginica
6.0,2.2,5.0,1.5,Iris-virginica
6.9,3.2,5.7,2.3,Iris-virginica
5.6,2.8,4.9,2.0,Iris-virginica
7.7,2.8,6.7,2.0,Iris-virginica
6.3,2.7,4.9,1.8,Iris-virginica
6.7,3.3,5.7,2.1,Iris-virginica
7.2,3.2,6.0,1.8,Iris-virginica
6.2,2.8,4.8,1.8,Iris-virginica
6.1,3.0,4.9,1.8,Iris-virginica
6.4,2.8,5.6,2.1,Iris-virginica
7.2,3.0,5.8,1.6,Iris-virginica
7.4,2.8,6.1,1.9,Iris-virginica
7.9,3.8,6.4,2.0,Iris-virginica
6.4,2.8,5.6,2.2,Iris-virginica
6.3,2.8,5.1,1.5,Iris-virginica
6.1,2.6,5.6,1.4,Iris-virginica
7.7,3.0,6.1,2.3,Iris-virginica
6.3,3.4,5.6,2.4,Iris-virginica
6.4,3.1,5.5,1.8,Iris-virginica
6.0,3.0,4.8,1.8,Iris-virginica
6.9,3.1,5.4,2.1,Iris-virginica
6.7,3.1,5.6,2.4,Iris-virginica
6.9,3.1,5.1,2.3,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
6.8,3.2,5.9,2.3,Iris-virginica
6.7,3.3,5.7,2.5,Iris-virginica
6.7,3.0,5.2,2.3,Iris-virginica
6.3,2.5,5.0,1.9,Iris-virginica
6.5,3.0,5.2,2.0,Iris-virginica
6.2,3.4,5.4,2.3,Iris-virginica
5.9,3.0,5.1,1.8,Iris-virginica
1 5.1 3.5 1.4 0.2 Iris-setosa
2 4.9 3.0 1.4 0.2 Iris-setosa
3 4.7 3.2 1.3 0.2 Iris-setosa
4 4.6 3.1 1.5 0.2 Iris-setosa
5 5.0 3.6 1.4 0.2 Iris-setosa
6 5.4 3.9 1.7 0.4 Iris-setosa
7 4.6 3.4 1.4 0.3 Iris-setosa
8 5.0 3.4 1.5 0.2 Iris-setosa
9 4.4 2.9 1.4 0.2 Iris-setosa
10 4.9 3.1 1.5 0.1 Iris-setosa
11 5.4 3.7 1.5 0.2 Iris-setosa
12 4.8 3.4 1.6 0.2 Iris-setosa
13 4.8 3.0 1.4 0.1 Iris-setosa
14 4.3 3.0 1.1 0.1 Iris-setosa
15 5.8 4.0 1.2 0.2 Iris-setosa
16 5.7 4.4 1.5 0.4 Iris-setosa
17 5.4 3.9 1.3 0.4 Iris-setosa
18 5.1 3.5 1.4 0.3 Iris-setosa
19 5.7 3.8 1.7 0.3 Iris-setosa
20 5.1 3.8 1.5 0.3 Iris-setosa
21 5.4 3.4 1.7 0.2 Iris-setosa
22 5.1 3.7 1.5 0.4 Iris-setosa
23 4.6 3.6 1.0 0.2 Iris-setosa
24 5.1 3.3 1.7 0.5 Iris-setosa
25 4.8 3.4 1.9 0.2 Iris-setosa
26 5.0 3.0 1.6 0.2 Iris-setosa
27 5.0 3.4 1.6 0.4 Iris-setosa
28 5.2 3.5 1.5 0.2 Iris-setosa
29 5.2 3.4 1.4 0.2 Iris-setosa
30 4.7 3.2 1.6 0.2 Iris-setosa
31 4.8 3.1 1.6 0.2 Iris-setosa
32 5.4 3.4 1.5 0.4 Iris-setosa
33 5.2 4.1 1.5 0.1 Iris-setosa
34 5.5 4.2 1.4 0.2 Iris-setosa
35 4.9 3.1 1.5 0.1 Iris-setosa
36 5.0 3.2 1.2 0.2 Iris-setosa
37 5.5 3.5 1.3 0.2 Iris-setosa
38 4.9 3.1 1.5 0.1 Iris-setosa
39 4.4 3.0 1.3 0.2 Iris-setosa
40 5.1 3.4 1.5 0.2 Iris-setosa
41 5.0 3.5 1.3 0.3 Iris-setosa
42 4.5 2.3 1.3 0.3 Iris-setosa
43 4.4 3.2 1.3 0.2 Iris-setosa
44 5.0 3.5 1.6 0.6 Iris-setosa
45 5.1 3.8 1.9 0.4 Iris-setosa
46 4.8 3.0 1.4 0.3 Iris-setosa
47 5.1 3.8 1.6 0.2 Iris-setosa
48 4.6 3.2 1.4 0.2 Iris-setosa
49 5.3 3.7 1.5 0.2 Iris-setosa
50 5.0 3.3 1.4 0.2 Iris-setosa
51 7.0 3.2 4.7 1.4 Iris-versicolor
52 6.4 3.2 4.5 1.5 Iris-versicolor
53 6.9 3.1 4.9 1.5 Iris-versicolor
54 5.5 2.3 4.0 1.3 Iris-versicolor
55 6.5 2.8 4.6 1.5 Iris-versicolor
56 5.7 2.8 4.5 1.3 Iris-versicolor
57 6.3 3.3 4.7 1.6 Iris-versicolor
58 4.9 2.4 3.3 1.0 Iris-versicolor
59 6.6 2.9 4.6 1.3 Iris-versicolor
60 5.2 2.7 3.9 1.4 Iris-versicolor
61 5.0 2.0 3.5 1.0 Iris-versicolor
62 5.9 3.0 4.2 1.5 Iris-versicolor
63 6.0 2.2 4.0 1.0 Iris-versicolor
64 6.1 2.9 4.7 1.4 Iris-versicolor
65 5.6 2.9 3.6 1.3 Iris-versicolor
66 6.7 3.1 4.4 1.4 Iris-versicolor
67 5.6 3.0 4.5 1.5 Iris-versicolor
68 5.8 2.7 4.1 1.0 Iris-versicolor
69 6.2 2.2 4.5 1.5 Iris-versicolor
70 5.6 2.5 3.9 1.1 Iris-versicolor
71 5.9 3.2 4.8 1.8 Iris-versicolor
72 6.1 2.8 4.0 1.3 Iris-versicolor
73 6.3 2.5 4.9 1.5 Iris-versicolor
74 6.1 2.8 4.7 1.2 Iris-versicolor
75 6.4 2.9 4.3 1.3 Iris-versicolor
76 6.6 3.0 4.4 1.4 Iris-versicolor
77 6.8 2.8 4.8 1.4 Iris-versicolor
78 6.7 3.0 5.0 1.7 Iris-versicolor
79 6.0 2.9 4.5 1.5 Iris-versicolor
80 5.7 2.6 3.5 1.0 Iris-versicolor
81 5.5 2.4 3.8 1.1 Iris-versicolor
82 5.5 2.4 3.7 1.0 Iris-versicolor
83 5.8 2.7 3.9 1.2 Iris-versicolor
84 6.0 2.7 5.1 1.6 Iris-versicolor
85 5.4 3.0 4.5 1.5 Iris-versicolor
86 6.0 3.4 4.5 1.6 Iris-versicolor
87 6.7 3.1 4.7 1.5 Iris-versicolor
88 6.3 2.3 4.4 1.3 Iris-versicolor
89 5.6 3.0 4.1 1.3 Iris-versicolor
90 5.5 2.5 4.0 1.3 Iris-versicolor
91 5.5 2.6 4.4 1.2 Iris-versicolor
92 6.1 3.0 4.6 1.4 Iris-versicolor
93 5.8 2.6 4.0 1.2 Iris-versicolor
94 5.0 2.3 3.3 1.0 Iris-versicolor
95 5.6 2.7 4.2 1.3 Iris-versicolor
96 5.7 3.0 4.2 1.2 Iris-versicolor
97 5.7 2.9 4.2 1.3 Iris-versicolor
98 6.2 2.9 4.3 1.3 Iris-versicolor
99 5.1 2.5 3.0 1.1 Iris-versicolor
100 5.7 2.8 4.1 1.3 Iris-versicolor
101 6.3 3.3 6.0 2.5 Iris-virginica
102 5.8 2.7 5.1 1.9 Iris-virginica
103 7.1 3.0 5.9 2.1 Iris-virginica
104 6.3 2.9 5.6 1.8 Iris-virginica
105 6.5 3.0 5.8 2.2 Iris-virginica
106 7.6 3.0 6.6 2.1 Iris-virginica
107 4.9 2.5 4.5 1.7 Iris-virginica
108 7.3 2.9 6.3 1.8 Iris-virginica
109 6.7 2.5 5.8 1.8 Iris-virginica
110 7.2 3.6 6.1 2.5 Iris-virginica
111 6.5 3.2 5.1 2.0 Iris-virginica
112 6.4 2.7 5.3 1.9 Iris-virginica
113 6.8 3.0 5.5 2.1 Iris-virginica
114 5.7 2.5 5.0 2.0 Iris-virginica
115 5.8 2.8 5.1 2.4 Iris-virginica
116 6.4 3.2 5.3 2.3 Iris-virginica
117 6.5 3.0 5.5 1.8 Iris-virginica
118 7.7 3.8 6.7 2.2 Iris-virginica
119 7.7 2.6 6.9 2.3 Iris-virginica
120 6.0 2.2 5.0 1.5 Iris-virginica
121 6.9 3.2 5.7 2.3 Iris-virginica
122 5.6 2.8 4.9 2.0 Iris-virginica
123 7.7 2.8 6.7 2.0 Iris-virginica
124 6.3 2.7 4.9 1.8 Iris-virginica
125 6.7 3.3 5.7 2.1 Iris-virginica
126 7.2 3.2 6.0 1.8 Iris-virginica
127 6.2 2.8 4.8 1.8 Iris-virginica
128 6.1 3.0 4.9 1.8 Iris-virginica
129 6.4 2.8 5.6 2.1 Iris-virginica
130 7.2 3.0 5.8 1.6 Iris-virginica
131 7.4 2.8 6.1 1.9 Iris-virginica
132 7.9 3.8 6.4 2.0 Iris-virginica
133 6.4 2.8 5.6 2.2 Iris-virginica
134 6.3 2.8 5.1 1.5 Iris-virginica
135 6.1 2.6 5.6 1.4 Iris-virginica
136 7.7 3.0 6.1 2.3 Iris-virginica
137 6.3 3.4 5.6 2.4 Iris-virginica
138 6.4 3.1 5.5 1.8 Iris-virginica
139 6.0 3.0 4.8 1.8 Iris-virginica
140 6.9 3.1 5.4 2.1 Iris-virginica
141 6.7 3.1 5.6 2.4 Iris-virginica
142 6.9 3.1 5.1 2.3 Iris-virginica
143 5.8 2.7 5.1 1.9 Iris-virginica
144 6.8 3.2 5.9 2.3 Iris-virginica
145 6.7 3.3 5.7 2.5 Iris-virginica
146 6.7 3.0 5.2 2.3 Iris-virginica
147 6.3 2.5 5.0 1.9 Iris-virginica
148 6.5 3.0 5.2 2.0 Iris-virginica
149 6.2 3.4 5.4 2.3 Iris-virginica
150 5.9 3.0 5.1 1.8 Iris-virginica

View File

@ -1,11 +0,0 @@
coefficients
.1
.2
.3
.4
.5
1
2
3
4
5
1 coefficients
2 .1
3 .2
4 .3
5 .4
6 .5
7 1
8 2
9 3
10 4
11 5

View File

@ -1,151 +0,0 @@
sl,sw,pl,pw,s
5.1,3.5,1.4,0.2,0
4.9,3,1.4,0.2,0
4.7,3.2,1.3,0.2,0
4.6,3.1,1.5,0.2,0
5,3.6,1.4,0.2,0
5.4,3.9,1.7,0.4,0
4.6,3.4,1.4,0.3,0
5,3.4,1.5,0.2,0
4.4,2.9,1.4,0.2,0
4.9,3.1,1.5,0.1,0
5.4,3.7,1.5,0.2,0
4.8,3.4,1.6,0.2,0
4.8,3,1.4,0.1,0
4.3,3,1.1,0.1,0
5.8,4,1.2,0.2,0
5.7,4.4,1.5,0.4,0
5.4,3.9,1.3,0.4,0
5.1,3.5,1.4,0.3,0
5.7,3.8,1.7,0.3,0
5.1,3.8,1.5,0.3,0
5.4,3.4,1.7,0.2,0
5.1,3.7,1.5,0.4,0
4.6,3.6,1,0.2,0
5.1,3.3,1.7,0.5,0
4.8,3.4,1.9,0.2,0
5,3,1.6,0.2,0
5,3.4,1.6,0.4,0
5.2,3.5,1.5,0.2,0
5.2,3.4,1.4,0.2,0
4.7,3.2,1.6,0.2,0
4.8,3.1,1.6,0.2,0
5.4,3.4,1.5,0.4,0
5.2,4.1,1.5,0.1,0
5.5,4.2,1.4,0.2,0
4.9,3.1,1.5,0.2,0
5,3.2,1.2,0.2,0
5.5,3.5,1.3,0.2,0
4.9,3.6,1.4,0.1,0
4.4,3,1.3,0.2,0
5.1,3.4,1.5,0.2,0
5,3.5,1.3,0.3,0
4.5,2.3,1.3,0.3,0
4.4,3.2,1.3,0.2,0
5,3.5,1.6,0.6,0
5.1,3.8,1.9,0.4,0
4.8,3,1.4,0.3,0
5.1,3.8,1.6,0.2,0
4.6,3.2,1.4,0.2,0
5.3,3.7,1.5,0.2,0
5,3.3,1.4,0.2,0
7,3.2,4.7,1.4,1
6.4,3.2,4.5,1.5,1
6.9,3.1,4.9,1.5,1
5.5,2.3,4,1.3,1
6.5,2.8,4.6,1.5,1
5.7,2.8,4.5,1.3,1
6.3,3.3,4.7,1.6,1
4.9,2.4,3.3,1,1
6.6,2.9,4.6,1.3,1
5.2,2.7,3.9,1.4,1
5,2,3.5,1,1
5.9,3,4.2,1.5,1
6,2.2,4,1,1
6.1,2.9,4.7,1.4,1
5.6,2.9,3.6,1.3,1
6.7,3.1,4.4,1.4,1
5.6,3,4.5,1.5,1
5.8,2.7,4.1,1,1
6.2,2.2,4.5,1.5,1
5.6,2.5,3.9,1.1,1
5.9,3.2,4.8,1.8,1
6.1,2.8,4,1.3,1
6.3,2.5,4.9,1.5,1
6.1,2.8,4.7,1.2,1
6.4,2.9,4.3,1.3,1
6.6,3,4.4,1.4,1
6.8,2.8,4.8,1.4,1
6.7,3,5,1.7,1
6,2.9,4.5,1.5,1
5.7,2.6,3.5,1,1
5.5,2.4,3.8,1.1,1
5.5,2.4,3.7,1,1
5.8,2.7,3.9,1.2,1
6,2.7,5.1,1.6,1
5.4,3,4.5,1.5,1
6,3.4,4.5,1.6,1
6.7,3.1,4.7,1.5,1
6.3,2.3,4.4,1.3,1
5.6,3,4.1,1.3,1
5.5,2.5,4,1.3,1
5.5,2.6,4.4,1.2,1
6.1,3,4.6,1.4,1
5.8,2.6,4,1.2,1
5,2.3,3.3,1,1
5.6,2.7,4.2,1.3,1
5.7,3,4.2,1.2,1
5.7,2.9,4.2,1.3,1
6.2,2.9,4.3,1.3,1
5.1,2.5,3,1.1,1
5.7,2.8,4.1,1.3,1
6.3,3.3,6,2.5,2
5.8,2.7,5.1,1.9,2
7.1,3,5.9,2.1,2
6.3,2.9,5.6,1.8,2
6.5,3,5.8,2.2,2
7.6,3,6.6,2.1,2
4.9,2.5,4.5,1.7,2
7.3,2.9,6.3,1.8,2
6.7,2.5,5.8,1.8,2
7.2,3.6,6.1,2.5,2
6.5,3.2,5.1,2,2
6.4,2.7,5.3,1.9,2
6.8,3,5.5,2.1,2
5.7,2.5,5,2,2
5.8,2.8,5.1,2.4,2
6.4,3.2,5.3,2.3,2
6.5,3,5.5,1.8,2
7.7,3.8,6.7,2.2,2
7.7,2.6,6.9,2.3,2
6,2.2,5,1.5,2
6.9,3.2,5.7,2.3,2
5.6,2.8,4.9,2,2
7.7,2.8,6.7,2,2
6.3,2.7,4.9,1.8,2
6.7,3.3,5.7,2.1,2
7.2,3.2,6,1.8,2
6.2,2.8,4.8,1.8,2
6.1,3,4.9,1.8,2
6.4,2.8,5.6,2.1,2
7.2,3,5.8,1.6,2
7.4,2.8,6.1,1.9,2
7.9,3.8,6.4,2,2
6.4,2.8,5.6,2.2,2
6.3,2.8,5.1,1.5,2
6.1,2.6,5.6,1.4,2
7.7,3,6.1,2.3,2
6.3,3.4,5.6,2.4,2
6.4,3.1,5.5,1.8,2
6,3,4.8,1.8,2
6.9,3.1,5.4,2.1,2
6.7,3.1,5.6,2.4,2
6.9,3.1,5.1,2.3,2
5.8,2.7,5.1,1.9,2
6.8,3.2,5.9,2.3,2
6.7,3.3,5.7,2.5,2
6.7,3,5.2,2.3,2
6.3,2.5,5,1.9,2
6.5,3,5.2,2,2
6.2,3.4,5.4,2.3,2
5.9,3,5.1,1.8,2
1 sl sw pl pw s
2 5.1 3.5 1.4 0.2 0
3 4.9 3 1.4 0.2 0
4 4.7 3.2 1.3 0.2 0
5 4.6 3.1 1.5 0.2 0
6 5 3.6 1.4 0.2 0
7 5.4 3.9 1.7 0.4 0
8 4.6 3.4 1.4 0.3 0
9 5 3.4 1.5 0.2 0
10 4.4 2.9 1.4 0.2 0
11 4.9 3.1 1.5 0.1 0
12 5.4 3.7 1.5 0.2 0
13 4.8 3.4 1.6 0.2 0
14 4.8 3 1.4 0.1 0
15 4.3 3 1.1 0.1 0
16 5.8 4 1.2 0.2 0
17 5.7 4.4 1.5 0.4 0
18 5.4 3.9 1.3 0.4 0
19 5.1 3.5 1.4 0.3 0
20 5.7 3.8 1.7 0.3 0
21 5.1 3.8 1.5 0.3 0
22 5.4 3.4 1.7 0.2 0
23 5.1 3.7 1.5 0.4 0
24 4.6 3.6 1 0.2 0
25 5.1 3.3 1.7 0.5 0
26 4.8 3.4 1.9 0.2 0
27 5 3 1.6 0.2 0
28 5 3.4 1.6 0.4 0
29 5.2 3.5 1.5 0.2 0
30 5.2 3.4 1.4 0.2 0
31 4.7 3.2 1.6 0.2 0
32 4.8 3.1 1.6 0.2 0
33 5.4 3.4 1.5 0.4 0
34 5.2 4.1 1.5 0.1 0
35 5.5 4.2 1.4 0.2 0
36 4.9 3.1 1.5 0.2 0
37 5 3.2 1.2 0.2 0
38 5.5 3.5 1.3 0.2 0
39 4.9 3.6 1.4 0.1 0
40 4.4 3 1.3 0.2 0
41 5.1 3.4 1.5 0.2 0
42 5 3.5 1.3 0.3 0
43 4.5 2.3 1.3 0.3 0
44 4.4 3.2 1.3 0.2 0
45 5 3.5 1.6 0.6 0
46 5.1 3.8 1.9 0.4 0
47 4.8 3 1.4 0.3 0
48 5.1 3.8 1.6 0.2 0
49 4.6 3.2 1.4 0.2 0
50 5.3 3.7 1.5 0.2 0
51 5 3.3 1.4 0.2 0
52 7 3.2 4.7 1.4 1
53 6.4 3.2 4.5 1.5 1
54 6.9 3.1 4.9 1.5 1
55 5.5 2.3 4 1.3 1
56 6.5 2.8 4.6 1.5 1
57 5.7 2.8 4.5 1.3 1
58 6.3 3.3 4.7 1.6 1
59 4.9 2.4 3.3 1 1
60 6.6 2.9 4.6 1.3 1
61 5.2 2.7 3.9 1.4 1
62 5 2 3.5 1 1
63 5.9 3 4.2 1.5 1
64 6 2.2 4 1 1
65 6.1 2.9 4.7 1.4 1
66 5.6 2.9 3.6 1.3 1
67 6.7 3.1 4.4 1.4 1
68 5.6 3 4.5 1.5 1
69 5.8 2.7 4.1 1 1
70 6.2 2.2 4.5 1.5 1
71 5.6 2.5 3.9 1.1 1
72 5.9 3.2 4.8 1.8 1
73 6.1 2.8 4 1.3 1
74 6.3 2.5 4.9 1.5 1
75 6.1 2.8 4.7 1.2 1
76 6.4 2.9 4.3 1.3 1
77 6.6 3 4.4 1.4 1
78 6.8 2.8 4.8 1.4 1
79 6.7 3 5 1.7 1
80 6 2.9 4.5 1.5 1
81 5.7 2.6 3.5 1 1
82 5.5 2.4 3.8 1.1 1
83 5.5 2.4 3.7 1 1
84 5.8 2.7 3.9 1.2 1
85 6 2.7 5.1 1.6 1
86 5.4 3 4.5 1.5 1
87 6 3.4 4.5 1.6 1
88 6.7 3.1 4.7 1.5 1
89 6.3 2.3 4.4 1.3 1
90 5.6 3 4.1 1.3 1
91 5.5 2.5 4 1.3 1
92 5.5 2.6 4.4 1.2 1
93 6.1 3 4.6 1.4 1
94 5.8 2.6 4 1.2 1
95 5 2.3 3.3 1 1
96 5.6 2.7 4.2 1.3 1
97 5.7 3 4.2 1.2 1
98 5.7 2.9 4.2 1.3 1
99 6.2 2.9 4.3 1.3 1
100 5.1 2.5 3 1.1 1
101 5.7 2.8 4.1 1.3 1
102 6.3 3.3 6 2.5 2
103 5.8 2.7 5.1 1.9 2
104 7.1 3 5.9 2.1 2
105 6.3 2.9 5.6 1.8 2
106 6.5 3 5.8 2.2 2
107 7.6 3 6.6 2.1 2
108 4.9 2.5 4.5 1.7 2
109 7.3 2.9 6.3 1.8 2
110 6.7 2.5 5.8 1.8 2
111 7.2 3.6 6.1 2.5 2
112 6.5 3.2 5.1 2 2
113 6.4 2.7 5.3 1.9 2
114 6.8 3 5.5 2.1 2
115 5.7 2.5 5 2 2
116 5.8 2.8 5.1 2.4 2
117 6.4 3.2 5.3 2.3 2
118 6.5 3 5.5 1.8 2
119 7.7 3.8 6.7 2.2 2
120 7.7 2.6 6.9 2.3 2
121 6 2.2 5 1.5 2
122 6.9 3.2 5.7 2.3 2
123 5.6 2.8 4.9 2 2
124 7.7 2.8 6.7 2 2
125 6.3 2.7 4.9 1.8 2
126 6.7 3.3 5.7 2.1 2
127 7.2 3.2 6 1.8 2
128 6.2 2.8 4.8 1.8 2
129 6.1 3 4.9 1.8 2
130 6.4 2.8 5.6 2.1 2
131 7.2 3 5.8 1.6 2
132 7.4 2.8 6.1 1.9 2
133 7.9 3.8 6.4 2 2
134 6.4 2.8 5.6 2.2 2
135 6.3 2.8 5.1 1.5 2
136 6.1 2.6 5.6 1.4 2
137 7.7 3 6.1 2.3 2
138 6.3 3.4 5.6 2.4 2
139 6.4 3.1 5.5 1.8 2
140 6 3 4.8 1.8 2
141 6.9 3.1 5.4 2.1 2
142 6.7 3.1 5.6 2.4 2
143 6.9 3.1 5.1 2.3 2
144 5.8 2.7 5.1 1.9 2
145 6.8 3.2 5.9 2.3 2
146 6.7 3.3 5.7 2.5 2
147 6.7 3 5.2 2.3 2
148 6.3 2.5 5 1.9 2
149 6.5 3 5.2 2 2
150 6.2 3.4 5.4 2.3 2
151 5.9 3 5.1 1.8 2

View File

@ -1,11 +0,0 @@
a,b,c,s
0,1,2,3.0
1,2,3,6.0
2,3,4,9.0
3,4,5,12.0
4,5,6,15.0
5,6,7,18.0
6,7,8,21.0
7,8,9,24.0
8,9,10,27.0
9,10,11,30.0
1 a b c s
2 0 1 2 3.0
3 1 2 3 6.0
4 2 3 4 9.0
5 3 4 5 12.0
6 4 5 6 15.0
7 5 6 7 18.0
8 6 7 8 21.0
9 7 8 9 24.0
10 8 9 10 27.0
11 9 10 11 30.0

View File

@ -1,6 +0,0 @@
a,b,c,s
0,1,2,3
1,2,3,6
2,3,4,9
3,4,5,12
4,5,6,15
1 a b c s
2 0 1 2 3
3 1 2 3 6
4 2 3 4 9
5 3 4 5 12
6 4 5 6 15

View File

@ -1,10 +0,0 @@
t,r,s
0.241,0.39,0.98
.615,0.72,1.01
1.00,1.00,1.00
1.88,1.52,1.01
11.8,5.20,0.99
29.5,9.54,1.00
84.0,19.18,1.00
165,30.06,1.00
248,39.44,1.00
1 t r s
2 0.241 0.39 0.98
3 .615 0.72 1.01
4 1.00 1.00 1.00
5 1.88 1.52 1.01
6 11.8 5.20 0.99
7 29.5 9.54 1.00
8 84.0 19.18 1.00
9 165 30.06 1.00
10 248 39.44 1.00

View File

@ -1,5 +0,0 @@
operator, arity
+,2
-,2
*,2
/,2
1 operator arity
2 + 2
3 - 2
4 * 2
5 / 2

View File

@ -1,5 +0,0 @@
operator, arity
+,2
-,2
*,2
/,2
1 operator arity
2 + 2
3 - 2
4 * 2
5 / 2

View File

@ -1,5 +0,0 @@
operator, arity
+,2
-,2
*,2
/,2
1 operator arity
2 + 2
3 - 2
4 * 2
5 / 2

View File

@ -1,5 +0,0 @@
operator, arity
+,2
-,2
*,2
/,2
1 operator arity
2 + 2
3 - 2
4 * 2
5 / 2

View File

@ -1,101 +0,0 @@
a,b,c,s
5.1,3.5,1.4,0
4.9,3,1.4,0
4.7,3.2,1.3,0
4.6,3.1,1.5,0
5,3.6,1.4,0
5.4,3.9,1.7,0
4.6,3.4,1.4,0
5,3.4,1.5,0
4.4,2.9,1.4,0
4.9,3.1,1.5,0
5.4,3.7,1.5,0
4.8,3.4,1.6,0
4.8,3,1.4,0
4.3,3,1.1,0
5.8,4,1.2,0
5.7,4.4,1.5,0
5.4,3.9,1.3,0
5.1,3.5,1.4,0
5.7,3.8,1.7,0
5.1,3.8,1.5,0
5.4,3.4,1.7,0
5.1,3.7,1.5,0
4.6,3.6,1,0
5.1,3.3,1.7,0
4.8,3.4,1.9,0
5,3,1.6,0
5,3.4,1.6,0
5.2,3.5,1.5,0
5.2,3.4,1.4,0
4.7,3.2,1.6,0
4.8,3.1,1.6,0
5.4,3.4,1.5,0
5.2,4.1,1.5,0
5.5,4.2,1.4,0
4.9,3.1,1.5,0
5,3.2,1.2,0
5.5,3.5,1.3,0
4.9,3.6,1.4,0
4.4,3,1.3,0
5.1,3.4,1.5,0
5,3.5,1.3,0
4.5,2.3,1.3,0
4.4,3.2,1.3,0
5,3.5,1.6,0
5.1,3.8,1.9,0
4.8,3,1.4,0
5.1,3.8,1.6,0
4.6,3.2,1.4,0
5.3,3.7,1.5,0
5,3.3,1.4,0
7,3.2,4.7,1
6.4,3.2,4.5,1
6.9,3.1,4.9,1
5.5,2.3,4,1
6.5,2.8,4.6,1
5.7,2.8,4.5,1
6.3,3.3,4.7,1
4.9,2.4,3.3,1
6.6,2.9,4.6,1
5.2,2.7,3.9,1
5,2,3.5,1
5.9,3,4.2,1
6,2.2,4,1
6.1,2.9,4.7,1
5.6,2.9,3.6,1
6.7,3.1,4.4,1
5.6,3,4.5,1
5.8,2.7,4.1,1
6.2,2.2,4.5,1
5.6,2.5,3.9,1
5.9,3.2,4.8,1
6.1,2.8,4,1
6.3,2.5,4.9,1
6.1,2.8,4.7,1
6.4,2.9,4.3,1
6.6,3,4.4,1
6.8,2.8,4.8,1
6.7,3,5,1
6,2.9,4.5,1
5.7,2.6,3.5,1
5.5,2.4,3.8,1
5.5,2.4,3.7,1
5.8,2.7,3.9,1
6,2.7,5.1,1
5.4,3,4.5,1
6,3.4,4.5,1
6.7,3.1,4.7,1
6.3,2.3,4.4,1
5.6,3,4.1,1
5.5,2.5,4,1
5.5,2.6,4.4,1
6.1,3,4.6,1
5.8,2.6,4,1
5,2.3,3.3,1
5.6,2.7,4.2,1
5.7,3,4.2,1
5.7,2.9,4.2,1
6.2,2.9,4.3,1
5.1,2.5,3,1
5.7,2.8,4.1,1
1 a b c s
2 5.1 3.5 1.4 0
3 4.9 3 1.4 0
4 4.7 3.2 1.3 0
5 4.6 3.1 1.5 0
6 5 3.6 1.4 0
7 5.4 3.9 1.7 0
8 4.6 3.4 1.4 0
9 5 3.4 1.5 0
10 4.4 2.9 1.4 0
11 4.9 3.1 1.5 0
12 5.4 3.7 1.5 0
13 4.8 3.4 1.6 0
14 4.8 3 1.4 0
15 4.3 3 1.1 0
16 5.8 4 1.2 0
17 5.7 4.4 1.5 0
18 5.4 3.9 1.3 0
19 5.1 3.5 1.4 0
20 5.7 3.8 1.7 0
21 5.1 3.8 1.5 0
22 5.4 3.4 1.7 0
23 5.1 3.7 1.5 0
24 4.6 3.6 1 0
25 5.1 3.3 1.7 0
26 4.8 3.4 1.9 0
27 5 3 1.6 0
28 5 3.4 1.6 0
29 5.2 3.5 1.5 0
30 5.2 3.4 1.4 0
31 4.7 3.2 1.6 0
32 4.8 3.1 1.6 0
33 5.4 3.4 1.5 0
34 5.2 4.1 1.5 0
35 5.5 4.2 1.4 0
36 4.9 3.1 1.5 0
37 5 3.2 1.2 0
38 5.5 3.5 1.3 0
39 4.9 3.6 1.4 0
40 4.4 3 1.3 0
41 5.1 3.4 1.5 0
42 5 3.5 1.3 0
43 4.5 2.3 1.3 0
44 4.4 3.2 1.3 0
45 5 3.5 1.6 0
46 5.1 3.8 1.9 0
47 4.8 3 1.4 0
48 5.1 3.8 1.6 0
49 4.6 3.2 1.4 0
50 5.3 3.7 1.5 0
51 5 3.3 1.4 0
52 7 3.2 4.7 1
53 6.4 3.2 4.5 1
54 6.9 3.1 4.9 1
55 5.5 2.3 4 1
56 6.5 2.8 4.6 1
57 5.7 2.8 4.5 1
58 6.3 3.3 4.7 1
59 4.9 2.4 3.3 1
60 6.6 2.9 4.6 1
61 5.2 2.7 3.9 1
62 5 2 3.5 1
63 5.9 3 4.2 1
64 6 2.2 4 1
65 6.1 2.9 4.7 1
66 5.6 2.9 3.6 1
67 6.7 3.1 4.4 1
68 5.6 3 4.5 1
69 5.8 2.7 4.1 1
70 6.2 2.2 4.5 1
71 5.6 2.5 3.9 1
72 5.9 3.2 4.8 1
73 6.1 2.8 4 1
74 6.3 2.5 4.9 1
75 6.1 2.8 4.7 1
76 6.4 2.9 4.3 1
77 6.6 3 4.4 1
78 6.8 2.8 4.8 1
79 6.7 3 5 1
80 6 2.9 4.5 1
81 5.7 2.6 3.5 1
82 5.5 2.4 3.8 1
83 5.5 2.4 3.7 1
84 5.8 2.7 3.9 1
85 6 2.7 5.1 1
86 5.4 3 4.5 1
87 6 3.4 4.5 1
88 6.7 3.1 4.7 1
89 6.3 2.3 4.4 1
90 5.6 3 4.1 1
91 5.5 2.5 4 1
92 5.5 2.6 4.4 1
93 6.1 3 4.6 1
94 5.8 2.6 4 1
95 5 2.3 3.3 1
96 5.6 2.7 4.2 1
97 5.7 3 4.2 1
98 5.7 2.9 4.2 1
99 6.2 2.9 4.3 1
100 5.1 2.5 3 1
101 5.7 2.8 4.1 1

View File

@ -1,151 +0,0 @@
a,b,c,s
5.1,3.5,1.4,0
4.9,3,1.4,0
4.7,3.2,1.3,0
4.6,3.1,1.5,0
5,3.6,1.4,0
5.4,3.9,1.7,0
4.6,3.4,1.4,0
5,3.4,1.5,0
4.4,2.9,1.4,0
4.9,3.1,1.5,0
5.4,3.7,1.5,0
4.8,3.4,1.6,0
4.8,3,1.4,0
4.3,3,1.1,0
5.8,4,1.2,0
5.7,4.4,1.5,0
5.4,3.9,1.3,0
5.1,3.5,1.4,0
5.7,3.8,1.7,0
5.1,3.8,1.5,0
5.4,3.4,1.7,0
5.1,3.7,1.5,0
4.6,3.6,1,0
5.1,3.3,1.7,0
4.8,3.4,1.9,0
5,3,1.6,0
5,3.4,1.6,0
5.2,3.5,1.5,0
5.2,3.4,1.4,0
4.7,3.2,1.6,0
4.8,3.1,1.6,0
5.4,3.4,1.5,0
5.2,4.1,1.5,0
5.5,4.2,1.4,0
4.9,3.1,1.5,0
5,3.2,1.2,0
5.5,3.5,1.3,0
4.9,3.6,1.4,0
4.4,3,1.3,0
5.1,3.4,1.5,0
5,3.5,1.3,0
4.5,2.3,1.3,0
4.4,3.2,1.3,0
5,3.5,1.6,0
5.1,3.8,1.9,0
4.8,3,1.4,0
5.1,3.8,1.6,0
4.6,3.2,1.4,0
5.3,3.7,1.5,0
5,3.3,1.4,0
7,3.2,4.7,1
6.4,3.2,4.5,1
6.9,3.1,4.9,1
5.5,2.3,4,1
6.5,2.8,4.6,1
5.7,2.8,4.5,1
6.3,3.3,4.7,1
4.9,2.4,3.3,1
6.6,2.9,4.6,1
5.2,2.7,3.9,1
5,2,3.5,1
5.9,3,4.2,1
6,2.2,4,1
6.1,2.9,4.7,1
5.6,2.9,3.6,1
6.7,3.1,4.4,1
5.6,3,4.5,1
5.8,2.7,4.1,1
6.2,2.2,4.5,1
5.6,2.5,3.9,1
5.9,3.2,4.8,1
6.1,2.8,4,1
6.3,2.5,4.9,1
6.1,2.8,4.7,1
6.4,2.9,4.3,1
6.6,3,4.4,1
6.8,2.8,4.8,1
6.7,3,5,1
6,2.9,4.5,1
5.7,2.6,3.5,1
5.5,2.4,3.8,1
5.5,2.4,3.7,1
5.8,2.7,3.9,1
6,2.7,5.1,1
5.4,3,4.5,1
6,3.4,4.5,1
6.7,3.1,4.7,1
6.3,2.3,4.4,1
5.6,3,4.1,1
5.5,2.5,4,1
5.5,2.6,4.4,1
6.1,3,4.6,1
5.8,2.6,4,1
5,2.3,3.3,1
5.6,2.7,4.2,1
5.7,3,4.2,1
5.7,2.9,4.2,1
6.2,2.9,4.3,1
5.1,2.5,3,1
5.7,2.8,4.1,1
6.3,3.3,6,2
5.8,2.7,5.1,2
7.1,3,5.9,2
6.3,2.9,5.6,2
6.5,3,5.8,2
7.6,3,6.6,2
4.9,2.5,4.5,2
7.3,2.9,6.3,2
6.7,2.5,5.8,2
7.2,3.6,6.1,2
6.5,3.2,5.1,2
6.4,2.7,5.3,2
6.8,3,5.5,2
5.7,2.5,5,2
5.8,2.8,5.1,2
6.4,3.2,5.3,2
6.5,3,5.5,2
7.7,3.8,6.7,2
7.7,2.6,6.9,2
6,2.2,5,2
6.9,3.2,5.7,2
5.6,2.8,4.9,2
7.7,2.8,6.7,2
6.3,2.7,4.9,2
6.7,3.3,5.7,2
7.2,3.2,6,2
6.2,2.8,4.8,2
6.1,3,4.9,2
6.4,2.8,5.6,2
7.2,3,5.8,2
7.4,2.8,6.1,2
7.9,3.8,6.4,2
6.4,2.8,5.6,2
6.3,2.8,5.1,2
6.1,2.6,5.6,2
7.7,3,6.1,2
6.3,3.4,5.6,2
6.4,3.1,5.5,2
6,3,4.8,2
6.9,3.1,5.4,2
6.7,3.1,5.6,2
6.9,3.1,5.1,2
5.8,2.7,5.1,2
6.8,3.2,5.9,2
6.7,3.3,5.7,2
6.7,3,5.2,2
6.3,2.5,5,2
6.5,3,5.2,2
6.2,3.4,5.4,2
5.9,3,5.1,2
1 a b c s
2 5.1 3.5 1.4 0
3 4.9 3 1.4 0
4 4.7 3.2 1.3 0
5 4.6 3.1 1.5 0
6 5 3.6 1.4 0
7 5.4 3.9 1.7 0
8 4.6 3.4 1.4 0
9 5 3.4 1.5 0
10 4.4 2.9 1.4 0
11 4.9 3.1 1.5 0
12 5.4 3.7 1.5 0
13 4.8 3.4 1.6 0
14 4.8 3 1.4 0
15 4.3 3 1.1 0
16 5.8 4 1.2 0
17 5.7 4.4 1.5 0
18 5.4 3.9 1.3 0
19 5.1 3.5 1.4 0
20 5.7 3.8 1.7 0
21 5.1 3.8 1.5 0
22 5.4 3.4 1.7 0
23 5.1 3.7 1.5 0
24 4.6 3.6 1 0
25 5.1 3.3 1.7 0
26 4.8 3.4 1.9 0
27 5 3 1.6 0
28 5 3.4 1.6 0
29 5.2 3.5 1.5 0
30 5.2 3.4 1.4 0
31 4.7 3.2 1.6 0
32 4.8 3.1 1.6 0
33 5.4 3.4 1.5 0
34 5.2 4.1 1.5 0
35 5.5 4.2 1.4 0
36 4.9 3.1 1.5 0
37 5 3.2 1.2 0
38 5.5 3.5 1.3 0
39 4.9 3.6 1.4 0
40 4.4 3 1.3 0
41 5.1 3.4 1.5 0
42 5 3.5 1.3 0
43 4.5 2.3 1.3 0
44 4.4 3.2 1.3 0
45 5 3.5 1.6 0
46 5.1 3.8 1.9 0
47 4.8 3 1.4 0
48 5.1 3.8 1.6 0
49 4.6 3.2 1.4 0
50 5.3 3.7 1.5 0
51 5 3.3 1.4 0
52 7 3.2 4.7 1
53 6.4 3.2 4.5 1
54 6.9 3.1 4.9 1
55 5.5 2.3 4 1
56 6.5 2.8 4.6 1
57 5.7 2.8 4.5 1
58 6.3 3.3 4.7 1
59 4.9 2.4 3.3 1
60 6.6 2.9 4.6 1
61 5.2 2.7 3.9 1
62 5 2 3.5 1
63 5.9 3 4.2 1
64 6 2.2 4 1
65 6.1 2.9 4.7 1
66 5.6 2.9 3.6 1
67 6.7 3.1 4.4 1
68 5.6 3 4.5 1
69 5.8 2.7 4.1 1
70 6.2 2.2 4.5 1
71 5.6 2.5 3.9 1
72 5.9 3.2 4.8 1
73 6.1 2.8 4 1
74 6.3 2.5 4.9 1
75 6.1 2.8 4.7 1
76 6.4 2.9 4.3 1
77 6.6 3 4.4 1
78 6.8 2.8 4.8 1
79 6.7 3 5 1
80 6 2.9 4.5 1
81 5.7 2.6 3.5 1
82 5.5 2.4 3.8 1
83 5.5 2.4 3.7 1
84 5.8 2.7 3.9 1
85 6 2.7 5.1 1
86 5.4 3 4.5 1
87 6 3.4 4.5 1
88 6.7 3.1 4.7 1
89 6.3 2.3 4.4 1
90 5.6 3 4.1 1
91 5.5 2.5 4 1
92 5.5 2.6 4.4 1
93 6.1 3 4.6 1
94 5.8 2.6 4 1
95 5 2.3 3.3 1
96 5.6 2.7 4.2 1
97 5.7 3 4.2 1
98 5.7 2.9 4.2 1
99 6.2 2.9 4.3 1
100 5.1 2.5 3 1
101 5.7 2.8 4.1 1
102 6.3 3.3 6 2
103 5.8 2.7 5.1 2
104 7.1 3 5.9 2
105 6.3 2.9 5.6 2
106 6.5 3 5.8 2
107 7.6 3 6.6 2
108 4.9 2.5 4.5 2
109 7.3 2.9 6.3 2
110 6.7 2.5 5.8 2
111 7.2 3.6 6.1 2
112 6.5 3.2 5.1 2
113 6.4 2.7 5.3 2
114 6.8 3 5.5 2
115 5.7 2.5 5 2
116 5.8 2.8 5.1 2
117 6.4 3.2 5.3 2
118 6.5 3 5.5 2
119 7.7 3.8 6.7 2
120 7.7 2.6 6.9 2
121 6 2.2 5 2
122 6.9 3.2 5.7 2
123 5.6 2.8 4.9 2
124 7.7 2.8 6.7 2
125 6.3 2.7 4.9 2
126 6.7 3.3 5.7 2
127 7.2 3.2 6 2
128 6.2 2.8 4.8 2
129 6.1 3 4.9 2
130 6.4 2.8 5.6 2
131 7.2 3 5.8 2
132 7.4 2.8 6.1 2
133 7.9 3.8 6.4 2
134 6.4 2.8 5.6 2
135 6.3 2.8 5.1 2
136 6.1 2.6 5.6 2
137 7.7 3 6.1 2
138 6.3 3.4 5.6 2
139 6.4 3.1 5.5 2
140 6 3 4.8 2
141 6.9 3.1 5.4 2
142 6.7 3.1 5.6 2
143 6.9 3.1 5.1 2
144 5.8 2.7 5.1 2
145 6.8 3.2 5.9 2
146 6.7 3.3 5.7 2
147 6.7 3 5.2 2
148 6.3 2.5 5 2
149 6.5 3 5.2 2
150 6.2 3.4 5.4 2
151 5.9 3 5.1 2

View File

@ -1,10 +0,0 @@
p,a,s
0.241,0.39,0.98
.615,0.72,1.01
1.00,1.00,1.00
1.88,1.52,1.01
11.8,5.20,0.99
29.5,9.54,1.00
84.0,19.18,1.00
165,30.06,1.00
248,39.44,1.00
1 p a s
2 0.241 0.39 0.98
3 .615 0.72 1.01
4 1.00 1.00 1.00
5 1.88 1.52 1.01
6 11.8 5.20 0.99
7 29.5 9.54 1.00
8 84.0 19.18 1.00
9 165 30.06 1.00
10 248 39.44 1.00

View File

@ -1,6 +0,0 @@
a,b,s
1,2,1
2,2,4
3,2,9
4,2,16
5,2,25
1 a b s
2 1 2 1
3 2 2 4
4 3 2 9
5 4 2 16
6 5 2 25

View File

@ -1,10 +0,0 @@
a,b,s
4,10,20
9,10,30
16,10,40
25,10,50
36,10,60
49,10,70
64,10,80
81,10,90
100,10,100
1 a b s
2 4 10 20
3 9 10 30
4 16 10 40
5 25 10 50
6 36 10 60
7 49 10 70
8 64 10 80
9 81 10 90
10 100 10 100

View File

@ -1,11 +0,0 @@
a,b,c,s
0,1,2,3
1,2,3,6
2,3,4,9
3,4,5,12
4,5,6,15
5,6,7,18
6,7,8,21
7,8,9,24
8,9,10,27
9,10,11,30
1 a b c s
2 0 1 2 3
3 1 2 3 6
4 2 3 4 9
5 3 4 5 12
6 4 5 6 15
7 5 6 7 18
8 6 7 8 21
9 7 8 9 24
10 8 9 10 27
11 9 10 11 30

View File

@ -1,4 +0,0 @@
a,b,c,s
1,2,45,0.5253219888
2,0,22,-1.9999216528
10,3,-5,2.8366218546
1 a b c s
2 1 2 45 0.5253219888
3 2 0 22 -1.9999216528
4 10 3 -5 2.8366218546

View File

@ -1,127 +0,0 @@
This file contains all operators supported by Karoo GP as of v1.0.
Note that some operators are simply entered along with the arity (total number of elements anticipated), while others
must be preceded by another operator due the manner in which Karoo flattens the trees into a mathematical expression.
Else, Karoo will attempt a function such as (a)sin(b) where sin(b) is correct, but (a)sin requires an operator between
the operand 'a' and the operator 'sin'. This will be addressed in a future update to Karoo.
To apply one or more operator to a given run, copy/paste the desired operators from the USE IN KAROO table(s) below,
into the associated file for Classification (files/operators_CLASSIFY.csv) or Regression (files/operators_REGRESS.csv)
* OPERATOR EXAMPLE *
add a + b
subtract a - b
multiply a * b
divide a / b
pow a ** 2
USE IN KAROO
+,2
-,2
*,2
/,2
**,2
* OPERATOR EXAMPLE *
logical_and a and b
logical_or a or b
logical_not not a
USE IN KAROO
and,2
or,2
not,1
* OPERATOR EXAMPLE (
abs abs(a)
log log(a)
log1p log1p(a)
sign sign(a)
square square(a)
sqrt sqrt(a)
USE IN KAROO
+ abs,2
- abs,2
* abs,2
/ abs,2
+ log,2
- log,2
* log,2
/ log,2
+ log1p,2
- log1p,2
* log1p,2
/ log1p,2
+ sign,2
- sign,2
* sign,2
/ sign,2
+ square,2
- square,2
* square,2
/ square,2
+ sqrt,2
- sqrt,2
* sqrt,2
/ sqrt,2
* OPERATOR EXAMPLE *
cos cos(a)
sin sin(a)
tan tan(a)
acos acos(a)
asin asin(a)
atan atan(a)
USE IN KAROO
+ cos,2
- cos,2
* cos,2
/ cos,2
+ sin,2
- sin,2
* sin,2
/ sin,2
+ tan,2
- tan,2
* tan,2
/ tan,2
+ acos,2
- acos,2
* acos,2
/ acos,2
+ asin,2
- asin,2
* asin,2
/ asin,2
+ atan,2
- atan,2
* atan,2
/ atan,2
The following operators produce TRUE or FALSE statements, and are therefore, at this time, not supported. A future
version of Karoo will instead output a binary 1 or 0 instead.
equal a == b
not_equal a != b
less a < b
less_equal a <= b
greater a > b
greater_equal a >= 1

56
index.html 100644
View File

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="UTF-8">
<title>Karoo gp by kstaats</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="stylesheets/normalize.css" media="screen">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
</head>
<body>
<section class="page-header">
<h1 class="project-name">Karoo gp</h1>
<h2 class="project-tagline">A Genetic Programming platform for Python</h2>
<a href="https://github.com/kstaats/karoo_gp" class="btn">View on GitHub</a>
<a href="https://github.com/kstaats/karoo_gp/zipball/master" class="btn">Download .zip</a>
<a href="https://github.com/kstaats/karoo_gp/tarball/master" class="btn">Download .tar.gz</a>
</section>
<section class="main-content">
<p><a href="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_desktop.png"><img src="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_desktop-224x300.png" alt="Karoo GP by Kai Staats" width="224" height="300" hspace="20" align="left"></a> Karoo GP is a Genetic Programming (GP) suite, a subset of Machine Learning written in Python. GP provides both symbolic regression and classification analysis. Karoo GP is a scalable platform with multicore and GPU support (via TensorFlow), designed to readily work with realworld data. <em>No programming required.</em> As a teaching tool, it enables instructors to share step-by-step how an evolutionary algorithm arrives to its solution. As a hands-on learning tool, Karoo GP supports rapid, repeatable experimentation.</p>
<p>Karoo GP includes a Desktop application with an intuitive user interface, a fully scriptable Server application with user defined default parameters, command-line arguments, and automatically generate evolutionary population and parameter archives; a stand-alone Python script which generates randomly constructed subsets of larger datasets and another which normalises datasets; and a toy model which shows the inner workings of multiclass classification.</p>
<p>The included User Guide (PDF) offers system requirements, a crash-course in Genetic Programming, and use of Karoo GP for both the novice and advanced user.
 
 </p>
<p>Features include:</p>
<ul>
<li>written in Object Oriented Python with a hierarchical naming scheme for all methods</li>
<li>multicore and GPU support through the TensorFlow library</li>
<li><em>Desktop</em> script provides a simple user interface with menu, 5 display modes (see below), and runtime reconfiguration of parameters</li>
<li><em>Server</em> script enables configurable runs via command-line arguments</li>
<li>anticipates datasets as standard .csv files</li>
<li>automatically archives the population of each generation and runtime parameters</li>
<li>supports customised seed populations</li>
<li>relatively simple framework for preparing custom fitness functions and evaluation routines</li>
</ul>
<p>Karoo GP was developed during Staats' MSc research at the University of Cape Town / African Institute for Mathematical Sciences and the Square Kilometre Array (SKA), South Africa, is currently in use at LIGO, and owes its foundation to the "Field Guide to Genetic Programming" by Poli, Langdon, McPhee, and Koza. The Field Guide and many more GP publications and software packages are showcased at <a href="http://geneticprogramming.com/publications/">www.geneticprogramming.com</a></p>
<p><a href="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_args.png"><img src="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_args-95x128.png" alt="Karoo GP by Kai Staats" width="95" height="128"></a> <a href="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_tree_print.png"><img src="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_tree_print-95x128.png" alt="Karoo GP by Kai Staats" width="95" height="128"></a> <a href="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_runtime_options.png"><img src="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_runtime_options-95x128.png" alt="Karoo GP by Kai Staats" width="95" height="128"></a> <a href="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_go_test.png"><img src="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_go_test-95x128.png" alt="Karoo GP by Kai Staats" width="95" height="128"></a> <a href="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_interactive_mode.png"><img src="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_interactive_mode-95x128.png" alt="Karoo GP by Kai Staats" width="95" height="128"></a> <a href="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_debug_mode.png"><img src="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_debug_mode-95x128.png" alt="Karoo GP by Kai Staats" width="95" height="128"></a> <a href="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_population_archive.png"><img src="http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_population_archive-105x128.png" alt="Karoo GP by Kai Staats" width="105" height="128"></a></p>
<footer class="site-footer">
<span class="site-footer-owner"><a href="https://github.com/kstaats/karoo_gp">Karoo gp</a> is maintained by <a href="https://github.com/kstaats">kstaats</a>.</span>
<span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a> using the <a href="https://github.com/jasonlong/cayman-theme">Cayman theme</a> by <a href="https://twitter.com/jasonlong">Jason Long</a>.</span>
</footer>
</section>
</body>
</html>

View File

@ -1,253 +0,0 @@
# Karoo GP (desktop + server combined)
# Use Genetic Programming for Classification and Symbolic Regression
# by Kai Staats, MSc with TensorFlow support provided by Iurii Milovanov; see LICENSE.md
# version 2.3 for Python 3.6
'''
A word to the newbie, expert, and brave--
Even if you are highly experienced in Genetic Programming, it is recommended that you review the 'Karoo User Guide'
before running this application. While your computer will not burst into flames nor will the sun collapse into a black
hole if you do not, you will likely find more enjoyment of this particular flavour of GP with a little understanding
of its intent and design.
Without any command line arguments, Karoo GP relies upon user settings and the datasets located in karoo_gp/files/.
$ python karoo_gp_main.py
If you include the path to an external dataset, it will auto-load at launch:
$ python karoo_gp_main.py /[path]/[to_your]/[filename].csv
If you include one or more additional arguments, they will override the default values, as follows:
-ker [r,c,m] fitness function: (r)egression, (c)lassification, or (m)atching
-typ [f,g,r] Tree type: (f)ull, (g)row, or (r)amped half/half
-bas [3...10] maximum Tree depth for initial population
-max [3...10] maximum Tree depth for entire run
-min [3 to 2^(bas +1) - 1] minimum number of nodes
-pop [10...1000] number of trees in each generational population
-gen [1...100] number of generations
-tor [7 per 100] number of trees selected for tournament
-evr [0.0...1.0] decimal percent of pop generated through Reproduction
-evp [0.0...1.0] decimal percent of pop generated through Point Mutation
-evb [0.0...1.0] decimal percent of pop generated through Branch Mutation
-evc [0.0...1.0] decimal percent of pop generated through Crossover
If you include any of the above flags, then you *must* also include a flag to load an external dataset.
-fil [path]/[to]/[data].csv an external dataset
An example is given, as follows:
$ python karoo_gp_server.py -ker c -typ r -bas 4 -fil [path]/[to]/[data].csv
'''
import os
import sys; sys.path.append('modules/') # add directory 'modules' to the current path
import argparse
import karoo_gp_base_class; gp = karoo_gp_base_class.Base_GP()
os.system('clear')
print ('\n\033[36m\033[1m')
print ('\t ** ** ****** ***** ****** ****** ****** ******')
print ('\t ** ** ** ** ** ** ** ** ** ** ** ** **')
print ('\t ** ** ** ** ** ** ** ** ** ** ** ** **')
print ('\t **** ******** ****** ** ** ** ** ** *** *******')
print ('\t ** ** ** ** ** ** ** ** ** ** ** ** **')
print ('\t ** ** ** ** ** ** ** ** ** ** ** ** **')
print ('\t ** ** ** ** ** ** ** ** ** ** ** ** **')
print ('\t ** ** ** ** ** ** ****** ****** ****** **')
print ('\033[0;0m')
print ('\t\033[36m Genetic Programming in Python with TensorFlow - by Kai Staats, version 2.3\033[0;0m')
print ('')
#++++++++++++++++++++++++++++++++++++++++++
# User Interface for Configuation |
#++++++++++++++++++++++++++++++++++++++++++
if len(sys.argv) < 3: # either no command line argument, or only a filename is provided
while True:
try:
query = input('\t Select (c)lassification, (r)egression, (m)atching, or (p)lay (default m): ')
if query in ['c','r','m','p','']: kernel = query or 'm'; break
else: raise ValueError()
except ValueError: print ('\t\033[32m Select from the options given. Try again ...\n\033[0;0m')
except KeyboardInterrupt: sys.exit()
if kernel == 'p': # play mode
while True:
try:
query = input('\t Select (f)ull or (g)row (default g): ')
if query in ['f','g','']: tree_type = query or 'f'; break
else: raise ValueError()
except ValueError: print ('\t\033[32m Select from the options given. Try again ...\n\033[0;0m')
except KeyboardInterrupt: sys.exit()
while True:
try:
query = input('\t Enter the depth of the Tree (default 1): ')
if query == '': tree_depth_base = 1; break
elif int(query) in list(range(1,11)): tree_depth_base = int(query); break
else: raise ValueError()
except ValueError: print ('\t\033[32m Enter a number from 1 including 10. Try again ...\n\033[0;0m')
except KeyboardInterrupt: sys.exit()
tree_depth_max = tree_depth_base
tree_depth_min = 3
tree_pop_max = 1
gen_max = 1
tourn_size = 0
display = 'm'
# evolve_repro, evolve_point, evolve_branch, evolve_cross, tourn_size, precision, filename are not required
else: # if any other kernel is selected
while True:
try:
query = input('\t Select (f)ull, (g)row, or (r)amped 50/50 method (default r): ')
if query in ['f','g','r','']: tree_type = query or 'r'; break
else: raise ValueError()
except ValueError: print ('\t\033[32m Select from the options given. Try again ...\n\033[0;0m')
except KeyboardInterrupt: sys.exit()
while True:
try:
query = input('\t Enter depth of the \033[3minitial\033[0;0m population of Trees (default 3): ')
if query == '': tree_depth_base = 3; break
elif int(query) in list(range(1,11)): tree_depth_base = int(query); break
else: raise ValueError()
except ValueError: print ('\t\033[32m Enter a number from 1 including 10. Try again ...\n\033[0;0m')
except KeyboardInterrupt: sys.exit()
while True:
try:
query = input('\t Enter maximum Tree depth (default %s): ' %str(tree_depth_base))
if query == '': tree_depth_max = tree_depth_base; break
elif int(query) in list(range(tree_depth_base,11)): tree_depth_max = int(query); break
else: raise ValueError()
except ValueError: print ('\t\033[32m Enter a number from %s including 10. Try again ...\n\033[0;0m' %str(tree_depth_base))
except KeyboardInterrupt: sys.exit()
max_nodes = 2**(tree_depth_base+1)-1 # calc the max number of nodes for the given depth
while True:
try:
query = input('\t Enter minimum number of nodes for any given Tree (default 3; max %s): ' %str(max_nodes))
if query == '': tree_depth_min = 3; break
elif int(query) in list(range(3,max_nodes + 1)): tree_depth_min = int(query); break
else: raise ValueError()
except ValueError: print ('\t\033[32m Enter a number from 3 including %s. Try again ...\n\033[0;0m' %str(max_nodes))
except KeyboardInterrupt: sys.exit()
#while True:
#try:
#query = input('\t Select (p)artial or (f)ull operator inclusion (default p): ')
#if query == '': swim = 'p'; break
#elif query in ['p','f']: swim = query; break
#else: raise ValueError()
#except ValueError: print ('\t\033[32m Select from the options given. Try again ...\n\033[0;0m')
#except KeyboardInterrupt: sys.exit()
while True:
try:
query = input('\t Enter number of Trees in each population (default 100): ')
if query == '': tree_pop_max = 100; break
elif int(query) in list(range(1,1001)): tree_pop_max = int(query); break
else: raise ValueError()
except ValueError: print ('\t\033[32m Enter a number from 1 including 1000. Try again ...\n\033[0;0m')
except KeyboardInterrupt: sys.exit()
# calculate the tournament size
tourn_size = int(tree_pop_max * 0.07) # default 7% can be changed by selecting (g)eneration and then 'ts'
if tourn_size < 2: tourn_size = 2 # forces some diversity for small populations
if tree_pop_max == 1: tourn_size = 1 # in theory, supports the evolution of a single Tree - NEED TO FIX 2018 04/19
while True:
try:
query = input('\t Enter max number of generations (default 10): ')
if query == '': gen_max = 10; break
elif int(query) in list(range(1,101)): gen_max = int(query); break
else: raise ValueError()
except ValueError: print ('\t\033[32m Enter a number from 1 including 100. Try again ...\n\033[0;0m')
except KeyboardInterrupt: sys.exit()
if gen_max > 1:
while True:
try:
query = input('\t Display (i)nteractive, (g)eneration, (m)iminal, (s)ilent, or (d)e(b)ug (default m): ')
if query in ['i','g','m','s','db','']: display = query or 'm'; break
else: raise ValueError()
except ValueError: print ('\t\033[32m Select from the options given. Try again ...\n\033[0;0m')
except KeyboardInterrupt: sys.exit()
else: display = 's' # display mode is not used, but a value must be passed
### additional configuration parameters ###
evolve_repro = int(0.1 * tree_pop_max) # quantity of a population generated through Reproduction
evolve_point = int(0.0 * tree_pop_max) # quantity of a population generated through Point Mutation
evolve_branch = int(0.2 * tree_pop_max) # quantity of a population generated through Branch Mutation
evolve_cross = int(0.7 * tree_pop_max) # quantity of a population generated through Crossover
filename = '' # not required unless an external file is referenced
precision = 6 # number of floating points for the round function in 'fx_fitness_eval'
swim = 'p' # require (p)artial or (f)ull set of features (operators) for each Tree entering the gene_pool
mode = 'd' # pause at the (d)esktop when complete, awaiting further user interaction; or terminate in (s)erver mode
#++++++++++++++++++++++++++++++++++++++++++
# Command Line for Configuation |
#++++++++++++++++++++++++++++++++++++++++++
else: # 2 or more command line arguments are provided
ap = argparse.ArgumentParser(description = 'Karoo GP Server')
ap.add_argument('-ker', action = 'store', dest = 'kernel', default = 'c', help = '[c,r,m] fitness function: (r)egression, (c)lassification, or (m)atching')
ap.add_argument('-typ', action = 'store', dest = 'type', default = 'r', help = '[f,g,r] Tree type: (f)ull, (g)row, or (r)amped half/half')
ap.add_argument('-bas', action = 'store', dest = 'depth_base', default = 4, help = '[3...10] maximum Tree depth for the initial population')
ap.add_argument('-max', action = 'store', dest = 'depth_max', default = 4, help = '[3...10] maximum Tree depth for the entire run')
ap.add_argument('-min', action = 'store', dest = 'depth_min', default = 3, help = 'minimum nodes, from 3 to 2^(base_depth +1) - 1')
ap.add_argument('-pop', action = 'store', dest = 'pop_max', default = 100, help = '[10...1000] number of trees per generation')
ap.add_argument('-gen', action = 'store', dest = 'gen_max', default = 10, help = '[1...100] number of generations')
ap.add_argument('-tor', action = 'store', dest = 'tor_size', default = 7, help = '[7 for each 100] recommended tournament size')
ap.add_argument('-evr', action = 'store', dest = 'evo_r', default = 0.1, help = '[0.0-1.0] decimal percent of pop generated through Reproduction')
ap.add_argument('-evp', action = 'store', dest = 'evo_p', default = 0.0, help = '[0.0-1.0] decimal percent of pop generated through Point Mutation')
ap.add_argument('-evb', action = 'store', dest = 'evo_b', default = 0.2, help = '[0.0-1.0] decimal percent of pop generated through Branch Mutation')
ap.add_argument('-evc', action = 'store', dest = 'evo_c', default = 0.7, help = '[0.0-1.0] decimal percent of pop generated through Crossover')
ap.add_argument('-fil', action = 'store', dest = 'filename', default = '', help = '/path/to_your/[data].csv')
args = ap.parse_args()
# pass the argparse defaults and/or user inputs to the required variables
kernel = str(args.kernel)
tree_type = str(args.type)
tree_depth_base = int(args.depth_base)
tree_depth_max = int(args.depth_max)
tree_depth_min = int(args.depth_min)
tree_pop_max = int(args.pop_max)
gen_max = int(args.gen_max)
tourn_size = int(args.tor_size)
evolve_repro = int(float(args.evo_r) * tree_pop_max)
evolve_point = int(float(args.evo_p) * tree_pop_max)
evolve_branch = int(float(args.evo_b) * tree_pop_max)
evolve_cross = int(float(args.evo_c) * tree_pop_max)
filename = str(args.filename)
display = 's' # display mode is set to (s)ilent
precision = 6 # number of floating points for the round function in 'fx_fitness_eval'
swim = 'p' # require (p)artial or (f)ull set of features (operators) for each Tree entering the gene_pool
mode = 's' # pause at the (d)esktop when complete, awaiting further user interaction; or terminate in (s)erver mode
#++++++++++++++++++++++++++++++++++++++++++
# Conduct the GP run |
#++++++++++++++++++++++++++++++++++++++++++
gp.fx_karoo_gp(kernel, tree_type, tree_depth_base, tree_depth_max, tree_depth_min, tree_pop_max, gen_max, tourn_size, filename, evolve_repro, evolve_point, evolve_branch, evolve_cross, display, precision, swim, mode)

File diff suppressed because it is too large Load Diff

View File

@ -1,237 +0,0 @@
# Karoo GP Pause Menu
# A text-based user interface for mid-run parameter configuration and population studies
# by Kai Staats, MSc with TensorFlow support provided by Iurii Milovanov; see LICENSE.md
# version 2.3 for Python 3.6
def pause(menu_dict):
'''
Pause the program execution and invok the user to make one or more valid options.
Called by: fx_karoo_gp
Arguments required: menu_dict
'''
options = ['','?','help','i','m','g','s','db','ts','min','bal','l','pop','e','p','id','dir','load','w','add','q']
while True:
try:
menu = input('\n\t\033[36m (pause) \033[0;0m')
if menu in options: break
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter \033[1m?\033[0;0m\033[32m to review your options. Try again ...\033[0;0m')
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
if menu == '': menu_dict['input_a'] = 'esc' # exit (pause) with ENTER
elif menu == '?' or menu == 'help':
print ('\n\t\033[32m Select from one of the following options:\033[0;0m')
print ('\t\033[36m\033[1m i \t\033[0;0m engage Interactive display mode')
print ('\t\033[36m\033[1m m \t\033[0;0m engage Minimal display mode')
print ('\t\033[36m\033[1m g \t\033[0;0m engage Generation display mode')
print ('\t\033[36m\033[1m s \t\033[0;0m engage Silent display mode')
print ('\t\033[36m\033[1m db \t\033[0;0m engage De-Bug display mode')
print ('')
print ('\t\033[36m\033[1m ts \t\033[0;0m adjust tournament size')
print ('\t\033[36m\033[1m min \t\033[0;0m adjust minimum number of nodes')
# print ('\t\033[36m\033[1m max \t\033[0;0m adjust maximum Tree depth') # NEED TO ADD
print ('\t\033[36m\033[1m bal \t\033[0;0m adjust balance of genetic operators')
print ('')
print ('\t\033[36m\033[1m l \t\033[0;0m list Trees with leading fitness scores')
print ('\t\033[36m\033[1m pop \t\033[0;0m list Trees in current population')
print ('\t\033[36m\033[1m e \t\033[0;0m evaluate a single Tree against the test data')
print ('\t\033[36m\033[1m p \t\033[0;0m print a single Tree to screen')
print ('')
print ('\t\033[36m\033[1m id \t\033[0;0m display current generation ID')
print ('\t\033[36m\033[1m dir \t\033[0;0m display current working directory')
# print ('\t\033[36m\033[1m load \t\033[0;0m load population_s (seed) to replace population_a (current)') # NEED TO FIX
print ('\t\033[36m\033[1m w \t\033[0;0m write the evolving population_b to disk')
print ('')
print ('\t\033[36m\033[1m add \t\033[0;0m add generations and continue your run')
print ('\t\033[36m\033[1m q \t\033[0;0m quit Karoo GP')
elif menu == 'i': menu_dict['display'] = 'i'; print ('\n\t Interactive display mode engaged (for control freaks)')
elif menu == 'g': menu_dict['display'] = 'g'; print ('\n\t Generation display mode engaged (for recovering control freaks)')
elif menu == 'm': menu_dict['display'] = 'm'; print ('\n\t Minimal display mode engaged (for GP gurus)')
elif menu == 's': menu_dict['display'] = 's'; print ('\n\t Silent display mode engaged (for zen masters)')
elif menu == 'db': menu_dict['display'] = 'db'; print ('\n\t De-Bug display mode engaged (for evolutionary biologists)')
elif menu == 'ts': # adjust the tournament size
while True:
try:
print ('\n\t The current tournament size is:', menu_dict['tourn_size'])
query = input('\t Adjust the tournament size (suggest 7 for each 100): ')
if query == '': break
elif int(query) in list(range(2,menu_dict['tree_pop_max'] + 1)): menu_dict['tourn_size'] = int(query); break # rebuilt 20190603
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 2 including %s. Try again ...\033[0;0m' %str(menu_dict['tree_pop_max']))
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
elif menu == 'min': # adjust the minimum number of nodes per Tree
# max_nodes = 2**(tree_depth_base +1) - 1 # NEED TO calc to replace upper limit in range but tree_depth_base is not global - 2018 04/22
while True:
try:
print ('\n\t The current minimum number of nodes is:', menu_dict['tree_depth_min'])
query = input('\t Adjust the minimum number of nodes for all Trees (min 3): ')
if query == '': break
elif int(query) in list(range(3,1000)): menu_dict['tree_depth_min'] = int(query); break # rebuilt 20190603
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 3 including 1000. Try again ...\033[0;0m')
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
# NEED TO ADD
#elif menu == 'max': # adjust the maximum Tree depth
# while True:
# try:
# print ('\n\t The current \033[3madjusted\033[0;0m maximum Tree depth is:', gp.tree_depth_max)
# query = input('\n\t Adjust the global maximum Tree depth to (1 ... 10): ')
# if int(query) not in list(range(1,11)): raise ValueError()
# if query < gp.tree_depth_max:
# print ('\n\t\033[32m This value is less than the current value.\033[0;0m')
# conf = input('\n\t Are you ok with this? (y/n) ')
# if conf == 'n': break
# except ValueError: print ('\n\t\033[32m Enter a number from 1 including 10. Try again ...\033[0;0m')
# except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
elif menu == 'bal': # adjust the balance of genetic operators'
print ('\n\t The current balance of genetic operators is:')
print ('\t\t Reproduction:', menu_dict['evolve_repro']); tmp_repro = menu_dict['evolve_repro']
print ('\t\t Point Mutation:', menu_dict['evolve_point']); tmp_point = menu_dict['evolve_point']
print ('\t\t Branch Mutation:', menu_dict['evolve_branch']); tmp_branch = menu_dict['evolve_branch']
print ('\t\t Crossover:', menu_dict['evolve_cross'], '\n'); tmp_cross = menu_dict['evolve_cross']
while True:
try:
query = input('\t Enter quantity of Trees to be generated by Reproduction: ')
if query == '': break
elif int(query) in list(range(0,1000)): tmp_repro = int(query); break
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 0 including %s. Try again ...\033[0;0m' %str(menu_dict['tree_pop_max']))
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
while True:
try:
query = input('\t Enter quantity of Trees to be generated by Point Mutation: ')
if query == '': break
elif int(query) in list(range(0,1000)): tmp_point = int(query); break
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 0 including %s. Try again ...\033[0;0m' %str(menu_dict['tree_pop_max']))
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
while True:
try:
query = input('\t Enter quantity of Trees to be generated by Branch Mutation: ')
if query == '': break
elif int(query) in list(range(0,1000)): tmp_branch = int(query); break
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 0 including %s. Try again ...\033[0;0m' %str(menu_dict['tree_pop_max']))
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
while True:
try:
query = input('\t Enter quantity of Trees to be generated by Crossover: ')
if query == '': break
elif int(query) in list(range(0,1000)): tmp_cross = int(query); break
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 0 including %s. Try again ...\033[0;0m' %str(menu_dict['tree_pop_max']))
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
if tmp_repro + tmp_point + tmp_branch + tmp_cross != menu_dict['tree_pop_max']:
print ('\n\t The sum of the above does not equal %s. Try again ...' %str(menu_dict['tree_pop_max']))
else:
print ('\n\t The revised balance of genetic operators is:')
print ('\t\t Reproduction:', tmp_repro); menu_dict['evolve_repro'] = tmp_repro
print ('\t\t Point Mutation:', tmp_point); menu_dict['evolve_point'] = tmp_point
print ('\t\t Branch Mutation:', tmp_branch); menu_dict['evolve_branch'] = tmp_branch
print ('\t\t Crossover:', tmp_cross); menu_dict['evolve_cross'] = tmp_cross
elif menu == 'l': # display dictionary of Trees with the best fitness score
print ('\n\t The leading Trees and their associated expressions are:')
for n in sorted(menu_dict['fittest_dict']): print ('\t ', n, ':', menu_dict['fittest_dict'][n])
elif menu == 'pop': # list Trees in the current population
if menu_dict['gen_id'] == 1: menu_dict['input_a'] = 'pop_a'
else: menu_dict['input_a'] = 'pop_b'
elif menu == 'e': # evaluate a Tree against the TEST data
if menu_dict['gen_id'] == 1: print ('\n\t\033[32m You cannot evaluate the foundation population. Be patient ...\033[0;0m')
else: # gen_id > 1
while True:
try:
query = input('\n\t Select a Tree to evaluate: ')
if query == '': break
elif int(query) in list(range(1, menu_dict['pop_b_len'])): menu_dict['input_a'] = 'eval'; menu_dict['input_b'] = int(query); break
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 1 including %s. Try again ...\033[0;0m' %str(menu_dict['pop_b_len'] - 1))
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
elif menu == 'p': # print a Tree to screen -- NEED TO ADD: SymPy graphical print option
if menu_dict['gen_id'] == 1: # first generation
while True:
try:
query = input('\n\t Select a Tree to print: ')
if query == '': break
elif int(query) in list(range(1, menu_dict['pop_a_len'])) and menu_dict['gen_id'] == 1: menu_dict['input_a'] = 'print_a'; menu_dict['input_b'] = int(query); break
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 1 including %s. Try again ...\033[0;0m' %str(menu_dict['pop_a_len'] - 1))
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
else: # second or higher generation
while True:
try:
query = input('\n\t Select a Tree to print: ')
if query == '': break
elif int(query) in list(range(1, menu_dict['pop_b_len'])): menu_dict['input_a'] = 'print_b'; menu_dict['input_b'] = int(query); break
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 1 including %s. Try again ...\033[0;0m' %str(menu_dict['pop_b_len'] - 1))
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
elif menu == 'id': print ('\n\t Current generation:', menu_dict['gen_id'])
elif menu == 'dir': print ('\n\t Current working directory:', menu_dict['path'])
# NEED TO REBUILD
#elif menu == 'load': # load population_s to replace population_a
# while True:
# try:
# query = input('\n\t Overwrite the current population with population_s? (\033[1my\033[0;0m\033[32m/\033[1mn\033[0;0m\033[32m)\033[0;0m ')
# if query == 'y': menu_dict['input_a'] = 'load'; break
# elif query == 'n': break
# else: raise ValueError()
# except ValueError: print ('\n\t\033[32m Enter (\033[1my\033[0;0m)es or (\033[1mn\033[0;0m)o. Try again ...\033[0;0m')
# except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
elif menu == 'w': # write the evolving population_b to disk
if menu_dict['gen_id'] > 1: menu_dict['input_a'] = 'write'
else: print ('\n\t\033[36m The evolving population_b does not yet exist\033[0;0m')
elif menu == 'add': # add generations and continue a GP run
if menu_dict['gen_id'] == menu_dict['gen_max']:
while True:
try:
query = input('\n\t\033[3m You are at the end of your run.\033[0;0m\n\t Add more generations to continue (1-100 or ENTER to escape): ')
if query == '': break
elif int(query) in list(range(1,101)): menu_dict['input_a'] = 'add'; menu_dict['input_b'] = int(query); break
else: raise ValueError()
except ValueError: print ('\n\t\033[32m Enter a number from 1 including 100. Try again ...\033[0;0m')
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
else: menu_dict['input_a'] = 'add'
elif menu == 'q': # quit (in case you didn't figure that one out :)
while True:
try:
query = input('\n\t\033[32m Quit Karoo GP? (\033[1my\033[0;0m\033[32m/\033[1mn\033[0;0m\033[32m)\033[0;0m ')
if query == 'y': menu_dict['input_a'] = 'quit'; break
else: break
except ValueError: print ('\n\t\033[32m Enter \033[1my\033[0;0m\033[32mes or \033[1mn\033[0;0m\033[32mo\033[0;0m')
except KeyboardInterrupt: print ('\n\n\t\033[32m Enter \033[1mq\033[0;0m\033[32m to quit\033[0;0m')
return menu_dict

6
params.json 100644
View File

@ -0,0 +1,6 @@
{
"name": "Karoo gp",
"tagline": "A Genetic Programming platform for Python",
"body": "<a href=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_desktop.png\"><img src=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_desktop-224x300.png\" alt=\"Karoo GP by Kai Staats\" width=\"224\" height=\"300\" hspace=20 align=\"left\"/></a> Karoo GP is a evolutionary algorithm, a genetic programming application suite written in Python which provides both symbolic regression and classification analysis. Karoo GP is a scalable platform with multicore support, designed to readily work with realworld data. <em>No programming required.</em> As a teaching tool, it enables instructors to share step-by-step how an evolutionary algorithm arrives to its solution. As a hands-on learning tool, Karoo GP supports rapid, repeatable experimentation.\r\n\r\nKaroo GP includes a Desktop application with an intuitive user interface, a fully scriptable Server application with user defined default parameters and command-line arguments; a stand-alone Python script which generates randomly constructed subsets of larger datasets and another which normalises datasets; and a toy model which shows the inner workings of multiclass classification.\r\n\r\nThe included User Guide (PDF) offers system requirements, a crash-course in Genetic Programming, and use of Karoo GP for both the novice and advanced user.\r\n&nbsp;\r\n&nbsp;\r\n\r\nFeatures include:\r\n<ul>\r\n\t<li>written in Object Oriented Python with a hierarchical naming scheme for all methods</li>\r\n\t<li>multi-core support (extensive testing on 24-40 CPUs)</li>\r\n\t<li><em>Desktop</em> application provides a simple user interface with menu, 5 display modes (see below), and runtime reconfiguration of parameters</li>\r\n\t<li><em>Server</em> script provides a configuration file for readily repeated GP runs and command-line arguments</li>\r\n\t<li>anticipates datasets as standard .csv files</li>\r\n\t<li>records the full population of each generation to a .csv file</li>\r\n\t<li>supports customised seed populations</li>\r\n\t<li>supports arithmetic (+, -, *, /, **, sqrt), trigonometric (cos, sin), and boolean (and, or) operators</li>\r\n\t<li>relatively simple framework for preparing custom fitness functions and evaluation routines</li>\r\n</ul>\r\n\r\nKaroo GP was developed during Staats' MSc research at the University of Cape Town / African Institute for Mathematical Sciences and the Square Kilometre Array (SKA), South Africa, and owes its foundation to the \"Field Guide to Genetic Programming\" by Poli, Langdon, McPhee, and Koza. The Field Guide and many more GP publications and software packages are showcased at <a href=\"http://geneticprogramming.com/publications/\" target=\"_blank\">www.geneticprogramming.com</a>\r\n\r\n<a href=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_args.png\"><img src=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_args-95x128.png\" alt=\"Karoo GP by Kai Staats\" width=\"95\" height=\"128\" /></a> <a href=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_tree_print.png\"><img src=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_tree_print-95x128.png\" alt=\"Karoo GP by Kai Staats\" width=\"95\" height=\"128\" /></a> <a href=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_runtime_options.png\"><img src=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_runtime_options-95x128.png\" alt=\"Karoo GP by Kai Staats\" width=\"95\" height=\"128\" /></a> <a href=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_go_test.png\"><img src=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_go_test-95x128.png\" alt=\"Karoo GP by Kai Staats\" width=\"95\" height=\"128\" /></a> <a href=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_interactive_mode.png\"><img src=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_interactive_mode-95x128.png\" alt=\"Karoo GP by Kai Staats\" width=\"95\" height=\"128\" /></a> <a href=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_debug_mode.png\"><img src=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_debug_mode-95x128.png\" alt=\"Karoo GP by Kai Staats\" width=\"95\" height=\"128\" /></a> <a href=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_population_archive.png\"><img src=\"http://www.kaistaats.com/wp-content/uploads/2016/07/screenshot_karoo_gp_population_archive-105x128.png\" alt=\"Karoo GP by Kai Staats\" width=\"105\" height=\"128\" /></a>",
"note": "Don't delete this file! It's used internally to help with page regeneration."
}

View File

@ -1,5 +0,0 @@
wheel
numpy==1.16.4
sympy==1.4
tensorflow==1.13.1
scikit-learn==0.21.2

View File

@ -1,23 +0,0 @@
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="karoo_gp-jebba",
version="2.3",
author="Kai Staats",
author_email="github@overthesun.com",
description="evolutionary algorithm, genetic programming suite",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/kstaats/karoo_gp",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
)
#packages={''},

View File

@ -0,0 +1,124 @@
/*
The MIT License (MIT)
Copyright (c) 2016 GitHub, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
.pl-c /* comment */ {
color: #969896;
}
.pl-c1 /* constant, variable.other.constant, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header */,
.pl-s .pl-v /* string variable */ {
color: #0086b3;
}
.pl-e /* entity */,
.pl-en /* entity.name */ {
color: #795da3;
}
.pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */,
.pl-s .pl-s1 /* string source */ {
color: #333;
}
.pl-ent /* entity.name.tag */ {
color: #63a35c;
}
.pl-k /* keyword, storage, storage.type */ {
color: #a71d5d;
}
.pl-s /* string */,
.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
.pl-sr /* string.regexp */,
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */,
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ {
color: #183691;
}
.pl-v /* variable */ {
color: #ed6a43;
}
.pl-id /* invalid.deprecated */ {
color: #b52a1d;
}
.pl-ii /* invalid.illegal */ {
color: #f8f8f8;
background-color: #b52a1d;
}
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
font-weight: bold;
color: #63a35c;
}
.pl-ml /* markup.list */ {
color: #693a17;
}
.pl-mh /* markup.heading */,
.pl-mh .pl-en /* markup.heading entity.name */,
.pl-ms /* meta.separator */ {
font-weight: bold;
color: #1d3e81;
}
.pl-mq /* markup.quote */ {
color: #008080;
}
.pl-mi /* markup.italic */ {
font-style: italic;
color: #333;
}
.pl-mb /* markup.bold */ {
font-weight: bold;
color: #333;
}
.pl-md /* markup.deleted, meta.diff.header.from-file */ {
color: #bd2c00;
background-color: #ffecec;
}
.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
color: #55a532;
background-color: #eaffea;
}
.pl-mdr /* meta.diff.range */ {
font-weight: bold;
color: #795da3;
}
.pl-mo /* meta.output */ {
color: #1d3e81;
}

424
stylesheets/normalize.css vendored 100644
View File

@ -0,0 +1,424 @@
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
box-sizing: content-box;
height: 0;
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit; /* 1 */
font: inherit; /* 2 */
margin: 0; /* 3 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal;
}
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */ /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto;
}
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold;
}
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}

View File

@ -0,0 +1,245 @@
* {
box-sizing: border-box; }
body {
padding: 0;
margin: 0;
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
color: #606c71; }
a {
color: #1e6bb8;
text-decoration: none; }
a:hover {
text-decoration: underline; }
.btn {
display: inline-block;
margin-bottom: 1rem;
color: rgba(255, 255, 255, 0.7);
background-color: rgba(255, 255, 255, 0.08);
border-color: rgba(255, 255, 255, 0.2);
border-style: solid;
border-width: 1px;
border-radius: 0.3rem;
transition: color 0.2s, background-color 0.2s, border-color 0.2s; }
.btn + .btn {
margin-left: 1rem; }
.btn:hover {
color: rgba(255, 255, 255, 0.8);
text-decoration: none;
background-color: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.3); }
@media screen and (min-width: 64em) {
.btn {
padding: 0.75rem 1rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.btn {
padding: 0.6rem 0.9rem;
font-size: 0.9rem; } }
@media screen and (max-width: 42em) {
.btn {
display: block;
width: 100%;
padding: 0.75rem;
font-size: 0.9rem; }
.btn + .btn {
margin-top: 1rem;
margin-left: 0; } }
.page-header {
color: #fff;
text-align: center;
background-color: #159957;
background-image: linear-gradient(120deg, #155799, #159957); }
@media screen and (min-width: 64em) {
.page-header {
padding: 5rem 6rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.page-header {
padding: 3rem 4rem; } }
@media screen and (max-width: 42em) {
.page-header {
padding: 2rem 1rem; } }
.project-name {
margin-top: 0;
margin-bottom: 0.1rem; }
@media screen and (min-width: 64em) {
.project-name {
font-size: 3.25rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.project-name {
font-size: 2.25rem; } }
@media screen and (max-width: 42em) {
.project-name {
font-size: 1.75rem; } }
.project-tagline {
margin-bottom: 2rem;
font-weight: normal;
opacity: 0.7; }
@media screen and (min-width: 64em) {
.project-tagline {
font-size: 1.25rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.project-tagline {
font-size: 1.15rem; } }
@media screen and (max-width: 42em) {
.project-tagline {
font-size: 1rem; } }
.main-content :first-child {
margin-top: 0; }
.main-content img {
max-width: 100%; }
.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 {
margin-top: 2rem;
margin-bottom: 1rem;
font-weight: normal;
color: #159957; }
.main-content p {
margin-bottom: 1em; }
.main-content code {
padding: 2px 4px;
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 0.9rem;
color: #383e41;
background-color: #f3f6fa;
border-radius: 0.3rem; }
.main-content pre {
padding: 0.8rem;
margin-top: 0;
margin-bottom: 1rem;
font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;
color: #567482;
word-wrap: normal;
background-color: #f3f6fa;
border: solid 1px #dce6f0;
border-radius: 0.3rem; }
.main-content pre > code {
padding: 0;
margin: 0;
font-size: 0.9rem;
color: #567482;
word-break: normal;
white-space: pre;
background: transparent;
border: 0; }
.main-content .highlight {
margin-bottom: 1rem; }
.main-content .highlight pre {
margin-bottom: 0;
word-break: normal; }
.main-content .highlight pre, .main-content pre {
padding: 0.8rem;
overflow: auto;
font-size: 0.9rem;
line-height: 1.45;
border-radius: 0.3rem; }
.main-content pre code, .main-content pre tt {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0; }
.main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after {
content: normal; }
.main-content ul, .main-content ol {
margin-top: 0; }
.main-content blockquote {
padding: 0 1rem;
margin-left: 0;
color: #819198;
border-left: 0.3rem solid #dce6f0; }
.main-content blockquote > :first-child {
margin-top: 0; }
.main-content blockquote > :last-child {
margin-bottom: 0; }
.main-content table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all; }
.main-content table th {
font-weight: bold; }
.main-content table th, .main-content table td {
padding: 0.5rem 1rem;
border: 1px solid #e9ebec; }
.main-content dl {
padding: 0; }
.main-content dl dt {
padding: 0;
margin-top: 1rem;
font-size: 1rem;
font-weight: bold; }
.main-content dl dd {
padding: 0;
margin-bottom: 1rem; }
.main-content hr {
height: 2px;
padding: 0;
margin: 1rem 0;
background-color: #eff0f1;
border: 0; }
@media screen and (min-width: 64em) {
.main-content {
max-width: 64rem;
padding: 2rem 6rem;
margin: 0 auto;
font-size: 1.1rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.main-content {
padding: 2rem 4rem;
font-size: 1.1rem; } }
@media screen and (max-width: 42em) {
.main-content {
padding: 2rem 1rem;
font-size: 1rem; } }
.site-footer {
padding-top: 2rem;
margin-top: 2rem;
border-top: solid 1px #eff0f1; }
.site-footer-owner {
display: block;
font-weight: bold; }
.site-footer-credits {
color: #819198; }
@media screen and (min-width: 64em) {
.site-footer {
font-size: 1rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.site-footer {
font-size: 1rem; } }
@media screen and (max-width: 42em) {
.site-footer {
font-size: 0.9rem; } }