参考.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import numpy as np
  2. from sklearn.model_selection import train_test_split
  3. from sklearn.ensemble import RandomForestRegressor
  4. from sklearn.metrics import mean_squared_error
  5. from scipy.optimize import minimize
  6. from flask import Flask, request, jsonify
  7. app = Flask(__name__)
  8. # 解冻时间计算函数
  9. def calculate_defrost_time(w, data):
  10. # 物理参数1
  11. rho_ice = data['rho_ice'] # 冰的密度
  12. C_ice = data['C_ice'] # 冰的比热容
  13. L = data['L'] # 冰的潜热
  14. k_ice = data['k_coal'] # 冰的导热系数
  15. T_m = data['T_m'] # 熔点温度(摄氏度)
  16. rho_coal = data['rho_coal'] # 物料的密度
  17. C_coal = data['C_coal'] # 物料的比热容
  18. k_coal = data['k_coal'] # 物料的导热系数
  19. h = data['h'] # 对流换热系数
  20. T_air = data['T_air'] # 空气温度(摄氏度)
  21. T_initial = data['T_initial'] # 物料初始温度
  22. a, b, c = data['a'], data['b'], data['c'] # 车厢的尺寸(长、宽、高)
  23. # 计算体积和表面积
  24. V = a * b * c
  25. A = 2 * (a * b) + 2 * (b * c) + 2 * (a * c)
  26. # 计算混合密度
  27. rho_mix = (1 - w) * rho_coal + w * rho_ice
  28. # 计算混合比热容
  29. C_mix = (1 - w) * C_coal + w * C_ice
  30. # 计算特征长度
  31. L_char = V / A
  32. # 计算体积分数
  33. phi = (w * rho_coal) / rho_ice
  34. # 计算有效导热系数
  35. k_eff = (k_coal * (2 * k_coal + k_ice - 2 * phi * (k_coal - k_ice)) /
  36. (2 * k_coal + k_ice + phi * (k_coal - k_ice))) + 1.1
  37. # 初步解冻时间 t1(小时)
  38. t1 = ((0.2 * rho_mix * C_mix * L_char ** 2) / k_eff *
  39. ((T_m - T_initial) / (T_air - T_initial))) / 3600
  40. # 进一步解冻时间 t2(小时)
  41. k_char = h # 近似处理 k_char
  42. t2 = ((rho_mix * w * L * L_char * L_char / (k_eff * (T_air - T_m))) *
  43. ((0.5 + k_eff / (k_char * L_char)) / 6)) / 3600
  44. # 总解冻时间
  45. t_total = t1 + t2
  46. return t_total
  47. # 反推函数
  48. def reverse_calculate(time, data):
  49. def objective_function(vars):
  50. w = vars
  51. calculated_time = calculate_defrost_time(w, data)
  52. return abs(calculated_time - time)
  53. bounds = [(0.1, 0.5)] # 含水量和初始温度的范围
  54. num_trials = 10 # 尝试的次数
  55. best_result = None
  56. best_error = np.inf
  57. for _ in range(num_trials):
  58. # 随机生成初始猜测值
  59. initial_guess = [np.random.uniform(0.1, 0.15)]
  60. result = minimize(objective_function, initial_guess, bounds=bounds)
  61. error = result.fun
  62. if error < best_error:
  63. best_error = error
  64. best_result = result
  65. return best_result.x[0]
  66. # API 入口
  67. @app.route('/reverse_calculate', methods=['POST'])
  68. def handle_request():
  69. try:
  70. data = request.get_json()
  71. time = float(data['realThawTime'])
  72. w_result = reverse_calculate(time, data)
  73. print(f"实际用时{time}")
  74. print(f"含水量{round(w_result, 4) * 100}")
  75. return jsonify({
  76. "water_content": round(w_result, 4) * 100
  77. })
  78. except Exception as e:
  79. return jsonify({"error": str(e)}), 400
  80. if __name__ == '__main__':
  81. app.run(host='127.0.0.1', port=9993, debug=True)