linear-program

img img img img

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 スクリプトを実行してください。