ソレノイドコイルの自己インダクタンス
Femtet の磁場解析ソルバーを用い、有限長ソレノイドコイルの 自己インダクタンスを特定の値にする例題を解説します。
サンプルファイル
注釈
サンプルプロジェクト を Femtet で開いたまま、 サンプルコード をダブルクリックして実行してください。
注釈
FEM 問題としての詳細については、FemtetHelp / 例題集 / 磁場解析 / 例題8 を参照してください。
設計変数
モデルの外観
変数名 |
説明 |
|---|---|
h |
1巻きあたりのピッチ |
r |
コイルの半径 |
n |
コイルの巻き数 |
目的関数
コイルの自己インダクタンス
サンプルコード
gau_ex08_parametric.py
1"""単目的最適化: 有限長ヘリカルコイルの自己インダクタンス
2
3Femtet の磁場解析ソルバを利用して、
4有限長ヘリカルコイルの自己インダクタンスを
5目標の値にする設計を行います。
6
7対応プロジェクト: gau_ex08_parametric_jp.femprj
8"""
9from optuna.integration.botorch import BoTorchSampler
10from pyfemtet.opt import FEMOpt, OptunaOptimizer
11
12
13def inductance(Femtet):
14 """自己インダクタンスを取得します。
15
16 Note:
17 目的関数または制約関数は、
18 第一引数としてFemtetを受け取り、
19 戻り値としてfloat型を返す必要があります。
20
21 Params:
22 Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
23
24 Returns:
25 float: 自己インダクタンスです。
26 """
27 Gogh = Femtet.Gogh
28
29 coil_name = Gogh.Gauss.GetCoilList()[0]
30 return Gogh.Gauss.GetL(coil_name, coil_name) * 1e6 # 単位: uH
31
32
33if __name__ == '__main__':
34
35 # 数値最適化問題の初期化 (最適化手法を決定します)
36 opt = OptunaOptimizer(
37 sampler_class=BoTorchSampler,
38 sampler_kwargs=dict(
39 n_startup_trials=5,
40 )
41 )
42
43 # FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)。
44 femopt = FEMOpt(opt=opt)
45
46 # 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)。
47 femopt.add_parameter("helical_pitch", 6, lower_bound=4.2, upper_bound=8)
48 femopt.add_parameter("coil_radius", 10, lower_bound=3, upper_bound=10)
49 femopt.add_parameter("n_turns", 5, lower_bound=1, upper_bound=5)
50
51 # 目的関数を最適化問題に追加
52 # 目標の自己インダクタンスは 0.1 μH です。
53 femopt.add_objective(fun=inductance, name='自己インダクタンス (μH)', direction=0.1)
54
55 # 最適化を実行
56 femopt.set_random_seed(42)
57 femopt.optimize(n_trials=15)
サンプルコードの実行結果
gau_ex08_parametric.py の実行結果。 横軸が試行回数、縦軸が自己インダクタンスです。
15 回の反復計算の結果、自己インダクタンスは 0.101 μH となります。
注釈
Femtet, PyFemtet および依存する最適化エンジンのバージョンにより、結果は多少異なる場合があります。