linear-program
linear-program は、線形計画を記述し 2 段階シンプレックス法で解くための MoonBit ライブラリです。係数は luna-generic の代数的 trait に対してジェネリックで、シンプレックス表は linear-algebra の可変行列です。ソルバーの各ステップは公開されているので、シンプレックス法を手で追うためにも使えます。
パッケージ
公開名はすべて src の単一パッケージにあり、core として文書化されています。
| パッケージ | 目次 | API | チュートリアル | 設計 |
|---|---|---|---|---|
core(src、インポートパス linear-program) | 変数、線形式、目的関数、制約(Variable、Poly、Obj_func、Constraint)、計画と標準形(Lp、Lp::to_standard)、2 段階シンプレックス法のソルバー(Lp::two_stage、Lp::pivot、Lp::simplex_iteration、Lp::phase_1、Lp::phase_2)、許容誤差の trait ApproximatelyZero。 | API | チュートリアル | 設計 |
読み進め方
- 線形計画法が初めての方。 チュートリアルを順に進めてください。生産計画の問題を解き、次に
>=制約を持つ最小化問題を解き、最後にシンプレックス表を手でピボットします。標準形、被約費用、2 つの段階の意味については設計ノートを参照してください。 - ソルバーを使う方。 小さな計画を解くには、チュートリアルのクイックスタートとよくある落とし穴の一覧で十分です。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,
}
プルリクエストを出す前に、moon fmt、moon check --target all、moon info、moon test を実行するか、ready_to_pr.sh スクリプトを実行してください。