{"id":20065830,"url":"https://github.com/altaris/noisy-moo","last_synced_at":"2025-04-14T03:50:46.465Z","repository":{"id":41561571,"uuid":"372138504","full_name":"altaris/noisy-moo","owner":"altaris","description":"A wrapper-based framework for pymoo problem modification.","archived":false,"fork":false,"pushed_at":"2025-02-16T04:37:50.000Z","size":3982,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-27T17:49:30.839Z","etag":null,"topics":["multi-objective-optimization","optimization","optimization-algorithms","pymoo","python"],"latest_commit_sha":null,"homepage":"https://altaris.github.io/noisy-moo/nmoo.html","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/altaris.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-30T06:14:39.000Z","updated_at":"2023-02-08T10:54:54.000Z","dependencies_parsed_at":"2024-11-13T13:53:11.383Z","dependency_job_id":"c2701212-f674-42a9-b894-48d28ade1582","html_url":"https://github.com/altaris/noisy-moo","commit_stats":{"total_commits":199,"total_committers":3,"mean_commits":66.33333333333333,"dds":"0.24120603015075381","last_synced_commit":"bba29af38230040272a90e08571623a3a3a8e96f"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altaris%2Fnoisy-moo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altaris%2Fnoisy-moo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altaris%2Fnoisy-moo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altaris%2Fnoisy-moo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/altaris","download_url":"https://codeload.github.com/altaris/noisy-moo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248819352,"owners_count":21166472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["multi-objective-optimization","optimization","optimization-algorithms","pymoo","python"],"created_at":"2024-11-13T13:53:02.066Z","updated_at":"2025-04-14T03:50:46.438Z","avatar_url":"https://github.com/altaris.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"noisy-moo\n=========\n\n![Python 3](https://img.shields.io/badge/python-3-blue?logo=python)\n[![MIT License](https://img.shields.io/badge/license-MIT-yellow)](https://choosealicense.com/licenses/mit/)\n[![Code style](https://img.shields.io/badge/style-black-black)](https://pypi.org/project/black)\n[![Maintainability](https://api.codeclimate.com/v1/badges/aedd8e97a23534a85bc5/maintainability)](https://codeclimate.com/github/altaris/noisy-moo/maintainability)\n[![Documentation](https://badgen.net/badge/documentation/here/blue)](https://altaris.github.io/noisy-moo/nmoo.html)\n\n\n\u003ccenter\u003e\n    \u003cimg src=\"https://github.com/altaris/noisy-moo/raw/main/imgs/the_cow.png\"\n    alt=\"The C O W\" width=\"200\"/\u003e\n\u003c/center\u003e\n\n\nA wrapper-based framework for [pymoo](https://pymoo.org/) problem modification\nand algorithm benchmarking. Initially developed to test\n*KNN-averaging*[^quatic21].\n\n# Installation\n\nSimply run\n```sh\npip install nmoo\n```\n\n# Getting started\n\n## In a notebook\n\nSee\n[example.ipynb](https://github.com/altaris/noisy-moo/blob/main/example.ipynb)\nfor a quick example.\n[![Launch Google Colab\nnotebook](https://img.shields.io/badge/launch-colab-blue?logo=googlecolab)](https://colab.research.google.com/github/altaris/noisy-moo/blob/main/example.ipynb)\n\n## For larger benchmarks\n\nFor larger benchmarks, you may want to use nmoo's CLI. First, create a module,\nsay [`example.py`](https://github.com/altaris/noisy-moo/blob/main/example.py),\ncontaining your benchmark factory (a function that returns your\n[benchrmark](https://altaris.github.io/noisy-moo/nmoo/benchmark.html#Benchmark)),\nsay `make_benchmark()`. Then, run it using\n```sh\npython -m nmoo run --verbose 10 example:make_benchmark\n```\nRefer to\n```sh\npython -m nmoo --help\n```\nfor more information.\n\n# Main submodules and classes\n\n* `nmoo.benchmark.Benchmark`: A `Benchmark` object represents... a benchmark\n  🤔. At construction, you can specify problems and algorithms to run, how many\n  times to run them, what performance indicators to compute, etc. Refer to\n  `nmoo.benchmark.Benchmark.__init__` for more details.\n* `nmoo.wrapped_problem.WrappedProblem`: The main idea of `nmoo` is to wrap\n  problems in layers. Each layer should redefine `pymoo.Problem._evaluate` to\n  intercept calls to the wrapped problem. It is then possible to apply/remove\n  noise, keep a call history, log, etc.\n* `nmoo.denoisers`: Sublasses of `nmoo.wrapped_problem.WrappedProblem` that\n  implement denoising algorithms. In a simple scenario, a synthetic problem\n  would be wrapped in a noise layer, and further wrapped in a denoising layer\n  to test the performance of the latter.\n* `nmoo.noises`: Sublasses of `nmoo.wrapped_problem.WrappedProblem` that apply\n  noise.\n\n# Contributing\n\n## Dependencies\n\n* `python3.8` or newer;\n* `requirements.txt` for runtime dependencies;\n* `requirements.dev.txt` for development dependencies (optional);\n* `make` (optional).\n\nSimply run\n```sh\nvirtualenv venv -p python3.8\n. ./venv/bin/activate\npip install -r requirements.txt\npip install -r requirements.dev.txt\n```\n\n## Documentation\n\nSimply run\n```sh\nmake docs\n```\nThis will generate the HTML doc of the project, and the index file should be at\n`docs/index.html`. To have it directly in your browser, run\n```sh\nmake docs-browser\n```\n\n## Code quality\n\nDon't forget to run\n```sh\nmake\n```\nto format the code following [black](https://pypi.org/project/black/),\ntypecheck it using [mypy](http://mypy-lang.org/), and check it against coding\nstandards using [pylint](https://pylint.org/).\n\n\n\n\n[^quatic21]: Klikovits, S., Arcaini, P. (2021). KNN-Averaging for Noisy\n    Multi-objective Optimisation. In: Paiva, A.C.R., Cavalli, A.R., Ventura\n    Martins, P., Pérez-Castillo, R. (eds) Quality of Information and\n    Communications Technology. QUATIC 2021. Communications in Computer and\n    Information Science, vol 1439. Springer, Cham.\n    https://doi.org/10.1007/978-3-030-85347-1_36","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltaris%2Fnoisy-moo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faltaris%2Fnoisy-moo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltaris%2Fnoisy-moo/lists"}