概要
前回、GLPK for C#/CLIの使い方について学びました。
GLPK for C#/CLIで遊ぼう! - Qiita
ただ、「C#なのにプロパティを使わない」など、APIの出来がどうにもアレでしたので、適当にラッパークラスを作成してしまいました。ライセンスはGPLですが、よろしければどうぞ……。
で、どうラップしたのさ?
比較画像を用意しました。左のコードが右のように書けます。
単に71行が41行になっただけでなく、コンストラクタ/デストラクタという人権や、プロパティという常識、そして演算子オーバーロードという文明の利器が盛り込まれたことで大幅に書きやすくなった……はずです。
また、内部で少し小細工することで、「problem.ObjCoef[0]」などとメソッド風に[]演算子を書くことができるようにしました。オーバーヘッドの面から、制約式/変数の範囲設定や、制約式の係数設定について細かいメソッドを設けることはあえてしませんでしたが(GLPK自体のAPIの都合による)、気が向いたらメソッドを追加するかもしれません。
ちなみに上の画像(GLPKのマニュアルにもある由緒正しき例題)では線形計画問題を解かせていますが、整数計画問題も勿論解かせることができます。
なお、GLPK for C#/CLIには本来定数なはずの数値が定数扱いではないという明確なクソ仕様があったので、いちいち数値を見て再設定しましたorz
注意事項
GitHubのReference.mdにも書いてありますが、全APIを再現はしていないのでご注意ください。
細かい処理がしたい場合は、org.gnu.glpk名前空間にあるGLPK for C#/CLIのメソッドを叩くか、ラップしてテキトーに追加するかしてください。issuesへの要望は歓迎します。