{"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/integer-programming-for-causal-structure","title":"Integer Programming for Causal Structure Learning in the Presence of Latent Variables","arxiv_id":"2102.03129","date":"2021-02-05","proceeding":null,"authors":["Rui Chen","Sanjeeb Dash","Tian Gao"],"abstract":"The problem of finding an ancestral acyclic directed mixed graph (ADMG) that represents the causal relationships between a set of variables is an important area of research on causal inference. Most existing score-based structure learning methods focus on learning directed acyclic graph (DAG) models without latent variables. A number of score-based methods have recently been proposed for the ADMG learning, yet they are heuristic in nature and do not guarantee an optimal solution. We propose a novel exact score-based method that solves an integer programming (IP) formulation and returns a score-maximizing ancestral ADMG for a set of continuous variables that follow a multivariate Gaussian distribution. We generalize the state-of-the-art IP model for DAG learning problems and derive new classes of valid inequalities to formulate an IP model for ADMG learning. Empirically, our model can be solved efficiently for medium-sized problems and achieves better accuracy than state-of-the-art score-based methods as well as benchmark constraint-based methods.","url_abs":"https://arxiv.org/abs/2102.03129v3","url_pdf":"https://arxiv.org/pdf/2102.03129v3.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":"integer-programming-for-causal-structure","repo_url":"https://github.com/rchen234/IP4AncADMG","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"causal-inference","task_name":"Causal Inference"},{"task_slug":null,"task_name":"valid"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2102.03129","atlas_url":"https://app.syntology.ai/?focus=2102.03129","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2102.03129"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/rchen234/IP4AncADMG","reach":null}],"summary":{"ran_draft_wrong":2,"ran_fixture":2,"unverified":7},"by_repo_kind":{"official":{"samples":11,"ran":4,"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":11,"samples":[{"code_sha256_prefix":"7b88ac2e06afc548","entry":"almostdircyc","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7b88ac2e06afc548"}},{"code_sha256_prefix":"7de932c729313521","entry":"create_undir_edges_from_par","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7de932c729313521"}},{"code_sha256_prefix":"d0686f0ecdcdce98","entry":"dircyc","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d0686f0ecdcdce98"}},{"code_sha256_prefix":"4fee3916dac4e629","entry":"find_edge","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4fee3916dac4e629"}},{"code_sha256_prefix":"0c5a18e0650a3f76","entry":"BNSLlvInst","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0c5a18e0650a3f76"}},{"code_sha256_prefix":"be67cc8ca4ce9fa8","entry":"contract_bdir_edge","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"be67cc8ca4ce9fa8"}},{"code_sha256_prefix":"1e5e20ce366d13bb","entry":"contract_edge","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1e5e20ce366d13bb"}},{"code_sha256_prefix":"955a23cee712e6c0","entry":"contract_heur","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"955a23cee712e6c0"}},{"code_sha256_prefix":"43e94f9c0d786b11","entry":"contract_heur_bdir","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"43e94f9c0d786b11"}},{"code_sha256_prefix":"bce3797de1ae9857","entry":"create_edges_from_par","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bce3797de1ae9857"}},{"code_sha256_prefix":"12dc5368885bc6dc","entry":"single_contraction_round","repo":"rchen234/IP4AncADMG","repo_kind":"official","path":"src/LearnLatent.py","file_url":"https://github.com/rchen234/IP4AncADMG/blob/HEAD/src/LearnLatent.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"12dc5368885bc6dc"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}