motor
When submitting a solution to a match, please make sure to meet the following conditions.
本問題では、いずれの競技も整数変数5つ、実数変数11つで構成され、各変数は下記の下限値、上限値の範囲の数値を取る。
※各変数の意味は、「ホーム」内のスライドを参照
| No. | 設計変数 | 変数型 | 下限 | 上限 | 単位 | 説明 | 備考 |
|---|---|---|---|---|---|---|---|
| 1 | int | 1 | 6 | - | ステータスロット数÷12 | 12倍した数値が説明スライドの として使用される | |
| 2 | int | 1 | 4 | - | 並列回路数 | {1, 2, 4}のみ許容される | |
| 3 | int | 5 | 13 | - | コイルピッチ | ||
| 4 | int | 2 | 60 | - | ロータススロット数 | 偶数のみ許容される | |
| 5 | float | 0.01 | 0.2 | m | 鉄の内半径 | ||
| 6 | float | 0.05 | 0.5 | m | モータ鉄の高さ | ||
| 7 | float | 0.001 | 0.05 | m | 導体の高さ | ||
| 8 | float | 0.001 | 0.05 | m | 導体の幅 | ||
| 9 | float | 0.001 | 0.01 | m | 鉄の開口幅 | ||
| 10 | float | 0.001 | 0.005 | m | 鉄の先端厚さ2 | ||
| 11 | float | 0.0005 | 0.005 | m | ステータとロータの隙間 | ||
| 12 | float | 0.001 | 0.008 | m | 鉄の先端厚さ1 | ||
| 13 | float | 0.001 | 0.01 | m | 素線幅 | ||
| 14 | float | 0.0005 | 0.005 | m | 素線厚み | ||
| 15 | int | 1 | 25 | - | コイル巻き数 | 整数変数のため注意 | |
| 16 | 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_TYPEがmultiの場合)は2次元のベクトルvectorに格納される。1次元目は質量を表すfloat型の値、2次元目は効率を表すfloat型の値である。効率は最大化すべき目的関数であるため、プログラムでは負号をつけた数値の最小化問題として実装されている。
単目的問題の場合(環境変数PROBLEM_TYPEがsingleの場合)、質量のみを目的関数の値として利用し、目的関数の値objectiveは、スカラーscalarに格納される。
以上の違いから、目的関数の値objectiveを取り出す際のコマンドには、下記の差異があるので注意を要する。
※上述の「解の送信」通りにPythonコードを実行したことを仮定している。
# 単目的問題の場合
obj = eval.objective.scalar
# 多目的問題の場合
obj = eval.objective.vector
全ての制約条件は、 の形に変形して実装されており、制約関数の値constraintには各制約に対する の数値(下表の左辺)が、17次元(単目的)または18次元(多目的)のベクトルvectorとして格納されている。したがって、 constraint内の数値が正である場合、その値は制約違反量となる。
制約条件は下記の順番で実装されている。ただし、 4番目の制約条件は多目的問題のみに課されるものであり、単目的問題では出力されない。
| No. | 制約条件 | 説明 | 備考 |
|---|---|---|---|
| 1 | 出力値は設計値の115%以内 | ||
| 2 | 出力値は設計値の99%以上 | ||
| 3 | 効率は指定の下限値以上 | ||
| 4 | 質量は指定の上限値以下 | 多目的問題のみ | |
| 5 | 始動トルクは定格トルク以上 | ||
| 6 | 最大トルク/定格トルクの比率が一定以上 | ||
| 7 | 最大トルクのすべりが定格すべり以上 | ||
| 8 | 巻線温度上昇が規定値以下 | ||
| 9 | 各部の磁束密度が、指定値以下 | ||
| 10 | 各部の磁束密度が、指定値以下 | ||
| 11 | 各部の磁束密度が、指定値以下 | ||
| 12 | は偶数のみを許容 | ||
| 13 | と の比率が指定値以上 | ||
| 14 | と の比率が指定値以下 | ||
| 15 | |||
| 16 | と の比率が指定値以上 | ||
| 17 | と の比率が指定値以下 | ||
| 18 | は{1, 2, 4}のみを許容 |
Output(設計出力)に定義されている制約関数の値constraintおよび実行可能性feasibleは下記のコマンドで取り出せる。実行可能性feasibleは、全ての制約関数の値が0以下である場合にTrueとなる。
※上述の「解の送信」通りにPythonコードを実行したことを仮定している。
# 制約関数の値の取り出し
con = evaluation.constraint.vector
# 実行可能性(bool)の取り出し
fea = evaluation.feasible