使用粒子群算法对Modelica导出的FMU进行优化

本文探讨了如何运用粒子群优化算法对通过Modelica导出的函数模型单元(FMU)进行参数优化。通过该算法,可以有效搜索FMU的最优配置,提高模型的性能和效率。
摘要由CSDN通过智能技术生成
from pyfmi import load_fmu
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sko.PSO import PSO


# 目标函数
def demo_func(x):
    x1, x2 = x
    if not (x1 > x2 and x1 > 0.3 and x1 < 2.7 and x2 > 0.3 and x2 < 2.7):
        return np.inf  # 如果不满足条件,返回一个很大的值
    model = load_fmu(r'C:\Users\win10\Desktop\GPS\test10.fmu')
    model.set('hysteresis1.uHigh', x1)
    model.set('hysteresis1.uLow', x2)
    print('set_success')
    print(model.get('hysteresis1.uHigh'))
    print(model.get('hysteresis1.uLow'))
    res = model.simulate(start_time=0, final_time=82800)
    p_data = model.get('standardDeviation1.y')
    # 确保返回的是一个数值而不是数组
    print('max_deviation=',np.max(p_data))
    return np.max(p_data)

# 粒子群算法
def particle_swarm_optimization(func, x0, num_particles=100, max_iterations=1000, inertia_weight=0.5, cognitive_weight=0.5, social_weight=0.5):
    particles = np.array([x0 + np.random.randn(2) * 1 for _ in range(num_particles)])
    velocities = np.zeros((num_particles, 2))
    personal_best = particles.copy()
    global_best = particles[0].copy()

    for _ in range(max_iterations):
        for i in range(num_particles):
            # 更新速度
            velocities[i] = inertia_weight * velocities[i] + cognitive_weight * np.random.rand() * (personal_best[i] - particles[i]) + social_weight * np.random.rand() * (global_best - particles[i])
            # 更新位置
            particles[i] += velocities[i]

            # 评估新位置
            fitness = func(particles[i])
            if fitness < func(personal_best[i]):
                personal_best[i] = particles[i]

            if fitness < func(global_best):
                global_best = particles[i]

    return global_best

x0 = [2.0, 1.0]  # 初始点
result = particle_swarm_optimization(demo_func, x0)
print('best_x is ', result, 'best_y is', demo_func(result))
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值