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 科学
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