2 个版本
0.1.1 | 2024 年 1 月 22 日 |
---|---|
0.1.0 | 2023 年 12 月 31 日 |
在 解析器实现 中排名 1209
每月下载量 22
82KB
900 行
mps
使用 Rust 编写的快速 MPS 解析器
关于
mps
是用于数学规划系统 (MPS) 文件格式的解析器,通常用于表示优化问题。
该软件包提供了用于解析 MPS 数据的库和 CLI。主要功能包括
- 可配置解析:
- 支持的功能标志
trace
- 通过nom_tracable
和nom_locate
提供增强的调试和统计信息。proptest
- 属性测试集成。cli
- 命令行界面。
- 支持的功能标志
- 健壮性:广泛测试与 Netlib LP 测试套件。
- 性能:使用 Criterion.rs 进行基准测试。
示例
库
use mps::Parser;
let contents = "MPS data...";
match Parser::<f32>::parse(&contents) {
Ok((_, model)) => { /* use MPS model */ },
Err(e) => eprintln!("Parsing error: {}", e),
}
CLI
$ mps --input-path ./data/netlib/afiro
作为 flake 的使用
将 mps
添加到您的 flake.nix
{
inputs.mps.url = "https://flakehub.com/f/integrated-reasoning/mps/*.tar.gz";
outputs = { self, mps }: {
# Use in your outputs
};
}
使用 Docker 运行
docker run -it integratedreasoning/mps:latest
路线图
语义验证
进行语义验证,以在将模型传递给求解器之前及早发现潜在问题。
- 结构检查
- 检测并标记可以自动满足或违反的不可达约束
- 识别冗余约束,它们是现有行的逻辑重复
- 检查支配约束,它使其他约束变得冗余
- 在需要时验证松弛变量的存在,以避免无界性
- 通过分析界限、目标和右侧来验证对偶可行性
- 跨验证变量目标成本与其他提供的视角中的成本系数
- 检查在建模相同逻辑关系的约束中重叠/重复的项
- 识别不参与任何约束的变量,除非有意作为自由变量
- 数值检查
- 检查数值 - 标记可能导致弱公式的接近零系数
- 提出过度激进的边界问题,这会不当地约束可行域
- 分析项稀疏性,以识别可能的紧凑公式机会
- 诊断不良的模型缩放,可能导致解的不准确性
- 逻辑检查
- 标记由于系数分配而隐式约束为连续的离散变量
- 检查变量的逻辑矛盾边界,这些边界与约束含义冲突
依赖项
~9.5MB
~170K SLoC