{ "info": { "author": "Nugroho Fredivianus", "author_email": "nuggfr@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], "description": "## XCS-RC\n\n*Accuracy-based Learning Classifier Systems* with **Rule Combining** mechanism, shortly `XCS-RC` for Python3, loosely based on Martin Butz's XCS Java code (2001). Read my PhD thesis [here](https://publikationen.bibliothek.kit.edu/1000046880) for the complete algorithmic description.\n\n*Rule Combining* is novel function that employs inductive reasoning, replacing ~~all Darwinian genetic operation like mutation and crossover~~. It can handle `binaries` and `real`, reaching better *correctness rate* and *population size* quicker than several XCS instances. My earlier papers comparing them can be obtained at [here](https://link.springer.com/chapter/10.1007/978-3-642-17298-4_30) and [here](https://dl.acm.org/citation.cfm?id=2331009).\n\n---\n\n## Relevant links\n* [PyPI](https://pypi.org/project/xcs-rc/)\n* [Github repo](https://github.com/nuggfr/xcs-rc-python)\n* Examples:\n * [Classic problems: multiplexer, Markov env](https://github.com/nuggfr/xcs-rc-python)\n * [Churn dataset](https://routing.nuggfr.com/churn)\n * [Flappy Bird](https://routing.nuggfr.com/flappy)\n * [OpenAI Gym](https://routing.nuggfr.com/openai)\n\n---\n\n**Installation**\n```\npip install xcs-rc\n```\n\n**Initialization**\n```\nimport xcs_rc\nagent = xcs_rc.Agent()\n```\n\n**Classic Reinforcement Learning cycle**\n```\n# input: binary string, e.g., \"100110\" or decimal array\nstate = str(randint(0, 1))\n\n# pick methods: 0 = explore, 1 = exploit, 2 = explore_it\naction = agent.next_action(state, pick_method=1)\n\n# determine reward and apply it, e.g.,\nreward = agent.maxreward if action == int(state[0]) else 0.0\nagent.apply_reward(reward)\n```\n\n**Partially Observable Markov Decision Process (POMDP) environment**\n```\n# create env and agent\nenv = xcs_rc.MarkovEnv('maze4') # maze4 is built-in\nenv.add_agents(num=1, tcomb=100, xmax=50)\nagent = env.agents[0]\n\nfor episode in range(8000):\n steps = env.one_episode(pick_method=2) # returns the number of taken steps\n```\n\n**Data classification**\n```\nagent.train(X_train, y_train)\ncm = agent.test(X_test, y_test) # returns the confusion matrix\npreds, probs = agent.predict(X) # returns lists of predictions and probabilities\n```\n\n**Print population, save it to CSV file, or use append mode**\n```\nagent.pop.print(title=\"Population\")\nagent.save('xcs_population.csv', title=\"Final XCS Population\")\nagent.save('xcs_pop_every_100_cycles.csv', title=\"Cycle: ###\", save_mode='a')\n```\n\n**Finally, inserting rules to population**\n```\n# automatically load the last set (important for append mode)\nagent.load(\"xcs_population.csv\", empty_first=True)\nagent.pop.add(my_list_of_rules) # from a list of classifiers\n```\n\n---\n\n## Main Parameters\n\n**XCS-RC Parameters**\n* `tcomb`: *combining period*, number of learning cycles before the next rule combining\n* `predtol`: *prediction tolerance*, maximum difference between two classifiers to be combined\n* `prederrtol`: *prediction error tolerance*, threshold for deletion of inappropriately combined rules\n\n\n**How to Set**\n```\nagent.tcomb = 50 # perform rule combining every 50 cycles\nagent.predtol = 20.0 # combines rules whose prediction value differences <= 20.0\nagent.prederrtol = 10.0 # remove if error > 10.0, after previously below it\n```\n\n\n**Parameters from original XCS**\n* ~~all related to mutation and crossover is removed~~\n* the others are kept and accessible (e.g., `agent.alpha = 0.15`)\n\n---\n\n## Results\n\n**Classical Problems: `multiplexer` and `Markov environment`:**\n\n![Binary MP11-HIGH](https://raw.githubusercontent.com/nuggfr/xcs-rc-python/master/xcs-rc-mp11-binary.png)\n\n![Real MP6-HIGH](https://raw.githubusercontent.com/nuggfr/xcs-rc-python/master/xcs-rc-mp6-real.png)\n\n![Markov Maze4](https://raw.githubusercontent.com/nuggfr/xcs-rc-python/master/xcs-rc-markov-maze4.png)\n\n**Flappy Bird from PyGame Learning Environment:**\n\n![Flappy Bird XCS-RC plot](https://raw.githubusercontent.com/nuggfr/xcs-rc-python/master/flappy_plot.png)\n\n[![Flappy Bird XCS-RC youtube](https://img.youtube.com/vi/Fz05s-stCbE/0.jpg)](https://youtu.be/Fz05s-stCbE)\n\n**Youtube: CartPole-v0 Benchmark from OpenAI Gym:**\n\n[![CartPole XCS-RC](https://img.youtube.com/vi/mJoavWV80MM/0.jpg)](https://youtu.be/mJoavWV80MM)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/nuggfr/xcs-rc-python", "keywords": "machine learning,reinforcement learning,classifier systems,rule-based", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "xcs-rc", "package_url": "https://pypi.org/project/xcs-rc/", "platform": "", "project_url": "https://pypi.org/project/xcs-rc/", "project_urls": { "Homepage": "https://github.com/nuggfr/xcs-rc-python" }, "release_url": "https://pypi.org/project/xcs-rc/0.4.2/", "requires_dist": [ "pandas", "numpy" ], "requires_python": "", "summary": "Accuracy-based Learning Classifier Systems with Rule Combining", "version": "0.4.2" }, "last_serial": 5656981, "releases": { "0.1.10": [ { "comment_text": "", "digests": { "md5": "6a23f6ad7e917f9fb13b9b4f59697c25", "sha256": "8fad8b7264134183693492ec366bd50a1cd7a78aa5d11e8f539c7089eaa3b002" }, "downloads": -1, "filename": "xcs_rc-0.1.10-py3-none-any.whl", "has_sig": false, "md5_digest": "6a23f6ad7e917f9fb13b9b4f59697c25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9055, "upload_time": "2019-07-15T00:43:16", "url": "https://files.pythonhosted.org/packages/b1/b8/e4493a13484f4e88c2de53f0740deff1473a9fc749c6fe8f206cb18f5c3d/xcs_rc-0.1.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de7f9e3fc50289d9eee72859ed64877d", "sha256": "b6acfa2dbe1f5bac73cee0d3005fb9e2c3ceae82c55de36b755376d71df9ff39" }, "downloads": -1, "filename": "xcs-rc-0.1.10.tar.gz", "has_sig": false, "md5_digest": "de7f9e3fc50289d9eee72859ed64877d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8438, "upload_time": "2019-07-15T00:43:17", "url": "https://files.pythonhosted.org/packages/6a/8c/6292ed79391e6a646c3a40dca81852e50e87e5b59baff658394a706d4733/xcs-rc-0.1.10.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1a91752803c9dfe3df87a8ba84ca5a8b", "sha256": "5e738a9c976d5b9644cfd74eddda8c62e8d52632f31849ed3c0ae2851742f65c" }, "downloads": -1, "filename": "xcs_rc-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1a91752803c9dfe3df87a8ba84ca5a8b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9268, "upload_time": "2019-07-17T11:55:05", "url": "https://files.pythonhosted.org/packages/c2/49/9abe0f07303d019a72d51de81b184f90b558af5567a999855412fd0c41c4/xcs_rc-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ec5688a0263282f92eb521a3a1cc395", "sha256": "1f1978dc46affeef61cf7a03635ad3b05fa887f431c9fea71b5662306ef20eb5" }, "downloads": -1, "filename": "xcs-rc-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ec5688a0263282f92eb521a3a1cc395", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9766, "upload_time": "2019-07-17T11:55:07", "url": "https://files.pythonhosted.org/packages/9e/bc/0a53719e6ce76ece4682cc5f8c08a600e571b359f702a43724f0e272db55/xcs-rc-0.2.0.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "8ea70fc673e7ce1611fac833e68203f0", "sha256": "89453f2b88a1177e73519a26d0284b080b30a963d02df6e0a53a1b81804e052a" }, "downloads": -1, "filename": "xcs_rc-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8ea70fc673e7ce1611fac833e68203f0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9712, "upload_time": "2019-07-21T09:04:28", "url": "https://files.pythonhosted.org/packages/5c/46/0dee564a806ab0b5bec0d20588f014d018b1773991d81ec9e4ac1c319e2c/xcs_rc-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "45b0aae9f6d1219bb7f293548c74e0bc", "sha256": "d1e129c024e534611fb7bc4daa127e2252cdfd22be8678dd586ac4c374cb64f8" }, "downloads": -1, "filename": "xcs-rc-0.2.2.tar.gz", "has_sig": false, "md5_digest": "45b0aae9f6d1219bb7f293548c74e0bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10429, "upload_time": "2019-07-21T09:04:29", "url": "https://files.pythonhosted.org/packages/97/b3/67d10c4fe0d1c7ee831804837819be871a3ab1af44955b189d30ddb7662b/xcs-rc-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "51c9d7f801b410e9eafb1bcdc7d4aa10", "sha256": "d468b0dc517c2b33a8429be2d33444ce5381322fa8ee3b5d790bc1995b7d41e3" }, "downloads": -1, "filename": "xcs_rc-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "51c9d7f801b410e9eafb1bcdc7d4aa10", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9858, "upload_time": "2019-07-24T23:35:45", "url": "https://files.pythonhosted.org/packages/9c/10/a31bfdf1aee8d9c029d5e9a241b9c8d8079fb4a2a276954c3cc0c268733a/xcs_rc-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebb454de37e3ba329830721d4eb2d4ca", "sha256": "0a4404da0fd8f28e67ff919d3c3defd6bbdd5c24303f3ed1c85e2fa3a793ff22" }, "downloads": -1, "filename": "xcs-rc-0.2.3.tar.gz", "has_sig": false, "md5_digest": "ebb454de37e3ba329830721d4eb2d4ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10724, "upload_time": "2019-07-24T23:35:46", "url": "https://files.pythonhosted.org/packages/7c/0e/6e4004d20a065c5657324efeb61dbbdebcefab9f76d5d30538536c3154a9/xcs-rc-0.2.3.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "73d9556893ad84fd3870d654ae997904", "sha256": "6cbd99b924aa27d773ebf7713dff1d5a6bf0d2a8c828440874750a31a9291295" }, "downloads": -1, "filename": "xcs_rc-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "73d9556893ad84fd3870d654ae997904", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24162, "upload_time": "2019-07-29T19:12:51", "url": "https://files.pythonhosted.org/packages/e6/28/469e4118c89350ea3abaf811af242c8bb00887044eee104bba74c3616898/xcs_rc-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "798fd0f8d88623f4e1f345a8f3f2c915", "sha256": "32474b27e67cb5d598e3105c13815e5f5242360cc910628a16474fe6774c5337" }, "downloads": -1, "filename": "xcs-rc-0.3.0.tar.gz", "has_sig": false, "md5_digest": "798fd0f8d88623f4e1f345a8f3f2c915", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14744, "upload_time": "2019-07-29T19:12:52", "url": "https://files.pythonhosted.org/packages/82/b0/40cc705f3feed52b51851c51f343220b7a2d23c078eac6ce331f83e6c60e/xcs-rc-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "c46e3106d43730770358c6389d5e7e03", "sha256": "560680e0d2f403dc7256b88ffe75ea5782e51f96f77d13123f467e7c23aaa2f1" }, "downloads": -1, "filename": "xcs_rc-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c46e3106d43730770358c6389d5e7e03", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11562, "upload_time": "2019-08-01T14:01:28", "url": "https://files.pythonhosted.org/packages/1e/ea/2f01853ff320818c9aedf1bd21bb927dc2e6ce12a539931cca9abbe10e79/xcs_rc-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e7957c7b42a3937504ae20d3e0233032", "sha256": "c466190f955021cc39b17efa3e22e4dcc371ffc77fc76f793bb82f438f1d7697" }, "downloads": -1, "filename": "xcs-rc-0.4.0.tar.gz", "has_sig": false, "md5_digest": "e7957c7b42a3937504ae20d3e0233032", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12825, "upload_time": "2019-08-01T14:01:29", "url": "https://files.pythonhosted.org/packages/95/20/215055dfd8ac37185ec61a208ed16e7d375a9b938d8400ac51636c81e33a/xcs-rc-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "8ef35cd5fdee13a9992dcdca81910a78", "sha256": "1ae646170222019b92b05168a87d314c9ab2a76b6c3b2bb991fbebd2e13b867c" }, "downloads": -1, "filename": "xcs_rc-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8ef35cd5fdee13a9992dcdca81910a78", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11788, "upload_time": "2019-08-02T14:51:24", "url": "https://files.pythonhosted.org/packages/89/fc/bccb7426cc63631dc9687b51b7e2eea2c073cfb6b1b496f6b5b212ace89f/xcs_rc-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e62bfb9424a56a3f3536306a57c1435", "sha256": "60e8630343bbc2c636602d6b2d8dd7fcd3b4b0d380683b76641ac133b7ace4f6" }, "downloads": -1, "filename": "xcs-rc-0.4.1.tar.gz", "has_sig": false, "md5_digest": "7e62bfb9424a56a3f3536306a57c1435", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13096, "upload_time": "2019-08-02T14:51:25", "url": "https://files.pythonhosted.org/packages/3a/61/5b2356df8593e38e00d2cf0a8058e650bb9434006b9fed32a014c2f9437d/xcs-rc-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "42cd877b25e88911e6d3c05584ec3698", "sha256": "7b7f7574d2918581381be4c55c26e2358a33f7df4f50a1d58c383ff59ae9e282" }, "downloads": -1, "filename": "xcs_rc-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "42cd877b25e88911e6d3c05584ec3698", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12070, "upload_time": "2019-08-09T17:45:25", "url": "https://files.pythonhosted.org/packages/95/76/6dfddfb7494787c1baec42b23e1ed41d79d4f3f1f1663ffb054e39c5e312/xcs_rc-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9a6d3a33f6945075f5fdb41a90f69166", "sha256": "9377534de79553d50bdf6b5e2103518add644674d329558106380a5ed5f890fc" }, "downloads": -1, "filename": "xcs-rc-0.4.2.tar.gz", "has_sig": false, "md5_digest": "9a6d3a33f6945075f5fdb41a90f69166", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13447, "upload_time": "2019-08-09T17:45:26", "url": "https://files.pythonhosted.org/packages/e3/34/9c60f578fe7070b001e2d1710ced0aa3ae47456951dee7c455017316c64e/xcs-rc-0.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "42cd877b25e88911e6d3c05584ec3698", "sha256": "7b7f7574d2918581381be4c55c26e2358a33f7df4f50a1d58c383ff59ae9e282" }, "downloads": -1, "filename": "xcs_rc-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "42cd877b25e88911e6d3c05584ec3698", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12070, "upload_time": "2019-08-09T17:45:25", "url": "https://files.pythonhosted.org/packages/95/76/6dfddfb7494787c1baec42b23e1ed41d79d4f3f1f1663ffb054e39c5e312/xcs_rc-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9a6d3a33f6945075f5fdb41a90f69166", "sha256": "9377534de79553d50bdf6b5e2103518add644674d329558106380a5ed5f890fc" }, "downloads": -1, "filename": "xcs-rc-0.4.2.tar.gz", "has_sig": false, "md5_digest": "9a6d3a33f6945075f5fdb41a90f69166", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13447, "upload_time": "2019-08-09T17:45:26", "url": "https://files.pythonhosted.org/packages/e3/34/9c60f578fe7070b001e2d1710ced0aa3ae47456951dee7c455017316c64e/xcs-rc-0.4.2.tar.gz" } ] }