#graph #generate #json-file #graphgrammar

bin+lib graphlang

用于创建和探索图语法的终端和图形工具

4 个版本

0.1.3 2022 年 4 月 15 日
0.1.2 2022 年 4 月 14 日
0.1.1 2022 年 4 月 12 日
0.1.0 2022 年 4 月 11 日

#923 in 科学

MIT/Apache

72KB
1.5K SLoC

graphlang - 由图语法定义的图语言

注意:此软件包仍然处于高度实验性阶段,API 变更应予期待!当前性能也不是一个关注点。我强烈建议除了实验之外不要使用。

有关 API 文档,请参阅 TODO。该项目包含一个库,可用于定义和使用图语法,以及一些辅助函数,用于根据图语法生成随机图。它还包括一些预定义的图语法,以帮助创建自定义图语法和进行实验。它附带了一个全面的测试套件[^1]和许多示例的优质文档[^1]。

该项目还有一个应用程序,利用该库显示生成的图并图形化地创建自定义图[^1]。

定义和读取图语法的中间格式是简单的 JSON 文件。

[^1]: 尚未实现。

TODO

以下列表包含所有关键事项和

  • 库:更好的文档和示例
  • 项目:编写有用的 README.md
  • 库:最终使用 graph_builder-crate
  • 应用程序:取消边不能标记的限制
  • 应用程序:添加(交互式)GUI 启动选项
  • 应用程序:添加图形力图绘图

此列表表示“值得拥有的”事项,这些事项可以改善项目,但并非必需

  • 库:实现更好的部分同构算法 - 可能是 VL2?这应该是一个重大的速度提升
  • 库:使其更通用,以便其他项目可以实际使用
  • 库:重新评估公共 API
  • 项目:上传到 crates.io,以便可以轻松使用/安装
  • 库:提高性能,使其变得有用,而不仅仅是一个尝试事物的精美库。

图语法的基本介绍

待办事项:DPO 方法 - 这应该足够让每个人都能理解和处理基本构建块。

库的基本使用方法

待办事项:文档也有许多示例(实际上确实存在而不是更多的待办事项)。

let grammar = graphlang::predefined::string_grammar();
let mut g = grammar.start_graph.clone();

for _ in 0..10 {
  grammar.productions["extend"].apply_inplace(&mut g)?;
}
grammar.productions["finalize"].apply_inplace(&mut g)?;

assert!(grammar.is_valid(&g));

二进制文件的安装

要安装应用程序,只需运行

cargo install graphlang

然后应用程序应该在 cargo 的二进制文件夹中,可以将此文件夹添加到 PATH 变量以方便使用。

二进制文件的基本使用方法

该二进制程序使用图语法,可以使用JSON格式指定,或者使用预定义的语法,并生成对应图语言的示例图。

示例

graphlang input_file.json --output generated -t "10min" -v

读取文件 input_file.json 并生成文件 generated.dot。图是通过使用起始图并应用随机生产规则构建的,持续时间为 10min 或直到图变为有效 -v(即语法生成语言的一部分)。

可以使用预定义的语法。

graphlang Ladder3 --output generated -t "1min 30s" -v

以下选项可用

  • String:平凡的字符串语法
  • LadderN:基本上是宽度为 N 的字符串

v1.2 二进制程序的所有选项

USAGE:
    graphlang [OPTIONS] <INPUT>

ARGS:
    <INPUT>    Either a JSON file of a graph grammar or the name of a predefined grammar.
               Possible predefined grammars are: String, LadderN; Where N is a positive Integer
               >= 1

OPTIONS:
    -a, --asap                 (*) Quit evolution as soon as the graph is valid w.r.t. the grammar
    -h, --help                 Print help information
    -m, --max <MAX>            (*) Maximal number of productions. Example: `100`
    -o, --output <OUTPUT>      Optional output path. If given a dot-file of the graph is generated
    -t, --timeout <TIMEOUT>    (*) Maximal runtime for graph evolution. Example: `1h 2min 3s 4ns`
    -v, --verbose              Enable additional output
    -V, --version              Print version information

请注意,必须至少使用一个带有星号 (*) 的选项。

依赖关系

~5–14MB
~161K SLoC