{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/modelling-behavioural-diversity-for-learning","title":"Modelling Behavioural Diversity for Learning in Open-Ended Games","arxiv_id":"2103.07927","date":"2021-03-14","proceeding":null,"authors":["Nicolas Perez Nieves","Yaodong Yang","Oliver Slumbers","David Henry Mguni","Ying Wen","Jun Wang"],"abstract":"Promoting behavioural diversity is critical for solving games with non-transitive dynamics where strategic cycles exist, and there is no consistent winner (e.g., Rock-Paper-Scissors). Yet, there is a lack of rigorous treatment for defining diversity and constructing diversity-aware learning dynamics. In this work, we offer a geometric interpretation of behavioural diversity in games and introduce a novel diversity metric based on determinantal point processes (DPP). By incorporating the diversity metric into best-response dynamics, we develop diverse fictitious play and diverse policy-space response oracle for solving normal-form games and open-ended games. We prove the uniqueness of the diverse best response and the convergence of our algorithms on two-player games. Importantly, we show that maximising the DPP-based diversity metric guarantees to enlarge the gamescape -- convex polytopes spanned by agents' mixtures of strategies. To validate our diversity-aware solvers, we test on tens of games that show strong non-transitivity. Results suggest that our methods achieve at least the same, and in most games, lower exploitability than PSRO solvers by finding effective and diverse strategies.","url_abs":"https://arxiv.org/abs/2103.07927v2","url_pdf":"https://arxiv.org/pdf/2103.07927v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"modelling-behavioural-diversity-for-learning","repo_url":"https://github.com/diversepsro/diverse_psro","is_official":0,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":null},{"paper_slug":"modelling-behavioural-diversity-for-learning","repo_url":"https://github.com/oslumbers/diverse-psro","is_official":0,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"unanswered"}},{"paper_slug":"modelling-behavioural-diversity-for-learning","repo_url":"https://github.com/sjtu-marl/bd_rd_psro","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"diversity","task_name":"Diversity"},{"task_slug":"point-processes","task_name":"Point Processes"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2103.07927","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2103.07927"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/sjtu-marl/bd_rd_psro","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/diversepsro/diverse_psro","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/oslumbers/diverse-psro","reach":{"status":"unanswered"}}],"summary":{"ran_honours":1,"ran_draft_wrong":5,"ran_fixture":2},"by_repo_kind":{"named_in_paper":{"samples":1,"ran":1,"repositories":1},"listed":{"samples":7,"ran":7,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":8,"samples":[{"code_sha256_prefix":"89a0c3309350975e","entry":"distance_solver","repo":"sjtu-marl/bd_rd_psro","repo_kind":"listed","path":"non_mixture_model.py","file_url":"https://github.com/sjtu-marl/bd_rd_psro/blob/HEAD/non_mixture_model.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"89a0c3309350975e"}},{"code_sha256_prefix":"bb0cee34530e3448","entry":"fictitious_play","repo":"sjtu-marl/bd_rd_psro","repo_kind":"listed","path":"spinning_tops_dpp.py","file_url":"https://github.com/sjtu-marl/bd_rd_psro/blob/HEAD/spinning_tops_dpp.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bb0cee34530e3448"}},{"code_sha256_prefix":"1209c10396c7231f","entry":"fictitious_play","repo":"sjtu-marl/bd_rd_psro","repo_kind":"listed","path":"analyze_gauss.py","file_url":"https://github.com/sjtu-marl/bd_rd_psro/blob/HEAD/analyze_gauss.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1209c10396c7231f"}},{"code_sha256_prefix":"ec874bbd57842813","entry":"fp_for_non_symmetric_game","repo":"sjtu-marl/bd_rd_psro","repo_kind":"listed","path":"analyze_gauss.py","file_url":"https://github.com/sjtu-marl/bd_rd_psro/blob/HEAD/analyze_gauss.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ec874bbd57842813"}},{"code_sha256_prefix":"c0c29a0be57cf876","entry":"get_br_to_strat","repo":"sjtu-marl/bd_rd_psro","repo_kind":"listed","path":"spinning_tops_dpp.py","file_url":"https://github.com/sjtu-marl/bd_rd_psro/blob/HEAD/spinning_tops_dpp.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c0c29a0be57cf876"}},{"code_sha256_prefix":"9591eb5c446df450","entry":"get_br_to_strat","repo":"sjtu-marl/bd_rd_psro","repo_kind":"listed","path":"analyze_gauss.py","file_url":"https://github.com/sjtu-marl/bd_rd_psro/blob/HEAD/analyze_gauss.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9591eb5c446df450"}},{"code_sha256_prefix":"d860f0ba9aa6810b","entry":"get_exploitability","repo":"sjtu-marl/bd_rd_psro","repo_kind":"listed","path":"spinning_tops_dpp.py","file_url":"https://github.com/sjtu-marl/bd_rd_psro/blob/HEAD/spinning_tops_dpp.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d860f0ba9aa6810b"}},{"code_sha256_prefix":"8f8dde5e49ed3949","entry":"gradient_loss_update_rectified","repo":"diversepsro/diverse_psro","repo_kind":"named_in_paper","path":"non_mixture_model.py","file_url":"https://github.com/diversepsro/diverse_psro/blob/HEAD/non_mixture_model.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8f8dde5e49ed3949"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}