OptHub

誘導モータの設計

2025年 進化計算コンペ 問題

motor

誘導モータの設計

Input / Output

When submitting a solution to a match, please make sure to meet the following conditions.

入力

設計変数

本問題では、いずれの競技も整数変数5つ、実数変数11つで構成され、各変数は下記の下限値、上限値の範囲の数値を取る。
※各変数の意味は、「ホーム」内のスライドを参照

No. 設計変数 変数型 下限 上限 単位 説明 備考
1 Nst/12N_{st}/12 int 1 6 - ステータスロット数÷12 12倍した数値が説明スライドの NstN_{st} として使用される
2 nYn_Y int 1 4 - 並列回路数 {1, 2, 4}のみ許容される
3 npn_p int 5 13 - コイルピッチ
4 NrtN_{rt} int 2 60 - ロータススロット数 偶数のみ許容される
5 rinr_{in} float 0.01 0.2 m 鉄の内半径
6 hsth_{st} float 0.05 0.5 m モータ鉄の高さ
7 bhb_h float 0.001 0.05 m 導体の高さ
8 bwb_w float 0.001 0.05 m 導体の幅
9 wrw_r float 0.001 0.01 m 鉄の開口幅
10 trt_r float 0.001 0.005 m 鉄の先端厚さ2
11 gg float 0.0005 0.005 m ステータとロータの隙間
12 tst_s float 0.001 0.008 m 鉄の先端厚さ1
13 wcw_c float 0.001 0.01 m 素線幅
14 hch_c float 0.0005 0.005 m 素線厚み
15 ncn_c int 1 25 - コイル巻き数 整数変数のため注意
16 wsw_s float 0.01 0.25 m 鉄の後ろ幅

解の送信

上記の順番通りに数値を格納した配列を解(入力)として送信する。

# 送信する解(入力)の例
[6, 4, 13, 60, 0.2, 0.5, 0.05, 0.05, 0.01, 0.005, 0.005, 0.008, 0.01, 0.005, 25, 0.25]

Pythonを使用する場合の解の送信例を以下に示す。
※詳細およびPython以外での解の提出方法はチュートリアル「5. 解の送信」を参照
※整数変数に実数が入っているとエラーとなります。

from opthub_client.api import OptHub

YOUR_API_KEY = "APIキー"
match_id = "競技のID"

# 送信する解(入力)の例
solution = [6, 4, 13, 60, 0.2, 0.5, 0.05, 0.05, 0.01, 0.005, 0.005, 0.008, 0.01, 0.005, 25, 0.25]

# 解の送信・評価
with OptHub(YOUR_API_KEY) as api:
  opthub_match = api.match(match_id)
  trial = opthub_match.submit(solution)
  eval = trial.wait_evaluation()

出力

本問題の評価結果は、目的関数の値objective、制約関数の値constraint、実行可能性feasible、エラーerrorが返却される。サーバーでエラーが発生した場合は、目的関数の値objective、制約関数の値constraint、実行可能性feasibleは返却されず、評価回数としてはカウントされない。

目的関数

多目的、単目的ともに全ての目的関数を最小化する問題として定義している。

No. 目的関数 (最小化) 単位 変数型 備考
1 質量 kg float 単目的、多目的問題で使用
1 - 効率 % float 多目的問題のみで使用

目的関数の値objectiveは、多目的問題の場合(環境変数PROBLEM_TYPEmultiの場合)は2次元のベクトルvectorに格納される。1次元目は質量を表すfloat型の値、2次元目は効率を表すfloat型の値である。効率は最大化すべき目的関数であるため、プログラムでは負号をつけた数値の最小化問題として実装されている。
単目的問題の場合(環境変数PROBLEM_TYPEsingleの場合)、質量のみを目的関数の値として利用し、目的関数の値objectiveは、スカラーscalarに格納される。

以上の違いから、目的関数の値objectiveを取り出す際のコマンドには、下記の差異があるので注意を要する。
※上述の「解の送信」通りにPythonコードを実行したことを仮定している。

# 単目的問題の場合
obj = eval.objective.scalar

# 多目的問題の場合
obj = eval.objective.vector

制約条件

全ての制約条件は、 gi(x)0g_i(x) \le 0 の形に変形して実装されており、制約関数の値constraintには各制約に対する gi(x)g_i(x) の数値(下表の左辺)が、17次元(単目的)または18次元(多目的)のベクトルvectorとして格納されている。したがって、 constraint内の数値が正である場合、その値は制約違反量となる。
制約条件は下記の順番で実装されている。ただし、 4番目の制約条件は多目的問題のみに課されるものであり、単目的問題では出力されない。

No. 制約条件 説明 備考
1 出力/設計出力値1.150出力/設計出力値 - 1.15 \le 0 出力値は設計値の115%以内
2 出力/設計出力値+0.990-出力/設計出力値 + 0.99 \le 0 出力値は設計値の99%以上
3 効率下限値効率0効率下限値 - 効率 \le 0 効率は指定の下限値以上
4 質量質量上限値0質量 - 質量上限値 \le 0 質量は指定の上限値以下 多目的問題のみ
5 定格トルク始動トルク0定格トルク - 始動トルク \le 0 始動トルクは定格トルク以上
6 1.5最大トルク比01.5 - 最大トルク比 \le 0 最大トルク/定格トルクの比率が一定以上
7 最大トルク速度比0最大トルク速度比 \le 0 最大トルクのすべりが定格すべり以上
8 コイル温度上昇1000コイル温度上昇 - 100 ℃ \le 0 巻線温度上昇が規定値以下
9 ティース磁束密度1.6[T]0ティース磁束密度 - 1.6 [T] \le 0 各部の磁束密度が、指定値以下
10 コアバック磁束密度1.6[T]0コアバック磁束密度 - 1.6 [T] \le 0 各部の磁束密度が、指定値以下
11 Rtティース磁束密度1.6[T]0\text{Rt}ティース磁束密度 - 1.6 [T] \le 0 各部の磁束密度が、指定値以下
12 Nrtと最も近い偶数との差分0|N_{rt}と最も近い偶数との差分| \le 0 NrtN_{rt} は偶数のみを許容
13 0.7Nrt/Nst00.7 -N_{rt}/N_{st} \le 0 NrtN_{rt}NstN_{st} の比率が指定値以上
14 Nrt/Nst1.30N_{rt}/N_{st} -1.3 \le 0 NrtN_{rt}NstN_{st} の比率が指定値以下
15 0.5nNrtmNst{2,0,2}の中で最も近い値との差分00.5 - |n N_{rt} - m N_{st} と\{-2, 0, 2\}の中で最も近い値との差分 | \le 0 nNrtmNstが、0±2ではない(n,m{1,2})n N_{rt} - m N_{st} が、0か±2ではない( \forall n, m \in \{1, 2\} )
16 0.6(np1)/(Nst/4)00.6 - (n_p - 1)/(N_{st} / 4) \le 0 npn_pNstN_{st} の比率が指定値以上
17 (np1)/(Nst/4)10( n_p - 1)/(N_{st} / 4) - 1 \le 0 npn_pNstN_{st} の比率が指定値以下
18 nY{1,2,4}の中で最も近い数値との差分0|n_Y と \{1, 2, 4\} の中で最も近い数値との差分| \le 0 nYn_Y は{1, 2, 4}のみを許容
  • 設計出力値:競技ごとに環境変数Output(設計出力)に定義されている
  • 効率下限値:多目的では85%、単目的では90%である
  • 質量上限値:多目的では500 [kg]、単目的では最小化すべき目的関数であり制約はない

制約関数の値constraintおよび実行可能性feasibleは下記のコマンドで取り出せる。実行可能性feasibleは、全ての制約関数の値が0以下である場合にTrueとなる。
※上述の「解の送信」通りにPythonコードを実行したことを仮定している。

# 制約関数の値の取り出し
con = evaluation.constraint.vector

# 実行可能性(bool)の取り出し
fea = evaluation.feasible