久久精品久久久久久久精品,久久国产三级精品
當(dāng)前位置: 主頁 > 資訊 >

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

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

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

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

題目

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

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

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

1 問題一

首先,針對(duì)磁通密度的數(shù)據(jù)進(jìn)行預(yù)處理,去除噪聲和異常值,確保數(shù)據(jù)的完整性和一致性。可以使用統(tǒng)計(jì)分析方法,例如異常值檢測(cè),來清理數(shù)據(jù)。

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

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

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

  • 隨機(jī)森林
  • 支持向量機(jī)(SVM)
  • K近鄰算法(KNN)
  • 神經(jīng)網(wǎng)絡(luò)
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/附件一(訓(xùn)練集).xlsx')
df2 = pd.read_excel('data/附件二(測(cè)試集).xlsx')

# 數(shù)據(jù)預(yù)處理:清理異常值
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['勵(lì)磁波形'].map({
   '正弦波': 1, '三角波': 2, '梯形波': 3})  # 標(biāo)簽編碼

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



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

 

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

 

import seaborn as sns

# 2. 混淆矩陣:展示分類模型的預(yù)測(cè)結(jié)果與實(shí)際標(biāo)簽的匹配情況
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('預(yù)測(cè)標(biāo)簽')
plt.ylabel('實(shí)際標(biāo)簽')
plt.show()

 

2 問題二

2.1 思路

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

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

 

PT=k1fa1Bmβ1eγ(TTref)

 

其中:

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

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/附件一(訓(xùn)練集).xlsx')
# 提取相關(guān)數(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]

# 對(duì)整個(gè)DataFrame應(yīng)用異常值去除
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ù)(目標(biāo)函數(shù)),用于最小化
...略

# 進(jìn)行斯坦麥茨方程優(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]}")

# 進(jìn)行帶溫度修正的斯坦麥茨方程優(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]}")

 

問題三

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

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


# 5. 交互作用分析
# 增加交互項(xiàng)(溫度*頻率,溫度*勵(lì)磁波形,頻率*勵(lì)磁波形)
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)建包含交互項(xiàng)的多元回歸模型
interaction_model = ols('Core_Loss ~ C(Temperature) * C(Waveform_Encoded) * Frequency', data=data).fit()
print(interaction_model.summary())

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

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

問題四

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

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

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

  2. 特征工程:

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

    • 選擇隨機(jī)森林回歸模型(RandomForestRegressor)進(jìn)行回歸任務(wù),以預(yù)測(cè)磁芯損耗。
    • 使用Pipeline構(gòu)建完整的模型管道,包括數(shù)據(jù)預(yù)處理(特征標(biāo)準(zhǔn)化)和模型訓(xùn)練。
  4. 模型訓(xùn)練與評(píng)估:

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

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


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

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


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

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

 

問題五

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

  1. 目標(biāo)函數(shù):

平衡兩個(gè)目標(biāo):

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

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

 

Minimize αLcβTe

 

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

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

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

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

 

T{25,50,70,90}

 

 

waveform{0,1,2}

 

 

完整資料

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

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



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

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

    關(guān)閉

    全部評(píng)論:0條