- LocalSolverホーム
- クイックスタートガイド
- Javaでユーザーのファーストモデルを解く
Javaでユーザーのファーストモデルを解く
LocalSolverはC++言語で実装されます。オブジェクト指向アプリケーション・プログラミングインターフェースはJava5.0(または上位)向けに提供され、ユーザーのJavaビジネス・アプリケーション内に完全な統合が可能です。
LocalSolverのAPIsはアクセスするクラス数が限られており、使いやすい形になっています。
LocalSolverがカプセル化した数理計画ソルバーであることを前述しました。ソルバーを実行するため、モデルをインスタンス化し、追加のコードを記述する必要はありません。
下記は、quick tour of LocalSolver's modeler.で紹介したナップザック・トイ例題を解くため、Javaコードで記述しています。
/********** Toy.java **********/
import localsolver.*;
public class Toy {
public static void main(String [] args) {
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 model, then solve
model.close();
LSPhase phase = localsolver.createPhase();
phase.setTimeLimit(1);
localsolver.solve();
}
}
Javaプログラムの構造が対応するLSP構造になっていることがわかります。
まず最初に、入力データの読み込みを行います。その後、いくつかの表現式を生成し、ナップザック・モデルを宣言します。モデルを終了させると、Windows上のソルバーを開始する前に探索をパラメータ化できます。
コンパイルするために、Java Development kit5.0(または上位)をユーザーのコンピュータにインストールする必要があります。Windows上では、上記のプログラムでコンパイルし下記の行で、実行します。
javac Toy.java -cp %LS_HOME%\bin\localsolver.jar
java -cp %LS_HOME%\bin\localsolver.jar;. -Djava.library.path=%LS_HOME%\bin\ Toy
Linux上では、上記のプログラムがコンパイルされ、下記の行で実行します。
javac Toy.java -cp /opt/localsolver_2_0/bin/localsolver.jar
java -cp /opt/localsolver_2_0/bin/localsolver.jar:. -Djava.library.path=/opt/localsolver_2_0/bin/ Toy
プログラムのコンパイル及び実行に関して、トラブルが発生した場合、必要システム構成およびインストール手順を参照ください。またAPIsに関する詳細情報はJava API Referenceを参照ください。