青青爽无码视频在线观看,日韩毛片免费一二三,日韩A∨无码成人无码免费
當前位置: 主頁 > 資訊 >

2024華為杯C題:數(shù)據(jù)驅(qū)動下磁性元件的磁芯損耗建

來源:阿里云 瀏覽數(shù):
責任編輯:傳說的落葉
時間:2024-09-24 10:47

[導讀]2024華為杯C題:數(shù)據(jù)驅(qū)動下磁性元件的磁芯損耗建模 Python代碼實現(xiàn)

AI
數(shù)據(jù)驅(qū)動數(shù)學建模人工智能重要部分。

題目

【BetterBench博士】2024 “華為杯”第二十一屆中國研究生數(shù)學建模競賽 選題分析

【BetterBench博士】2024年中國研究生數(shù)學建模競賽 E題:高速公路應急車道緊急啟用模型 問題分析

【BetterBench博士】2024年中國研究生數(shù)學建模競賽 C題:數(shù)據(jù)驅(qū)動下磁性元件的磁芯損耗建模 問題分析

1 問題一

首先,針對磁通密度的數(shù)據(jù)進行預處理,去除噪聲和異常值,確保數(shù)據(jù)的完整性和一致性??梢允褂媒y(tǒng)計分析方法,例如異常值檢測,來清理數(shù)據(jù)。

對于磁通密度數(shù)據(jù),提取一些重要的特征來幫助分類波形,可能的特征包括:

  • 波形的周期性:通過FFT(快速傅里葉變換)提取頻率特征。
  • 幅度和對稱性:計算波形的最大值、最小值以及均值。
  • 波峰和波谷數(shù)量:通過零交叉點和局部極值點的數(shù)量確定波形的形狀特征。

利用提取的特征訓練分類模型。常用的分類算法包括:

  • 隨機森林
  • 支持向量機(SVM)
  • K近鄰算法(KNN)
  • 神經(jīng)網(wǎng)絡
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, classification_report, roc_auc_score
import matplotlib.pyplot as plt
from scipy.fftpack import fft
from scipy.signal import find_peaks
plt.rcParams['font.sans-serif'] = 'SimSun' # 換成自己環(huán)境下的中文字體,比如'SimHei'


# 讀取附件1和附件2
df1 = pd.read_excel('data/附件一(訓練集).xlsx')
df2 = pd.read_excel('data/附件二(測試集).xlsx')

# 數(shù)據(jù)預處理:清理異常值
def clean_data(df):
    # 去除不合理的異常值
    df = df[(df['0(磁通密度B,T)'].abs() < 1)]
    return df

df1 = clean_data(df1)
df2 = clean_data(df2)

# 特征提取:使用磁通密度數(shù)據(jù)提取特征
def extract_features(df):
    features = []
    for i in range(len(df)):
        row = df.iloc[i, 4:]  # 只考慮磁通密度數(shù)據(jù)
        # FFT變換
        fft_vals = fft(row)
        fft_amplitude = np.abs(fft_vals[:len(fft_vals) // 2])
        # 波峰波谷特征
        peaks, _ = find_peaks(row)
        troughs, _ = find_peaks(-row)
        # 構(gòu)造特征
        feature_row = [
            np.max(row),  # 最大值
            np.min(row),  # 最小值
            np.mean(row),  # 均值
            len(peaks),  # 波峰數(shù)量
            len(troughs),  # 波谷數(shù)量
            np.max(fft_amplitude)  # FFT幅度最大值
        ]
        features.append(feature_row)
    return pd.DataFrame(features, columns=['max_val', 'min_val', 'mean_val', 'n_peaks', 'n_troughs', 'max_fft_amp'])

# 提取特征
X = extract_features(df1)
y = df1['勵磁波形'].map({
   '正弦波': 1, '三角波': 2, '梯形波': 3})  # 標簽編碼

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)



# 模型評估
y_pred = clf.predict(X_test)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

 

# 對附件2中的樣本進行預測
X_new = extract_features(df2)
y_new_pred = clf.predict(X_new)
# 將分類結(jié)果寫入附件3
df3 = pd.DataFrame({
   '序號': df2['序號'], '勵磁波形分類結(jié)果': y_new_pred})
df3.to_csv('data/問題一預測結(jié)果-附件4.csv', index=False)
# 1. 波形圖:展示不同樣本的磁通密度波形,觀察波形的直觀差異
plt.figure(figsize=(10, 6))
for i in range(3):  # 展示前三個樣本的波形
    plt.plot(df1.iloc[i, 4:].to_list(), label=f'樣本 {i+1}')
plt.title('不同樣本的磁通密度波形')
plt.xlabel('時間')
plt.ylabel('磁通密度')
plt.legend()
plt.show()

 

import seaborn as sns

# 2. 混淆矩陣:展示分類模型的預測結(jié)果與實際標簽的匹配情況
cm = confusion_matrix(y_test, y_pred)

plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['正弦波', '三角波', '梯形波'], yticklabels=['正弦波', '三角波', '梯形波'])
plt.title('混淆矩陣')
plt.xlabel('預測標簽')
plt.ylabel('實際標簽')
plt.show()

 

2 問題二

2.1 思路

  1. 擬合原始斯坦麥茨方程擬合:通過 工具包 擬合原始斯坦麥茨方程,找到 k1、a1 和 β1
  2. 然后擬合帶溫度修正的斯坦麥茨方程:通過擬合帶溫度修正的方程,找到溫度敏感系數(shù) γ。
  3. 誤差比較:通過實際數(shù)據(jù)和預測數(shù)據(jù)的誤差進行比較,判斷哪個方程在不同溫度下更準確。
  4. 可視化分析:展示實際損耗和兩個方程預測損耗的曲線。

要在斯坦麥茨方程中引入溫度修正,以適應不同溫度變化對磁芯損耗的影響,可以假設溫度對損耗有指數(shù)或線性影響。那么在原方程中增加一個溫度相關項,如:

 

PT=k1fa1Bmβ1eγ(TTref)

 

其中:

  • PT 是帶有溫度修正的磁芯損耗。
  • T 是實際溫度,Tref 是參考溫度(如25°C)。
  • γ 是溫度敏感系數(shù),它表明溫度變化對損耗的影響程度。

import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler
plt.rcParams['font.sans-serif'] = 'SimSun' # 換成自己環(huán)境下的中文字體,比如'SimHei'
# 讀取數(shù)據(jù)
data = pd.read_excel('data/附件一(訓練集).xlsx')
# 提取相關數(shù)據(jù)
df = pd.DataFrame({
   
    'temperature': data['溫度,oC'],
    'frequency': data['頻率,Hz'],
    'core_loss': data['磁芯損耗,w/m3'],
    'flux_density': data.iloc[:, 4:].max(axis=1)  # 磁通密度峰值
})
# 去除異常值函數(shù),使用Z-score方法
def remove_outliers(df, column, threshold=3):
    z_scores = np.abs((df[column] - df[column].mean()) / df[column].std())
    return df[z_scores < threshold]

# 對整個DataFrame應用異常值去除
df_cleaned = df.copy()
for column in df_cleaned.columns:
    df_cleaned = remove_outliers(df_cleaned, column)

# 歸一化處理
scaler = StandardScaler()
df_cleaned[['temperature', 'frequency', 'flux_density']] = scaler.fit_transform(df_cleaned[['temperature', 'frequency', 'flux_density']])
# df_cleaned = df_cleaned
# 提取處理后的數(shù)據(jù)
temperature = df_cleaned['temperature'].values
frequency = df_cleaned['frequency'].values
core_loss = df_cleaned['core_loss'].values
flux_density = df_cleaned['flux_density'].values


# 2. 斯坦麥茨方程和帶溫度修正方程的定義
# 斯坦麥茨方程
...略

# 帶溫度修正的斯坦麥茨方程
...略



# 3. 優(yōu)化函數(shù)的定義
# 定義誤差函數(shù)(目標函數(shù)),用于最小化
...略

# 進行斯坦麥茨方程優(yōu)化
result_steinmetz = differential_evolution(objective_steinmetz, bounds_steinmetz)
params_steinmetz = result_steinmetz.x
print(f"Steinmetz方程擬合參數(shù): k1={params_steinmetz[0]}, a1={params_steinmetz[1]}, beta1={params_steinmetz[2]}")

# 進行帶溫度修正的斯坦麥茨方程優(yōu)化
result_steinmetz_temp = differential_evolution(objective_steinmetz_temp, bounds_steinmetz_temp)
params_steinmetz_temp = result_steinmetz_temp.x
print(f"帶溫度修正的Steinmetz方程擬合參數(shù): k1={params_steinmetz_temp[0]}, a1={params_steinmetz_temp[1]}, beta1={params_steinmetz_temp[2]}, gamma={params_steinmetz_temp[3]}")

 

問題三

要分析溫度、勵磁波形和磁芯材料對磁芯損耗的獨立和協(xié)同影響,并找出在何種條件下磁芯損耗達到最小,分析步驟如下:

  1. 數(shù)據(jù)清洗與整理,將數(shù)據(jù)加載到Pandas數(shù)據(jù)框中,檢查是否存在缺失值或異常值,并對數(shù)據(jù)進行標準化或編碼(對于分類變量如勵磁波形類型,需要編碼)。
  2. 統(tǒng)計分析
    • 計算描述性統(tǒng)計量(如均值、方差等),觀察每個因素與磁芯損耗的關系。
    • 繪制箱型圖、散點圖等可視化圖表,分析不同因素對磁芯損耗的分布影響。
  3. 方差分析 (ANOVA),用于檢驗單個因素對磁芯損耗的影響顯著性。
  4. 多元線性回歸,構(gòu)建一個多元回歸模型來分析每個因素對磁芯損耗的影響程度,特別是兩兩因素的協(xié)同效應。
  5. 交互效應分析,使用可視化和回歸系數(shù)分析兩兩因素之間的協(xié)同效應,特別是交互作用項。
  6. 最優(yōu)條件探索,基于回歸模型,使用優(yōu)化方法來找到最優(yōu)的溫度、勵磁波形和磁芯材料組合,使磁芯損耗達到最小。


# 5. 交互作用分析
# 增加交互項(溫度*頻率,溫度*勵磁波形,頻率*勵磁波形)
data['Temperature_Frequency'] = data['Temperature'] * data['Frequency']
data['Temperature_Waveform'] = data['Temperature'] * data['Waveform_Encoded']
data['Frequency_Waveform'] = data['Frequency'] * data['Waveform_Encoded']

# 構(gòu)建包含交互項的多元回歸模型
interaction_model = ols('Core_Loss ~ C(Temperature) * C(Waveform_Encoded) * Frequency', data=data).fit()
print(interaction_model.summary())

# 6. 可視化交互效應
plt.figure(figsize=(10,6))
sns.boxplot(x='Temperature', y='Core_Loss', hue='Waveform', data=data)
plt.title('溫度與勵磁波形對磁芯損耗的影響')
plt.show()

plt.figure(figsize=(10,6))
sns.scatterplot(x='Frequency', y='Core_Loss', hue='Temperature', data=data)
plt.title('頻率與溫度對磁芯損耗的影響')
plt.show()

問題四

  1. 數(shù)據(jù)加載與預處理:

    • 將磁通密度采樣點(從第4列到第1024列)的列名從數(shù)字轉(zhuǎn)換為字符串形式,方便后續(xù)操作。

    • 首先對(勵磁波形)列使用LabelEncoder進行編碼,將正弦波、三角波、梯形波分別映射為0、1、2。

  2. 特征工程:

    • 將溫度、頻率、磁通密度等數(shù)值特征進行標準化(StandardScaler),確保不同量綱的特征對模型的影響均衡。
  3. 模型選擇與構(gòu)建:

    • 選擇隨機森林回歸模型(RandomForestRegressor)進行回歸任務,以預測磁芯損耗。
    • 使用Pipeline構(gòu)建完整的模型管道,包括數(shù)據(jù)預處理(特征標準化)和模型訓練。
  4. 模型訓練與評估:

    • 將數(shù)據(jù)劃分為訓練集和測試集,使用訓練集訓練模型。
    • 在測試集上進行預測,計算均方誤差(MSE)和R²分數(shù),以評估模型的性能。
  5. 樣本預測與輸出:

    • 讀取附件3中的數(shù)據(jù),對其按照附件1相同的編碼操作。
    • 使用訓練好的模型對附件3中的樣本進行預測,將結(jié)果保存到附件4.csv中。
    • 輸出指定樣本的預測結(jié)果,保留一位小數(shù)。


# 預測附件3中的磁芯損耗
attachment3_data = pd.read_excel('data/附件三(測試集).xlsx')

# 對附件3的'Waveform'列進行編碼處理
attachment3_data = attachment3_data.rename(columns={
   
    '溫度,oC': '溫度',
    '頻率,Hz': '頻率',
    '磁芯損耗,w/m3': '磁芯損耗',
    '勵磁波形': 'Waveform',
    '0(磁通密度B,T)':'0'
})


attachment3_data['Waveform'] = waveform_encoder.transform(attachment3_data['Waveform'])
attachment3_data = attachment3_data.drop(columns=['序號','磁芯材料'])
attachment3_data.columns =  ['溫度','頻率','Waveform']+ [str(i) for i in range(1024)]
attachment3_data
# 使用模型預測附件3中的數(shù)據(jù)
y_pred_attachment3 = model.predict(attachment3_data)

# 將預測結(jié)果填入附件4并保存,只保留小數(shù)點后一位
attachment4 = pd.DataFrame({
   
    '序號': attachment3_data.index + 1,
    '磁芯損耗預測結(jié)果': np.round(y_pred_attachment3, 1)
})
attachment4.to_csv('data/附件4-問題四.csv', index=False)
attachment4
# 輸出特定樣本的預測結(jié)果
sample_indices = [16, 76, 98, 126, 168, 230, 271, 338, 348, 379]
sample_results = attachment4.iloc[sample_indices]
print("指定樣本的磁芯損耗預測結(jié)果:")
print(sample_results)

 

問題五

為了同時優(yōu)化磁芯損耗與傳輸磁能,構(gòu)建一個優(yōu)化問題。目標是找到能夠最小化磁芯損耗且最大化傳輸磁能的條件。傳輸磁能可以簡化為頻率(f)與磁通密度峰值(Bm)的乘積:

  1. 目標函數(shù):

平衡兩個目標:

  • 最小化磁芯損耗:Lc,使用我們構(gòu)建的磁芯損耗預測模型來預測。
  • 最大化傳輸磁能:Te=fBm。

為了將這兩個目標結(jié)合為一個優(yōu)化問題,定義一個加權(quán)目標函數(shù):

 

Minimize αLcβTe

 

其中,α 和 β 是權(quán)重參數(shù),表示磁芯損耗與傳輸磁能的相對重要性。通常需要調(diào)節(jié)這些參數(shù)以實現(xiàn)某種平衡。

  1. 約束條件:
  • 頻率 f 的取值范圍:$f{\min} \leq f \leq f{\max}$

  • 磁通密度峰值 $BmB{m,\min} \leq Bm \leq B{m,\max}$

  • 溫度 T、勵磁波形等其他變量的取值范圍。

 

T{25,50,70,90}

 

 

waveform{0,1,2}

 

 

完整資料

轉(zhuǎn)到B站視頻介紹
【2024年中國研究生數(shù)學建模競賽 C題:數(shù)據(jù)驅(qū)動下磁性元件的磁芯損耗建?!?br style="box-sizing: border-box;" /> bilibili.com/video/BV1fPskeqEQH/?share_source=copy_web&vd_source=d2dd5fcbeeeec396792650b25c110a13

免責聲明:本文僅代表作者個人觀點,與納金網(wǎng)無關。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實,對本文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內(nèi)容。



  • TAGS:人工智能技術 python 數(shù)學建模 人工智能
  • 網(wǎng)友評論

    您需要登錄后才可以發(fā)帖 登錄 | 立即注冊

    關閉

    全部評論:0條

    聯(lián)系方式

    服務熱線:15059788121 / 13489872927 / 15959158412

    換鏈QQ:943169942

    電子郵箱:943169942@qq.com

    聯(lián)系地址:福建省晉江國際工業(yè)設計園5號樓

    福建省信芯長盈科技有限公司 閩ICP備2021016425號-2/3

    Copyright 594ljc.cn 2008-2025 All Rights Reserved

    開展“凈網(wǎng)2019"專項行動,堅決保障網(wǎng)絡空間清朗

    IOS版

    安卓版

    官網(wǎng)認證