- LocalSolverホーム
- クイックスタートガイド
- C++でユーザーのファーストモデルを解く
C++でユーザーのファーストモデルを解く
LocalSolverはC++言語で実装されます。移植性の高いC++言語をオブジェクト指向アプリケーション・プログラミングインターフェース(ユーザーのビジネス・アプリケーション内に完全な統合が可能です。)で提供します(APIs)。LocalSolverのAPIsはアクセスするクラス数が限られており、使いやすい形になっています。LocalSolverがカプセル化した数理計画ソルバーであることを前述しました。ソルバーを実行するために、モデルをインスタンス化し、追加のコードを記述する必要はありません。
下記は、quick tour of LocalSolver's modeler.で紹介したナップザック・トイ例題を解くため、C++コードで記述しています。対応するソース・ファイルは例題・トイで入手頂けます。
/********** toy.cpp **********/
#include "localsolver.h"
using namespace localsolver;
int main()
{
int weights[] = {10, 60, 30, 40, 30, 20, 20, 2};
int values[] = {1, 10, 15, 40, 60, 90, 100, 15};
LocalSolver localsolver;
LSModel* model = localsolver.getModel();
// 0-1 decisions
LSExpression* x[8];
for (int i = 0; i < 8; i++)
x[i] = model->createExpression(O_Bool);
// knapsackWeight <- 10*x0 + 60*x1 + 30*x2 + 40*x3 + 30*x4 + 20*x5 + 20*x6 + 2*x7;
LSExpression* knapsackWeight = model->createExpression(O_Sum);
for (int i = 0; i < 8; i++)
knapsackWeight->addOperand(model->createExpression(O_Prod, weights[i], x[i]));
// knapsackWeight <= 102;
model->addConstraint(model->createExpression(O_Leq, knapsackWeight, 102));
// knapsackValue <- 1*x0 + 10*x1 + 15*x2 + 40*x3 + 60*x4 + 90*x5 + 100*x6 + 15*x7;
LSExpression* knapsackValue = model->createExpression(O_Sum);
for (int i = 0; i < 8; i++)
knapsackValue->addOperand(model->createExpression(O_Prod, values[i], x[i]));
// maximize knapsackValue;
model->addObjective(knapsackValue, OD_Maximize);
// close model, then solve
model->close();
LSPhase* phase = localsolver.createPhase();
phase->setTimeLimit(1);
localsolver.solve();
return 0;
}
C++プログラムの構造が対応するLSP構造になっていることがわかります。
まず最初に、入力データの読み込みを行います。その後、いくつかの表現式を作成し、ナップザック・モデルを宣言します。
モデルを終了させると、Windows上のソルバーを開始する前に探索をパラメータ化ができます。上記のプログラムがVisual Studio Command Prompt(ユーザーのLocalSolverのバージョンに従い、×86または×64)の中で、コンパイルされ、下記の行で実行します。
cl /EHsc toy.cpp -I%LS_HOME%\include /link %LS_HOME%\bin\localsolver.lib
toy
Linux上では 下記の行を用いて同様のプログラムをコンパイルし、実行します。
g++ toy.cpp -I/opt/localsolver_2_0/include -llocalsolver -lpthread -o toy
./toy
プログラムのコンパイル及び実行に関して、トラブルが発生した場合、必要システム構成およびインストール手順を参照ください。またAPIsに関する詳細情報はC++ API Referenceを参照ください。