David 5 天之前
父節點
當前提交
fec7584f25

+ 1 - 0
app/common/tf_lstm.py

@@ -34,6 +34,7 @@ class TSHandler(object):
             with model_lock:
                 loss = region_loss(self.opt)
                 self.model, self.model_params = self.mongoUtils.get_keras_model_from_mongo(args, {type(loss).__name__: loss})
+                print("????", self.model_params)
         except Exception as e:
             self.logger.info("加载模型权重失败:{}".format(e.args))
 

+ 527 - 0
app/logs/2025-05-26/south-forecast.2025-05-26.0.log

@@ -373,3 +373,530 @@
  0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00] - training
 2025-05-26 10:56:13,779 - dbmg.py - INFO - ✅ 模型 lstm 保存成功 | 文档ID: 6833d84d8a59ed23c934ddf3 - insert_trained_model_into_mongo
 2025-05-26 10:56:13,800 - dbmg.py - INFO - ✅ 缩放器 lstm 保存成功 | 文档ID: 6833d84d8a59ed23c934ddf5 - insert_scaler_model_into_mongo
+2025-05-26 13:17:06,298 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:17:44,916 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:17:45,030 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 13:17:47,565 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:17:50,416 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:17:50,416 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:17:50,620 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:17:50,620 - tf_model_pre.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 13:17:50,642 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:17:50,643 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 68, in predict
+    ts.opt.cap = round(target_scaler.transform(np.array([[self.capacity]]))[0, 0], 2)
+    ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:17:50,643 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 68, in predict
+    ts.opt.cap = round(target_scaler.transform(np.array([[self.capacity]]))[0, 0], 2)
+    ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:17:50,643 - tf_model_pre.py - INFO - lstm预测任务:用了 0.02199840545654297 秒  - predict
+
+2025-05-26 13:17:51,800 - tf_model_train.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:17:51,819 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-26 13:17:51,826 - data_cleaning.py - INFO - 行清洗:清洗的行数有:68,缺失的列有: - key_field_row_cleaning
+2025-05-26 13:17:51,853 - data_handler.py - INFO - 数据总数:2908, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-26 13:17:51,853 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-26 13:17:51,853 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-26 13:17:52,741 - dbmg.py - INFO - ⚠️ 未找到模型 'lstm' 的有效记录 - get_keras_model_from_mongo
+2025-05-26 13:17:52,741 - tf_lstm.py - INFO - 加强训练加载模型权重失败:('cannot unpack non-iterable NoneType object',) - train_init
+2025-05-26 13:18:04,578 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+2025-05-26 13:18:04,579 - tf_lstm.py - INFO - 训练集损失函数为:[9.0332e-01 3.1775e-01 9.8980e-02 2.7250e-02 6.6000e-03 1.4200e-03
+ 2.7000e-04 5.0000e-05 1.0000e-05 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00] - training
+2025-05-26 13:18:04,579 - tf_lstm.py - INFO - 验证集损失函数为:[5.1259e-01 1.6716e-01 4.8310e-02 1.2260e-02 2.7500e-03 5.5000e-04
+ 1.0000e-04 2.0000e-05 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00] - training
+2025-05-26 13:18:04,619 - dbmg.py - INFO - ✅ 模型 lstm 保存成功 | 文档ID: 6833f98cf85448d0b0957d89 - insert_trained_model_into_mongo
+2025-05-26 13:18:04,627 - dbmg.py - INFO - ✅ 缩放器 lstm 保存成功 | 文档ID: 6833f98cf85448d0b0957d8b - insert_scaler_model_into_mongo
+2025-05-26 13:25:05,271 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:25:05,387 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 13:25:07,918 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:25:10,813 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:25:10,815 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:25:11,026 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:25:11,026 - tf_model_pre.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 13:25:11,041 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:25:11,041 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:25:11,149 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:25:11,150 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmp2m0xc3yk.keras - get_keras_model_from_mongo
+2025-05-26 13:25:11,150 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    dh.opt.features = json.loads(ts.model_params).get('Model').get('features', ','.join(ts.opt.features)).split(',')
+                                 ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:25:11,151 - tf_model_pre.py - INFO - lstm预测任务:用了 0.12506389617919922 秒  - predict
+2025-05-26 13:25:11,160 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:25:11,161 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmphs7kb06v.keras - get_keras_model_from_mongo
+2025-05-26 13:25:11,161 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    dh.opt.features = json.loads(ts.model_params).get('Model').get('features', ','.join(ts.opt.features)).split(',')
+                                 ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:25:11,161 - tf_model_pre.py - INFO - lstm预测任务:用了 0.13512277603149414 秒  - predict
+2025-05-26 13:25:12,236 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:25:12,237 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 65, in predict
+    self.config['model_table'] = self.config['model_table'] + f'_{pre_type}_'+pre_id
+                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+TypeError: can only concatenate str (not "int") to str
+ - predict
+2025-05-26 13:25:12,237 - tf_model_pre.py - INFO - lstm预测任务:用了 0.0 秒  - predict
+2025-05-26 13:26:33,193 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:26:33,307 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 13:26:35,857 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:26:38,708 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:26:38,708 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:26:38,917 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:26:38,918 - tf_model_pre.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 13:26:38,933 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:26:38,933 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:26:39,028 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:26:39,029 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpn6uop176.keras - get_keras_model_from_mongo
+2025-05-26 13:26:39,029 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmp14m6bccs.keras - get_keras_model_from_mongo
+2025-05-26 13:26:39,029 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    self.dh.opt.features = json.loads(ts.model_params).get('Model').get('features', ','.join(ts.opt.features)).split(',')
+                                      ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:26:39,029 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    self.dh.opt.features = json.loads(ts.model_params).get('Model').get('features', ','.join(ts.opt.features)).split(',')
+                                      ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:26:39,029 - tf_model_pre.py - INFO - lstm预测任务:用了 0.1105046272277832 秒  - predict
+2025-05-26 13:26:40,126 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:26:40,141 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:18:04) - get_scaler_model_from_mongo
+2025-05-26 13:26:40,232 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:26:40,233 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmp5gtfn74t.keras - get_keras_model_from_mongo
+2025-05-26 13:26:40,233 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    self.dh.opt.features = json.loads(ts.model_params).get('Model').get('features', ','.join(ts.opt.features)).split(',')
+                                      ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:26:40,233 - tf_model_pre.py - INFO - lstm预测任务:用了 0.1076819896697998 秒  - predict
+2025-05-26 13:27:06,665 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:27:06,783 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 13:27:09,317 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:27:12,186 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:27:12,188 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:27:12,391 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:27:12,391 - tf_model_pre.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 13:27:12,407 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:27:12,407 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:27:12,501 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:27:12,502 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpj73vvrsd.keras - get_keras_model_from_mongo
+2025-05-26 13:27:12,503 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'NoneType' object has no attribute 'get'
+ - predict
+2025-05-26 13:27:12,503 - tf_model_pre.py - INFO - lstm预测任务:用了 0.11110973358154297 秒  - predict
+2025-05-26 13:27:12,514 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:27:12,515 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpebd9bcde.keras - get_keras_model_from_mongo
+2025-05-26 13:27:12,515 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'NoneType' object has no attribute 'get'
+ - predict
+2025-05-26 13:27:12,515 - tf_model_pre.py - INFO - lstm预测任务:用了 0.12341547012329102 秒  - predict
+2025-05-26 13:27:13,612 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:27:13,641 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:18:04) - get_scaler_model_from_mongo
+2025-05-26 13:27:13,733 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:27:13,734 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpsjreh657.keras - get_keras_model_from_mongo
+2025-05-26 13:27:13,734 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'NoneType' object has no attribute 'get'
+ - predict
+2025-05-26 13:27:13,735 - tf_model_pre.py - INFO - lstm预测任务:用了 0.1213693618774414 秒  - predict
+2025-05-26 13:36:25,334 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:36:25,456 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 13:36:27,979 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:36:30,829 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:36:30,830 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:36:31,037 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:36:31,037 - tf_model_pre.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 13:36:31,052 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:36:31,052 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:36:31,148 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:36:31,149 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpjts3c7tj.keras - get_keras_model_from_mongo
+2025-05-26 13:36:31,149 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'NoneType' object has no attribute 'get'
+ - predict
+2025-05-26 13:36:31,150 - tf_model_pre.py - INFO - lstm预测任务:用了 0.1134181022644043 秒  - predict
+2025-05-26 13:36:31,158 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:36:31,159 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpojbt3e8v.keras - get_keras_model_from_mongo
+2025-05-26 13:36:31,159 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'NoneType' object has no attribute 'get'
+ - predict
+2025-05-26 13:36:31,159 - tf_model_pre.py - INFO - lstm预测任务:用了 0.12242007255554199 秒  - predict
+2025-05-26 13:36:32,248 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:36:32,286 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:18:04) - get_scaler_model_from_mongo
+2025-05-26 13:36:32,400 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:36:32,401 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmplfz_aswi.keras - get_keras_model_from_mongo
+2025-05-26 13:36:32,401 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 70, in predict
+    self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'NoneType' object has no attribute 'get'
+ - predict
+2025-05-26 13:36:32,401 - tf_model_pre.py - INFO - lstm预测任务:用了 0.1532433032989502 秒  - predict
+2025-05-26 13:52:57,002 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:52:57,122 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 13:52:59,725 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:53:02,598 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:53:02,599 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:53:02,806 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:53:02,807 - tf_model_pre.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 13:53:02,823 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:53:02,823 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 10:55:59) - get_scaler_model_from_mongo
+2025-05-26 13:53:02,924 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:53:02,925 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpzgi7z5fq.keras - get_keras_model_from_mongo
+2025-05-26 13:53:02,926 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 71, in predict
+    self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'NoneType' object has no attribute 'get'
+ - predict
+2025-05-26 13:53:02,926 - tf_model_pre.py - INFO - lstm预测任务:用了 0.11925697326660156 秒  - predict
+2025-05-26 13:53:02,943 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:53:02,944 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpdkqyzzpk.keras - get_keras_model_from_mongo
+2025-05-26 13:53:02,944 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 71, in predict
+    self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'NoneType' object has no attribute 'get'
+ - predict
+2025-05-26 13:53:02,945 - tf_model_pre.py - INFO - lstm预测任务:用了 0.13909673690795898 秒  - predict
+2025-05-26 13:53:04,019 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:53:04,053 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:18:04) - get_scaler_model_from_mongo
+2025-05-26 13:53:04,154 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:53:04,155 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpr6gss42h.keras - get_keras_model_from_mongo
+2025-05-26 13:53:04,155 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 71, in predict
+    self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'NoneType' object has no attribute 'get'
+ - predict
+2025-05-26 13:53:04,155 - tf_model_pre.py - INFO - lstm预测任务:用了 0.13572335243225098 秒  - predict
+2025-05-26 13:56:37,617 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:56:37,735 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 13:56:40,342 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:56:43,281 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:56:43,282 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:56:43,509 - tf_model_train.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:56:43,510 - tf_model_train.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 13:56:43,528 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-26 13:56:43,529 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-26 13:56:43,536 - data_cleaning.py - INFO - 行清洗:清洗的行数有:68,缺失的列有: - key_field_row_cleaning
+2025-05-26 13:56:43,537 - data_cleaning.py - INFO - 行清洗:清洗的行数有:69,缺失的列有: - key_field_row_cleaning
+2025-05-26 13:56:43,563 - data_handler.py - INFO - 数据总数:2908, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-26 13:56:43,563 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-26 13:56:43,564 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-26 13:56:43,564 - data_handler.py - INFO - 数据总数:2907, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-26 13:56:43,564 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-26 13:56:43,565 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-26 13:56:44,508 - dbmg.py - INFO - ⚠️ 未找到模型 'lstm' 的有效记录 - get_keras_model_from_mongo
+2025-05-26 13:56:44,508 - tf_lstm.py - INFO - 加强训练加载模型权重失败:('cannot unpack non-iterable NoneType object',) - train_init
+2025-05-26 13:56:44,513 - dbmg.py - INFO - ⚠️ 未找到模型 'lstm' 的有效记录 - get_keras_model_from_mongo
+2025-05-26 13:56:44,513 - tf_lstm.py - INFO - 加强训练加载模型权重失败:('cannot unpack non-iterable NoneType object',) - train_init
+2025-05-26 13:56:57,662 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+2025-05-26 13:56:57,662 - tf_lstm.py - INFO - 训练集损失函数为:[8.9813e-01 3.1547e-01 9.8450e-02 2.7250e-02 6.6700e-03 1.4800e-03
+ 3.3000e-04 1.0000e-04 6.0000e-05 6.0000e-05 6.0000e-05 6.0000e-05
+ 6.0000e-05 6.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05] - training
+2025-05-26 13:56:57,663 - tf_lstm.py - INFO - 验证集损失函数为:[5.0893e-01 1.6605e-01 4.8210e-02 1.2350e-02 2.8400e-03 6.3000e-04
+ 1.8000e-04 1.0000e-04 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05] - training
+2025-05-26 13:56:57,665 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+2025-05-26 13:56:57,665 - tf_lstm.py - INFO - 训练集损失函数为:[9.0532e-01 3.1862e-01 9.9590e-02 2.7800e-02 7.1400e-03 1.9600e-03
+ 8.2000e-04 5.9000e-04 5.5000e-04 5.4000e-04 5.4000e-04 5.4000e-04
+ 5.4000e-04 5.4000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04] - training
+2025-05-26 13:56:57,666 - tf_lstm.py - INFO - 验证集损失函数为:[0.51427 0.16818 0.04926 0.01319 0.00366 0.00146 0.001   0.00091 0.0009
+ 0.00089 0.00088 0.00088 0.00088 0.00088 0.00087 0.00087 0.00087 0.00087
+ 0.00086 0.00086 0.00086 0.00086 0.00086 0.00086 0.00086 0.00085 0.00085
+ 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00084
+ 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084
+ 0.00084 0.00084 0.00084 0.00084 0.00083 0.00083 0.00083 0.00083 0.00083
+ 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083
+ 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082] - training
+2025-05-26 13:56:57,701 - dbmg.py - INFO - ✅ 模型 lstm 保存成功 | 文档ID: 683402a901bb2896e076fb63 - insert_trained_model_into_mongo
+2025-05-26 13:56:57,701 - dbmg.py - INFO - ✅ 模型 lstm 保存成功 | 文档ID: 683402a9c6b08ce1e2ede8e3 - insert_trained_model_into_mongo
+2025-05-26 13:56:57,733 - dbmg.py - INFO - ✅ 缩放器 lstm 保存成功 | 文档ID: 683402a901bb2896e076fb65 - insert_scaler_model_into_mongo
+2025-05-26 13:56:57,733 - dbmg.py - INFO - ✅ 缩放器 lstm 保存成功 | 文档ID: 683402a9c6b08ce1e2ede8e5 - insert_scaler_model_into_mongo
+2025-05-26 13:56:59,042 - tf_model_train.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:56:59,061 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-26 13:56:59,069 - data_cleaning.py - INFO - 行清洗:清洗的行数有:68,缺失的列有: - key_field_row_cleaning
+2025-05-26 13:56:59,096 - data_handler.py - INFO - 数据总数:2908, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-26 13:56:59,096 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-26 13:56:59,096 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-26 13:57:00,005 - dbmg.py - INFO - ⚠️ 未找到模型 'lstm' 的有效记录 - get_keras_model_from_mongo
+2025-05-26 13:57:00,007 - tf_lstm.py - INFO - 加强训练加载模型权重失败:('cannot unpack non-iterable NoneType object',) - train_init
+2025-05-26 13:57:12,270 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+2025-05-26 13:57:12,271 - tf_lstm.py - INFO - 训练集损失函数为:[9.0651e-01 3.1862e-01 9.8990e-02 2.7140e-02 6.5400e-03 1.4000e-03
+ 2.7000e-04 5.0000e-05 1.0000e-05 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00] - training
+2025-05-26 13:57:12,271 - tf_lstm.py - INFO - 验证集损失函数为:[5.1432e-01 1.6739e-01 4.8210e-02 1.2180e-02 2.7100e-03 5.4000e-04
+ 1.0000e-04 2.0000e-05 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
+ 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00] - training
+2025-05-26 13:57:12,326 - dbmg.py - INFO - ✅ 模型 lstm 保存成功 | 文档ID: 683402b8cbbade54034349c6 - insert_trained_model_into_mongo
+2025-05-26 13:57:12,346 - dbmg.py - INFO - ✅ 缩放器 lstm 保存成功 | 文档ID: 683402b8cbbade54034349c8 - insert_scaler_model_into_mongo
+2025-05-26 13:57:23,209 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:57:23,331 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 13:57:26,015 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:57:28,935 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:57:28,935 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:57:29,145 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:57:29,146 - tf_model_pre.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 13:57:29,161 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:56:57) - get_scaler_model_from_mongo
+2025-05-26 13:57:29,276 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:57:29,277 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmp7ueg9fol.keras - get_keras_model_from_mongo
+2025-05-26 13:57:29,285 - tf_model_pre.py - INFO - 算法启动成功 - predict
+2025-05-26 13:57:29,286 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 78, in predict
+    res = list(chain.from_iterable(target_scaler.inverse_transform([ts.predict(scaled_pre_x).flatten()])))
+                                                                    ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:57:29,286 - tf_model_pre.py - INFO - lstm预测任务:用了 0.14067649841308594 秒  - predict
+2025-05-26 13:57:29,289 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:57:29,290 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpojcxs375.keras - get_keras_model_from_mongo
+2025-05-26 13:57:29,299 - tf_model_pre.py - INFO - 算法启动成功 - predict
+2025-05-26 13:57:29,299 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 78, in predict
+    res = list(chain.from_iterable(target_scaler.inverse_transform([ts.predict(scaled_pre_x).flatten()])))
+                                                                    ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:57:29,299 - tf_model_pre.py - INFO - lstm预测任务:用了 0.15401625633239746 秒  - predict
+2025-05-26 13:57:30,396 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:57:30,411 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:57:12) - get_scaler_model_from_mongo
+2025-05-26 13:57:30,504 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:57:30,505 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpvetfbxsf.keras - get_keras_model_from_mongo
+2025-05-26 13:57:30,512 - tf_model_pre.py - INFO - 算法启动成功 - predict
+2025-05-26 13:57:30,512 - tf_model_pre.py - INFO - 算法状态异常:Traceback (most recent call last):
+  File "E:\compete\app\predict\tf_model_pre.py", line 78, in predict
+    res = list(chain.from_iterable(target_scaler.inverse_transform([ts.predict(scaled_pre_x).flatten()])))
+                                                                    ^^
+NameError: name 'ts' is not defined. Did you mean: 'self.ts'?
+ - predict
+2025-05-26 13:57:30,512 - tf_model_pre.py - INFO - lstm预测任务:用了 0.11627936363220215 秒  - predict
+2025-05-26 13:57:51,356 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:57:51,477 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 13:57:54,146 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:57:57,038 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:57:57,038 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 13:57:57,244 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:57:57,247 - tf_model_pre.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 13:57:57,261 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:56:57) - get_scaler_model_from_mongo
+2025-05-26 13:57:57,261 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:56:57) - get_scaler_model_from_mongo
+2025-05-26 13:57:57,359 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:57:57,360 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpnsr7r1ye.keras - get_keras_model_from_mongo
+2025-05-26 13:57:57,368 - tf_model_pre.py - INFO - 算法启动成功 - predict
+2025-05-26 13:57:57,379 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:57:57,380 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpyxtqz1xn.keras - get_keras_model_from_mongo
+2025-05-26 13:57:57,388 - tf_model_pre.py - INFO - 算法启动成功 - predict
+2025-05-26 13:57:57,522 - tf_lstm.py - INFO - 执行预测方法 - predict
+2025-05-26 13:57:57,526 - tf_model_pre.py - INFO - 算法正常结束 - predict
+2025-05-26 13:57:57,526 - tf_model_pre.py - INFO - lstm预测任务:用了 0.28109288215637207 秒  - predict
+2025-05-26 13:57:57,539 - tf_lstm.py - INFO - 执行预测方法 - predict
+2025-05-26 13:57:57,543 - tf_model_pre.py - INFO - 算法正常结束 - predict
+2025-05-26 13:57:57,543 - tf_model_pre.py - INFO - lstm预测任务:用了 0.2960829734802246 秒  - predict
+2025-05-26 13:57:58,485 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 13:57:58,500 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:57:12) - get_scaler_model_from_mongo
+2025-05-26 13:57:58,610 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 13:57:58,611 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpvn_zur3w.keras - get_keras_model_from_mongo
+2025-05-26 13:57:58,619 - tf_model_pre.py - INFO - 算法启动成功 - predict
+2025-05-26 13:57:58,770 - tf_lstm.py - INFO - 执行预测方法 - predict
+2025-05-26 13:57:58,774 - tf_model_pre.py - INFO - 算法正常结束 - predict
+2025-05-26 13:57:58,774 - tf_model_pre.py - INFO - lstm预测任务:用了 0.2896087169647217 秒  - predict
+2025-05-26 14:06:09,692 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 14:06:09,811 - main.py - INFO - 输入文件目录: 62/1002/2025-04-21/IN - main
+2025-05-26 14:06:12,373 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 14:06:15,287 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 14:06:15,288 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-26 14:06:15,504 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 14:06:15,506 - tf_model_pre.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-26 14:06:15,520 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:56:57) - get_scaler_model_from_mongo
+2025-05-26 14:06:15,520 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:56:57) - get_scaler_model_from_mongo
+2025-05-26 14:06:15,615 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 14:06:15,616 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmp_up9ip43.keras - get_keras_model_from_mongo
+2025-05-26 14:06:15,627 - tf_model_pre.py - INFO - 算法启动成功 - predict
+2025-05-26 14:06:15,637 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 14:06:15,638 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmp_kwqh_p6.keras - get_keras_model_from_mongo
+2025-05-26 14:06:15,646 - tf_model_pre.py - INFO - 算法启动成功 - predict
+2025-05-26 14:06:15,781 - tf_lstm.py - INFO - 执行预测方法 - predict
+2025-05-26 14:06:15,785 - tf_model_pre.py - INFO - 算法正常结束 - predict
+2025-05-26 14:06:15,785 - tf_model_pre.py - INFO - lstm预测任务:用了 0.2813594341278076 秒  - predict
+2025-05-26 14:06:15,803 - tf_lstm.py - INFO - 执行预测方法 - predict
+2025-05-26 14:06:15,806 - tf_model_pre.py - INFO - 算法正常结束 - predict
+2025-05-26 14:06:15,807 - tf_model_pre.py - INFO - lstm预测任务:用了 0.30091023445129395 秒  - predict
+2025-05-26 14:06:16,751 - tf_model_pre.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-26 14:06:16,766 - dbmg.py - INFO - ✅ 成功加载 lstm 的缩放器 (版本时间: 2025-05-26 13:57:12) - get_scaler_model_from_mongo
+2025-05-26 14:06:16,868 - dbmg.py - INFO - lstm 模型成功从 MongoDB 加载! - get_keras_model_from_mongo
+2025-05-26 14:06:16,869 - dbmg.py - INFO - 🧹 已清理临时文件: C:\Users\ADMINI~1\AppData\Local\Temp\tmpvak840q3.keras - get_keras_model_from_mongo
+2025-05-26 14:06:16,877 - tf_model_pre.py - INFO - 算法启动成功 - predict
+2025-05-26 14:06:17,026 - tf_lstm.py - INFO - 执行预测方法 - predict
+2025-05-26 14:06:17,029 - tf_model_pre.py - INFO - 算法正常结束 - predict
+2025-05-26 14:06:17,029 - tf_model_pre.py - INFO - lstm预测任务:用了 0.27792811393737793 秒  - predict

+ 385 - 0
app/model/data/DQYC/qy/62/1002/2025-04-21/IN/1086/DQYC_OUT_PREDICT_POWER.txt

@@ -0,0 +1,385 @@
+PlantID Datetime Power
+1086 "2025-02-07 00:00:00" 58.33
+1086 "2025-02-07 00:15:00" 58.59
+1086 "2025-02-07 00:30:00" 58.46
+1086 "2025-02-07 00:45:00" 58.43
+1086 "2025-02-07 01:00:00" 58.31
+1086 "2025-02-07 01:15:00" 58.4
+1086 "2025-02-07 01:30:00" 58.41
+1086 "2025-02-07 01:45:00" 58.29
+1086 "2025-02-07 02:00:00" 58.33
+1086 "2025-02-07 02:15:00" 58.36
+1086 "2025-02-07 02:30:00" 58.35
+1086 "2025-02-07 02:45:00" 58.45
+1086 "2025-02-07 03:00:00" 58.41
+1086 "2025-02-07 03:15:00" 58.23
+1086 "2025-02-07 03:30:00" 58.21
+1086 "2025-02-07 03:45:00" 58.32
+1086 "2025-02-07 04:00:00" 58.33
+1086 "2025-02-07 04:15:00" 58.59
+1086 "2025-02-07 04:30:00" 58.46
+1086 "2025-02-07 04:45:00" 58.43
+1086 "2025-02-07 05:00:00" 58.31
+1086 "2025-02-07 05:15:00" 58.4
+1086 "2025-02-07 05:30:00" 58.41
+1086 "2025-02-07 05:45:00" 58.29
+1086 "2025-02-07 06:00:00" 58.33
+1086 "2025-02-07 06:15:00" 58.36
+1086 "2025-02-07 06:30:00" 58.35
+1086 "2025-02-07 06:45:00" 58.45
+1086 "2025-02-07 07:00:00" 58.41
+1086 "2025-02-07 07:15:00" 58.23
+1086 "2025-02-07 07:30:00" 58.21
+1086 "2025-02-07 07:45:00" 58.32
+1086 "2025-02-07 08:00:00" 58.33
+1086 "2025-02-07 08:15:00" 58.59
+1086 "2025-02-07 08:30:00" 58.46
+1086 "2025-02-07 08:45:00" 58.43
+1086 "2025-02-07 09:00:00" 58.31
+1086 "2025-02-07 09:15:00" 58.4
+1086 "2025-02-07 09:30:00" 58.41
+1086 "2025-02-07 09:45:00" 58.29
+1086 "2025-02-07 10:00:00" 58.33
+1086 "2025-02-07 10:15:00" 58.36
+1086 "2025-02-07 10:30:00" 58.35
+1086 "2025-02-07 10:45:00" 58.45
+1086 "2025-02-07 11:00:00" 58.41
+1086 "2025-02-07 11:15:00" 58.23
+1086 "2025-02-07 11:30:00" 58.21
+1086 "2025-02-07 11:45:00" 58.32
+1086 "2025-02-07 12:00:00" 58.33
+1086 "2025-02-07 12:15:00" 58.59
+1086 "2025-02-07 12:30:00" 58.46
+1086 "2025-02-07 12:45:00" 58.43
+1086 "2025-02-07 13:00:00" 58.31
+1086 "2025-02-07 13:15:00" 58.4
+1086 "2025-02-07 13:30:00" 58.41
+1086 "2025-02-07 13:45:00" 58.29
+1086 "2025-02-07 14:00:00" 58.33
+1086 "2025-02-07 14:15:00" 58.36
+1086 "2025-02-07 14:30:00" 58.35
+1086 "2025-02-07 14:45:00" 58.45
+1086 "2025-02-07 15:00:00" 58.41
+1086 "2025-02-07 15:15:00" 58.23
+1086 "2025-02-07 15:30:00" 58.21
+1086 "2025-02-07 15:45:00" 58.32
+1086 "2025-02-07 16:00:00" 58.33
+1086 "2025-02-07 16:15:00" 58.59
+1086 "2025-02-07 16:30:00" 58.46
+1086 "2025-02-07 16:45:00" 58.43
+1086 "2025-02-07 17:00:00" 58.31
+1086 "2025-02-07 17:15:00" 58.4
+1086 "2025-02-07 17:30:00" 58.41
+1086 "2025-02-07 17:45:00" 58.29
+1086 "2025-02-07 18:00:00" 58.33
+1086 "2025-02-07 18:15:00" 58.36
+1086 "2025-02-07 18:30:00" 58.35
+1086 "2025-02-07 18:45:00" 58.45
+1086 "2025-02-07 19:00:00" 58.41
+1086 "2025-02-07 19:15:00" 58.23
+1086 "2025-02-07 19:30:00" 58.21
+1086 "2025-02-07 19:45:00" 58.32
+1086 "2025-02-07 20:00:00" 58.33
+1086 "2025-02-07 20:15:00" 58.59
+1086 "2025-02-07 20:30:00" 58.46
+1086 "2025-02-07 20:45:00" 58.43
+1086 "2025-02-07 21:00:00" 58.31
+1086 "2025-02-07 21:15:00" 58.4
+1086 "2025-02-07 21:30:00" 58.41
+1086 "2025-02-07 21:45:00" 58.29
+1086 "2025-02-07 22:00:00" 58.33
+1086 "2025-02-07 22:15:00" 58.36
+1086 "2025-02-07 22:30:00" 58.35
+1086 "2025-02-07 22:45:00" 58.45
+1086 "2025-02-07 23:00:00" 58.41
+1086 "2025-02-07 23:15:00" 58.23
+1086 "2025-02-07 23:30:00" 58.21
+1086 "2025-02-07 23:45:00" 58.32
+1086 "2025-02-08 00:00:00" 58.33
+1086 "2025-02-08 00:15:00" 58.59
+1086 "2025-02-08 00:30:00" 58.46
+1086 "2025-02-08 00:45:00" 58.43
+1086 "2025-02-08 01:00:00" 58.31
+1086 "2025-02-08 01:15:00" 58.4
+1086 "2025-02-08 01:30:00" 58.41
+1086 "2025-02-08 01:45:00" 58.29
+1086 "2025-02-08 02:00:00" 58.33
+1086 "2025-02-08 02:15:00" 58.36
+1086 "2025-02-08 02:30:00" 58.35
+1086 "2025-02-08 02:45:00" 58.45
+1086 "2025-02-08 03:00:00" 58.41
+1086 "2025-02-08 03:15:00" 58.23
+1086 "2025-02-08 03:30:00" 58.21
+1086 "2025-02-08 03:45:00" 58.32
+1086 "2025-02-08 04:00:00" 58.33
+1086 "2025-02-08 04:15:00" 58.59
+1086 "2025-02-08 04:30:00" 58.46
+1086 "2025-02-08 04:45:00" 58.43
+1086 "2025-02-08 05:00:00" 58.31
+1086 "2025-02-08 05:15:00" 58.4
+1086 "2025-02-08 05:30:00" 58.41
+1086 "2025-02-08 05:45:00" 58.29
+1086 "2025-02-08 06:00:00" 58.33
+1086 "2025-02-08 06:15:00" 58.36
+1086 "2025-02-08 06:30:00" 58.35
+1086 "2025-02-08 06:45:00" 58.45
+1086 "2025-02-08 07:00:00" 58.41
+1086 "2025-02-08 07:15:00" 58.23
+1086 "2025-02-08 07:30:00" 58.21
+1086 "2025-02-08 07:45:00" 58.32
+1086 "2025-02-08 08:00:00" 58.33
+1086 "2025-02-08 08:15:00" 58.59
+1086 "2025-02-08 08:30:00" 58.46
+1086 "2025-02-08 08:45:00" 58.43
+1086 "2025-02-08 09:00:00" 58.31
+1086 "2025-02-08 09:15:00" 58.4
+1086 "2025-02-08 09:30:00" 58.41
+1086 "2025-02-08 09:45:00" 58.29
+1086 "2025-02-08 10:00:00" 58.33
+1086 "2025-02-08 10:15:00" 58.36
+1086 "2025-02-08 10:30:00" 58.35
+1086 "2025-02-08 10:45:00" 58.45
+1086 "2025-02-08 11:00:00" 58.41
+1086 "2025-02-08 11:15:00" 58.23
+1086 "2025-02-08 11:30:00" 58.21
+1086 "2025-02-08 11:45:00" 58.32
+1086 "2025-02-08 12:00:00" 58.33
+1086 "2025-02-08 12:15:00" 58.59
+1086 "2025-02-08 12:30:00" 58.46
+1086 "2025-02-08 12:45:00" 58.43
+1086 "2025-02-08 13:00:00" 58.31
+1086 "2025-02-08 13:15:00" 58.4
+1086 "2025-02-08 13:30:00" 58.41
+1086 "2025-02-08 13:45:00" 58.29
+1086 "2025-02-08 14:00:00" 58.33
+1086 "2025-02-08 14:15:00" 58.36
+1086 "2025-02-08 14:30:00" 58.35
+1086 "2025-02-08 14:45:00" 58.45
+1086 "2025-02-08 15:00:00" 58.41
+1086 "2025-02-08 15:15:00" 58.23
+1086 "2025-02-08 15:30:00" 58.21
+1086 "2025-02-08 15:45:00" 58.32
+1086 "2025-02-08 16:00:00" 58.33
+1086 "2025-02-08 16:15:00" 58.59
+1086 "2025-02-08 16:30:00" 58.46
+1086 "2025-02-08 16:45:00" 58.43
+1086 "2025-02-08 17:00:00" 58.31
+1086 "2025-02-08 17:15:00" 58.4
+1086 "2025-02-08 17:30:00" 58.41
+1086 "2025-02-08 17:45:00" 58.29
+1086 "2025-02-08 18:00:00" 58.33
+1086 "2025-02-08 18:15:00" 58.36
+1086 "2025-02-08 18:30:00" 58.35
+1086 "2025-02-08 18:45:00" 58.45
+1086 "2025-02-08 19:00:00" 58.41
+1086 "2025-02-08 19:15:00" 58.23
+1086 "2025-02-08 19:30:00" 58.21
+1086 "2025-02-08 19:45:00" 58.32
+1086 "2025-02-08 20:00:00" 58.33
+1086 "2025-02-08 20:15:00" 58.59
+1086 "2025-02-08 20:30:00" 58.46
+1086 "2025-02-08 20:45:00" 58.43
+1086 "2025-02-08 21:00:00" 58.31
+1086 "2025-02-08 21:15:00" 58.4
+1086 "2025-02-08 21:30:00" 58.41
+1086 "2025-02-08 21:45:00" 58.29
+1086 "2025-02-08 22:00:00" 58.33
+1086 "2025-02-08 22:15:00" 58.36
+1086 "2025-02-08 22:30:00" 58.35
+1086 "2025-02-08 22:45:00" 58.45
+1086 "2025-02-08 23:00:00" 58.41
+1086 "2025-02-08 23:15:00" 58.23
+1086 "2025-02-08 23:30:00" 58.21
+1086 "2025-02-08 23:45:00" 58.32
+1086 "2025-02-09 00:00:00" 58.33
+1086 "2025-02-09 00:15:00" 58.59
+1086 "2025-02-09 00:30:00" 58.46
+1086 "2025-02-09 00:45:00" 58.43
+1086 "2025-02-09 01:00:00" 58.31
+1086 "2025-02-09 01:15:00" 58.4
+1086 "2025-02-09 01:30:00" 58.41
+1086 "2025-02-09 01:45:00" 58.29
+1086 "2025-02-09 02:00:00" 58.33
+1086 "2025-02-09 02:15:00" 58.36
+1086 "2025-02-09 02:30:00" 58.35
+1086 "2025-02-09 02:45:00" 58.45
+1086 "2025-02-09 03:00:00" 58.41
+1086 "2025-02-09 03:15:00" 58.23
+1086 "2025-02-09 03:30:00" 58.21
+1086 "2025-02-09 03:45:00" 58.32
+1086 "2025-02-09 04:00:00" 58.33
+1086 "2025-02-09 04:15:00" 58.59
+1086 "2025-02-09 04:30:00" 58.46
+1086 "2025-02-09 04:45:00" 58.43
+1086 "2025-02-09 05:00:00" 58.31
+1086 "2025-02-09 05:15:00" 58.4
+1086 "2025-02-09 05:30:00" 58.41
+1086 "2025-02-09 05:45:00" 58.29
+1086 "2025-02-09 06:00:00" 58.33
+1086 "2025-02-09 06:15:00" 58.36
+1086 "2025-02-09 06:30:00" 58.35
+1086 "2025-02-09 06:45:00" 58.45
+1086 "2025-02-09 07:00:00" 58.41
+1086 "2025-02-09 07:15:00" 58.23
+1086 "2025-02-09 07:30:00" 58.21
+1086 "2025-02-09 07:45:00" 58.32
+1086 "2025-02-09 08:00:00" 58.33
+1086 "2025-02-09 08:15:00" 58.59
+1086 "2025-02-09 08:30:00" 58.46
+1086 "2025-02-09 08:45:00" 58.43
+1086 "2025-02-09 09:00:00" 58.31
+1086 "2025-02-09 09:15:00" 58.4
+1086 "2025-02-09 09:30:00" 58.41
+1086 "2025-02-09 09:45:00" 58.29
+1086 "2025-02-09 10:00:00" 58.33
+1086 "2025-02-09 10:15:00" 58.36
+1086 "2025-02-09 10:30:00" 58.35
+1086 "2025-02-09 10:45:00" 58.45
+1086 "2025-02-09 11:00:00" 58.41
+1086 "2025-02-09 11:15:00" 58.23
+1086 "2025-02-09 11:30:00" 58.21
+1086 "2025-02-09 11:45:00" 58.32
+1086 "2025-02-09 12:00:00" 58.33
+1086 "2025-02-09 12:15:00" 58.59
+1086 "2025-02-09 12:30:00" 58.46
+1086 "2025-02-09 12:45:00" 58.43
+1086 "2025-02-09 13:00:00" 58.31
+1086 "2025-02-09 13:15:00" 58.4
+1086 "2025-02-09 13:30:00" 58.41
+1086 "2025-02-09 13:45:00" 58.29
+1086 "2025-02-09 14:00:00" 58.33
+1086 "2025-02-09 14:15:00" 58.36
+1086 "2025-02-09 14:30:00" 58.35
+1086 "2025-02-09 14:45:00" 58.45
+1086 "2025-02-09 15:00:00" 58.41
+1086 "2025-02-09 15:15:00" 58.23
+1086 "2025-02-09 15:30:00" 58.21
+1086 "2025-02-09 15:45:00" 58.32
+1086 "2025-02-09 16:00:00" 58.33
+1086 "2025-02-09 16:15:00" 58.59
+1086 "2025-02-09 16:30:00" 58.46
+1086 "2025-02-09 16:45:00" 58.43
+1086 "2025-02-09 17:00:00" 58.31
+1086 "2025-02-09 17:15:00" 58.4
+1086 "2025-02-09 17:30:00" 58.41
+1086 "2025-02-09 17:45:00" 58.29
+1086 "2025-02-09 18:00:00" 58.33
+1086 "2025-02-09 18:15:00" 58.36
+1086 "2025-02-09 18:30:00" 58.35
+1086 "2025-02-09 18:45:00" 58.45
+1086 "2025-02-09 19:00:00" 58.41
+1086 "2025-02-09 19:15:00" 58.23
+1086 "2025-02-09 19:30:00" 58.21
+1086 "2025-02-09 19:45:00" 58.32
+1086 "2025-02-09 20:00:00" 58.33
+1086 "2025-02-09 20:15:00" 58.59
+1086 "2025-02-09 20:30:00" 58.46
+1086 "2025-02-09 20:45:00" 58.43
+1086 "2025-02-09 21:00:00" 58.31
+1086 "2025-02-09 21:15:00" 58.4
+1086 "2025-02-09 21:30:00" 58.41
+1086 "2025-02-09 21:45:00" 58.29
+1086 "2025-02-09 22:00:00" 58.33
+1086 "2025-02-09 22:15:00" 58.36
+1086 "2025-02-09 22:30:00" 58.35
+1086 "2025-02-09 22:45:00" 58.45
+1086 "2025-02-09 23:00:00" 58.41
+1086 "2025-02-09 23:15:00" 58.23
+1086 "2025-02-09 23:30:00" 58.21
+1086 "2025-02-09 23:45:00" 58.32
+1086 "2025-02-10 00:00:00" 58.33
+1086 "2025-02-10 00:15:00" 58.59
+1086 "2025-02-10 00:30:00" 58.46
+1086 "2025-02-10 00:45:00" 58.43
+1086 "2025-02-10 01:00:00" 58.31
+1086 "2025-02-10 01:15:00" 58.4
+1086 "2025-02-10 01:30:00" 58.41
+1086 "2025-02-10 01:45:00" 58.29
+1086 "2025-02-10 02:00:00" 58.33
+1086 "2025-02-10 02:15:00" 58.36
+1086 "2025-02-10 02:30:00" 58.35
+1086 "2025-02-10 02:45:00" 58.45
+1086 "2025-02-10 03:00:00" 58.41
+1086 "2025-02-10 03:15:00" 58.23
+1086 "2025-02-10 03:30:00" 58.21
+1086 "2025-02-10 03:45:00" 58.32
+1086 "2025-02-10 04:00:00" 58.33
+1086 "2025-02-10 04:15:00" 58.59
+1086 "2025-02-10 04:30:00" 58.46
+1086 "2025-02-10 04:45:00" 58.43
+1086 "2025-02-10 05:00:00" 58.31
+1086 "2025-02-10 05:15:00" 58.4
+1086 "2025-02-10 05:30:00" 58.41
+1086 "2025-02-10 05:45:00" 58.29
+1086 "2025-02-10 06:00:00" 58.33
+1086 "2025-02-10 06:15:00" 58.36
+1086 "2025-02-10 06:30:00" 58.35
+1086 "2025-02-10 06:45:00" 58.45
+1086 "2025-02-10 07:00:00" 58.41
+1086 "2025-02-10 07:15:00" 58.23
+1086 "2025-02-10 07:30:00" 58.21
+1086 "2025-02-10 07:45:00" 58.32
+1086 "2025-02-10 08:00:00" 58.33
+1086 "2025-02-10 08:15:00" 58.59
+1086 "2025-02-10 08:30:00" 58.46
+1086 "2025-02-10 08:45:00" 58.43
+1086 "2025-02-10 09:00:00" 58.31
+1086 "2025-02-10 09:15:00" 58.4
+1086 "2025-02-10 09:30:00" 58.41
+1086 "2025-02-10 09:45:00" 58.29
+1086 "2025-02-10 10:00:00" 58.33
+1086 "2025-02-10 10:15:00" 58.36
+1086 "2025-02-10 10:30:00" 58.35
+1086 "2025-02-10 10:45:00" 58.45
+1086 "2025-02-10 11:00:00" 58.41
+1086 "2025-02-10 11:15:00" 58.23
+1086 "2025-02-10 11:30:00" 58.21
+1086 "2025-02-10 11:45:00" 58.32
+1086 "2025-02-10 12:00:00" 58.33
+1086 "2025-02-10 12:15:00" 58.59
+1086 "2025-02-10 12:30:00" 58.46
+1086 "2025-02-10 12:45:00" 58.43
+1086 "2025-02-10 13:00:00" 58.31
+1086 "2025-02-10 13:15:00" 58.4
+1086 "2025-02-10 13:30:00" 58.41
+1086 "2025-02-10 13:45:00" 58.29
+1086 "2025-02-10 14:00:00" 58.33
+1086 "2025-02-10 14:15:00" 58.36
+1086 "2025-02-10 14:30:00" 58.35
+1086 "2025-02-10 14:45:00" 58.45
+1086 "2025-02-10 15:00:00" 58.41
+1086 "2025-02-10 15:15:00" 58.23
+1086 "2025-02-10 15:30:00" 58.21
+1086 "2025-02-10 15:45:00" 58.32
+1086 "2025-02-10 16:00:00" 58.33
+1086 "2025-02-10 16:15:00" 58.59
+1086 "2025-02-10 16:30:00" 58.46
+1086 "2025-02-10 16:45:00" 58.43
+1086 "2025-02-10 17:00:00" 58.31
+1086 "2025-02-10 17:15:00" 58.4
+1086 "2025-02-10 17:30:00" 58.41
+1086 "2025-02-10 17:45:00" 58.29
+1086 "2025-02-10 18:00:00" 58.33
+1086 "2025-02-10 18:15:00" 58.36
+1086 "2025-02-10 18:30:00" 58.35
+1086 "2025-02-10 18:45:00" 58.45
+1086 "2025-02-10 19:00:00" 58.41
+1086 "2025-02-10 19:15:00" 58.23
+1086 "2025-02-10 19:30:00" 58.21
+1086 "2025-02-10 19:45:00" 58.32
+1086 "2025-02-10 20:00:00" 58.33
+1086 "2025-02-10 20:15:00" 58.59
+1086 "2025-02-10 20:30:00" 58.46
+1086 "2025-02-10 20:45:00" 58.43
+1086 "2025-02-10 21:00:00" 58.31
+1086 "2025-02-10 21:15:00" 58.4
+1086 "2025-02-10 21:30:00" 58.41
+1086 "2025-02-10 21:45:00" 58.29
+1086 "2025-02-10 22:00:00" 58.33
+1086 "2025-02-10 22:15:00" 58.36
+1086 "2025-02-10 22:30:00" 58.35
+1086 "2025-02-10 22:45:00" 58.45
+1086 "2025-02-10 23:00:00" 58.41
+1086 "2025-02-10 23:15:00" 58.23
+1086 "2025-02-10 23:30:00" 58.21
+1086 "2025-02-10 23:45:00" 58.32

+ 2 - 0
app/model/data/DQYC/qy/62/1002/2025-04-21/IN/1086/STATUS.TXT

@@ -0,0 +1,2 @@
+1
+2

+ 385 - 0
app/model/data/DQYC/qy/62/1002/2025-04-21/IN/2361/DQYC_OUT_PREDICT_POWER.txt

@@ -0,0 +1,385 @@
+PlantID Datetime Power
+2361 "2025-02-07 00:00:00" 9.78
+2361 "2025-02-07 00:15:00" 9.8
+2361 "2025-02-07 00:30:00" 9.77
+2361 "2025-02-07 00:45:00" 9.78
+2361 "2025-02-07 01:00:00" 9.76
+2361 "2025-02-07 01:15:00" 9.76
+2361 "2025-02-07 01:30:00" 9.75
+2361 "2025-02-07 01:45:00" 9.76
+2361 "2025-02-07 02:00:00" 9.75
+2361 "2025-02-07 02:15:00" 9.75
+2361 "2025-02-07 02:30:00" 9.74
+2361 "2025-02-07 02:45:00" 9.76
+2361 "2025-02-07 03:00:00" 9.78
+2361 "2025-02-07 03:15:00" 9.74
+2361 "2025-02-07 03:30:00" 9.75
+2361 "2025-02-07 03:45:00" 9.76
+2361 "2025-02-07 04:00:00" 9.78
+2361 "2025-02-07 04:15:00" 9.8
+2361 "2025-02-07 04:30:00" 9.77
+2361 "2025-02-07 04:45:00" 9.78
+2361 "2025-02-07 05:00:00" 9.76
+2361 "2025-02-07 05:15:00" 9.76
+2361 "2025-02-07 05:30:00" 9.75
+2361 "2025-02-07 05:45:00" 9.76
+2361 "2025-02-07 06:00:00" 9.75
+2361 "2025-02-07 06:15:00" 9.75
+2361 "2025-02-07 06:30:00" 9.74
+2361 "2025-02-07 06:45:00" 9.76
+2361 "2025-02-07 07:00:00" 9.78
+2361 "2025-02-07 07:15:00" 9.74
+2361 "2025-02-07 07:30:00" 9.75
+2361 "2025-02-07 07:45:00" 9.76
+2361 "2025-02-07 08:00:00" 9.78
+2361 "2025-02-07 08:15:00" 9.8
+2361 "2025-02-07 08:30:00" 9.77
+2361 "2025-02-07 08:45:00" 9.78
+2361 "2025-02-07 09:00:00" 9.76
+2361 "2025-02-07 09:15:00" 9.76
+2361 "2025-02-07 09:30:00" 9.75
+2361 "2025-02-07 09:45:00" 9.76
+2361 "2025-02-07 10:00:00" 9.75
+2361 "2025-02-07 10:15:00" 9.75
+2361 "2025-02-07 10:30:00" 9.74
+2361 "2025-02-07 10:45:00" 9.76
+2361 "2025-02-07 11:00:00" 9.78
+2361 "2025-02-07 11:15:00" 9.74
+2361 "2025-02-07 11:30:00" 9.75
+2361 "2025-02-07 11:45:00" 9.76
+2361 "2025-02-07 12:00:00" 9.78
+2361 "2025-02-07 12:15:00" 9.8
+2361 "2025-02-07 12:30:00" 9.77
+2361 "2025-02-07 12:45:00" 9.78
+2361 "2025-02-07 13:00:00" 9.76
+2361 "2025-02-07 13:15:00" 9.76
+2361 "2025-02-07 13:30:00" 9.75
+2361 "2025-02-07 13:45:00" 9.76
+2361 "2025-02-07 14:00:00" 9.75
+2361 "2025-02-07 14:15:00" 9.75
+2361 "2025-02-07 14:30:00" 9.74
+2361 "2025-02-07 14:45:00" 9.76
+2361 "2025-02-07 15:00:00" 9.78
+2361 "2025-02-07 15:15:00" 9.74
+2361 "2025-02-07 15:30:00" 9.75
+2361 "2025-02-07 15:45:00" 9.76
+2361 "2025-02-07 16:00:00" 9.78
+2361 "2025-02-07 16:15:00" 9.8
+2361 "2025-02-07 16:30:00" 9.77
+2361 "2025-02-07 16:45:00" 9.78
+2361 "2025-02-07 17:00:00" 9.76
+2361 "2025-02-07 17:15:00" 9.76
+2361 "2025-02-07 17:30:00" 9.75
+2361 "2025-02-07 17:45:00" 9.76
+2361 "2025-02-07 18:00:00" 9.75
+2361 "2025-02-07 18:15:00" 9.75
+2361 "2025-02-07 18:30:00" 9.74
+2361 "2025-02-07 18:45:00" 9.76
+2361 "2025-02-07 19:00:00" 9.78
+2361 "2025-02-07 19:15:00" 9.74
+2361 "2025-02-07 19:30:00" 9.75
+2361 "2025-02-07 19:45:00" 9.76
+2361 "2025-02-07 20:00:00" 9.78
+2361 "2025-02-07 20:15:00" 9.8
+2361 "2025-02-07 20:30:00" 9.77
+2361 "2025-02-07 20:45:00" 9.78
+2361 "2025-02-07 21:00:00" 9.76
+2361 "2025-02-07 21:15:00" 9.76
+2361 "2025-02-07 21:30:00" 9.75
+2361 "2025-02-07 21:45:00" 9.76
+2361 "2025-02-07 22:00:00" 9.75
+2361 "2025-02-07 22:15:00" 9.75
+2361 "2025-02-07 22:30:00" 9.74
+2361 "2025-02-07 22:45:00" 9.76
+2361 "2025-02-07 23:00:00" 9.78
+2361 "2025-02-07 23:15:00" 9.74
+2361 "2025-02-07 23:30:00" 9.75
+2361 "2025-02-07 23:45:00" 9.76
+2361 "2025-02-08 00:00:00" 9.78
+2361 "2025-02-08 00:15:00" 9.8
+2361 "2025-02-08 00:30:00" 9.77
+2361 "2025-02-08 00:45:00" 9.78
+2361 "2025-02-08 01:00:00" 9.76
+2361 "2025-02-08 01:15:00" 9.76
+2361 "2025-02-08 01:30:00" 9.75
+2361 "2025-02-08 01:45:00" 9.76
+2361 "2025-02-08 02:00:00" 9.75
+2361 "2025-02-08 02:15:00" 9.75
+2361 "2025-02-08 02:30:00" 9.74
+2361 "2025-02-08 02:45:00" 9.76
+2361 "2025-02-08 03:00:00" 9.78
+2361 "2025-02-08 03:15:00" 9.74
+2361 "2025-02-08 03:30:00" 9.75
+2361 "2025-02-08 03:45:00" 9.76
+2361 "2025-02-08 04:00:00" 9.78
+2361 "2025-02-08 04:15:00" 9.8
+2361 "2025-02-08 04:30:00" 9.77
+2361 "2025-02-08 04:45:00" 9.78
+2361 "2025-02-08 05:00:00" 9.76
+2361 "2025-02-08 05:15:00" 9.76
+2361 "2025-02-08 05:30:00" 9.75
+2361 "2025-02-08 05:45:00" 9.76
+2361 "2025-02-08 06:00:00" 9.75
+2361 "2025-02-08 06:15:00" 9.75
+2361 "2025-02-08 06:30:00" 9.74
+2361 "2025-02-08 06:45:00" 9.76
+2361 "2025-02-08 07:00:00" 9.78
+2361 "2025-02-08 07:15:00" 9.74
+2361 "2025-02-08 07:30:00" 9.75
+2361 "2025-02-08 07:45:00" 9.76
+2361 "2025-02-08 08:00:00" 9.78
+2361 "2025-02-08 08:15:00" 9.8
+2361 "2025-02-08 08:30:00" 9.77
+2361 "2025-02-08 08:45:00" 9.78
+2361 "2025-02-08 09:00:00" 9.76
+2361 "2025-02-08 09:15:00" 9.76
+2361 "2025-02-08 09:30:00" 9.75
+2361 "2025-02-08 09:45:00" 9.76
+2361 "2025-02-08 10:00:00" 9.75
+2361 "2025-02-08 10:15:00" 9.75
+2361 "2025-02-08 10:30:00" 9.74
+2361 "2025-02-08 10:45:00" 9.76
+2361 "2025-02-08 11:00:00" 9.78
+2361 "2025-02-08 11:15:00" 9.74
+2361 "2025-02-08 11:30:00" 9.75
+2361 "2025-02-08 11:45:00" 9.76
+2361 "2025-02-08 12:00:00" 9.78
+2361 "2025-02-08 12:15:00" 9.8
+2361 "2025-02-08 12:30:00" 9.77
+2361 "2025-02-08 12:45:00" 9.78
+2361 "2025-02-08 13:00:00" 9.76
+2361 "2025-02-08 13:15:00" 9.76
+2361 "2025-02-08 13:30:00" 9.75
+2361 "2025-02-08 13:45:00" 9.76
+2361 "2025-02-08 14:00:00" 9.75
+2361 "2025-02-08 14:15:00" 9.75
+2361 "2025-02-08 14:30:00" 9.74
+2361 "2025-02-08 14:45:00" 9.76
+2361 "2025-02-08 15:00:00" 9.78
+2361 "2025-02-08 15:15:00" 9.74
+2361 "2025-02-08 15:30:00" 9.75
+2361 "2025-02-08 15:45:00" 9.76
+2361 "2025-02-08 16:00:00" 9.78
+2361 "2025-02-08 16:15:00" 9.8
+2361 "2025-02-08 16:30:00" 9.77
+2361 "2025-02-08 16:45:00" 9.78
+2361 "2025-02-08 17:00:00" 9.76
+2361 "2025-02-08 17:15:00" 9.76
+2361 "2025-02-08 17:30:00" 9.75
+2361 "2025-02-08 17:45:00" 9.76
+2361 "2025-02-08 18:00:00" 9.75
+2361 "2025-02-08 18:15:00" 9.75
+2361 "2025-02-08 18:30:00" 9.74
+2361 "2025-02-08 18:45:00" 9.76
+2361 "2025-02-08 19:00:00" 9.78
+2361 "2025-02-08 19:15:00" 9.74
+2361 "2025-02-08 19:30:00" 9.75
+2361 "2025-02-08 19:45:00" 9.76
+2361 "2025-02-08 20:00:00" 9.78
+2361 "2025-02-08 20:15:00" 9.8
+2361 "2025-02-08 20:30:00" 9.77
+2361 "2025-02-08 20:45:00" 9.78
+2361 "2025-02-08 21:00:00" 9.76
+2361 "2025-02-08 21:15:00" 9.76
+2361 "2025-02-08 21:30:00" 9.75
+2361 "2025-02-08 21:45:00" 9.76
+2361 "2025-02-08 22:00:00" 9.75
+2361 "2025-02-08 22:15:00" 9.75
+2361 "2025-02-08 22:30:00" 9.74
+2361 "2025-02-08 22:45:00" 9.76
+2361 "2025-02-08 23:00:00" 9.78
+2361 "2025-02-08 23:15:00" 9.74
+2361 "2025-02-08 23:30:00" 9.75
+2361 "2025-02-08 23:45:00" 9.76
+2361 "2025-02-09 00:00:00" 9.78
+2361 "2025-02-09 00:15:00" 9.8
+2361 "2025-02-09 00:30:00" 9.77
+2361 "2025-02-09 00:45:00" 9.78
+2361 "2025-02-09 01:00:00" 9.76
+2361 "2025-02-09 01:15:00" 9.76
+2361 "2025-02-09 01:30:00" 9.75
+2361 "2025-02-09 01:45:00" 9.76
+2361 "2025-02-09 02:00:00" 9.75
+2361 "2025-02-09 02:15:00" 9.75
+2361 "2025-02-09 02:30:00" 9.74
+2361 "2025-02-09 02:45:00" 9.76
+2361 "2025-02-09 03:00:00" 9.78
+2361 "2025-02-09 03:15:00" 9.74
+2361 "2025-02-09 03:30:00" 9.75
+2361 "2025-02-09 03:45:00" 9.76
+2361 "2025-02-09 04:00:00" 9.78
+2361 "2025-02-09 04:15:00" 9.8
+2361 "2025-02-09 04:30:00" 9.77
+2361 "2025-02-09 04:45:00" 9.78
+2361 "2025-02-09 05:00:00" 9.76
+2361 "2025-02-09 05:15:00" 9.76
+2361 "2025-02-09 05:30:00" 9.75
+2361 "2025-02-09 05:45:00" 9.76
+2361 "2025-02-09 06:00:00" 9.75
+2361 "2025-02-09 06:15:00" 9.75
+2361 "2025-02-09 06:30:00" 9.74
+2361 "2025-02-09 06:45:00" 9.76
+2361 "2025-02-09 07:00:00" 9.78
+2361 "2025-02-09 07:15:00" 9.74
+2361 "2025-02-09 07:30:00" 9.75
+2361 "2025-02-09 07:45:00" 9.76
+2361 "2025-02-09 08:00:00" 9.78
+2361 "2025-02-09 08:15:00" 9.8
+2361 "2025-02-09 08:30:00" 9.77
+2361 "2025-02-09 08:45:00" 9.78
+2361 "2025-02-09 09:00:00" 9.76
+2361 "2025-02-09 09:15:00" 9.76
+2361 "2025-02-09 09:30:00" 9.75
+2361 "2025-02-09 09:45:00" 9.76
+2361 "2025-02-09 10:00:00" 9.75
+2361 "2025-02-09 10:15:00" 9.75
+2361 "2025-02-09 10:30:00" 9.74
+2361 "2025-02-09 10:45:00" 9.76
+2361 "2025-02-09 11:00:00" 9.78
+2361 "2025-02-09 11:15:00" 9.74
+2361 "2025-02-09 11:30:00" 9.75
+2361 "2025-02-09 11:45:00" 9.76
+2361 "2025-02-09 12:00:00" 9.78
+2361 "2025-02-09 12:15:00" 9.8
+2361 "2025-02-09 12:30:00" 9.77
+2361 "2025-02-09 12:45:00" 9.78
+2361 "2025-02-09 13:00:00" 9.76
+2361 "2025-02-09 13:15:00" 9.76
+2361 "2025-02-09 13:30:00" 9.75
+2361 "2025-02-09 13:45:00" 9.76
+2361 "2025-02-09 14:00:00" 9.75
+2361 "2025-02-09 14:15:00" 9.75
+2361 "2025-02-09 14:30:00" 9.74
+2361 "2025-02-09 14:45:00" 9.76
+2361 "2025-02-09 15:00:00" 9.78
+2361 "2025-02-09 15:15:00" 9.74
+2361 "2025-02-09 15:30:00" 9.75
+2361 "2025-02-09 15:45:00" 9.76
+2361 "2025-02-09 16:00:00" 9.78
+2361 "2025-02-09 16:15:00" 9.8
+2361 "2025-02-09 16:30:00" 9.77
+2361 "2025-02-09 16:45:00" 9.78
+2361 "2025-02-09 17:00:00" 9.76
+2361 "2025-02-09 17:15:00" 9.76
+2361 "2025-02-09 17:30:00" 9.75
+2361 "2025-02-09 17:45:00" 9.76
+2361 "2025-02-09 18:00:00" 9.75
+2361 "2025-02-09 18:15:00" 9.75
+2361 "2025-02-09 18:30:00" 9.74
+2361 "2025-02-09 18:45:00" 9.76
+2361 "2025-02-09 19:00:00" 9.78
+2361 "2025-02-09 19:15:00" 9.74
+2361 "2025-02-09 19:30:00" 9.75
+2361 "2025-02-09 19:45:00" 9.76
+2361 "2025-02-09 20:00:00" 9.78
+2361 "2025-02-09 20:15:00" 9.8
+2361 "2025-02-09 20:30:00" 9.77
+2361 "2025-02-09 20:45:00" 9.78
+2361 "2025-02-09 21:00:00" 9.76
+2361 "2025-02-09 21:15:00" 9.76
+2361 "2025-02-09 21:30:00" 9.75
+2361 "2025-02-09 21:45:00" 9.76
+2361 "2025-02-09 22:00:00" 9.75
+2361 "2025-02-09 22:15:00" 9.75
+2361 "2025-02-09 22:30:00" 9.74
+2361 "2025-02-09 22:45:00" 9.76
+2361 "2025-02-09 23:00:00" 9.78
+2361 "2025-02-09 23:15:00" 9.74
+2361 "2025-02-09 23:30:00" 9.75
+2361 "2025-02-09 23:45:00" 9.76
+2361 "2025-02-10 00:00:00" 9.78
+2361 "2025-02-10 00:15:00" 9.8
+2361 "2025-02-10 00:30:00" 9.77
+2361 "2025-02-10 00:45:00" 9.78
+2361 "2025-02-10 01:00:00" 9.76
+2361 "2025-02-10 01:15:00" 9.76
+2361 "2025-02-10 01:30:00" 9.75
+2361 "2025-02-10 01:45:00" 9.76
+2361 "2025-02-10 02:00:00" 9.75
+2361 "2025-02-10 02:15:00" 9.75
+2361 "2025-02-10 02:30:00" 9.74
+2361 "2025-02-10 02:45:00" 9.76
+2361 "2025-02-10 03:00:00" 9.78
+2361 "2025-02-10 03:15:00" 9.74
+2361 "2025-02-10 03:30:00" 9.75
+2361 "2025-02-10 03:45:00" 9.76
+2361 "2025-02-10 04:00:00" 9.78
+2361 "2025-02-10 04:15:00" 9.8
+2361 "2025-02-10 04:30:00" 9.77
+2361 "2025-02-10 04:45:00" 9.78
+2361 "2025-02-10 05:00:00" 9.76
+2361 "2025-02-10 05:15:00" 9.76
+2361 "2025-02-10 05:30:00" 9.75
+2361 "2025-02-10 05:45:00" 9.76
+2361 "2025-02-10 06:00:00" 9.75
+2361 "2025-02-10 06:15:00" 9.75
+2361 "2025-02-10 06:30:00" 9.74
+2361 "2025-02-10 06:45:00" 9.76
+2361 "2025-02-10 07:00:00" 9.78
+2361 "2025-02-10 07:15:00" 9.74
+2361 "2025-02-10 07:30:00" 9.75
+2361 "2025-02-10 07:45:00" 9.76
+2361 "2025-02-10 08:00:00" 9.78
+2361 "2025-02-10 08:15:00" 9.8
+2361 "2025-02-10 08:30:00" 9.77
+2361 "2025-02-10 08:45:00" 9.78
+2361 "2025-02-10 09:00:00" 9.76
+2361 "2025-02-10 09:15:00" 9.76
+2361 "2025-02-10 09:30:00" 9.75
+2361 "2025-02-10 09:45:00" 9.76
+2361 "2025-02-10 10:00:00" 9.75
+2361 "2025-02-10 10:15:00" 9.75
+2361 "2025-02-10 10:30:00" 9.74
+2361 "2025-02-10 10:45:00" 9.76
+2361 "2025-02-10 11:00:00" 9.78
+2361 "2025-02-10 11:15:00" 9.74
+2361 "2025-02-10 11:30:00" 9.75
+2361 "2025-02-10 11:45:00" 9.76
+2361 "2025-02-10 12:00:00" 9.78
+2361 "2025-02-10 12:15:00" 9.8
+2361 "2025-02-10 12:30:00" 9.77
+2361 "2025-02-10 12:45:00" 9.78
+2361 "2025-02-10 13:00:00" 9.76
+2361 "2025-02-10 13:15:00" 9.76
+2361 "2025-02-10 13:30:00" 9.75
+2361 "2025-02-10 13:45:00" 9.76
+2361 "2025-02-10 14:00:00" 9.75
+2361 "2025-02-10 14:15:00" 9.75
+2361 "2025-02-10 14:30:00" 9.74
+2361 "2025-02-10 14:45:00" 9.76
+2361 "2025-02-10 15:00:00" 9.78
+2361 "2025-02-10 15:15:00" 9.74
+2361 "2025-02-10 15:30:00" 9.75
+2361 "2025-02-10 15:45:00" 9.76
+2361 "2025-02-10 16:00:00" 9.78
+2361 "2025-02-10 16:15:00" 9.8
+2361 "2025-02-10 16:30:00" 9.77
+2361 "2025-02-10 16:45:00" 9.78
+2361 "2025-02-10 17:00:00" 9.76
+2361 "2025-02-10 17:15:00" 9.76
+2361 "2025-02-10 17:30:00" 9.75
+2361 "2025-02-10 17:45:00" 9.76
+2361 "2025-02-10 18:00:00" 9.75
+2361 "2025-02-10 18:15:00" 9.75
+2361 "2025-02-10 18:30:00" 9.74
+2361 "2025-02-10 18:45:00" 9.76
+2361 "2025-02-10 19:00:00" 9.78
+2361 "2025-02-10 19:15:00" 9.74
+2361 "2025-02-10 19:30:00" 9.75
+2361 "2025-02-10 19:45:00" 9.76
+2361 "2025-02-10 20:00:00" 9.78
+2361 "2025-02-10 20:15:00" 9.8
+2361 "2025-02-10 20:30:00" 9.77
+2361 "2025-02-10 20:45:00" 9.78
+2361 "2025-02-10 21:00:00" 9.76
+2361 "2025-02-10 21:15:00" 9.76
+2361 "2025-02-10 21:30:00" 9.75
+2361 "2025-02-10 21:45:00" 9.76
+2361 "2025-02-10 22:00:00" 9.75
+2361 "2025-02-10 22:15:00" 9.75
+2361 "2025-02-10 22:30:00" 9.74
+2361 "2025-02-10 22:45:00" 9.76
+2361 "2025-02-10 23:00:00" 9.78
+2361 "2025-02-10 23:15:00" 9.74
+2361 "2025-02-10 23:30:00" 9.75
+2361 "2025-02-10 23:45:00" 9.76

+ 2 - 0
app/model/data/DQYC/qy/62/1002/2025-04-21/IN/2361/STATUS.TXT

@@ -0,0 +1,2 @@
+1
+2

+ 385 - 0
app/model/data/DQYC/qy/62/1002/2025-04-21/OUT/DQYC_OUT_PREDICT_POWER.txt

@@ -0,0 +1,385 @@
+PlantID Datetime Power
+1002 "2025-02-07 00:00:00" 1990.99
+1002 "2025-02-07 00:15:00" 1742.13
+1002 "2025-02-07 00:30:00" 2202.22
+1002 "2025-02-07 00:45:00" 2448.91
+1002 "2025-02-07 01:00:00" 2203.5
+1002 "2025-02-07 01:15:00" 2799.33
+1002 "2025-02-07 01:30:00" 2709.28
+1002 "2025-02-07 01:45:00" 2033.7
+1002 "2025-02-07 02:00:00" 2032.93
+1002 "2025-02-07 02:15:00" 2444.56
+1002 "2025-02-07 02:30:00" 2413.56
+1002 "2025-02-07 02:45:00" 2397.11
+1002 "2025-02-07 03:00:00" 2393.97
+1002 "2025-02-07 03:15:00" 2206.41
+1002 "2025-02-07 03:30:00" 2306.74
+1002 "2025-02-07 03:45:00" 1407.56
+1002 "2025-02-07 04:00:00" 1990.99
+1002 "2025-02-07 04:15:00" 1742.13
+1002 "2025-02-07 04:30:00" 2202.22
+1002 "2025-02-07 04:45:00" 2448.91
+1002 "2025-02-07 05:00:00" 2203.5
+1002 "2025-02-07 05:15:00" 2799.33
+1002 "2025-02-07 05:30:00" 2709.28
+1002 "2025-02-07 05:45:00" 2033.7
+1002 "2025-02-07 06:00:00" 2032.93
+1002 "2025-02-07 06:15:00" 2444.56
+1002 "2025-02-07 06:30:00" 2413.56
+1002 "2025-02-07 06:45:00" 2397.11
+1002 "2025-02-07 07:00:00" 2393.97
+1002 "2025-02-07 07:15:00" 2206.41
+1002 "2025-02-07 07:30:00" 2306.74
+1002 "2025-02-07 07:45:00" 1407.56
+1002 "2025-02-07 08:00:00" 1990.99
+1002 "2025-02-07 08:15:00" 1742.13
+1002 "2025-02-07 08:30:00" 2202.22
+1002 "2025-02-07 08:45:00" 2448.91
+1002 "2025-02-07 09:00:00" 2203.5
+1002 "2025-02-07 09:15:00" 2799.33
+1002 "2025-02-07 09:30:00" 2709.28
+1002 "2025-02-07 09:45:00" 2033.7
+1002 "2025-02-07 10:00:00" 2032.93
+1002 "2025-02-07 10:15:00" 2444.56
+1002 "2025-02-07 10:30:00" 2413.56
+1002 "2025-02-07 10:45:00" 2397.11
+1002 "2025-02-07 11:00:00" 2393.97
+1002 "2025-02-07 11:15:00" 2206.41
+1002 "2025-02-07 11:30:00" 2306.74
+1002 "2025-02-07 11:45:00" 1407.56
+1002 "2025-02-07 12:00:00" 1990.99
+1002 "2025-02-07 12:15:00" 1742.13
+1002 "2025-02-07 12:30:00" 2202.22
+1002 "2025-02-07 12:45:00" 2448.91
+1002 "2025-02-07 13:00:00" 2203.5
+1002 "2025-02-07 13:15:00" 2799.33
+1002 "2025-02-07 13:30:00" 2709.28
+1002 "2025-02-07 13:45:00" 2033.7
+1002 "2025-02-07 14:00:00" 2032.93
+1002 "2025-02-07 14:15:00" 2444.56
+1002 "2025-02-07 14:30:00" 2413.56
+1002 "2025-02-07 14:45:00" 2397.11
+1002 "2025-02-07 15:00:00" 2393.97
+1002 "2025-02-07 15:15:00" 2206.41
+1002 "2025-02-07 15:30:00" 2306.74
+1002 "2025-02-07 15:45:00" 1407.56
+1002 "2025-02-07 16:00:00" 1990.99
+1002 "2025-02-07 16:15:00" 1742.13
+1002 "2025-02-07 16:30:00" 2202.22
+1002 "2025-02-07 16:45:00" 2448.91
+1002 "2025-02-07 17:00:00" 2203.5
+1002 "2025-02-07 17:15:00" 2799.33
+1002 "2025-02-07 17:30:00" 2709.28
+1002 "2025-02-07 17:45:00" 2033.7
+1002 "2025-02-07 18:00:00" 2032.93
+1002 "2025-02-07 18:15:00" 2444.56
+1002 "2025-02-07 18:30:00" 2413.56
+1002 "2025-02-07 18:45:00" 2397.11
+1002 "2025-02-07 19:00:00" 2393.97
+1002 "2025-02-07 19:15:00" 2206.41
+1002 "2025-02-07 19:30:00" 2306.74
+1002 "2025-02-07 19:45:00" 1407.56
+1002 "2025-02-07 20:00:00" 1990.99
+1002 "2025-02-07 20:15:00" 1742.13
+1002 "2025-02-07 20:30:00" 2202.22
+1002 "2025-02-07 20:45:00" 2448.91
+1002 "2025-02-07 21:00:00" 2203.5
+1002 "2025-02-07 21:15:00" 2799.33
+1002 "2025-02-07 21:30:00" 2709.28
+1002 "2025-02-07 21:45:00" 2033.7
+1002 "2025-02-07 22:00:00" 2032.93
+1002 "2025-02-07 22:15:00" 2444.56
+1002 "2025-02-07 22:30:00" 2413.56
+1002 "2025-02-07 22:45:00" 2397.11
+1002 "2025-02-07 23:00:00" 2393.97
+1002 "2025-02-07 23:15:00" 2206.41
+1002 "2025-02-07 23:30:00" 2306.74
+1002 "2025-02-07 23:45:00" 1407.56
+1002 "2025-02-08 00:00:00" 1990.99
+1002 "2025-02-08 00:15:00" 1742.13
+1002 "2025-02-08 00:30:00" 2202.22
+1002 "2025-02-08 00:45:00" 2448.91
+1002 "2025-02-08 01:00:00" 2203.5
+1002 "2025-02-08 01:15:00" 2799.33
+1002 "2025-02-08 01:30:00" 2709.28
+1002 "2025-02-08 01:45:00" 2033.7
+1002 "2025-02-08 02:00:00" 2032.93
+1002 "2025-02-08 02:15:00" 2444.56
+1002 "2025-02-08 02:30:00" 2413.56
+1002 "2025-02-08 02:45:00" 2397.11
+1002 "2025-02-08 03:00:00" 2393.97
+1002 "2025-02-08 03:15:00" 2206.41
+1002 "2025-02-08 03:30:00" 2306.74
+1002 "2025-02-08 03:45:00" 1407.56
+1002 "2025-02-08 04:00:00" 1990.99
+1002 "2025-02-08 04:15:00" 1742.13
+1002 "2025-02-08 04:30:00" 2202.22
+1002 "2025-02-08 04:45:00" 2448.91
+1002 "2025-02-08 05:00:00" 2203.5
+1002 "2025-02-08 05:15:00" 2799.33
+1002 "2025-02-08 05:30:00" 2709.28
+1002 "2025-02-08 05:45:00" 2033.7
+1002 "2025-02-08 06:00:00" 2032.93
+1002 "2025-02-08 06:15:00" 2444.56
+1002 "2025-02-08 06:30:00" 2413.56
+1002 "2025-02-08 06:45:00" 2397.11
+1002 "2025-02-08 07:00:00" 2393.97
+1002 "2025-02-08 07:15:00" 2206.41
+1002 "2025-02-08 07:30:00" 2306.74
+1002 "2025-02-08 07:45:00" 1407.56
+1002 "2025-02-08 08:00:00" 1990.99
+1002 "2025-02-08 08:15:00" 1742.13
+1002 "2025-02-08 08:30:00" 2202.22
+1002 "2025-02-08 08:45:00" 2448.91
+1002 "2025-02-08 09:00:00" 2203.5
+1002 "2025-02-08 09:15:00" 2799.33
+1002 "2025-02-08 09:30:00" 2709.28
+1002 "2025-02-08 09:45:00" 2033.7
+1002 "2025-02-08 10:00:00" 2032.93
+1002 "2025-02-08 10:15:00" 2444.56
+1002 "2025-02-08 10:30:00" 2413.56
+1002 "2025-02-08 10:45:00" 2397.11
+1002 "2025-02-08 11:00:00" 2393.97
+1002 "2025-02-08 11:15:00" 2206.41
+1002 "2025-02-08 11:30:00" 2306.74
+1002 "2025-02-08 11:45:00" 1407.56
+1002 "2025-02-08 12:00:00" 1990.99
+1002 "2025-02-08 12:15:00" 1742.13
+1002 "2025-02-08 12:30:00" 2202.22
+1002 "2025-02-08 12:45:00" 2448.91
+1002 "2025-02-08 13:00:00" 2203.5
+1002 "2025-02-08 13:15:00" 2799.33
+1002 "2025-02-08 13:30:00" 2709.28
+1002 "2025-02-08 13:45:00" 2033.7
+1002 "2025-02-08 14:00:00" 2032.93
+1002 "2025-02-08 14:15:00" 2444.56
+1002 "2025-02-08 14:30:00" 2413.56
+1002 "2025-02-08 14:45:00" 2397.11
+1002 "2025-02-08 15:00:00" 2393.97
+1002 "2025-02-08 15:15:00" 2206.41
+1002 "2025-02-08 15:30:00" 2306.74
+1002 "2025-02-08 15:45:00" 1407.56
+1002 "2025-02-08 16:00:00" 1990.99
+1002 "2025-02-08 16:15:00" 1742.13
+1002 "2025-02-08 16:30:00" 2202.22
+1002 "2025-02-08 16:45:00" 2448.91
+1002 "2025-02-08 17:00:00" 2203.5
+1002 "2025-02-08 17:15:00" 2799.33
+1002 "2025-02-08 17:30:00" 2709.28
+1002 "2025-02-08 17:45:00" 2033.7
+1002 "2025-02-08 18:00:00" 2032.93
+1002 "2025-02-08 18:15:00" 2444.56
+1002 "2025-02-08 18:30:00" 2413.56
+1002 "2025-02-08 18:45:00" 2397.11
+1002 "2025-02-08 19:00:00" 2393.97
+1002 "2025-02-08 19:15:00" 2206.41
+1002 "2025-02-08 19:30:00" 2306.74
+1002 "2025-02-08 19:45:00" 1407.56
+1002 "2025-02-08 20:00:00" 1990.99
+1002 "2025-02-08 20:15:00" 1742.13
+1002 "2025-02-08 20:30:00" 2202.22
+1002 "2025-02-08 20:45:00" 2448.91
+1002 "2025-02-08 21:00:00" 2203.5
+1002 "2025-02-08 21:15:00" 2799.33
+1002 "2025-02-08 21:30:00" 2709.28
+1002 "2025-02-08 21:45:00" 2033.7
+1002 "2025-02-08 22:00:00" 2032.93
+1002 "2025-02-08 22:15:00" 2444.56
+1002 "2025-02-08 22:30:00" 2413.56
+1002 "2025-02-08 22:45:00" 2397.11
+1002 "2025-02-08 23:00:00" 2393.97
+1002 "2025-02-08 23:15:00" 2206.41
+1002 "2025-02-08 23:30:00" 2306.74
+1002 "2025-02-08 23:45:00" 1407.56
+1002 "2025-02-09 00:00:00" 1990.99
+1002 "2025-02-09 00:15:00" 1742.13
+1002 "2025-02-09 00:30:00" 2202.22
+1002 "2025-02-09 00:45:00" 2448.91
+1002 "2025-02-09 01:00:00" 2203.5
+1002 "2025-02-09 01:15:00" 2799.33
+1002 "2025-02-09 01:30:00" 2709.28
+1002 "2025-02-09 01:45:00" 2033.7
+1002 "2025-02-09 02:00:00" 2032.93
+1002 "2025-02-09 02:15:00" 2444.56
+1002 "2025-02-09 02:30:00" 2413.56
+1002 "2025-02-09 02:45:00" 2397.11
+1002 "2025-02-09 03:00:00" 2393.97
+1002 "2025-02-09 03:15:00" 2206.41
+1002 "2025-02-09 03:30:00" 2306.74
+1002 "2025-02-09 03:45:00" 1407.56
+1002 "2025-02-09 04:00:00" 1990.99
+1002 "2025-02-09 04:15:00" 1742.13
+1002 "2025-02-09 04:30:00" 2202.22
+1002 "2025-02-09 04:45:00" 2448.91
+1002 "2025-02-09 05:00:00" 2203.5
+1002 "2025-02-09 05:15:00" 2799.33
+1002 "2025-02-09 05:30:00" 2709.28
+1002 "2025-02-09 05:45:00" 2033.7
+1002 "2025-02-09 06:00:00" 2032.93
+1002 "2025-02-09 06:15:00" 2444.56
+1002 "2025-02-09 06:30:00" 2413.56
+1002 "2025-02-09 06:45:00" 2397.11
+1002 "2025-02-09 07:00:00" 2393.97
+1002 "2025-02-09 07:15:00" 2206.41
+1002 "2025-02-09 07:30:00" 2306.74
+1002 "2025-02-09 07:45:00" 1407.56
+1002 "2025-02-09 08:00:00" 1990.99
+1002 "2025-02-09 08:15:00" 1742.13
+1002 "2025-02-09 08:30:00" 2202.22
+1002 "2025-02-09 08:45:00" 2448.91
+1002 "2025-02-09 09:00:00" 2203.5
+1002 "2025-02-09 09:15:00" 2799.33
+1002 "2025-02-09 09:30:00" 2709.28
+1002 "2025-02-09 09:45:00" 2033.7
+1002 "2025-02-09 10:00:00" 2032.93
+1002 "2025-02-09 10:15:00" 2444.56
+1002 "2025-02-09 10:30:00" 2413.56
+1002 "2025-02-09 10:45:00" 2397.11
+1002 "2025-02-09 11:00:00" 2393.97
+1002 "2025-02-09 11:15:00" 2206.41
+1002 "2025-02-09 11:30:00" 2306.74
+1002 "2025-02-09 11:45:00" 1407.56
+1002 "2025-02-09 12:00:00" 1990.99
+1002 "2025-02-09 12:15:00" 1742.13
+1002 "2025-02-09 12:30:00" 2202.22
+1002 "2025-02-09 12:45:00" 2448.91
+1002 "2025-02-09 13:00:00" 2203.5
+1002 "2025-02-09 13:15:00" 2799.33
+1002 "2025-02-09 13:30:00" 2709.28
+1002 "2025-02-09 13:45:00" 2033.7
+1002 "2025-02-09 14:00:00" 2032.93
+1002 "2025-02-09 14:15:00" 2444.56
+1002 "2025-02-09 14:30:00" 2413.56
+1002 "2025-02-09 14:45:00" 2397.11
+1002 "2025-02-09 15:00:00" 2393.97
+1002 "2025-02-09 15:15:00" 2206.41
+1002 "2025-02-09 15:30:00" 2306.74
+1002 "2025-02-09 15:45:00" 1407.56
+1002 "2025-02-09 16:00:00" 1990.99
+1002 "2025-02-09 16:15:00" 1742.13
+1002 "2025-02-09 16:30:00" 2202.22
+1002 "2025-02-09 16:45:00" 2448.91
+1002 "2025-02-09 17:00:00" 2203.5
+1002 "2025-02-09 17:15:00" 2799.33
+1002 "2025-02-09 17:30:00" 2709.28
+1002 "2025-02-09 17:45:00" 2033.7
+1002 "2025-02-09 18:00:00" 2032.93
+1002 "2025-02-09 18:15:00" 2444.56
+1002 "2025-02-09 18:30:00" 2413.56
+1002 "2025-02-09 18:45:00" 2397.11
+1002 "2025-02-09 19:00:00" 2393.97
+1002 "2025-02-09 19:15:00" 2206.41
+1002 "2025-02-09 19:30:00" 2306.74
+1002 "2025-02-09 19:45:00" 1407.56
+1002 "2025-02-09 20:00:00" 1990.99
+1002 "2025-02-09 20:15:00" 1742.13
+1002 "2025-02-09 20:30:00" 2202.22
+1002 "2025-02-09 20:45:00" 2448.91
+1002 "2025-02-09 21:00:00" 2203.5
+1002 "2025-02-09 21:15:00" 2799.33
+1002 "2025-02-09 21:30:00" 2709.28
+1002 "2025-02-09 21:45:00" 2033.7
+1002 "2025-02-09 22:00:00" 2032.93
+1002 "2025-02-09 22:15:00" 2444.56
+1002 "2025-02-09 22:30:00" 2413.56
+1002 "2025-02-09 22:45:00" 2397.11
+1002 "2025-02-09 23:00:00" 2393.97
+1002 "2025-02-09 23:15:00" 2206.41
+1002 "2025-02-09 23:30:00" 2306.74
+1002 "2025-02-09 23:45:00" 1407.56
+1002 "2025-02-10 00:00:00" 1990.99
+1002 "2025-02-10 00:15:00" 1742.13
+1002 "2025-02-10 00:30:00" 2202.22
+1002 "2025-02-10 00:45:00" 2448.91
+1002 "2025-02-10 01:00:00" 2203.5
+1002 "2025-02-10 01:15:00" 2799.33
+1002 "2025-02-10 01:30:00" 2709.28
+1002 "2025-02-10 01:45:00" 2033.7
+1002 "2025-02-10 02:00:00" 2032.93
+1002 "2025-02-10 02:15:00" 2444.56
+1002 "2025-02-10 02:30:00" 2413.56
+1002 "2025-02-10 02:45:00" 2397.11
+1002 "2025-02-10 03:00:00" 2393.97
+1002 "2025-02-10 03:15:00" 2206.41
+1002 "2025-02-10 03:30:00" 2306.74
+1002 "2025-02-10 03:45:00" 1407.56
+1002 "2025-02-10 04:00:00" 1990.99
+1002 "2025-02-10 04:15:00" 1742.13
+1002 "2025-02-10 04:30:00" 2202.22
+1002 "2025-02-10 04:45:00" 2448.91
+1002 "2025-02-10 05:00:00" 2203.5
+1002 "2025-02-10 05:15:00" 2799.33
+1002 "2025-02-10 05:30:00" 2709.28
+1002 "2025-02-10 05:45:00" 2033.7
+1002 "2025-02-10 06:00:00" 2032.93
+1002 "2025-02-10 06:15:00" 2444.56
+1002 "2025-02-10 06:30:00" 2413.56
+1002 "2025-02-10 06:45:00" 2397.11
+1002 "2025-02-10 07:00:00" 2393.97
+1002 "2025-02-10 07:15:00" 2206.41
+1002 "2025-02-10 07:30:00" 2306.74
+1002 "2025-02-10 07:45:00" 1407.56
+1002 "2025-02-10 08:00:00" 1990.99
+1002 "2025-02-10 08:15:00" 1742.13
+1002 "2025-02-10 08:30:00" 2202.22
+1002 "2025-02-10 08:45:00" 2448.91
+1002 "2025-02-10 09:00:00" 2203.5
+1002 "2025-02-10 09:15:00" 2799.33
+1002 "2025-02-10 09:30:00" 2709.28
+1002 "2025-02-10 09:45:00" 2033.7
+1002 "2025-02-10 10:00:00" 2032.93
+1002 "2025-02-10 10:15:00" 2444.56
+1002 "2025-02-10 10:30:00" 2413.56
+1002 "2025-02-10 10:45:00" 2397.11
+1002 "2025-02-10 11:00:00" 2393.97
+1002 "2025-02-10 11:15:00" 2206.41
+1002 "2025-02-10 11:30:00" 2306.74
+1002 "2025-02-10 11:45:00" 1407.56
+1002 "2025-02-10 12:00:00" 1990.99
+1002 "2025-02-10 12:15:00" 1742.13
+1002 "2025-02-10 12:30:00" 2202.22
+1002 "2025-02-10 12:45:00" 2448.91
+1002 "2025-02-10 13:00:00" 2203.5
+1002 "2025-02-10 13:15:00" 2799.33
+1002 "2025-02-10 13:30:00" 2709.28
+1002 "2025-02-10 13:45:00" 2033.7
+1002 "2025-02-10 14:00:00" 2032.93
+1002 "2025-02-10 14:15:00" 2444.56
+1002 "2025-02-10 14:30:00" 2413.56
+1002 "2025-02-10 14:45:00" 2397.11
+1002 "2025-02-10 15:00:00" 2393.97
+1002 "2025-02-10 15:15:00" 2206.41
+1002 "2025-02-10 15:30:00" 2306.74
+1002 "2025-02-10 15:45:00" 1407.56
+1002 "2025-02-10 16:00:00" 1990.99
+1002 "2025-02-10 16:15:00" 1742.13
+1002 "2025-02-10 16:30:00" 2202.22
+1002 "2025-02-10 16:45:00" 2448.91
+1002 "2025-02-10 17:00:00" 2203.5
+1002 "2025-02-10 17:15:00" 2799.33
+1002 "2025-02-10 17:30:00" 2709.28
+1002 "2025-02-10 17:45:00" 2033.7
+1002 "2025-02-10 18:00:00" 2032.93
+1002 "2025-02-10 18:15:00" 2444.56
+1002 "2025-02-10 18:30:00" 2413.56
+1002 "2025-02-10 18:45:00" 2397.11
+1002 "2025-02-10 19:00:00" 2393.97
+1002 "2025-02-10 19:15:00" 2206.41
+1002 "2025-02-10 19:30:00" 2306.74
+1002 "2025-02-10 19:45:00" 1407.56
+1002 "2025-02-10 20:00:00" 1990.99
+1002 "2025-02-10 20:15:00" 1742.13
+1002 "2025-02-10 20:30:00" 2202.22
+1002 "2025-02-10 20:45:00" 2448.91
+1002 "2025-02-10 21:00:00" 2203.5
+1002 "2025-02-10 21:15:00" 2799.33
+1002 "2025-02-10 21:30:00" 2709.28
+1002 "2025-02-10 21:45:00" 2033.7
+1002 "2025-02-10 22:00:00" 2032.93
+1002 "2025-02-10 22:15:00" 2444.56
+1002 "2025-02-10 22:30:00" 2413.56
+1002 "2025-02-10 22:45:00" 2397.11
+1002 "2025-02-10 23:00:00" 2393.97
+1002 "2025-02-10 23:15:00" 2206.41
+1002 "2025-02-10 23:30:00" 2306.74
+1002 "2025-02-10 23:45:00" 1407.56

+ 4 - 90
app/model/main.py

@@ -20,7 +20,6 @@ from app.common.config import parser, logger
 from app.model.resource_manager import ResourceController
 from app.model.task_worker import TaskTrain, TaskPre
 from app.model.material import MaterialLoader
-from multiprocessing import Manager, Lock
 
 """"
 调用思路
@@ -118,89 +117,11 @@ def dq_train(opt):
     task_config['gpu_assignment'] = gpu_id
     task.region_task(task_config, data_nwps)
 
-def dq_predict(opt):
-    # ---------------------------- 配置计算资源和任务 ----------------------------
-    config = opt.__dict__
-    # 初始化资源管理器
-    rc = ResourceController(
-        max_workers=opt.system['max_workers'],
-        gpu_list=opt.system['gpu_devices']
-    )
-
-    # 生成任务列表
-    target_dir = os.path.join(opt.dqyc_base_path, opt.input_file)
-    all_stations = [str(child.parts[-1]) for child in Path(str(target_dir)).iterdir() if child.is_dir()]
-    loader = MaterialLoader(target_dir)
-    task = TaskPre(loader)
-    # ---------------------------- 监控任务,进度跟踪 ----------------------------
-    # 场站级功率预测训练
-    completed = 0
-    with tqdm(total=len(all_stations)) as pbar:
-        with ProcessPoolExecutor(max_workers=rc.cpu_cores) as executor:
-            futures = []
-            for sid in all_stations:
-                # 动态分配GPU
-                task_config = deepcopy(config)
-                gpu_id = rc.get_gpu()
-                task_config['gpu_assignment'] = gpu_id
-                task_config['station_id'] = sid
-                # 提交任务
-                future = executor.submit(task.station_task, task_config)
-                future.add_done_callback(
-                    lambda _: rc.release_gpu(task_config['gpu_assignment']))
-                futures.append(future)
-
-            total_cap = 0
-            weighted_nwp = pd.DataFrame()
-            weighted_nwp_h = pd.DataFrame()
-            weighted_nwp_v = pd.DataFrame()
-            weighted_nwp_v_h = pd.DataFrame()
-
-            # 处理完成情况
-            for future in concurrent.futures.as_completed(futures):
-                try:
-                    result = future.result()
-                    if result['status'] == 'success':
-                        # 分治-汇总策略得到加权后的nwp
-                        completed += 1
-                        local = result['weights']
-                        total_cap += local['cap']
-                        weighted_nwp = add_nwp(weighted_nwp, local['nwp'])
-                        weighted_nwp_h = add_nwp(weighted_nwp_h, local['nwp_h'])
-                        weighted_nwp_v = add_nwp(weighted_nwp_v, local['nwp_v'])
-                        weighted_nwp_v_h = add_nwp(weighted_nwp_v_h, local['nwp_v_h'])
-                    pbar.update(1)
-                    pbar.set_postfix_str(f"Completed: {completed}/{len(all_stations)}")
-                except Exception as e:
-                    print(f"Task failed: {e}")
-    # 归一化处理
-    use_cols = [col for col in weighted_nwp.columns if
-                col not in ['PlantID', 'PlantName', 'PlantType', 'Qbsj', 'Datetime']]
-    use_cols_v = [col for col in weighted_nwp_v.columns if
-                  col not in ['PlantID', 'PlantName', 'PlantType', 'Qbsj', 'Datetime']]
-    weighted_nwp[use_cols] /= total_cap
-    weighted_nwp_h[use_cols] /= total_cap
-    weighted_nwp[use_cols] = weighted_nwp[use_cols].round(2)
-    weighted_nwp_h[use_cols] = weighted_nwp_h[use_cols].round(2)
-    weighted_nwp_v[use_cols_v] /= total_cap
-    weighted_nwp_v_h[use_cols_v] /= total_cap
-    weighted_nwp_v[use_cols_v] = weighted_nwp_v[use_cols_v].round(2)
-    weighted_nwp_v_h[use_cols_v] = weighted_nwp_v_h[use_cols_v].round(2)
-    data_nwps = types.SimpleNamespace(
-        **{'nwp': weighted_nwp, 'nwp_h': weighted_nwp_h, 'nwp_v': weighted_nwp_v, 'nwp_v_h': weighted_nwp_v_h,
-           'total_cap': total_cap})
-    print(f"Final result: {completed} stations trained successfully")
-    # 区域级功率预测训练
-    task_config = deepcopy(config)
-    gpu_id = rc.get_gpu()
-    task_config['gpu_assignment'] = gpu_id
-    task.region_task(task_config, data_nwps)
 
 def cdq_train(opt):
     pass
 
-def cdq_predict(opt):
-    pass
+
 
 def main():
     # ---------------------------- 解析参数 ----------------------------
@@ -209,17 +130,10 @@ def main():
     # 打印参数
     logger.info(f"输入文件目录: {opt.input_file}")
     is_dq = opt.input_file.split('/')
-    if len(is_dq) == 4:  # 根据input_file第一个位置参数判断训练还是预测
-        if opt.train_mode:
-            dq_train(opt)
-        else:
-            dq_predict(opt)
+    if len(is_dq) == 4:
+        dq_train(opt)
     else:
-        if opt.train_mode:
-            cdq_train(opt)
-        else:
-            cdq_predict(opt)
-
+        cdq_train(opt)
 
 if __name__ == "__main__":
     main()

+ 5 - 4
app/model/task_worker.py

@@ -92,7 +92,8 @@ class TaskPre(object):
             # 模型训练
             # model = ModelTrainer(station_id, train_data, capacity=data_objects.cap, gpu_id=config.get('gpu_assignment'))
             model = ModelPre(pre_data, capacity=data_objects.cap, config=config)
-            model.train()
+            model.predict()
+
             print("555")
             return {'status': 'success', 'station_id': station_id, 'weights': local_weights}
         except Exception as e:
@@ -116,11 +117,11 @@ class TaskPre(object):
             print(data_nwps.nwp)
             print(data_nwps.nwp_v)
             print("累加的区域装机量{},实际区域装机量{}".format(data_nwps.total_cap, data_objects.area_cap))
-            train_data = pd.merge(data_nwps.nwp_v_h, data_objects.power, on=config['col_time'])
+            pre_data = data_nwps.nwp_v
             print("444")
             # 模型训练
-            model = ModelTrainer(train_data, capacity=data_objects.area_cap, config=config)
-            model.train(pre_area=True)
+            model = ModelPre(pre_data, capacity=data_objects.area_cap, config=config)
+            model.predict(pre_area=True)
             print("555")
             return {'status': 'success', 'area_id': area_id}
         except Exception as e:

+ 1 - 1
app/model/tf_model_train.py

@@ -89,7 +89,7 @@ class ModelTrainer:
             # ------------ 组装模型数据 ------------
             self.opt.Model['features'] = ','.join(self.dh.opt.features)
             self.config.update({
-                'params': json.dumps(self.config['Model']),
+                'params': json.dumps({'Model': self.config['Model']}),
                 'descr': f'南网竞赛-{pre_id}',
                 'gen_time': time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()),
                 'model_table': self.config['model_table'] + f'_{pre_type}_' + str(pre_id),

+ 104 - 72
app/predict/main.py

@@ -8,10 +8,18 @@
 """
 模型调参及系统功能配置
 """
-import argparse
+import concurrent.futures
+import os.path
+import types
+from tqdm import tqdm
 import pandas as pd
 from pathlib import Path
-from app.common.logs import logger, params
+from copy import deepcopy
+from concurrent.futures import ProcessPoolExecutor
+from app.common.config import parser, logger
+from app.model.resource_manager import ResourceController
+from app.model.task_worker import TaskTrain, TaskPre
+from app.model.material import MaterialLoader
 
 """
 调用思路
@@ -21,83 +29,107 @@ from app.common.logs import logger, params
         4. 执行训练,保存模型
         5. 执行预测,输出结果
 """
-
-def material(input_file, isDq=True):
-    basi, station_info_w, station_info_d_w, station_info_s, station_info_d_s, nwp_w, nwp_s, nwp_w_h, nwp_s_h, power = (
-        'DQYC_IN_BASIC.txt', 'DQYC_IN_PLANT_WIND.txt', 'DQYC_IN_PLANT_DETAIL_WIND.txt', 'DQYC_IN_PLANT_SOLAR.txt',
-        'DQYC_IN_PLANT_DETAIL_SOLAR.txt', 'DQYC_IN_FORECAST_WEATHER_WIND.txt', 'DQYC_IN_FORECAST_WEATHER_SOLAR.txt',
-        'DQYC_IN_FORECAST_WEATHER_WIND_H.txt', 'DQYC_IN_FORECAST_WEATHER_SOLAR_H.txt', 'DQYC_IN_HISTORY_POWER_LONG.txt')
-    basi_area = 'DQYC_AREA_IN_BASIC'
-    nwp_v, nwp_v_h = 'DQYC_IN_FORECAST_WEATHER.txt', 'DQYC_IN_FORECAST_WEATHER_H.txt'
-    nwp_own, nwp_own_h = 'DQYC_IN_FORECAST_WEATHER_OWNER.txt', 'DQYC_IN_FORECAST_WEATHER_OWNER_H.txt',
-    input_file = Path(input_file)
-    basic = pd.read_csv(input_file / basi, sep=r'\s+', header=0)
-    power = pd.read_csv(input_file / power, sep=r'\s+', header=0)
-    plant_type = int(basic.loc[basic['PropertyID'].to_list().index(('PlantType')), 'Value'])
-    if isDq:
-        nwp_v = pd.read_csv(input_file / '0' / nwp_v, sep=r'\s+', header=0)
-        nwp_v_h = pd.read_csv(input_file / '0' / nwp_v_h, sep=r'\s+', header=0)
-        nwp_own = pd.read_csv(input_file / '1' / nwp_own, sep=r'\s+', header=0)
-        nwp_own_h = pd.read_csv(input_file / '1' / nwp_own_h, sep=r'\s+', header=0)
-        if params['switch_nwp_owner']:
-            nwp_v, nwp_v_h = nwp_own, nwp_own_h
-        # 如果是风电
-        if plant_type == 0:
-            station_info = pd.read_csv(input_file / station_info_w, sep=r'\s+', header=0)
-            station_info_d = pd.read_csv(input_file / station_info_d_w, sep=r'\s+', header=0)
-            nwp = pd.read_csv(input_file / nwp_w, sep=r'\s+', header=0)
-            nwp_h = pd.read_csv(input_file / nwp_w_h, sep=r'\s+', header=0)
-            return station_info, station_info_d, nwp, nwp_h, power, nwp_v, nwp_v_h
-        # 如果是光伏
-        elif plant_type == 1:
-            station_info = pd.read_csv(input_file / station_info_s, sep=r'\s+', header=0)
-            station_info_d = pd.read_csv(input_file / station_info_d_s, sep=r'\s+', header=0)
-            nwp = pd.read_csv(input_file / nwp_s, sep=r'\s+', header=0)
-            nwp_h = pd.read_csv(input_file / nwp_s_h, sep=r'\s+', header=0)
-            return station_info, station_info_d, nwp, nwp_h, power, nwp_v, nwp_v_h
+def add_nwp(df_obj, df):
+    if df_obj.empty:
+        df_obj = df
     else:
-        # 区域级预测待定,可能需要遍历获取场站数据
-        basic_area = pd.read_csv(input_file / basi_area, sep=r'\s+', header=0)
-        return basic_area
+        add_cols = [col for col in df_obj.columns if col not in ['PlantID', 'PlantName', 'PlantType', 'Qbsj', 'Datetime']]
+        df_obj[add_cols] = df_obj[add_cols].add(df, fill_value=0)
+    return df_obj
 
-def input_file_handler(input_file: str, model_name: str):
-    # DQYC:短期预测,qy:区域级
-    if 'dqyc' in input_file.lower():
-        station_info, station_info_d, nwp, nwp_h, power, nwp_v, nwp_v_h = material(input_file, True)
-        cap = round(float(station_info['PlantCap'][0]), 2)
-        # 含有predict,预测
-        if 'predict' in input_file.lower():
-            pre_data = nwp_v
-            if model_name == 'fmi':
-                from app.predict.tf_fmi_pre import model_prediction
-            elif model_name == 'cnn':
-                from app.predict.tf_cnn_pre import model_prediction
-            else:
-                from app.predict.tf_lstm_pre import model_prediction
-            model_prediction(pre_data, input_file, cap)
-        else:
-            logger.info("预测路径错误!")
-    else:
-        # 区域级预测:未完
-        # basic_area = material(input_file, False)
-        logger.info("区域级预测待开放。")
 
+def dq_predict(opt):
+    # ---------------------------- 配置计算资源和任务 ----------------------------
+    config = opt.__dict__
+    # 初始化资源管理器
+    rc = ResourceController(
+        max_workers=opt.system['max_workers'],
+        gpu_list=opt.system['gpu_devices']
+    )
 
+    # 生成任务列表
+    target_dir = os.path.join(opt.dqyc_base_path, opt.input_file)
+    all_stations = [str(child.parts[-1]) for child in Path(str(target_dir)).iterdir() if child.is_dir()]
+    loader = MaterialLoader(target_dir)
+    task = TaskPre(loader)
+    # ---------------------------- 监控任务,进度跟踪 ----------------------------
+    # 场站级功率预测训练
+    completed = 0
+    with tqdm(total=len(all_stations)) as pbar:
+        with ProcessPoolExecutor(max_workers=rc.cpu_cores) as executor:
+            futures = []
+            for sid in all_stations:
+                # 动态分配GPU
+                task_config = deepcopy(config)
+                gpu_id = rc.get_gpu()
+                task_config['gpu_assignment'] = gpu_id
+                task_config['station_id'] = sid
+                # 提交任务
+                future = executor.submit(task.station_task, task_config)
+                future.add_done_callback(
+                    lambda _: rc.release_gpu(task_config['gpu_assignment']))
+                futures.append(future)
 
-def main():
-    # 创建解析器对象
-    parser = argparse.ArgumentParser(description="程序描述")
-    # 创建
-    # 添加参数
-    parser.add_argument("input_file", help="输入文件路径")    # 第一个位置参数
-    parser.add_argument("--model_name", default="cnn", help='选择短期模型')  # 第二个位置参数(可选)
-    # 解析参数
-    args = parser.parse_args()
+            total_cap = 0
+            weighted_nwp = pd.DataFrame()
+            weighted_nwp_h = pd.DataFrame()
+            weighted_nwp_v = pd.DataFrame()
+            weighted_nwp_v_h = pd.DataFrame()
 
-    # 使用参数
-    print(f"文件: {args.input_file}")
-    input_file_handler(args.input_file, args.model_name)
+            # 处理完成情况
+            for future in concurrent.futures.as_completed(futures):
+                try:
+                    result = future.result()
+                    if result['status'] == 'success':
+                        # 分治-汇总策略得到加权后的nwp
+                        completed += 1
+                        local = result['weights']
+                        total_cap += local['cap']
+                        weighted_nwp = add_nwp(weighted_nwp, local['nwp'])
+                        weighted_nwp_h = add_nwp(weighted_nwp_h, local['nwp_h'])
+                        weighted_nwp_v = add_nwp(weighted_nwp_v, local['nwp_v'])
+                        weighted_nwp_v_h = add_nwp(weighted_nwp_v_h, local['nwp_v_h'])
+                    pbar.update(1)
+                    pbar.set_postfix_str(f"Completed: {completed}/{len(all_stations)}")
+                except Exception as e:
+                    print(f"Task failed: {e}")
+    # 归一化处理
+    use_cols = [col for col in weighted_nwp.columns if
+                col not in ['PlantID', 'PlantName', 'PlantType', 'Qbsj', 'Datetime']]
+    use_cols_v = [col for col in weighted_nwp_v.columns if
+                  col not in ['PlantID', 'PlantName', 'PlantType', 'Qbsj', 'Datetime']]
+    weighted_nwp[use_cols] /= total_cap
+    weighted_nwp_h[use_cols] /= total_cap
+    weighted_nwp[use_cols] = weighted_nwp[use_cols].round(2)
+    weighted_nwp_h[use_cols] = weighted_nwp_h[use_cols].round(2)
+    weighted_nwp_v[use_cols_v] /= total_cap
+    weighted_nwp_v_h[use_cols_v] /= total_cap
+    weighted_nwp_v[use_cols_v] = weighted_nwp_v[use_cols_v].round(2)
+    weighted_nwp_v_h[use_cols_v] = weighted_nwp_v_h[use_cols_v].round(2)
+    data_nwps = types.SimpleNamespace(
+        **{'nwp': weighted_nwp, 'nwp_h': weighted_nwp_h, 'nwp_v': weighted_nwp_v, 'nwp_v_h': weighted_nwp_v_h,
+           'total_cap': total_cap})
+    print(f"Final result: {completed} stations trained successfully")
+    # 区域级功率预测训练
+    task_config = deepcopy(config)
+    gpu_id = rc.get_gpu()
+    task_config['gpu_assignment'] = gpu_id
+    task.region_task(task_config, data_nwps)
 
+def cdq_predict(opt):
+    pass
+
+def main():
+    # ---------------------------- 解析参数 ----------------------------
+    # 解析参数,将固定参数和任务参数合并
+    opt = parser.parse_args_and_yaml()
+    # 打印参数
+    logger.info(f"输入文件目录: {opt.input_file}")
+    is_dq = opt.input_file.split('/')
+    if len(is_dq) == 4:
+        dq_predict(opt)
+    else:
+        cdq_predict(opt)
 
 if __name__ == "__main__":
     main()

+ 15 - 18
app/predict/tf_model_pre.py

@@ -15,15 +15,14 @@ import time, json
 model_lock = Lock()
 from itertools import chain
 from typing import Dict, Any
-from app.common.logs import logger, params
+from app.common.config import logger, parser
 from app.common.tf_lstm import TSHandler
 from app.common.dbmg import MongoUtils
-from copy import deepcopy
 
 np.random.seed(42)  # NumPy随机种子
 
 mgUtils = MongoUtils(logger)
-class ModelPre:
+class ModelPre(object):
     """模型训练器封装类"""
 
     def __init__(self,
@@ -33,7 +32,7 @@ class ModelPre:
                  ):
         self.config = config
         self.logger = logger
-        self.train_data = pre_data
+        self.pre_data = pre_data
         self.capacity = capacity
         self.gpu_id = config.get('gpu_assignment')
         self._setup_resources()
@@ -51,7 +50,7 @@ class ModelPre:
             os.environ["CUDA_VISIBLE_DEVICES"] = str(self.gpu_id)
             self.logger.info(f"GPU {self.gpu_id} allocated")
 
-    def model_prediction(self, pre_data):
+    def predict(self, pre_area=False):
         # 获取程序开始时间
         start_time = time.time()
         success = 0
@@ -59,29 +58,27 @@ class ModelPre:
         pre_id = self.config['area_id'] if pre_area else self.config['station_id']
         pre_type = 'a' if pre_area else 's'
         output_file = os.path.join(self.opt.dqyc_base_path, self.input_file)
-        output_file = output_file.replace('IN', 'OUT')
+        output_file = output_file.replace('IN', 'OUT') if pre_area else os.path.join(str(output_file), pre_id)
         file = 'DQYC_OUT_PREDICT_POWER.txt'
         status_file = 'STATUS.TXT'
-        local_params = deepcopy(params)
-        ts = TSHandler(logger, local_params)
-        dh = DataHandler(logger, local_params)
         try:
-            local_params['model_table'] = local_params['model_table'] + f'_{pre_type}_'+pre_id
-            local_params['scaler_table'] = local_params['scaler_table'] + f'_{pre_type}_'+ str(pre_id)
-            feature_scaler, target_scaler = mgUtils.get_scaler_model_from_mongo(local_params)
-            ts.opt.cap = round(target_scaler.transform(np.array([[self.capacity]]))[0, 0], 2)
-            ts.get_model(local_params)
-            dh.opt.features = json.loads(ts.model_params).get('Model').get('features', ','.join(ts.opt.features)).split(',')
-            scaled_pre_x, pre_data = dh.pre_data_handler(pre_data, feature_scaler)
+            self.config['model_table'] = self.config['model_table'] + f'_{pre_type}_'+str(pre_id)
+            self.config['scaler_table'] = self.config['scaler_table'] + f'_{pre_type}_'+ str(pre_id)
+            feature_scaler, target_scaler = mgUtils.get_scaler_model_from_mongo(self.config)
+            self.ts.opt.cap = round(target_scaler.transform(np.array([[self.capacity]]))[0, 0], 2)
+            self.ts.get_model(self.config)
+            print("!!!!", self.ts.model_params)
+            self.dh.opt.features = json.loads(self.ts.model_params).get('Model').get('features', ','.join(self.ts.opt.features)).split(',')
+            scaled_pre_x, pre_data = self.dh.pre_data_handler(self.pre_data, feature_scaler)
 
             success = 1
             # 更新算法状态:1. 启动成功
             write_number_to_file(os.path.join(str(output_file), status_file), 1, 1, 'rewrite')
             logger.info("算法启动成功")
-            res = list(chain.from_iterable(target_scaler.inverse_transform([ts.predict(scaled_pre_x).flatten()])))
+            res = list(chain.from_iterable(target_scaler.inverse_transform([self.ts.predict(scaled_pre_x).flatten()])))
             pre_data['Power'] = res[:len(pre_data)]
             pre_data['PlantID'] = pre_id
-            pre_data = pre_data[['PlantID', local_params['col_time'], 'Power']]
+            pre_data = pre_data[['PlantID', self.config['col_time'], 'Power']]
 
             pre_data.loc[:, 'Power'] = pre_data['Power'].round(2)
             pre_data.loc[pre_data['Power'] > self.capacity, 'Power'] = self.capacity