2024華為杯C題:數(shù)據(jù)驅(qū)動(dòng)下磁性元件的磁芯損耗建
責(zé)任編輯:傳說的落葉 時(shí)間:2024-09-24 10:47
[導(dǎo)讀]2024華為杯C題:數(shù)據(jù)驅(qū)動(dòng)下磁性元件的磁芯損耗建模 Python代碼實(shí)現(xiàn)
數(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 思路
- 擬合原始斯坦麥茨方程擬合:通過 工具包 擬合原始斯坦麥茨方程,找到 、 和 。
- 然后擬合帶溫度修正的斯坦麥茨方程:通過擬合帶溫度修正的方程,找到溫度敏感系數(shù) 。
- 誤差比較:通過實(shí)際數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)的誤差進(jìn)行比較,判斷哪個(gè)方程在不同溫度下更準(zhǔn)確。
- 可視化分析:展示實(shí)際損耗和兩個(gè)方程預(yù)測(cè)損耗的曲線。
要在斯坦麥茨方程中引入溫度修正,以適應(yīng)不同溫度變化對(duì)磁芯損耗的影響,可以假設(shè)溫度對(duì)損耗有指數(shù)或線性影響。那么在原方程中增加一個(gè)溫度相關(guān)項(xiàng),如:
其中:
- 是帶有溫度修正的磁芯損耗。
- 是實(shí)際溫度, 是參考溫度(如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á)到最小,分析步驟如下:
- 數(shù)據(jù)清洗與整理,將數(shù)據(jù)加載到Pandas數(shù)據(jù)框中,檢查是否存在缺失值或異常值,并對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化或編碼(對(duì)于分類變量如勵(lì)磁波形類型,需要編碼)。
-
統(tǒng)計(jì)分析
- 計(jì)算描述性統(tǒng)計(jì)量(如均值、方差等),觀察每個(gè)因素與磁芯損耗的關(guān)系。
- 繪制箱型圖、散點(diǎn)圖等可視化圖表,分析不同因素對(duì)磁芯損耗的分布影響。
- 方差分析 (ANOVA),用于檢驗(yàn)單個(gè)因素對(duì)磁芯損耗的影響顯著性。
- 多元線性回歸,構(gòu)建一個(gè)多元回歸模型來分析每個(gè)因素對(duì)磁芯損耗的影響程度,特別是兩兩因素的協(xié)同效應(yīng)。
- 交互效應(yīng)分析,使用可視化和回歸系數(shù)分析兩兩因素之間的協(xié)同效應(yīng),特別是交互作用項(xiàng)。
- 最優(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()
問題四
-
數(shù)據(jù)加載與預(yù)處理:
-
將磁通密度采樣點(diǎn)(從第4列到第1024列)的列名從數(shù)字轉(zhuǎn)換為字符串形式,方便后續(xù)操作。
-
首先對(duì)(勵(lì)磁波形)列使用LabelEncoder進(jìn)行編碼,將正弦波、三角波、梯形波分別映射為0、1、2。
-
-
特征工程:
- 將溫度、頻率、磁通密度等數(shù)值特征進(jìn)行標(biāo)準(zhǔn)化(StandardScaler),確保不同量綱的特征對(duì)模型的影響均衡。
-
模型選擇與構(gòu)建:
- 選擇隨機(jī)森林回歸模型(RandomForestRegressor)進(jìn)行回歸任務(wù),以預(yù)測(cè)磁芯損耗。
- 使用Pipeline構(gòu)建完整的模型管道,包括數(shù)據(jù)預(yù)處理(特征標(biāo)準(zhǔn)化)和模型訓(xùn)練。
-
模型訓(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)估模型的性能。
-
樣本預(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)化為頻率()與磁通密度峰值()的乘積:
- 目標(biāo)函數(shù):
平衡兩個(gè)目標(biāo):
- 最小化磁芯損耗:,使用我們構(gòu)建的磁芯損耗預(yù)測(cè)模型來預(yù)測(cè)。
- 最大化傳輸磁能:。
為了將這兩個(gè)目標(biāo)結(jié)合為一個(gè)優(yōu)化問題,定義一個(gè)加權(quán)目標(biāo)函數(shù):
其中, 和 是權(quán)重參數(shù),表示磁芯損耗與傳輸磁能的相對(duì)重要性。通常需要調(diào)節(jié)這些參數(shù)以實(shí)現(xiàn)某種平衡。
- 約束條件:
-
頻率 的取值范圍:$f{\min} \leq f \leq f{\max}$
-
磁通密度峰值 $BmB{m,\min} \leq Bm \leq B{m,\max}$
-
溫度 、勵(lì)磁波形等其他變量的取值范圍。
完整資料
轉(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
- 分享到:
- 首獎(jiǎng)10000元〡六盤水老2024年10月21日
- 2024福州市倉山區(qū)“煙2024年10月21日
- “海陸豐饒·助企興農(nóng)2024年10月18日
- 廣東江門市邑美鄉(xiāng)村2024年10月18日
- 2024年“長(zhǎng)春禮物”征2024年10月18日
- 衡陽師范獲省計(jì)算機(jī)2024年10月16日
- 天津金街IP形象設(shè)計(jì)征2024年10月16日
- 獎(jiǎng)金池21.9萬 第六屆黃2024年10月16日
- 首屆“云南禮物”高2024年10月16日
- 2024中國傳統(tǒng)建筑藝術(shù)2024年10月16日
您需要登錄后才可以發(fā)帖 登錄 | 立即注冊(cè)
- 用戶名:
- 密 碼:
- 驗(yàn)證碼: 看不清? 點(diǎn)擊更換
- 忘記密碼?
全部評(píng)論:0條
-
maya2008下載專題 元旦禮物專題 vray2013渲染器下載專題 增強(qiáng)現(xiàn)實(shí)專題 簽名設(shè)計(jì)專題 創(chuàng)意鼠標(biāo)設(shè)計(jì)專題 床3d模型下載專題 3dmax2012專題 cinema4d專題 小戶型空間創(chuàng)意設(shè)計(jì)專題 3d電視模型專題 3D電視專題 3d掃描儀專題 3dmax模型專題 房子設(shè)計(jì)專題 小便斗模型專題 木乃伊3d模型專題 vray for rhino下載專題 臺(tái)燈3D模型專題 創(chuàng)意數(shù)碼設(shè)計(jì)專題