{"text_format":"1","workbook":"xlsx","n_sheets":6,"sheets":["設計変数","目的関数","拘束関数","最適化の設定","最適化セットアップシートの書式説明","備考"],"not_rendered":{"charts":0,"images":1,"macros":1,"external_links":0,"defined_names":21,"comments":2,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"設計変数","index":0,"n_rows":10,"n_cols":9,"rows_kept":10,"cut":false,"hidden":false,"merged":[[4,1,7,1]]}
[]
["　巻き半径可変コイルの設計変数"]
[]
[null,"カテゴリ","変数名","使用","値","下限","上限","ステップ","備考"]
[null,"ワイヤ","section_radius",true,0.5,0.1,1,null,"ワイヤー線の半径"]
[null,null,"coil_radius",true,6,1,10,null,"ワイヤー線の（底面）巻き半径"]
[null,null,"coil_pitch",true,2,1,3,null,"ワイヤー線の巻きピッチ"]
[null,null,"n",true,3,1,5,1,"ワイヤー線の巻き数。自然数。"]
[null,"コア","gap",false,0,0,1,null,"ワイヤー端面とコア端面の間隙"]
[null,"その他","current",false,1,1E-3,20,null,"電流値"]

{"sheet":"目的関数","index":1,"n_rows":6,"n_cols":5,"rows_kept":6,"cut":false,"hidden":false,"merged":[]}
[]
["　巻き半径可変コイルの目的関数"]
[]
[null,"目的名","値","目標","備考"]
[null,"インダクタンス",150.14267517177575,100,"マクロの出力に 1e+9 を掛けて単位を nH にすること"]
[null,"概算体積",{"$f":"3.14 * 設計変数!E6 ^ 2 * (設計変数!E7*設計変数!E8)","v":678.24},"minimize","Excel 数式を使用。単位：mm3"]

{"sheet":"拘束関数","index":2,"n_rows":6,"n_cols":9,"rows_kept":6,"cut":false,"hidden":false,"merged":[]}
[]
["　巻き半径可変コイルの拘束式"]
[]
[null,"拘束名","使用","値","下限","上限","厳守","ソルブ前に計算","備考"]
[null,"コイル間距離",true,{"$f":"設計変数!E7 - 2 *設計変数!E5","v":1},0.1,null,null,null,"Excel 数式を使用。単位：mm"]
[null,"コア半径",false,{"$f":"GetCoreRadius()","v":0},1,null,null,null,"モデル破綻時の動作のデモのため「使用」を False にしている。"]

{"sheet":"最適化の設定","index":3,"n_rows":19,"n_cols":4,"rows_kept":19,"cut":false,"hidden":false,"merged":[]}
[]
["　実行設定"]
[]
[null,"項目","値","備考"]
[null,"プロジェクトファイル名",null,"指定された場合、メインマクロ関数に引数として渡されます。拡張子 .femprj を含んでも構いませんが、メインマクロ関数に渡されるまでに拡張子は削除されます。\nなお、処理するプロジェクトファイルは、この Excel ファイルと同じフォルダに保存するようにしてください。"]
[null,"解析モデル名",null,"指定された場合、メインマクロ関数に引数として渡されます。"]
[null,"設計変数シート名","設計変数","設計変数を記載したシート名です。"]
[null,"目的関数シート名","目的関数","目的関数を記載したシート名です。"]
[null,"拘束関数シート名","拘束関数","拘束関数を記載したシート名です。"]
[null,"最適化手法","Random","Random, QMC, BoTorch, PoFBoTorch, TPE, NSGA2 から選んでください。"]
[null,"試行数",20,"解析に成功した数がこの値になるまで最適化を続行します。"]
[null,"時間制限",null,"最適化の実行時間がこの値を過ぎるまで最適化を続行します。単位：秒"]
[null,"シード値",null,"ランダム性のあるアルゴリズムを用いる場合、そのランダム性を固定します。複数回のプログラム実行で同じ乱数が生成されます。デバッグ用途などに使います。"]
[null,"最適化結果 csv 名",null,"指定しない場合は「日付-時間.csv」が生成されます。"]
[null,"並列プロセス数",1,"複数の Femtet を使って最適化のイテレーションを並列化します。Femtet 単体でも並列計算機能があるので、並列プロセス数を増やして最適化が高速化できるかは問題および設定によります。"]
[null,"python の実行パス",null,"空欄の場合はインストールされている最新の Python で実行します。\n最新でないバージョンの Python を指定する場合は `3.11` 等バージョン番号を入力してください。\npy launcher を使っていない場合、または仮想環境を使っているときはフルパスを指定してください。"]
[null,"メインマクロ関数名","FemtetMacro.FemtetMain","最適化のループのたびに呼ばれる主要な関数です。"]
[null,"初期化関数名","PrePostProcessing.setup","最適化ループが始まる前に呼ばれる初期化関数です。指定しない場合、初期化関数が呼ばれません"]
[null,"終了関数名","PrePostProcessing.teardown","最適化ループが終了した後に呼ばれる関数です。指定しない場合、終了関数が呼ばれません。"]

{"sheet":"最適化セットアップシートの書式説明","index":4,"n_rows":79,"n_cols":9,"rows_kept":79,"cut":false,"hidden":false,"merged":[[64,1,65,1]]}
[]
[null,"仕様"]
[]
[null,null,"シートのパース過程は以下の通りです。"]
[]
[null,null,"1. シート全体 (A1 セルから、値が入力されている最終セルまで) をデータに取り込みます。"]
[null,null,"2. keyword (後述) が記載されているセルを探し、それに一致するセルより上および左の行・列をデータから除きます。"]
[null,null,"3. その時点のデータの上から順に見てすべてのセルが空白である行以下の行をデータから除きます。"]
[null,null,"4. すべてのセルが空白である列をデータから除きます。"]
[]
[null,null,"キーワードは、「変数名」「目的名」「拘束名」です。"]
[]
[null,null,"さらに、各キーワードは、そのキーワードに対応する表が持つべきカラムの名前を有します。"]
[null,null,"必須のカラムを持っていなければ PyFemtet はエラーを送出します。"]
[null,null,"オプションのカラムを持っていなければデフォルト値が使われます。"]
[]
[]
[null,null,"項目",null,null,"各列に入れるべき値・デフォルト値（見出しの「＋」で展開）"]
[]
[null,null,"「変数」の表"]
[null,null,"必須："]
[null,null,"「変数名」",null,null,"変数の名前です。重複しないようにしてください。"]
[null,null,"「値」",null,null,"変数の値です。最適化開始時に初期値として扱われます。"]
[null,null,"「下限」",null,null,"変数の下限です。"]
[null,null,"「上限」",null,null,"変数の上限です。"]
[null,null,"オプション："]
[null,null,"「ステップ」",null,null,"変数を連続値でなく離散値として使う場合のステップです。"]
[null,null,null,null,null,"指定した場合、「値」 - 「下限」及び「上限」 - 「下限」が「ステップ」で割り切れるようにしてください。"]
[null,null,null,null,null,"デフォルトは空欄です。"]
[null,null,"「使用」",null,null,"この変数を最適化に使うかどうかです。デフォルトは TRUE です。"]
[]
[null,null,"「目的」の表"]
[null,null,"必須："]
[null,null,"「目的名」",null,null,"目的関数の名前です。重複しないようにしてください。"]
[null,null,"「値」",null,null,"目的関数の計算結果です。最適化のループ中、PyFemtet はこのセルの値を読み取ります。"]
[null,null,null,null,null,"FemtetMain マクロを実行したらこのセルが更新されるようにマクロを作成してください。"]
[null,null,null,null,null,"最適化開始時の値は無視されます。"]
[null,null,"「目標」",null,null,"目的関数の方向です。数値または「minimize」または「maximize」を入力できます。"]
[null,null,"オプション："]
[null,null,"「使用」",null,null,"この目的関数を最適化に使うかどうかです。デフォルトは TRUE です。"]
[]
[null,null,"「拘束」の表"]
[null,null,"必須："]
[null,null,"「拘束名」",null,null,"拘束関数の名前です。重複しないようにしてください。"]
[null,null,"「値」",null,null,"拘束関数の計算結果です。最適化のループ中、PyFemtet はこのセルの値を読み取ります。"]
[]
[null,null,null,null,null,"注意："]
[null,null,null,null,null,"「ソルブ前に計算」が TRUE である場合、「変数」の更新後・FemtetMacro 実行前にこの値を読み取ります。"]
[null,null,null,null,null,"何らかの FemtetMacro の計算結果を拘束関数として扱う場合、「ソルブ前に計算」を FALSE にしてください。"]
[null,null,"オプション："]
[null,null,"「下限」",null,null,"拘束関数の計算結果の下限です。"]
[null,null,"「上限」",null,null,"拘束関数の計算結果の上限です。"]
[null,null,"「厳守」",null,null,"拘束関数の計算結果に上下限を厳守させるかどうかです。"]
[null,null,null,null,null,"TRUE の場合、「ソルブ前に計算」は設定値にかかわらず TRUE と扱われ、拘束違反した場合ソルブを行いません。"]
[null,null,null,null,null,"FALSE の場合、拘束違反した場合でもソルブを行います。"]
[null,null,null,null,null,"ただし、最適化アルゴリズム内で拘束違反の解にはペナルティが課され、なるべく拘束違反する変数を提案しないようにします。"]
[null,null,null,null,null,"デフォルトは TRUE です。"]
[null,null,"「使用」",null,null,"この拘束関数を最適化に使うかどうかです。デフォルトは TRUE です。"]
[null,null,"「ソルブ前に計算」",null,null,"ソルブ前に拘束関数を計算するかどうかです。"]
[]
[]
[null,"例"]
[]
[null,"カテゴリ","変数名","使用","値","下限","上限","ステップ","備考"]
[null,"A","A1",true,0.5,0.1,1]
[null,null,"A2",true,6,1,10,1]
[null,"B","B1",false,0,0,1]
[null,"その他","C",false,1,1E-3,20]
[]
[]
[]
[null,"目的名","値","目標","備考"]
[null,"Out1",1.23,100]
[null,"Out2",3.14,"minimize"]
[]
[]
[null,"拘束名","使用","値","下限","上限","厳守","ソルブ前に計算","備考"]
[null,"Cns1",true,{"$f":"設計変数!E21 - 2 *設計変数!E19","v":0},0.1]
[null,"Cns2",false,{"$f":"GetCoreRadius()","v":0},1]

{"sheet":"備考","index":5,"n_rows":50,"n_cols":4,"rows_kept":50,"cut":false,"hidden":false,"merged":[]}
[]
[null,"前提条件"]
[]
[null,null,"以下のソフトがインストールされた環境で実行できます。"]
[]
[null,null,null,"PyFemtet 0.8.10 以上をインストールされた Python 環境"]
[null,null,null,"Excel"]
[null,null,null,"Femtet"]
[]
[null,"仕組み"]
[]
[null,null,"　このサンプルでは、以下の仕組みで最適化を行います。"]
[null,null,"最初にこのファイルを一時フォルダにコピーして動作するので、"]
[null,null,"最適化の実行中にも Excel 作業を行うことができます。"]
[null,null,"　また、最適化の過程で意図しない動作をしたとしても元ファイルは"]
[null,null,"一切変更する必要がありません。"]
[null,null,"　この Excel ファイルに含まれるメインマクロ関数は同梱する"]
[null,null,"（参考）元プロジェクト.femprj からマクロ出力機能を用いて"]
[null,null,"出力し、この Excel ファイルに適合するよう編集したものです。"]
[null,null,"　このマクロは元プロジェクトを一切読み込まず、実行すれば"]
[null,null,"元プロジェクトと同じ条件のプロジェクトを作るものなので、"]
[null,null,"femprj ファイルがなくとも最適化は動作します。"]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[null,"お使いの Femtet プロジェクトをこのファイルに適用する場合"]
[]
[null,null,"このファイルに含まれる FemtetMacro モジュールの名前を適当に変更します。"]
[]
[null,null,"Femtet の「マクロ出力機能」を用いてモジュールファイル（ .bas ファイル）を生成し、"]
[null,null,"この Excel ファイルに取り込みます。"]
[]
[null,null,"元々の FemtetMacro モジュールを参考に、取り込んだモジュールを変更してください。"]
[null,null,"変更のポイントは、元々のモジュールに「Note:」に続く文章で記載しています。"]
[null,null,"VBE 画面で Ctrl+F で「Note:」を検索し、参考にしてください。"]