optimizeメソッド

PIDモデルのoptimizeメソッドを以下に示します。この場合の目的関数は、R1R2、およびR3(それぞれ変位、速度、および加速度の偏差)の加重合計です。R4は、利得に上限を適用する不等式の制約条件です。

  def optimize(self):
    """
    Run an optimization
    """
    obj = [self.R1,self.R2,self.R3]
    wt  = [1,1,1]
    self.opt = Optimizer ( 
            label            = "Optimize RMS2",  
            objective        = obj,              
            weights          = wt,               
            ineqConstraints  = self.R4,       
            plot             = False,
            dsa              = 'FD',
            simFunction      = simulate_function_pid,
            outputMode       = 'FileOnly',
           )

    return self.opt.optimize()

ここでは、最適化エンジンでenddtouttypeを指定する代わりに、最適化エンジンにsimulate関数を渡します。これにより、シミュレーション時に力が非アクティブになります。


def  simulate_function_pid(model):
     run = model.simulate(end=10, dtout=0.01, returnResults=True, output="Off")
     model.force.active = False
     run = model.simulate(end=100, dtout=0.01, returnResults=True,output="Off")
     model.force.active = True

     return run