12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import numpy as np
- from sklearn.model_selection import train_test_split
- from sklearn.ensemble import RandomForestRegressor
- from sklearn.metrics import mean_squared_error
- from scipy.optimize import minimize
- from flask import Flask, request, jsonify
- app = Flask(__name__)
- # 解冻时间计算函数
- def calculate_defrost_time(w, data):
- # 物理参数1
- rho_ice = data['rho_ice'] # 冰的密度
- C_ice = data['C_ice'] # 冰的比热容
- L = data['L'] # 冰的潜热
- k_ice = data['k_coal'] # 冰的导热系数
- T_m = data['T_m'] # 熔点温度(摄氏度)
- rho_coal = data['rho_coal'] # 物料的密度
- C_coal = data['C_coal'] # 物料的比热容
- k_coal = data['k_coal'] # 物料的导热系数
- h = data['h'] # 对流换热系数
- T_air = data['T_air'] # 空气温度(摄氏度)
- T_initial = data['T_initial'] # 物料初始温度
- a, b, c = data['a'], data['b'], data['c'] # 车厢的尺寸(长、宽、高)
- # 计算体积和表面积
- V = a * b * c
- A = 2 * (a * b) + 2 * (b * c) + 2 * (a * c)
- # 计算混合密度
- rho_mix = (1 - w) * rho_coal + w * rho_ice
- # 计算混合比热容
- C_mix = (1 - w) * C_coal + w * C_ice
- # 计算特征长度
- L_char = V / A
- # 计算体积分数
- phi = (w * rho_coal) / rho_ice
- # 计算有效导热系数
- k_eff = (k_coal * (2 * k_coal + k_ice - 2 * phi * (k_coal - k_ice)) /
- (2 * k_coal + k_ice + phi * (k_coal - k_ice))) + 1.1
- # 初步解冻时间 t1(小时)
- t1 = ((0.2 * rho_mix * C_mix * L_char ** 2) / k_eff *
- ((T_m - T_initial) / (T_air - T_initial))) / 3600
- # 进一步解冻时间 t2(小时)
- k_char = h # 近似处理 k_char
- t2 = ((rho_mix * w * L * L_char * L_char / (k_eff * (T_air - T_m))) *
- ((0.5 + k_eff / (k_char * L_char)) / 6)) / 3600
- # 总解冻时间
- t_total = t1 + t2
- return t_total
- # 反推函数
- def reverse_calculate(time, data):
- def objective_function(vars):
- w = vars
- calculated_time = calculate_defrost_time(w, data)
- return abs(calculated_time - time)
- bounds = [(0.1, 0.5)] # 含水量和初始温度的范围
- num_trials = 10 # 尝试的次数
- best_result = None
- best_error = np.inf
- for _ in range(num_trials):
- # 随机生成初始猜测值
- initial_guess = [np.random.uniform(0.1, 0.15)]
- result = minimize(objective_function, initial_guess, bounds=bounds)
- error = result.fun
- if error < best_error:
- best_error = error
- best_result = result
- return best_result.x[0]
- # API 入口
- @app.route('/reverse_calculate', methods=['POST'])
- def handle_request():
- try:
- data = request.get_json()
- time = float(data['realThawTime'])
- w_result = reverse_calculate(time, data)
- print(f"实际用时{time}")
- print(f"含水量{round(w_result, 4) * 100}")
- return jsonify({
- "water_content": round(w_result, 4) * 100
- })
- except Exception as e:
- return jsonify({"error": str(e)}), 400
- if __name__ == '__main__':
- app.run(host='127.0.0.1', port=9993, debug=True)
|