addResponsesメソッド
この例の目的は、変位、速度、および加速度のRMS値が最小になる設計を見出すことです。このRMS信号は次の式で求めることができます。
これらの値を定義するために、RMS2タイプの3つの応答が作成されます。目的は、これら3つの応答の合計(R1 + R2 + R3)を最小にすることです。
また、応答タイプResponseExpressionに基づく制約条件を作成して、PIDコントローラーの利得が無限に高くならないようにします。この制約条件の形式は次のとおりです。
このモデルのaddResponsesメソッドを以下に示します。
def addResponse(self, time):
"""
We minimize the influence of disturbance on the block
R1: Integral(acceleration**2,time)
R2: Integral(velocity**2,time)
R3: Integral(Displacement**2,time)
R4: Constraint (1 - kp**2 - ki**2 - kd**2 < 0)
"""
# Define the desired profile
zero_vector = [0.0 for i in time]
targetValue = zip(time,zero_vector)
# Measure the RMS acceleration deviation from desired
expr = 'ACCZ({I},{J})'.format(I=self.block.cm.id, J=self.rm.id)
self.R1 = RMS2 (
label ='acceleration',
targetValue = targetValue,
measuredValue = expr,
)
# Measure the RMS velocity deviation from desired
expr = 'VZ({I},{J})'.format(I=self.block.cm.id,J=self.rm.id)
self.R2 = RMS2 (
label = 'velocity',
targetValue = targetValue,
measuredValue = expr,
)
# Measure the RMS displacement deviation from desired
expr = 'DZ({I},{J})'.format(I=self.block.cm.id,J=self.rm.id)
self.R3 = RMS2 (
label = 'displacement',
targetValue = targetValue,
measuredValue = expr,
)
# The constraint
self.R4 = ResponseExpression(
label='sum of squares',
function = '1 - kp**2 - kd**2 - ki**2',
symbols = ["kp", "kd", "ki"],
variables = [self.dv_kp, self.dv_kd, self.dv_ki]
)