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
Last synced: 7 months ago · JSON representation ·

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
Created over 2 years ago · Last pushed 9 months ago
Metadata Files
Readme License Citation

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:

  1. Generate training data (split points) in the file benchmarks_and_experimental_results/example/01_track_train/divided_1/train.zip for training and benchmarks_and_experimental_results/example/01_track_train/valid_data/train.zip for validation.
  2. Generate graph files graph_1.zip for each split point and store them in the folders divided_1 and valid_data under benchmarks_and_experimental_results/example/01_track_train for training and validation respectively.
  3. 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.pth and Models/model_3_graph_1_GCNSplit.pth respectively.

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

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

requirements.txt pypi
  • Pillow *
  • dgl *
  • graphviz *
  • matplotlib *
  • mlflow *
  • networkx *
  • numpy *
  • pandas *
  • plotly *
  • psutil *
  • pyvis *
  • torch *