産業応用のための最適化ベンチマーク問題集

一般社団法人 電気学会
情報知能システムの新展開とその産業応用調査専門委員会 
産業応用のためのシステム最適化とベンチマーク問題調査専門委員会 
システム最適化と産業応用ベンチマーク問題調査専門委員会 
計算知能技術と産業応用のためのベンチマーク問題調査専門委員会 
Last update on June 3rd, 2014 
ソースコードの使い方

はじめに
ソースコードの使い方について説明します。
以下では,P1を例として説明しますが,他のコードでも同様の要領で使うことができます。
ファイル構成
  • P1.cpp
    P1(エネルギープラント運用計画問題)クラスメインファイル。
  • P1.h
    P1クラスのヘッダーファイル。
  • P1_evaluation.cpp
    入力された解の評価を行うプログラム。P1クラスを使うためのサンプルプログラムです。
  • P1_x.txt
    P1_evaluation.cppで評価する解の設定ファイル。第n行目に第n変数の値を記述して下さい。
  • P1_tolerance.conf
    制約違反許容量εの設定ファイル。g(x) > ε, |h(x)| > εのときに制約違反と判定します。
  • P1_***.conf
    P1クラスで読み込まれる定数の設定ファイル。
評価プログラム(サンプルコード)の実行方法
  • Visual C++の場合
    cl P1.cpp P1_evaluation.cpp /FeP1.exe /EHsc(ソースコードのコンパイル)
    P1.exe(コードの実行)
  • gccの場合
    g++ P1.cpp P1_evaluation.cpp -o P1.out(ソースコードのコンパイル)
    ./P1.out(コードの実行)
  • 実行結果
    P1_x.txt内に記述した解を評価し,以下を出力します。
    • x = ...:入力した解を表示
    • y = ...:入力した解から構成した離散決定変数を表示
    • f1 = ...:1番目の目的関数値。
      Known Feasible Solutionsの目的関数値にはこの値を掲載しています。
    • g1 = ...:1番目の不等式制約条件評価値。
    • h1 = ...:1番目の等式制約条件評価値。
    • Sum of violation = ...:制約違反量合計値V(x,y)。
      V(x,y) = max{0, g1(x,y)} + max{0, g2(x,y)} + ... + |h1(x,y)| + |h2(x,y)| + ...。
      Known Feasible Solutionsの制約違反量合計値にはこの値を掲載しています。
    • Tolerance: ...:P1_tolerance.confで入力した制約違反許容量ε
    • Input solution is ***:
      入力した解が実行可能解であれば***がfeasible,
      実行不可能解であれば***がinfeasibleとなります。
クラス構成 (Public methods)
  • void P1::evaluation(double *x, double *y, double *f, double *g, double *h)
    目的関数値と制約条件評価値を計算します。
    連続決定変数を配列xに,離散決定変数を配列yに代入してください。
    目的関数値が配列f,不等式制約条件評価値が配列g,等式制約条件評価値が配列hに
    代入されます。
  • bool P1::checkFeasibility(double *x, double *y)
    解の実行可能性を確認します。
    連続決定変数を配列xに,離散決定変数を配列yに代入してください。
    P1_tolerance.confで設定した制約違反許容量εを用いて,
    g(x) > ε, |h(x)| > εのときに制約違反と判定します。
    実行可能解であれば「true」を,実行不可能であれば「false」を返します。
クラス構成 (Public properties)
  • int P1.N_x:連続決定変数の数。
  • int P1.N_y:離散決定変数の数。
  • int P1.P:目的関数の数。
  • int P1.M:不等式制約条件の数。
  • int P1.Q:等式制約条件の数。
  • double P1.eps:制約違反許容量。