From SW's laptop
parent
7ba5eefc4c
commit
a748d20de2
158
controller.py
158
controller.py
|
|
@ -5,8 +5,10 @@ Sang Inn Woo, Ph.D. @ Incheon National University
|
|||
Starting Date: 2022-11-10
|
||||
"""
|
||||
import psycopg2 as pg2
|
||||
import sys
|
||||
import numpy as np
|
||||
import settle_prediction_steps_main
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
'''
|
||||
|
|
@ -20,52 +22,45 @@ fill_height: height of surcharge fill
|
|||
nod: number of date
|
||||
'''
|
||||
|
||||
def settlement_prediction(point_name):
|
||||
|
||||
# connect the database
|
||||
connection = pg2.connect("host=localhost dbname=postgres user=postgres password=lab36981 port=5432")
|
||||
# connect the database
|
||||
connection = pg2.connect("host=localhost dbname=postgres user=postgres password=lab36981 port=5432")
|
||||
|
||||
# set cursor
|
||||
cursor = connection.cursor()
|
||||
# set cursor
|
||||
cursor = connection.cursor()
|
||||
|
||||
# select all monitoring points
|
||||
postgres_select_query = """SELECT * FROM apptb_surset01"""
|
||||
cursor.execute(postgres_select_query)
|
||||
point_record = cursor.fetchall()
|
||||
|
||||
# for a monitoring point, set name
|
||||
point_name = point_record[0][3]
|
||||
|
||||
# select monitoring data for the monitoring point
|
||||
postgres_select_query = """SELECT * FROM apptb_surset02 WHERE cons_code='""" \
|
||||
# select monitoring data for the monitoring point
|
||||
postgres_select_query = """SELECT * FROM apptb_surset02 WHERE cons_code='""" \
|
||||
+ point_name + """' ORDER BY nod ASC"""
|
||||
cursor.execute(postgres_select_query)
|
||||
monitoring_record = cursor.fetchall()
|
||||
cursor.execute(postgres_select_query)
|
||||
monitoring_record = cursor.fetchall()
|
||||
|
||||
# initialize time, surcharge, and settlement lists
|
||||
time = []
|
||||
surcharge = []
|
||||
settlement = []
|
||||
# initialize time, surcharge, and settlement lists
|
||||
time = []
|
||||
surcharge = []
|
||||
settlement = []
|
||||
|
||||
# fill list
|
||||
for row in monitoring_record:
|
||||
# fill lists
|
||||
for row in monitoring_record:
|
||||
settlement.append(float(row[6]))
|
||||
surcharge.append(float(row[8]))
|
||||
time.append(float(row[12]))
|
||||
|
||||
# convert lists to np arrays
|
||||
settlement = np.array(settlement)
|
||||
surcharge = np.array(surcharge)
|
||||
time = np.array(time)
|
||||
# convert lists to np arrays
|
||||
settlement = np.array(settlement)
|
||||
surcharge = np.array(surcharge)
|
||||
time = np.array(time)
|
||||
|
||||
# run the settlement prediction and get results
|
||||
results = settle_prediction_steps_main.run_settle_prediction(point_name=point_name,
|
||||
# run the settlement prediction and get results
|
||||
results = settle_prediction_steps_main.run_settle_prediction(point_name=point_name,
|
||||
np_time=time,
|
||||
np_surcharge=surcharge,
|
||||
np_settlement=settlement,
|
||||
final_step_predict_percent=90,
|
||||
additional_predict_percent=300,
|
||||
plot_show=True,
|
||||
print_values=True,
|
||||
plot_show=False,
|
||||
print_values=False,
|
||||
run_original_hyperbolic=True,
|
||||
run_nonlinear_hyperbolic=True,
|
||||
run_weighted_nonlinear_hyperbolic=True,
|
||||
|
|
@ -73,28 +68,113 @@ results = settle_prediction_steps_main.run_settle_prediction(point_name=point_na
|
|||
run_step_prediction=True,
|
||||
asaoka_interval=3)
|
||||
|
||||
# if there are prediction data for the given data point, delete it first
|
||||
postgres_delete_query = """DELETE FROM apptb_pred02 WHERE cons_code='""" + point_name + """'"""
|
||||
cursor.execute(postgres_delete_query)
|
||||
connection.commit()
|
||||
# if there are prediction data for the given data point, delete it first
|
||||
postgres_delete_query = """DELETE FROM apptb_pred02 WHERE cons_code='""" + point_name + """'"""
|
||||
cursor.execute(postgres_delete_query)
|
||||
connection.commit()
|
||||
|
||||
time = results[0]
|
||||
predicted_settlement = results[1]
|
||||
|
||||
for i in range(5):
|
||||
# insert predicted settlement into database
|
||||
for i in range(5):
|
||||
|
||||
# get time and settlement arrays
|
||||
time = results[2 * i]
|
||||
predicted_settlement = results[2 * i + 1]
|
||||
|
||||
# for each prediction time
|
||||
for j in range(len(time)):
|
||||
|
||||
# construct insert query
|
||||
postgres_insert_query \
|
||||
= """INSERT INTO apptb_pred02 (cons_code, prediction_progress_days, predicted_settlement, prediction_method) """\
|
||||
+ """VALUES (%s, %s, %s, %s)"""
|
||||
|
||||
# set data to insert
|
||||
record_to_insert = (point_name, time[j], predicted_settlement[j], i)
|
||||
|
||||
# execute the insert query
|
||||
cursor.execute(postgres_insert_query, record_to_insert)
|
||||
|
||||
connection.commit()
|
||||
# commit changes
|
||||
connection.commit()
|
||||
|
||||
|
||||
def read_database_and_plot(point_name):
|
||||
|
||||
# connect the database
|
||||
connection = pg2.connect("host=localhost dbname=postgres user=postgres password=lab36981 port=5432")
|
||||
|
||||
# set cursor
|
||||
cursor = connection.cursor()
|
||||
|
||||
# select monitoring data for the monitoring point
|
||||
postgres_select_query = """SELECT * FROM apptb_surset02 WHERE cons_code='""" \
|
||||
+ point_name + """' ORDER BY nod ASC"""
|
||||
cursor.execute(postgres_select_query)
|
||||
monitoring_record = cursor.fetchall()
|
||||
|
||||
# initialize time, surcharge, and settlement lists
|
||||
time_monitored = []
|
||||
surcharge_monitored = []
|
||||
settlement_monitored = []
|
||||
|
||||
# fill lists
|
||||
for row in monitoring_record:
|
||||
settlement_monitored.append(float(row[6]))
|
||||
surcharge_monitored.append(float(row[8]))
|
||||
time_monitored.append(float(row[12]))
|
||||
|
||||
# convert lists to np arrays
|
||||
settlement_monitored = np.array(settlement_monitored)
|
||||
surcharge_monitored = np.array(surcharge_monitored)
|
||||
time_monitored = np.array(time_monitored)
|
||||
|
||||
prediction_method = 0
|
||||
# select monitoring data for the monitoring point
|
||||
postgres_select_query = """SELECT prediction_progress_days, predicted_settlement """ \
|
||||
+ """FROM apptb_pred02 WHERE cons_code= '""" + point_name \
|
||||
+ """' and prediction_method = """ + str(prediction_method) \
|
||||
+ """ ORDER BY prediction_progress_days ASC"""
|
||||
cursor.execute(postgres_select_query)
|
||||
prediction_record = cursor.fetchall()
|
||||
|
||||
# initialize time, surcharge, and settlement lists
|
||||
time_predicted = []
|
||||
settlement_predicted = []
|
||||
|
||||
# fill lists
|
||||
for row in prediction_record:
|
||||
time_predicted.append(float(row[0]))
|
||||
settlement_predicted.append(float(row[1]))
|
||||
|
||||
# convert lists to np arrays
|
||||
settlement_predicted = np.array(settlement_predicted)
|
||||
time_predicted = np.array(time_predicted)
|
||||
|
||||
# 그래프 크기, 서브 그래프 개수 및 비율 설정
|
||||
fig, axes = plt.subplots(2, 1, figsize=(12, 9), gridspec_kw={'height_ratios': [1, 3]})
|
||||
|
||||
# 성토고 그래프 표시
|
||||
axes[0].plot(time_monitored, surcharge_monitored, color='black', label='surcharge height')
|
||||
|
||||
# 성토고 그래프 설정
|
||||
axes[0].set_ylabel("Surcharge height (m)", fontsize=15)
|
||||
axes[0].set_xlim(left=0)
|
||||
axes[0].grid(color="gray", alpha=.5, linestyle='--')
|
||||
axes[0].tick_params(direction='in')
|
||||
|
||||
# 계측 및 예측 침하량 표시
|
||||
axes[1].scatter(time_monitored, -settlement_monitored, s=50,
|
||||
facecolors='white', edgecolors='black', label='measured data')
|
||||
axes[1].plot(time_predicted, -settlement_predicted,
|
||||
linestyle='--', color='red', label='Original Hyperbolic')
|
||||
|
||||
|
||||
|
||||
# python3 controller.py 1_SP-5
|
||||
if __name__ == '__main__':
|
||||
args = sys.argv[1:]
|
||||
point_name = args[0]
|
||||
#settlement_prediction(point_name=point_name)
|
||||
read_database_and_plot(point_name=point_name)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -570,14 +570,13 @@ def run_settle_prediction(point_name,
|
|||
print("Error in Final Settlement (Asaoka): %0.3f" % final_error_asaoka)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# ==========================================
|
||||
# Post-Processing #2 : 그래프 작성
|
||||
# ==========================================
|
||||
|
||||
# 만약 그래프 도시가 필요할 경우,
|
||||
if plot_show:
|
||||
|
||||
# 그래프 크기, 서브 그래프 개수 및 비율 설정
|
||||
fig, axes = plt.subplots(2, 1, figsize=(12, 9), gridspec_kw={'height_ratios': [1, 3]})
|
||||
|
||||
|
|
@ -756,7 +755,7 @@ def run_settle_prediction(point_name,
|
|||
rmse_hyper_original, rmse_hyper_nonlinear, rmse_hyper_weight_nonlinear,
|
||||
rmse_asaoka, rmse_step,
|
||||
final_error_hyper_original, final_error_hyper_nonlinear, final_error_hyper_weight_nonlinear,
|
||||
final_error_asaoka, final_error_step, is_multi_step]
|
||||
final_error_asaoka, final_error_step]
|
||||
|
||||
'''
|
||||
run_settle_prediction(input_file='data/2-5_No.39.csv',
|
||||
|
|
|
|||
Loading…
Reference in New Issue