- LocalSolverホーム
- クイックスタートガイド
- C#でユーザーのファーストモデルを解く
C#でユーザーのファーストモデルを解く
LocalSolverはC++言語で実装されます。オブジェクト指向アプリケーション・プログラミングインターフェースは.NET2.0(または上位)向けに提供され、ユーザーの.NETビジネス・アプリケーション内に完全な統合が可能です。LocalSolverのAPIsはアクセスするクラス数が限られており、使いやすい形になっています。LocalSolverがカプセル化した数理計画ソルバーであることを前述しました。ソルバーを実行するために、モデルをインスタンス化し、追加のコードを記述する必要はありません。
下記は、quick tour of LocalSolver's modeler.で紹介したナップザック・トイ例題を解くために、C#コードで記述しています。対応するソース・ファイルは例題・トイで入手頂けます。
/********** Toy.cs **********/
using System;
using localsolver;
public class Toy
{
static void Main()
{
int[] weights = {10, 60, 30, 40, 30, 20, 20, 2};
int[] values = {1, 10, 15, 40, 60, 90, 100, 15};
LocalSolver localsolver = new LocalSolver();
LSModel model = localsolver.GetModel();
// 0-1 decisions
LSExpression[] x = new LSExpression[8];
for (int i = 0; i < 8; i++)
x[i] = model.CreateExpression(LSOperator.Bool);
// knapsackWeight <- 10*x0 + 60*x1 + 30*x2 + 40*x3 + 30*x4 + 20*x5 + 20*x6 + 2*x7;
LSExpression knapsackWeight = model.CreateExpression(LSOperator.Sum);
for (int i = 0; i < 8; i++)
knapsackWeight.AddOperand(model.CreateExpression(LSOperator.Prod, weights[i], x[i]));
// knapsackWeight <= 102;
model.AddConstraint(model.CreateExpression(LSOperator.Leq, knapsackWeight, 102));
// knapsackValue <- 1*x0 + 10*x1 + 15*x2 + 40*x3 + 60*x4 + 90*x5 + 100*x6 + 15*x7;
LSExpression knapsackValue = model.CreateExpression(LSOperator.Sum);
for (int i = 0; i < 8; i++)
knapsackValue.AddOperand(model.CreateExpression(LSOperator.Prod, values[i], x[i]));
// maximize knapsackValue;
model.AddObjective(knapsackValue, LSObjectiveDirection.Maximize);
// close the model before solving it
model.Close();
LSPhase phase = localsolver.CreatePhase();
phase.SetTimeLimit(1);
localsolver.Solve();
}
}
Javaプログラムの構造が対応するLSP構造になっていることがわかります。まず最初に、入力データの読み込みを行います。その後、いくつかの表現式を作成し、ナップザック・モデルを宣言します。モデルが終了すると、Windows上のソルバーを開始する前に探索をパラメータ化できます。
Visual Studio Command Prompt (ユーザーのLocalSolverのバージョンに従い、x86 または x64)
内で、上記のプログラムがコンパイルされ、下記の行で実行します。注:ユーザーのプログラムを構築するため、直接Visual studio IDEを使用する場合、ユーザーのプラットフォームターゲット(ユーザーのLocalSolverバージョンにより×86または×64)をユーザーのvisual Studioプロジェクトのプロパティを指定してください。
copy %LS_HOME%\bin\*net.dll .
csc Toy.cs /reference:localsolvernet.dll
Toy
プログラムのコンパイル及び実行に関して、トラブルが発生した場合、必要システム構成およびインストール手順を参照ください。またAPIsに関する詳細情報は.NETAPI Referenceを参照ください。