2 个版本
新版本 0.1.1 | 2024年8月12日 |
---|---|
0.1.0 | 2024年6月21日 |
#568 in 编码
每月120次下载
140KB
3K SLoC
XCSP3 Serde
xcsp3-serde
是一个Rust库,使用 serde
库为XCSP3 (XML) 格式提供序列化和反序列化支持。XCSP3 是用于表示决策和优化问题的表示形式。此格式可用于某些此类问题的求解器,或用于进一步处理问题。
入门
使用 cargo
安装库
cargo install xcsp3-serde
阅读 文档 了解有关如何使用库的更多信息。
限制
此库目前仅支持XCSP3格式的子集。所有XCSP3-core格式的功能都受支持,但许多核心格式之外的功能尚未支持。此库的目标是在未来支持完整的XCSP3格式。
许可证
本项目采用MPL-2.0许可证。有关详细信息,请参阅LICENSE文件。
lib.rs
:
XCSP3 (核心) 格式的序列化
XCSP3 是用于表示组合约束问题的综合格式,可以处理单/多优化、多种类型的变量、成本函数、具体化、视图、注释、变量量化、分布式、概率和定性推理。它也是紧凑的,易于阅读和解析。XCSP3 的目标是提供一个通用的组合约束实例测试平台,以简化测试和比较不同算法所需的工作。
此包侧重于XCSP3格式的(反)序列化。它可以用于将XCSP3 XML文件解析为提供的rust类型,或将提供的rust类型写入XCSP3 XML文件。
入门
为您的包安装 xcsp3-serde
和 quick-xml
cargo add xcsp3-serde quick-xml
一旦将这些依赖项安装到您的包中,您可以将以下方式反序列化一个XCSP3 XML文件:
// let path = Path::new("/lorem/ipsum/instance.xml");
let rdr = BufReader::new(File::open(path).unwrap());
let instance: Instance = quick_xml::de::from_reader(rdr).unwrap();
// ... process XCSP3 ...
然而,如果您想序列化XCSP3实例,可以遵循以下片段:
let instance = Instance::<String>::default();
// ... create XCSP3 instance ...
let xml_str = quick_xml::se::to_string(&instance).unwrap();
请注意,使用缓冲文件写入器进行写入时,应首选 quick_xml::se::to_writer
。
限制
目前并非所有XCSP3功能都已实现,XCSP3-core的功能通常已实现并得到支持。这使用户能够处理最常用的约束类型和表示。未来的更新将专注于扩展支持的XCSP3功能范围。
依赖项
~1.6–2.5MB
~51K SLoC