1. LocalSolverホーム
  2. クイックスタートガイド
  3. 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を参照ください。

このページの先頭へ