{"id":45544704,"url":"https://github.com/anmolkabra/avicaching","last_synced_at":"2026-02-23T04:42:07.764Z","repository":{"id":99692781,"uuid":"191861003","full_name":"anmolkabra/avicaching","owner":"anmolkabra","description":"Source code for \"GPU-accelerated Principal-Agent Game for Scalable Citizen Science\"","archived":false,"fork":false,"pushed_at":"2019-06-15T21:23:49.000Z","size":2122,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-01-30T01:24:07.480Z","etag":null,"topics":["machine-learning","mixed-integer-programming","parallel-computing","pytorch","sustainability"],"latest_commit_sha":null,"homepage":"https://anmolkabra.com/docs/avicaching-compass19.pdf","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anmolkabra.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2019-06-14T02:10:18.000Z","updated_at":"2022-12-08T01:08:43.000Z","dependencies_parsed_at":"2023-06-19T05:27:36.253Z","dependency_job_id":null,"html_url":"https://github.com/anmolkabra/avicaching","commit_stats":{"total_commits":3,"total_committers":2,"mean_commits":1.5,"dds":"0.33333333333333337","last_synced_commit":"a585b735d782588d8434ad2cbf9579582e6bdf91"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/anmolkabra/avicaching","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anmolkabra%2Favicaching","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anmolkabra%2Favicaching/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anmolkabra%2Favicaching/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anmolkabra%2Favicaching/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anmolkabra","download_url":"https://codeload.github.com/anmolkabra/avicaching/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anmolkabra%2Favicaching/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29738080,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T04:36:46.119Z","status":"ssl_error","status_checked_at":"2026-02-23T04:36:25.794Z","response_time":90,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["machine-learning","mixed-integer-programming","parallel-computing","pytorch","sustainability"],"created_at":"2026-02-23T04:42:07.195Z","updated_at":"2026-02-23T04:42:07.745Z","avatar_url":"https://github.com/anmolkabra.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GPU-accelerated Principal-Agent Game for Scalable Citizen Science\n\nEfficiently reducing sampling bias in citizen science programs using principal-agent games, such as _Avicaching_ in [_eBird_](https://ebird.org/home), a bird-observational dataset.\n\n**Authors:** [Anmol Kabra](https://anmolkabra.com/), [Yexiang Xue](https://www.cs.purdue.edu/homes/yexiang/), [Carla P. Gomes](https://www.cs.cornell.edu/gomes/).\n\nThe publication is available at [anmolkabra.com/docs/avicaching-compass19.pdf](https://anmolkabra.com/docs/avicaching-compass19.pdf) ([doi: 10.1145/3314344.3332495](https://doi.org/10.1145/3314344.3332495)), and this work is licensed CC-BY-4.0.\n\n[![License: CC BY 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons.org/licenses/by/4.0/)\n\nIf you find this work useful, please cite it as:\n\n```\nAnmol Kabra, Yexiang Xue, and Carla P. Gomes. 2019. GPU-accelerated Principal-Agent Game for Scalable Citizen Science.\nIn ACM SIGCAS Conference on Computing and Sustainable Societies (COMPASS) (COMPASS ’19), July 3–5, 2019, Accra, Ghana.\nACM, New York, NY, USA, 9 pages. https://doi.org/10.1145/3314344.3332495\n```\n\n[update bibtex citation]\n\n## Abstract\n\n\u003e Citizen science programs have been instrumental in boosting sustainability projects, large-scale scientific discovery, and crowdsourced experimentation.\nNevertheless, these programs witness challenges in submissions' quality, such as sampling bias resulting from citizens' preferences to complete some tasks over others.\nThe sampling bias frequently manifests itself in the program's dataset as spatially clustered submissions, which reduce the efficacy of the dataset for subsequent scientific studies.\nTo address the spatial clustering problem, programs use reward schemes obtained from game-theoretical models to incentivize citizens to perform tasks that are more meaningful from a scientific point of view.\nHerein we propose a GPU-accelerated approach for the _Avicaching_ game, which was recently introduced by the _eBird_ citizen science program to incentivize birdwatchers to collect bird data from under-sampled locations.\n_Avicaching_ is a Principal-Agent game, in which the principal corresponds to the citizen science program (_eBird_) and the agents to the birdwatchers or citizen scientists.\nPrevious approaches for solving the _Avicaching_ game used approximations based on mixed-integer programming and knapsack algorithms combined with learning algorithms, using standard CPU hardware.\nFollowing the recent advances in scalable deep learning and parallel computation on Graphical Processing Units (GPUs), we propose a novel approach to solve the _Avicaching_ game, which takes advantage of neural networks and parallelism for large-scale games.\nWe demonstrate that our approach better captures agents' behavior, which allows better learning and more effective incentive distribution in a real-world bird observation dataset.\nOur approach also allows for massive speedups using GPUs.\nAs _Avicaching_ is representative of games that are aimed at reducing spatial clustering in citizen science programs, our scalable reformulation for _Avicaching_ enables citizen science programs to tackle sampling bias and improve submission quality on a large scale.\n\n## Installation\n\nThe project is tested in Ubuntu 16.04 64-bit, though we believe it would work in any Linux 64-bit OS.\n\nClone the repository and install the conda environment `avicaching` from `environment.yml` file as:\n\n```bash\nconda env create -f environment.yml\n```\n\nYou can change the name of the conda environment by modifying the first line of the `environment.yml` file.\n\n## Data\n\nWe provide synthetic datasets for setup purposes and running scalability experiments.\nPlease email [ak2426@cornell.edu](mailto:ak2426@cornell.edu?Subject=[Avicaching]) if you need access to the original _eBird_ data or other files used for our experiments.\n\n## Usage\n\n1. The outputs of the scripts require this directory structure:\n    ```\n    - stats/\n        - find_weights/\n            - logs/\n            - map_plots/\n            - plots/\n            - weights/\n        - find_rewards/\n            - logs/\n            - plots/\n            - test_rewards_results/\n    ```\n    You can create this structure with:\n    ```bash\n    for dir in logs map_plots plots weights; do mkdir -p \"stats/find_weights/$dir/\"; done\n    for dir in logs plots test_rewards_results; do mkdir -p \"stats/find_rewards/$dir\"; done\n    ```\n2. Running the `nn_avicaching_find_weights.py` file will run the identification problem models.\nYou will have to specify the number of layers in the model with flag `--layers k`.\n3. Running the `nn_avicaching_find_rewards.py` file with the location of the weights files from identification problem models (specified with `--weights-file filename`) will run the pricing problem models.\nThe script will automatically set the number of layers to the one used in the identification problem model.\n4. All other flags in both scripts are optional, as they are default set to the basic options.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanmolkabra%2Favicaching","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanmolkabra%2Favicaching","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanmolkabra%2Favicaching/lists"}