2 个版本

0.1.1 2024 年 1 月 22 日
0.1.0 2023 年 12 月 31 日

解析器实现 中排名 1209

每月下载量 22

MIT 许可证

82KB
900

mps

使用 Rust 编写的快速 MPS 解析器

ci docs.rs dependency status license: MIT codecov Docker Image Size (tag) FlakeHub Minimum Stable Rust Version

关于

mps 是用于数学规划系统 (MPS) 文件格式的解析器,通常用于表示优化问题。

该软件包提供了用于解析 MPS 数据的库和 CLI。主要功能包括

  • 可配置解析:
    • 支持的功能标志
      • trace - 通过 nom_tracablenom_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