4个版本 (破坏性更新)

0.4.0 2024年8月12日
0.3.0 2024年5月14日
0.2.0 2024年4月11日
0.1.0 2024年1月19日

#1884解析器实现

Download history 94/week @ 2024-04-29 59/week @ 2024-05-06 268/week @ 2024-05-13 149/week @ 2024-05-20 119/week @ 2024-05-27 69/week @ 2024-06-03 48/week @ 2024-06-10 45/week @ 2024-06-17 33/week @ 2024-06-24 68/week @ 2024-07-01 13/week @ 2024-07-08 19/week @ 2024-07-15 8/week @ 2024-07-22 141/week @ 2024-08-12

每月150 次下载

MPL-2.0 许可证

63KB
1.5K SLoC

FlatZinc Serde

flatzinc-serde 是一个Rust库,使用 serde 库提供对FlatZinc JSON格式的序列化和反序列化支持。FlatZinc (JSON) 是一种用于向这类问题的求解器表示决策和优化问题的表示方法。该格式由 MiniZinc 约束建模语言使用。

入门

使用 cargo 安装库

cargo install flatzinc-serde

阅读 文档 了解如何使用该库的更多信息。

许可证

本项目采用MPL-2.0许可证。有关详细信息,请参阅LICENSE文件。


lib.rs:

FlatZinc数据格式的序列化

FlatZinc是由 MiniZinc 编译器生产的语言,用于生成数据和求解器特定约束模型。这个crate实现了MiniZinc参考手册中“将求解器连接到FlatZinc”部分所描述的FlatZinc序列化格式。虽然这个crate中的serde规范可以与各种数据格式一起使用,但MiniZinc目前仅使用JSON数据格式输出这种公式。我们建议使用 serde_json 与这个crate中的规范来解析MiniZinc编译器生成的FlatZinc JSON文件。

入门

为您的包安装 flatzinc-serdeserde_json

cargo add flatzinc-serde serde_json

一旦将这些依赖安装到您的crate中,您就可以按以下方式反序列化一个FlatZinc JSON文件

// let path = Path::new("/lorem/ipsum/model.fzn.json");
let rdr = BufReader::new(File::open(path).unwrap());
let fzn: FlatZinc = serde_json::from_reader(rdr).unwrap();
// ... process FlatZinc ...

然而,如果您想序列化FlatZinc格式,可以按照以下片段进行

let fzn = FlatZinc::<String>::default();
// ... create  solver constraint model ...
let json_str = serde_json::to_string(&fzn).unwrap();

请注意,在写入较大的FlatZinc文件时,使用带缓冲的文件写入器的serde_json::to_writer将会更受欢迎。

在MiniZinc中注册您的求解器

如果您的目标是反序列化FlatZinc以实现MiniZinc求解器,那么下一步就是将您的求解器可执行文件注册到MiniZinc中。这可以通过创建一个MiniZinc求解器配置.msc)文件,并将其添加到MZN_SOLVER_PATH或标准路径,如~/.minizinc/solvers/所在的文件夹中来实现。一个接受JSON输入的求解器的基本配置如下

{
  "name" : "My Solver",
  "version": "0.0.1",
  "id": "my.organisation.mysolver",
  "inputType": "JSON",
  "executable": "../../../bin/fzn-my-solver",
  "mznlib": "../mysolver"
  "stdFlags": [],
  "extraFlags": []
}

一旦您将配置文件放置到正确的路径,您的求解器将显示在minizinc --solvers列表中。假设有一个有效的MiniZinc实例,调用minizinc --solver mysolver model.mzn data.dzn,(在编译之后)将调用已注册的可执行文件,路径为FlatZinc JSON文件的路径,以及可能注册的标准和额外标志(例如,../../../bin/fzn-my-solver model.fzn.json)。

依赖关系

~0.8–1.5MB
~32K SLoC