ソレノイドコイルの自己インダクタンス

Femtet の磁場解析ソルバーを用い、有限長ソレノイドコイルの 自己インダクタンスを特定の値にする例題を解説します。

サンプルファイル

注釈

サンプルプロジェクト を Femtet で開いたまま、 サンプルコード をダブルクリックして実行してください。

注釈

FEM 問題としての詳細については、FemtetHelp / 例題集 / 磁場解析 / 例題8 を参照してください。

設計変数

../../_images/gau_ex08_model.png

モデルの外観

変数名

説明

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)

サンプルコードの実行結果

../../_images/gau_ex08_result.png

gau_ex08_parametric.py の実行結果。 横軸が試行回数、縦軸が自己インダクタンスです。

15 回の反復計算の結果、自己インダクタンスは 0.101 μH となります。

注釈

Femtet, PyFemtet および依存する最適化エンジンのバージョンにより、結果は多少異なる場合があります。