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

このページの先頭へ