linear-program
linear-program 是一个用于编写线性规划并以两阶段单纯形法求解的 MoonBit 库。系数在 luna-generic 的代数 trait 上泛型,单纯形表是 linear-algebra 的可变矩阵。求解器的每一步都是公开的,因此该库也可用来手动跟踪单纯形法。
包
所有公开名称都位于 src 下的唯一一个包中,文档中称为 core。
| 包 | 目录 | API | 教程 | 设计 |
|---|---|---|---|---|
core(src,导入路径 linear-program) | 变量、线性表达式、目标函数与约束(Variable、Poly、Obj_func、Constraint);规划与标准形(Lp、Lp::to_standard);两阶段单纯形求解器(Lp::two_stage、Lp::pivot、Lp::simplex_iteration、Lp::phase_1、Lp::phase_2);容差 trait ApproximatelyZero。 | API | 教程 | 设计 |
阅读路径
- 初学线性规划。 学习教程:它先求解一个生产问题,再求解一个含
>=约束的最小化问题,最后手动在单纯形表上转轴。同时打开设计说明,查阅标准形、检验数和两个阶段的含义。 - 使用求解器。 教程的快速入门和常见陷阱列表足以求解小型规划。API 参考说明了每个函数的确切行为,包括哪些情况会 abort。
- 参与贡献。 阅读设计说明,尤其是其中的不变量和已知缺陷,然后阅读贡献指南。
工具链与安装
本库需要 moonc 0.10 或更新版本的 MoonBit,并依赖 Luna-Flow/luna-generic 0.3.3 与 Luna-Flow/linear-algebra 0.4.7。
在 moon.pkg 中导入该包:
import {
"linear-program" @lp,
"Luna-Flow/linear-algebra/mutable" @la,
}
提交 pull request 之前,请运行 moon fmt、moon check --target all、moon info 和 moon test,或运行 ready_to_pr.sh 脚本。