LoginSignup
4
2

More than 5 years have passed since last update.

GLPKを手頃に扱えるラッパークラスを作成しました

Posted at

概要

 前回、GLPK for C#/CLIの使い方について学びました。
  GLPK for C#/CLIで遊ぼう! - Qiita
 ただ、「C#なのにプロパティを使わない」など、APIの出来がどうにもアレでしたので、適当にラッパークラスを作成してしまいました。ライセンスはGPLですが、よろしければどうぞ……。

で、どうラップしたのさ?

 比較画像を用意しました。左のコードが右のように書けます。

image

 単に71行が41行になっただけでなく、コンストラクタ/デストラクタという人権や、プロパティという常識、そして演算子オーバーロードという文明の利器が盛り込まれたことで大幅に書きやすくなった……はずです。
 また、内部で少し小細工することで、「problem.ObjCoef[0]」などとメソッド風に[]演算子を書くことができるようにしました。オーバーヘッドの面から、制約式/変数の範囲設定や、制約式の係数設定について細かいメソッドを設けることはあえてしませんでしたが(GLPK自体のAPIの都合による)、気が向いたらメソッドを追加するかもしれません。
 ちなみに上の画像(GLPKのマニュアルにもある由緒正しき例題)では線形計画問題を解かせていますが、整数計画問題も勿論解かせることができます。

 なお、GLPK for C#/CLIには本来定数なはずの数値が定数扱いではないという明確なクソ仕様があったので、いちいち数値を見て再設定しましたorz

image

注意事項

 GitHubのReference.mdにも書いてありますが、全APIを再現はしていないのでご注意ください。
 細かい処理がしたい場合は、org.gnu.glpk名前空間にあるGLPK for C#/CLIのメソッドを叩くか、ラップしてテキトーに追加するかしてください。issuesへの要望は歓迎します。

配布先

 GlpkWrapperCS - Wrapper Class for GLPK by C-Sharp

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2