Science Score: 57.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 1 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (11.8%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: ChenchengLiang
- License: apache-2.0
- Language: Python
- Default Branch: main
- Size: 141 MB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
DragonLi
DragonLi is a solver for string equations, which aims to find solutions to equations involving strings rather than numerical values. These equations consist of sequences of characters, and the solver works to determine how unknown strings can be combined to satisfy given relationships.
DragonLi solves string equations by recursively applying a set of calculus rules to simplify the first terms on both sides of an equation. These rules reduce the complexity of the equation by making assumptions about the lengths of the terms. This iterative process constructs a proof tree, where each node represents a string equation, and each edge represents a branch resulting from the application of a calculus rule.
A key feature of DragonLi is its use of deep learning-based heuristics to guide the branching order while constructing the proof tree. This significantly boosts the solving efficiency. Specifically, each branching point is represented as a graph, which is used to train a Graph Neural Network (GNN). The trained GNN model is then employed to guide the branching process, making DragonLi highly efficient in finding solutions.
Build Environment
We first build Apptainer images (similar to docker) to serve as our environment. Apptainer installation instructions can be found here.
If you don't use containers, you can also follow the commands in .def files mentioned below to install everything.
For training
Go to the container folder, build an image by:
apptainer build train_image.sif alvis_word_equation_recipe-A100.def
For evaluation
Go to the container folder, build an image by:
apptainer build eval_image.sif uppmax_word_equation_recipe.def
Reproduce Instruction
Train a Model
Go to the project root folder and run:
apptainer exec --nv container/train_image.sif python3 src/example/branch_train.py
This will perform the following tasks:
- Generate training data (split points) in the file
benchmarks_and_experimental_results/example/01_track_train/divided_1/train.zipfor training andbenchmarks_and_experimental_results/example/01_track_train/valid_data/train.zipfor validation. - Generate graph files
graph_1.zipfor each split point and store them in the foldersdivided_1andvalid_dataunderbenchmarks_and_experimental_results/example/01_track_trainfor training and validation respectively. - Train two GNN models for 2- and 3-category classification for Rule 7 and 8, respectively. These will be stored in
Models/model_2_graph_1_GCNSplit.pthandModels/model_3_graph_1_GCNSplit.pthrespectively.
Evaluation
In the project root folder, run:
apptainer exec --nv container/eval_image.sif python3 src/example/branch_eval.py
This will evaluate the problems in the folder benchmarks_and_experimental_results/example/01_track_eval/ALL. The experimental results will be stored in files results.csv and summary.csv under benchmarks_and_experimental_results/example/01_track_eval.
By default, we run the five configurations (fixed, random, GNN, GNN+fixed, GNN+random) of DragonLi. They are named this:EliminateVariablesRecursive-config_i where $i\in {1,2,3,4,5}$ representing fixed, random, GNN, GNN+fixed, and GNN+random, respectively in results.csv and summary.csv.
Meanwhile, this code also runs Z3 on the same problems. Thus, you can find a comparison and consistency check in both files results.csv and summary.csv.
Notice
You may need to change the paths in file config.ini to make it run correctly.
The train, valid, test data are exactly the same problems. So in this example as long as we train enough epochs, it will solve all problems.
Citation of This Work
```bibtex @InProceedings{10.1007/978-3-031-78709-6_14, author = "Abdulla, Parosh Aziz and Atig, Mohamed Faouzi and Cailler, Julie and Liang, Chencheng and R{\"u}mmer, Philipp", editor = "Akshay, S. and Niemetz, Aina and Sankaranarayanan, Sriram", title = "Guiding Word Equation Solving Using Graph Neural Networks", booktitle = "Automated Technology for Verification and Analysis", year = "2025", publisher = "Springer Nature Switzerland", address = "Cham", pages = "279--301", isbn = "978-3-031-78709-6" }
Owner
- Name: Chencehng Liang
- Login: ChenchengLiang
- Kind: user
- Location: Sweden
- Company: Uppsala University
- Repositories: 4
- Profile: https://github.com/ChenchengLiang
PhD student in Uppsala University
Citation (CITATION.cff)
cff-version: 1.2.0
message: "If you use this repository, please cite the following work."
authors:
- family-names: "Abdulla"
given-names: "Parosh Aziz"
- family-names: "Atig"
given-names: "Mohamed Faouzi"
- family-names: "Cailler"
given-names: "Julie"
- family-names: "Liang"
given-names: "Chencheng"
- family-names: "Rümmer"
given-names: "Philipp"
title: "Guiding Word Equation Solving Using Graph Neural Networks"
conference: "Automated Technology for Verification and Analysis"
year: 2025
publisher: "Springer Nature Switzerland"
address: "Cham"
pages: "279--301"
doi: "10.1007/978-3-031-78709-6_14"
isbn: "978-3-031-78709-6"
abstract: "This paper proposes a Graph Neural Network-guided algorithm for solving word equations, based on the well-known Nielsen transformation for splitting equations. The algorithm iteratively rewrites the first terms of each side of an equation, giving rise to a tree-like search space. The choice of path at each split point of the tree significantly impacts solving time, motivating the use of Graph Neural Networks (GNNs) for efficient split decision-making. Split decisions are encoded as multi-classification tasks, and five graph representations of word equations are introduced to encode their structural information for GNNs. The algorithm is implemented as a solver named DragonLi. Experiments are conducted on artificial and real-world benchmarks. The algorithm performs particularly well on satisfiable problems. For single word equations, DragonLi can solve significantly more problems than well-established string solvers. For the conjunction of multiple word equations, DragonLi is competitive with state-of-the-art string solvers."
GitHub Events
Total
- Push event: 102
Last Year
- Push event: 102
Dependencies
- Pillow *
- dgl *
- graphviz *
- matplotlib *
- mlflow *
- networkx *
- numpy *
- pandas *
- plotly *
- psutil *
- pyvis *
- torch *