linear-program

img img img img

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 脚本。