[S0018] トポロジー最適化オプションの設定を行う

 

遺伝的アルゴリズムでの最適化の最大世代数、集団サイズ、子個体数は、いずれも探索の進み方を決める基本的なパラメータであり、互いに関係しながら探索の品質と計算量を左右します。
集団サイズは、1世代あたりに同時に評価される設計案の数を決め、探索の「広がり」を担います。
子個体数は、各世代で新たに生成される設計案の数を制御し、設計案がどの程度変化しながら進化するかに影響します。
一方、最大世代数は、世代交代を何回繰り返すかを決め、探索の「深さ」を規定します。
このスクリプトではトポロジー最適化のパラメータ、評価オプションを設定します。

前提条件

  • トポロジー最適化に対応しているスタディが1つ以上作成されていること
    このスクリプト例では、プロジェクトツリー上でアクティブなスタディに対して実行している
  • トポロジー最適化条件が設定されていること

スクリプトにおける設定内容

  • トポロジー最適化エンジンを指定してパラメータを設定
    最適化エンジンを遺伝的アルゴリズム(トポロジー)、最大世代数を10、集団サイズを60、子個体数を55と設定
    形状連続評価を「各部品ひとつながりの制約を含める」と設定
    結果評価を「世代毎の各目的関数の最大値の結果を評価する」と設定している
# Copyright (c) 2026 JSOL CORPORATION
#
# 本スクリプトはMITライセンスのもとで公開しています。
# ライセンス全文は以下を参照してください。
# https://www.jmag-international.com/jp/scriptlibrary/jmag_script_library_mit/


def setTopologyOptimizationOption(optimTable, engine, maxGen, numPop, numChild):
    """トポロジー最適化オプションの設定を行う"""
    mapping = {
        # 最適化エンジン:遺伝的アルゴリズム(トポロジー)における各キー項目
        "jsol_ga": (u"jsol_ga_max_generation",
                    u"jsol_ga_num_population",
                    u"jsol_ga_num_children",
                    u"jsol_ga_shape_evalution",
                    u"jsol_ga_result_evaluation"),
        # 最適化エンジン:多目的遺伝的アルゴリズム (トポロジー)におけるキー項目
        "jsol_moga2": (u"jsol_moga2_max_generation",
                       u"jsol_moga2_num_population",
                       u"jsol_moga2_num_children",
                       u"jsol_moga2_shape_evalution",
                       u"jsol_moga2_result_evaluation"),
    }
    keyMagGen, keyNumPop, keyNumChild, keyShapeEval, keyResultEval = mapping[engine]

    optimTable.SetParameter(u"engine", engine)
    optimTable.SetParameter(keyMagGen, maxGen)
    optimTable.SetParameter(keyNumPop, numPop)
    optimTable.SetParameter(keyNumChild, numChild)
    # 形状連続評価パラメータ
    # 0:形状の連続性を評価基準に含めない
    # 1:各部品ひとつながりの制約を含める
    # 2:各部品の分割数が2以内の制約を含める
    optimTable.SetParameter(keyShapeEval, 1)
    # 結果評価パラメータ
    # 0:指定した上位ケースの結果を評価する(最適化エンジン:遺伝的アルゴリズム (トポロジー)の場合)
    # 0:パレートチャート上のケースを評価する(最適化エンジン:多目的遺伝的アルゴリズム (トポロジー)の場合)
    # 1:世代毎の各目的関数の最大値の結果を評価する
    # 2:全てのケースの結果を評価する
    optimTable.SetParameter(keyResultEval, 1)


app = designer.GetApplication()
study = app.GetCurrentStudy()
engine = u"jsol_ga"
maxGeneration = 10
numPopulation = 60
numChildren = 55
setTopologyOptimizationOption(
    study.GetOptimizationTable(), engine, maxGeneration, numPopulation, numChildren)

Download Python source code

ファイルご利用の注意点

JMAGスクリプトライブラリをご利用されるに際し、以下をよくお読みいただき、ご同意の上ご利用くださるようお願い申し上げます。

絞込み検索

  • カテゴリー 一覧

JMAG-Express Online
An engineer's diary