{"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/generative-modelling-of-structurally","title":"Generative Modelling of Structurally Constrained Graphs","arxiv_id":"2406.17341","date":"2024-06-25","proceeding":null,"authors":["Manuel Madeira","Clement Vignac","Dorina Thanou","Pascal Frossard"],"abstract":"Graph diffusion models have emerged as state-of-the-art techniques in graph generation; yet, integrating domain knowledge into these models remains challenging. Domain knowledge is particularly important in real-world scenarios, where invalid generated graphs hinder deployment in practical applications. Unconstrained and conditioned graph diffusion models fail to guarantee such domain-specific structural properties. We present ConStruct, a novel framework that enables graph diffusion models to incorporate hard constraints on specific properties, such as planarity or acyclicity. Our approach ensures that the sampled graphs remain within the domain of graphs that satisfy the specified property throughout the entire trajectory in both the forward and reverse processes. This is achieved by introducing an edge-absorbing noise model and a new projector operator. ConStruct demonstrates versatility across several structural and edge-deletion invariant constraints and achieves state-of-the-art performance for both synthetic benchmarks and attributed real-world datasets. For example, by incorporating planarity constraints in digital pathology graph datasets, the proposed method outperforms existing baselines, improving data validity by up to 71.1 percentage points.","url_abs":"https://arxiv.org/abs/2406.17341v2","url_pdf":"https://arxiv.org/pdf/2406.17341v2.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":"generative-modelling-of-structurally","repo_url":"https://github.com/manuelmlmadeira/ConStruct","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"graph-generation","task_name":"Graph Generation"}],"methods":[{"method_slug":"diffusion","method_name":"Diffusion"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2406.17341","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2406.17341"}},"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/manuelmlmadeira/ConStruct","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":2,"ran_honours":1,"ran_draft_wrong":1,"unverified":3},"by_repo_kind":{"official":{"samples":7,"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":0,"samples":[{"code_sha256_prefix":"6dcb1a7a685a56a3","entry":"effective_batch_size","repo":"manuelmlmadeira/ConStruct","repo_kind":"official","path":"ConStruct/datasets/adaptive_loader.py","file_url":"https://github.com/manuelmlmadeira/ConStruct/blob/HEAD/ConStruct/datasets/adaptive_loader.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6dcb1a7a685a56a3"}},{"code_sha256_prefix":"039fc6561a9516bc","entry":"l2","repo":"manuelmlmadeira/ConStruct","repo_kind":"official","path":"ConStruct/analysis/dist_helper.py","file_url":"https://github.com/manuelmlmadeira/ConStruct/blob/HEAD/ConStruct/analysis/dist_helper.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"039fc6561a9516bc"}},{"code_sha256_prefix":"70db7c9cbe9e680d","entry":"load_pickle","repo":"manuelmlmadeira/ConStruct","repo_kind":"official","path":"ConStruct/datasets/dataset_utils.py","file_url":"https://github.com/manuelmlmadeira/ConStruct/blob/HEAD/ConStruct/datasets/dataset_utils.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"70db7c9cbe9e680d"}},{"code_sha256_prefix":"727a5e6e5f9f6115","entry":"setup_wandb","repo":"manuelmlmadeira/ConStruct","repo_kind":"official","path":"ConStruct/utils.py","file_url":"https://github.com/manuelmlmadeira/ConStruct/blob/HEAD/ConStruct/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"727a5e6e5f9f6115"}},{"code_sha256_prefix":"1717b7476aced94e","entry":"masked_softmax","repo":"manuelmlmadeira/ConStruct","repo_kind":"official","path":"ConStruct/models/layers.py","file_url":"https://github.com/manuelmlmadeira/ConStruct/blob/HEAD/ConStruct/models/layers.py","link_basis":"plan_row","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1717b7476aced94e"}},{"code_sha256_prefix":"4b879d076b7285c0","entry":"remove_hydrogens","repo":"manuelmlmadeira/ConStruct","repo_kind":"official","path":"ConStruct/datasets/dataset_utils.py","file_url":"https://github.com/manuelmlmadeira/ConStruct/blob/HEAD/ConStruct/datasets/dataset_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4b879d076b7285c0"}},{"code_sha256_prefix":"110db6be0f991435","entry":"to_dense","repo":"manuelmlmadeira/ConStruct","repo_kind":"official","path":"ConStruct/utils.py","file_url":"https://github.com/manuelmlmadeira/ConStruct/blob/HEAD/ConStruct/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"110db6be0f991435"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}