|
Before Width: | Height: | Size: 68 KiB |
128
3_SP-68_Test.csv
|
|
@ -1,128 +0,0 @@
|
||||||
Time,Settle,Surcharge
|
|
||||||
0,0,1.887
|
|
||||||
3,41,1.887
|
|
||||||
6,61.5,1.887
|
|
||||||
10,73.1,1.887
|
|
||||||
13,81.6,1.887
|
|
||||||
17,86.9,1.887
|
|
||||||
20,91.9,1.887
|
|
||||||
23,96.7,1.887
|
|
||||||
26,101.6,1.887
|
|
||||||
30,107.7,2.94
|
|
||||||
33,113,2.94
|
|
||||||
37,119.4,2.94
|
|
||||||
40,122.8,2.94
|
|
||||||
44,128.4,2.94
|
|
||||||
47,131.9,2.94
|
|
||||||
52,139.5,2.94
|
|
||||||
54,140.5,2.94
|
|
||||||
59,148,2.94
|
|
||||||
62,151,2.94
|
|
||||||
65,153.8,2.94
|
|
||||||
68,156.6,2.94
|
|
||||||
72,160,2.94
|
|
||||||
75,162.5,2.94
|
|
||||||
79,166,2.94
|
|
||||||
83,169.1,2.94
|
|
||||||
86,172,2.94
|
|
||||||
89,174.7,2.94
|
|
||||||
94,180.3,2.94
|
|
||||||
96,182.1,2.94
|
|
||||||
100,185.5,2.94
|
|
||||||
103,188.4,2.94
|
|
||||||
110,195.8,2.94
|
|
||||||
114,198.7,2.94
|
|
||||||
118,201.1,2.94
|
|
||||||
122,205,2.94
|
|
||||||
125,206.9,2.94
|
|
||||||
128,209.3,2.94
|
|
||||||
131,211.8,2.94
|
|
||||||
135,214.2,2.94
|
|
||||||
138,216.2,2.94
|
|
||||||
143,217.4,2.94
|
|
||||||
146,218.3,2.94
|
|
||||||
150,219.1,2.94
|
|
||||||
153,219.9,2.94
|
|
||||||
156,220.9,2.94
|
|
||||||
159,222,2.94
|
|
||||||
164,227.7,2.94
|
|
||||||
167,230.7,2.94
|
|
||||||
171,234.8,3.48
|
|
||||||
173,236.5,3.48
|
|
||||||
177,239.7,3.48
|
|
||||||
180,241.8,3.48
|
|
||||||
184,243.9,3.48
|
|
||||||
187,246.3,3.48
|
|
||||||
191,249.6,3.48
|
|
||||||
194,252.1,3.48
|
|
||||||
198,255.5,3.48
|
|
||||||
201,258.9,3.48
|
|
||||||
205,261.2,3.48
|
|
||||||
208,263.4,3.48
|
|
||||||
212,265.8,3.48
|
|
||||||
215,267.1,3.48
|
|
||||||
219,268.9,3.48
|
|
||||||
222,270.2,3.48
|
|
||||||
227,273.4,3.48
|
|
||||||
229,275,3.48
|
|
||||||
234,277.3,3.48
|
|
||||||
237,278.1,3.48
|
|
||||||
241,280,3.48
|
|
||||||
244,281.2,3.48
|
|
||||||
248,283.2,3.48
|
|
||||||
251,284.6,3.48
|
|
||||||
254,286.1,3.48
|
|
||||||
257,287.5,3.48
|
|
||||||
262,289.5,3.48
|
|
||||||
265,290.7,3.48
|
|
||||||
268,292,3.48
|
|
||||||
271,293.2,3.48
|
|
||||||
275,294.7,3.48
|
|
||||||
278,295.3,3.48
|
|
||||||
282,296.3,3.48
|
|
||||||
285,296.7,3.48
|
|
||||||
289,297.6,3.48
|
|
||||||
292,298.5,3.48
|
|
||||||
296,299.8,3.48
|
|
||||||
299,300.6,3.48
|
|
||||||
303,302.2,3.48
|
|
||||||
306,303.5,3.48
|
|
||||||
310,312.8,5.608
|
|
||||||
313,318.1,5.608
|
|
||||||
317,322.8,6.794
|
|
||||||
320,328.9,6.794
|
|
||||||
324,335.3,6.794
|
|
||||||
328,340.5,6.794
|
|
||||||
331,342.9,6.794
|
|
||||||
334,345.5,6.794
|
|
||||||
339,348,6.794
|
|
||||||
342,350.6,6.794
|
|
||||||
345,353.1,6.794
|
|
||||||
348,355.6,6.794
|
|
||||||
352,358.9,6.794
|
|
||||||
355,361,6.794
|
|
||||||
362,365.6,6.794
|
|
||||||
367,369,6.794
|
|
||||||
370,370.5,6.794
|
|
||||||
373,372.2,6.794
|
|
||||||
376,373.8,6.794
|
|
||||||
381,376.4,6.794
|
|
||||||
384,378.5,6.794
|
|
||||||
387,380.4,6.794
|
|
||||||
390,382.4,6.794
|
|
||||||
394,385.8,6.794
|
|
||||||
397,388,6.794
|
|
||||||
402,389.9,6.794
|
|
||||||
405,390.9,6.794
|
|
||||||
409,392.6,6.794
|
|
||||||
412,394,6.794
|
|
||||||
415,396.7,6.794
|
|
||||||
418,397.5,6.794
|
|
||||||
422,398.7,6.794
|
|
||||||
425,399.1,6.794
|
|
||||||
429,399.8,6.794
|
|
||||||
432,400.9,6.794
|
|
||||||
436,403.6,6.794
|
|
||||||
439,405.6,6.794
|
|
||||||
443,408.2,6.794
|
|
||||||
446,409.4,6.794
|
|
||||||
|
183
main.py
|
|
@ -1,183 +0,0 @@
|
||||||
# 주요 수정 사항
|
|
||||||
# 주석 철저히: 한글로 작성해도 괜찮아요
|
|
||||||
# 입력 1: 시간-침하 데이터, 시간-성토고 데이터 --> 파일로 부터 읽는 것
|
|
||||||
# 입력 2: 사용자가 단계 지정 ---> 간 단계별 처음과 끝 INDEX
|
|
||||||
# 입력 3: 전체 성토 단계 횟수
|
|
||||||
|
|
||||||
# 라이브러리 import
|
|
||||||
import numpy as np
|
|
||||||
from scipy.optimize import least_squares
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
from matplotlib import rcParams
|
|
||||||
import pandas as pd
|
|
||||||
|
|
||||||
# Functions
|
|
||||||
|
|
||||||
# generate a time-settlement curve for hyperbolic method
|
|
||||||
def generate_data_hyper(px, pt):
|
|
||||||
return pt / (px[0] * pt + px[1])
|
|
||||||
|
|
||||||
# error between regression and measurement
|
|
||||||
def fun_hyper_nonlinear(px, pt, py):
|
|
||||||
return pt / (px[0] * pt + px[1]) - py
|
|
||||||
|
|
||||||
# i단계 보정 침하량 산정
|
|
||||||
def fun_step_measured_correction(m, p):
|
|
||||||
return m - p
|
|
||||||
|
|
||||||
# i단계 t-ti 산정
|
|
||||||
def fun_step_time_correction(t, ti):
|
|
||||||
return t - ti
|
|
||||||
|
|
||||||
# i단계 침하곡선 작성
|
|
||||||
def settlement_prediction_curve(m1, p1):
|
|
||||||
return m1 + p1
|
|
||||||
|
|
||||||
# i단계 보정 예측 침하량 산정
|
|
||||||
def fun_step_prediction_correction(m2, p2):
|
|
||||||
return p2 + (m2[0] - p2[0])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 파일 읽기, 리스트 설정
|
|
||||||
|
|
||||||
# Read .csv file using pandas
|
|
||||||
data = pd.read_csv("data/1_SP-11.csv")
|
|
||||||
|
|
||||||
# Set arrays for time and settlement
|
|
||||||
time = data['Time'].to_numpy()
|
|
||||||
settle = data['Settle'].to_numpy()
|
|
||||||
surcharge = data['Surcharge'].to_numpy()
|
|
||||||
|
|
||||||
#
|
|
||||||
# 성토 단계 시작, 끝 인덱스 입력 / 전체 성토 단계 입력
|
|
||||||
# 예: 1단계: (0, 9), 2단계: (10, 37), 3단계: (38, 80)
|
|
||||||
# 예: 전체 성토 단계: 3
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# 각 단계별 예측을 반복문으로 처리
|
|
||||||
#
|
|
||||||
|
|
||||||
step_start_index = [0, 10, 38]
|
|
||||||
step_end_index = [9, 37, 80]
|
|
||||||
x0 = np.ones(2)
|
|
||||||
|
|
||||||
for i in range(0,3):
|
|
||||||
|
|
||||||
if i == 0 : # 1단계
|
|
||||||
|
|
||||||
# 1단계 실측 기간 및 침하량
|
|
||||||
globals()['tm_{}'.format(i)] = time[step_start_index[i]:step_end_index[i]]
|
|
||||||
globals()['ym_{}'.format(i)] = settle[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
res_lsq_hyper_nonlinear_0 = least_squares(fun_hyper_nonlinear, x0, args=(tm_0, ym_0))
|
|
||||||
print(res_lsq_hyper_nonlinear_0.x)
|
|
||||||
|
|
||||||
globals()['settle_predicted_{}'.format(i)] = generate_data_hyper(res_lsq_hyper_nonlinear_0.x, time)
|
|
||||||
|
|
||||||
elif 0 < i < 2 : # 최종단계 3단계 이므로 2를 넘지 않도록 설정
|
|
||||||
|
|
||||||
# i단계 실측 기간 및 침하량
|
|
||||||
globals()['tm_{}'.format(i)] = time[step_start_index[i]:step_end_index[i]]
|
|
||||||
globals()['ym_{}'.format(i)] = settle[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
# i단계~최종 실측 기간 및 침하량
|
|
||||||
globals()['tmm_{}'.format(i)] = time[step_start_index[i]:step_end_index[i+1]]
|
|
||||||
globals()['ymm_{}'.format(i)] = settle[step_start_index[i]:step_end_index[i+1]]
|
|
||||||
|
|
||||||
# i-1 단계 예측 침하량 (i단계에 해당하는)
|
|
||||||
globals()['yp_{}'.format(i)] = settle_predicted_0[step_start_index[i]:step_end_index[i]]
|
|
||||||
# i-1 단계 예측 침하량 (i단계~최종)
|
|
||||||
globals()['ypp_{}'.format(i)] = settle_predicted_0[step_start_index[i]:step_end_index[i + 1]]
|
|
||||||
|
|
||||||
# i단계 실측 보정 침하량 산정
|
|
||||||
globals()['step_{}_measured_correction'.format(i)] = fun_step_measured_correction(ym_1, yp_1)
|
|
||||||
|
|
||||||
# i단계 t-ti 산정
|
|
||||||
globals()['step_{}_time_correction'.format(i)] = fun_step_time_correction(tmm_1, tm_1[0])
|
|
||||||
|
|
||||||
# i 단계 보정 침하량에 대한 예측 침하량 산정
|
|
||||||
globals()['res_lsq_hyper_nonlinear_{}'.format(i)] = least_squares(fun_hyper_nonlinear, x0,
|
|
||||||
args=(step_1_time_correction[0:(step_end_index[i]-step_start_index[i])], step_1_measured_correction))
|
|
||||||
print(res_lsq_hyper_nonlinear_1.x)
|
|
||||||
|
|
||||||
globals()['settle_hyper_nonlinear_{}'.format(i)] = generate_data_hyper(res_lsq_hyper_nonlinear_1.x, step_1_time_correction)
|
|
||||||
|
|
||||||
# i단계 침하곡선 작성
|
|
||||||
globals()['step_{}_prediction_curve'.format(i)] = settlement_prediction_curve(settle_hyper_nonlinear_1, ypp_1)
|
|
||||||
|
|
||||||
# i단계 보정 예측 침하량 산정
|
|
||||||
globals()['settle_predicted_{}'.format(i)] = fun_step_prediction_correction(ymm_1, step_1_prediction_curve)
|
|
||||||
|
|
||||||
else: # 최종 성토 단계
|
|
||||||
|
|
||||||
# 최종 단계 실측 기간 및 침하량
|
|
||||||
globals()['tm_{}'.format(i)] = time[step_start_index[i]:step_end_index[i]]
|
|
||||||
globals()['ym_{}'.format(i)] = settle[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
# i-1 단계 예측 침하량 (최종 단계에 해당하는)
|
|
||||||
globals()['yp_{}'.format(i)] = settle_predicted_1[(step_start_index[i]-step_start_index[i-1]):step_end_index[i]]
|
|
||||||
|
|
||||||
# 최종 단계 실측 보정 침하량 산정
|
|
||||||
globals()['step_{}_measured_correction'.format(i)] = fun_step_measured_correction(ym_2, yp_2)
|
|
||||||
|
|
||||||
# 최종 단계 t-ti 산정
|
|
||||||
globals()['step_{}_time_correction'.format(i)] = fun_step_time_correction(tm_2, tm_2[0])
|
|
||||||
|
|
||||||
# 최종 단계 보정 침하량에 대한 예측 침하량 산정
|
|
||||||
globals()['res_lsq_hyper_nonlinear_{}'.format(i)] = least_squares(fun_hyper_nonlinear, x0,
|
|
||||||
args=(step_2_time_correction, step_2_measured_correction))
|
|
||||||
print(res_lsq_hyper_nonlinear_2.x)
|
|
||||||
|
|
||||||
globals()['settle_hyper_nonlinear_{}'.format(i)] = generate_data_hyper(res_lsq_hyper_nonlinear_2.x,
|
|
||||||
step_2_time_correction)
|
|
||||||
|
|
||||||
# 최종 단계 침하곡선 작성
|
|
||||||
globals()['step_{}_prediction_curve'.format(i)] = settlement_prediction_curve(settle_hyper_nonlinear_2, yp_2)
|
|
||||||
|
|
||||||
# i단계 보정 예측 침하량 산정
|
|
||||||
globals()['settle_predicted_{}'.format(i)] = fun_step_prediction_correction(ym_2, step_2_prediction_curve)
|
|
||||||
break
|
|
||||||
|
|
||||||
'''
|
|
||||||
나중에: 그래프 작성
|
|
||||||
'''
|
|
||||||
|
|
||||||
# Set parameters for plotting
|
|
||||||
rcParams['figure.figsize'] = (10, 10)
|
|
||||||
|
|
||||||
# Subplot
|
|
||||||
f, axes = plt.subplots(2,1)
|
|
||||||
plt.subplots_adjust(hspace = 0.1)
|
|
||||||
|
|
||||||
# draw surcharge data
|
|
||||||
axes[0].plot(time, surcharge, color='black', label='surcharge height')
|
|
||||||
|
|
||||||
axes[0].set_ylabel("Surcharge height (m)", fontsize = 17)
|
|
||||||
axes[0].set_xlim(left = 0)
|
|
||||||
|
|
||||||
# draw measured data
|
|
||||||
axes[1].scatter(time, -settle, s = 50, facecolors='white', edgecolors='black', label = 'measured data')
|
|
||||||
|
|
||||||
# draw predicted data
|
|
||||||
axes[1].plot(time, -settle_predicted_0, linestyle='--', color='red', label='Predicted Curve_Step 1')
|
|
||||||
axes[1].plot(tmm_1, -settle_predicted_1, linestyle='--', color='blue', label='Predicted Curve_Step 2')
|
|
||||||
axes[1].plot(tm_2, -settle_predicted_2, linestyle='--', color='green', label='Predicted Curve_Step 3')
|
|
||||||
|
|
||||||
# Set axes title
|
|
||||||
axes[1].set_xlabel("Time (day)", fontsize = 17)
|
|
||||||
axes[1].set_ylabel("Settlement (mm)", fontsize = 17)
|
|
||||||
|
|
||||||
# Set min values of x and y axes
|
|
||||||
axes[1].set_ylim(top = 0)
|
|
||||||
axes[1].set_ylim(bottom = -1.5 * settle.max())
|
|
||||||
axes[1].set_xlim(left = 0)
|
|
||||||
|
|
||||||
# Set legend
|
|
||||||
axes[1].legend(bbox_to_anchor = (0, 0, 1, 0), loc =4, ncol = 3, mode="expand",
|
|
||||||
borderaxespad = 0, frameon = False, fontsize = 12)
|
|
||||||
|
|
||||||
|
|
||||||
plt.savefig('main_Rev.1.png', dpi=300)
|
|
||||||
plt.show()
|
|
||||||
184
main_Rev.4.py
|
|
@ -1,184 +0,0 @@
|
||||||
# =================
|
|
||||||
# Import 섹션
|
|
||||||
# =================
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
from scipy.optimize import least_squares
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
from matplotlib import rcParams
|
|
||||||
import pandas as pd
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# Function 섹션
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# 주어진 계수를 이용하여 쌍곡선 시간-침하 곡선 반환
|
|
||||||
def generate_data_hyper(px, pt):
|
|
||||||
return pt / (px[0] * pt + px[1])
|
|
||||||
|
|
||||||
# 회귀식과 측정치와의 잔차 반환 (비선형 쌍곡선)
|
|
||||||
def fun_hyper_nonlinear(px, pt, py):
|
|
||||||
return pt / (px[0] * pt + px[1]) - py
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# Step별 활용 Function
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# i단계 보정 침하량 산정
|
|
||||||
def fun_step_measured_correction(m, p):
|
|
||||||
return m - p
|
|
||||||
|
|
||||||
# i단계 t-ti 산정
|
|
||||||
def fun_step_time_correction(t, ti):
|
|
||||||
return t - ti
|
|
||||||
|
|
||||||
# i단계 침하곡선 작성
|
|
||||||
def settlement_prediction_curve(m1, p1):
|
|
||||||
return m1 + p1
|
|
||||||
|
|
||||||
# i단계 보정 예측 침하량 산정
|
|
||||||
def fun_step_prediction_correction(m2, p2):
|
|
||||||
return p2 + (m2[0] - p2[0])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 입력값 설정
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# CSV 파일 읽기
|
|
||||||
data = pd.read_csv("3_SP-68_Test.csv")
|
|
||||||
|
|
||||||
# 시간, 침하량, 성토고 배열 생성
|
|
||||||
time = data['Time'].to_numpy()
|
|
||||||
settle = data['Settle'].to_numpy()
|
|
||||||
surcharge = data['Surcharge'].to_numpy()
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 성토 단계 구분
|
|
||||||
# =================
|
|
||||||
|
|
||||||
step_start_index = [0, 9, 49, 90] # 단계별 성토 시작 지점 입력(4단계 이므로 4개)
|
|
||||||
step_end_index = [8, 48, 89, 129] # 단계별 성토 종료 지점 입력(4단계 이므로 4개)
|
|
||||||
x0 = np.ones(2)
|
|
||||||
num_step = 4
|
|
||||||
|
|
||||||
for i in range(0, num_step): # 성토 단계에 따라 수정(4단계 이므로 0~4)
|
|
||||||
|
|
||||||
# i단계 실측 기간 및 침하량
|
|
||||||
globals()['tm_{}'.format(i)] = time[step_start_index[i]:step_end_index[i]]
|
|
||||||
globals()['ym_{}'.format(i)] = settle[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
if i == 0 : # 1단계
|
|
||||||
|
|
||||||
res_lsq_hyper_nonlinear_0 = least_squares(fun_hyper_nonlinear, x0, args=(tm_0, ym_0))
|
|
||||||
print(res_lsq_hyper_nonlinear_0.x)
|
|
||||||
|
|
||||||
globals()['settle_predicted_{}'.format(i)] = generate_data_hyper(res_lsq_hyper_nonlinear_0.x, time)
|
|
||||||
|
|
||||||
elif 0 < i < (num_step - 1):
|
|
||||||
|
|
||||||
# i단계~최종 실측 기간 및 침하량
|
|
||||||
globals()['tmm_{}'.format(i)] = time[step_start_index[i]:step_end_index[-1]]
|
|
||||||
globals()['ymm_{}'.format(i)] = settle[step_start_index[i]:step_end_index[-1]]
|
|
||||||
|
|
||||||
# i-1단계 예측 침하량(i단계 기간에 해당하는)
|
|
||||||
globals()['yp_{}'.format(i)] = globals()['settle_predicted_{}'.format(i - 1)][(step_start_index[i]-step_start_index[i-1]):(step_end_index[i]-step_start_index[i-1])]
|
|
||||||
# i-1 단계 예측 침하량 (i단계~최종)
|
|
||||||
globals()['ypp_{}'.format(i)] = globals()['settle_predicted_{}'.format(i - 1)][(step_start_index[i]-step_start_index[i-1]):(step_end_index[-1]-step_start_index[i-1])]
|
|
||||||
|
|
||||||
# i단계 실측 보정 침하량 산정
|
|
||||||
globals()['step_{}_measured_correction'.format(i)] = fun_step_measured_correction(globals()['ym_{}'.format(i)],globals()['yp_{}'.format(i)])
|
|
||||||
# i단계 t-ti 산정
|
|
||||||
globals()['step_{}_time_correction'.format(i)] = fun_step_time_correction(globals()['tmm_{}'.format(i)],
|
|
||||||
globals()['tm_{}'.format(i)][0])
|
|
||||||
|
|
||||||
# i 단계 보정 침하량에 대한 예측 침하량 산정
|
|
||||||
globals()['res_lsq_hyper_nonlinear_{}'.format(i)] = least_squares(fun_hyper_nonlinear, x0,
|
|
||||||
args=(globals()['step_{}_time_correction'.format(i)][0:(step_end_index[i]-step_start_index[i])],
|
|
||||||
globals()['step_{}_measured_correction'.format(i)]))
|
|
||||||
|
|
||||||
|
|
||||||
print(globals()['res_lsq_hyper_nonlinear_{}'.format(i)].x)
|
|
||||||
|
|
||||||
globals()['settle_hyper_nonlinear_{}'.format(i)] = generate_data_hyper(globals()['res_lsq_hyper_nonlinear_{}'.format(i)].x,
|
|
||||||
globals()['step_{}_time_correction'.format(i)])
|
|
||||||
|
|
||||||
# i단계 침하곡선 작성
|
|
||||||
globals()['step_{}_prediction_curve'.format(i)] = settlement_prediction_curve(globals()['settle_hyper_nonlinear_{}'.format(i)],
|
|
||||||
globals()['ypp_{}'.format(i)])
|
|
||||||
|
|
||||||
# i단계 보정 예측 침하량 산정
|
|
||||||
globals()['settle_predicted_{}'.format(i)] = fun_step_prediction_correction(globals()['ymm_{}'.format(i)],
|
|
||||||
globals()['step_{}_prediction_curve'.format(i)])
|
|
||||||
|
|
||||||
|
|
||||||
else: # 최종 성토 단계
|
|
||||||
|
|
||||||
# i-1 단계 예측 침하량 (최종 단계에 해당하는)
|
|
||||||
globals()['yp_{}'.format(i)] = globals()['settle_predicted_{}'.format(i - 1)][(step_start_index[i]-step_start_index[i-1]):step_end_index[i]]
|
|
||||||
|
|
||||||
# 최종 단계 실측 보정 침하량 산정
|
|
||||||
globals()['step_{}_measured_correction'.format(i)] = fun_step_measured_correction(globals()['ym_{}'.format(i)],
|
|
||||||
globals()['yp_{}'.format(i)])
|
|
||||||
|
|
||||||
# 최종 단계 t-ti 산정
|
|
||||||
globals()['step_{}_time_correction'.format(i)] = fun_step_time_correction(globals()['tm_{}'.format(i)],
|
|
||||||
globals()['tm_{}'.format(i)][0])
|
|
||||||
|
|
||||||
# 최종 단계 보정 침하량에 대한 예측 침하량 산정
|
|
||||||
globals()['res_lsq_hyper_nonlinear_{}'.format(i)] = least_squares(fun_hyper_nonlinear, x0,
|
|
||||||
args=(globals()['step_{}_time_correction'.format(i)],
|
|
||||||
globals()['step_{}_measured_correction'.format(i)]))
|
|
||||||
|
|
||||||
print(globals()['res_lsq_hyper_nonlinear_{}'.format(i)].x)
|
|
||||||
|
|
||||||
globals()['settle_hyper_nonlinear_{}'.format(i)] = generate_data_hyper(globals()['res_lsq_hyper_nonlinear_{}'.format(i)].x,
|
|
||||||
globals()['step_{}_time_correction'.format(i)])
|
|
||||||
|
|
||||||
# 최종 단계 침하곡선 작성
|
|
||||||
globals()['step_{}_prediction_curve'.format(i)] = settlement_prediction_curve(globals()['settle_hyper_nonlinear_{}'.format(i)],
|
|
||||||
globals()['yp_{}'.format(i)])
|
|
||||||
|
|
||||||
# 최종단계 보정 예측 침하량 산정
|
|
||||||
globals()['settle_predicted_{}'.format(i)] = fun_step_prediction_correction(globals()['ym_{}'.format(i)],
|
|
||||||
globals()['step_{}_prediction_curve'.format(i)])
|
|
||||||
|
|
||||||
'''
|
|
||||||
나중에: 그래프 작성
|
|
||||||
'''
|
|
||||||
|
|
||||||
# 그래프 크기, 서브 그래프 개수 및 비율 설정
|
|
||||||
f, axes = plt.subplots(2,1, figsize=(10, 10),
|
|
||||||
gridspec_kw={'height_ratios':[1,2]})
|
|
||||||
|
|
||||||
# 성토고 그래프 표시
|
|
||||||
axes[0].plot(time, surcharge, color='black', label='surcharge height')
|
|
||||||
|
|
||||||
axes[0].set_ylabel("Surcharge height (m)", fontsize = 17)
|
|
||||||
axes[0].set_xlim(left = 0)
|
|
||||||
axes[0].grid(color="gray", alpha=.5, linestyle='--')
|
|
||||||
axes[0].tick_params(direction='in')
|
|
||||||
|
|
||||||
# 계측 침하량 표시
|
|
||||||
axes[1].scatter(time, -settle, s = 50, facecolors='white', edgecolors='black', label = 'measured data')
|
|
||||||
|
|
||||||
# 예측 침하량 표시
|
|
||||||
axes[1].plot(time, -settle_predicted_0, linestyle='--', color='red', label='Predicted Curve_Step 1')
|
|
||||||
axes[1].plot(tmm_1, -settle_predicted_1, linestyle='--', color='blue', label='Predicted Curve_Step 2')
|
|
||||||
axes[1].plot(tmm_2, -settle_predicted_2, linestyle='--', color='green', label='Predicted Curve_Step 3')
|
|
||||||
axes[1].plot(tm_3, -settle_predicted_3, linestyle='--', color='orange', label='Predicted Curve_Step 4')
|
|
||||||
|
|
||||||
# 예측 침하량 그래프 설정
|
|
||||||
axes[1].set_xlabel("Time (day)", fontsize = 17)
|
|
||||||
axes[1].set_ylabel("Settlement (mm)", fontsize = 17)
|
|
||||||
axes[1].set_ylim(top = 0)
|
|
||||||
axes[1].set_ylim(bottom = -1.5 * settle.max())
|
|
||||||
axes[1].set_xlim(left = 0)
|
|
||||||
|
|
||||||
# 범례 표시
|
|
||||||
axes[1].legend(loc=1, ncol=2, frameon=True, fontsize=12)
|
|
||||||
|
|
||||||
# 그래프 저장 및 출력
|
|
||||||
plt.savefig('3_SP-68_Rev.4_Test.svg', dpi=300)
|
|
||||||
plt.show()
|
|
||||||
2042
main_Rev.4.svg
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 150 KiB |
|
|
@ -6,7 +6,7 @@
|
||||||
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
<cc:Work>
|
<cc:Work>
|
||||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
<dc:date>2022-08-13T16:51:38.196337</dc:date>
|
<dc:date>2022-10-08T17:44:39.058006</dc:date>
|
||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:creator>
|
<dc:creator>
|
||||||
<cc:Agent>
|
<cc:Agent>
|
||||||
|
|
@ -42,16 +42,16 @@ z
|
||||||
<g id="line2d_1">
|
<g id="line2d_1">
|
||||||
<path d="M 56.684375 143.961328
|
<path d="M 56.684375 143.961328
|
||||||
L 56.684375 30.561328
|
L 56.684375 30.561328
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_2">
|
<g id="line2d_2">
|
||||||
<defs>
|
<defs>
|
||||||
<path id="m2e2981a0fb" d="M 0 0
|
<path id="m49b08245b3" d="M 0 0
|
||||||
L 0 -3.5
|
L 0 -3.5
|
||||||
" style="stroke: #000000; stroke-width: 0.8"/>
|
" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</defs>
|
</defs>
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="56.684375" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="56.684375" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_1">
|
<g id="text_1">
|
||||||
|
|
@ -88,11 +88,11 @@ z
|
||||||
<g id="line2d_3">
|
<g id="line2d_3">
|
||||||
<path d="M 192.948111 143.961328
|
<path d="M 192.948111 143.961328
|
||||||
L 192.948111 30.561328
|
L 192.948111 30.561328
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_4">
|
<g id="line2d_4">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="192.948111" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="192.948111" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_2">
|
<g id="text_2">
|
||||||
|
|
@ -134,11 +134,11 @@ z
|
||||||
<g id="line2d_5">
|
<g id="line2d_5">
|
||||||
<path d="M 329.211848 143.961328
|
<path d="M 329.211848 143.961328
|
||||||
L 329.211848 30.561328
|
L 329.211848 30.561328
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_6">
|
<g id="line2d_6">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="329.211848" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="329.211848" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_3">
|
<g id="text_3">
|
||||||
|
|
@ -175,11 +175,11 @@ z
|
||||||
<g id="line2d_7">
|
<g id="line2d_7">
|
||||||
<path d="M 465.475584 143.961328
|
<path d="M 465.475584 143.961328
|
||||||
L 465.475584 30.561328
|
L 465.475584 30.561328
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_8">
|
<g id="line2d_8">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="465.475584" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="465.475584" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_4">
|
<g id="text_4">
|
||||||
|
|
@ -227,11 +227,11 @@ z
|
||||||
<g id="line2d_9">
|
<g id="line2d_9">
|
||||||
<path d="M 601.73932 143.961328
|
<path d="M 601.73932 143.961328
|
||||||
L 601.73932 30.561328
|
L 601.73932 30.561328
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_10">
|
<g id="line2d_10">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="601.73932" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="601.73932" y="143.961328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_5">
|
<g id="text_5">
|
||||||
|
|
@ -290,16 +290,16 @@ z
|
||||||
<g id="line2d_11">
|
<g id="line2d_11">
|
||||||
<path d="M 56.684375 125.083286
|
<path d="M 56.684375 125.083286
|
||||||
L 726.284375 125.083286
|
L 726.284375 125.083286
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_12">
|
<g id="line2d_12">
|
||||||
<defs>
|
<defs>
|
||||||
<path id="m3e2250e2fe" d="M 0 0
|
<path id="m5133ebe584" d="M 0 0
|
||||||
L 3.5 0
|
L 3.5 0
|
||||||
" style="stroke: #000000; stroke-width: 0.8"/>
|
" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</defs>
|
</defs>
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="125.083286" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="125.083286" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_6">
|
<g id="text_6">
|
||||||
|
|
@ -313,11 +313,11 @@ L 3.5 0
|
||||||
<g id="line2d_13">
|
<g id="line2d_13">
|
||||||
<path d="M 56.684375 97.636292
|
<path d="M 56.684375 97.636292
|
||||||
L 726.284375 97.636292
|
L 726.284375 97.636292
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_14">
|
<g id="line2d_14">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="97.636292" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="97.636292" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_7">
|
<g id="text_7">
|
||||||
|
|
@ -365,11 +365,11 @@ z
|
||||||
<g id="line2d_15">
|
<g id="line2d_15">
|
||||||
<path d="M 56.684375 70.189298
|
<path d="M 56.684375 70.189298
|
||||||
L 726.284375 70.189298
|
L 726.284375 70.189298
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_16">
|
<g id="line2d_16">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="70.189298" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="70.189298" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_8">
|
<g id="text_8">
|
||||||
|
|
@ -383,11 +383,11 @@ L 726.284375 70.189298
|
||||||
<g id="line2d_17">
|
<g id="line2d_17">
|
||||||
<path d="M 56.684375 42.742304
|
<path d="M 56.684375 42.742304
|
||||||
L 726.284375 42.742304
|
L 726.284375 42.742304
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_18">
|
<g id="line2d_18">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="42.742304" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="42.742304" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_9">
|
<g id="text_9">
|
||||||
|
|
@ -755,7 +755,7 @@ L 256.992067 67.581833
|
||||||
L 261.079979 35.715874
|
L 261.079979 35.715874
|
||||||
L 694.398661 35.715874
|
L 694.398661 35.715874
|
||||||
L 694.398661 35.715874
|
L 694.398661 35.715874
|
||||||
" clip-path="url(#p5e92c73fb3)" style="fill: none; stroke: #000000; stroke-width: 1.5; stroke-linecap: square"/>
|
" clip-path="url(#p400380a3d8)" style="fill: none; stroke: #000000; stroke-width: 1.5; stroke-linecap: square"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_3">
|
<g id="patch_3">
|
||||||
<path d="M 56.684375 143.961328
|
<path d="M 56.684375 143.961328
|
||||||
|
|
@ -789,7 +789,7 @@ z
|
||||||
</g>
|
</g>
|
||||||
<g id="PathCollection_1">
|
<g id="PathCollection_1">
|
||||||
<defs>
|
<defs>
|
||||||
<path id="m587d138e69" d="M 0 3.535534
|
<path id="mb1583126d7" d="M 0 3.535534
|
||||||
C 0.937635 3.535534 1.836992 3.163008 2.5 2.5
|
C 0.937635 3.535534 1.836992 3.163008 2.5 2.5
|
||||||
C 3.163008 1.836992 3.535534 0.937635 3.535534 0
|
C 3.163008 1.836992 3.535534 0.937635 3.535534 0
|
||||||
C 3.535534 -0.937635 3.163008 -1.836992 2.5 -2.5
|
C 3.535534 -0.937635 3.163008 -1.836992 2.5 -2.5
|
||||||
|
|
@ -801,131 +801,131 @@ C -1.836992 3.163008 -0.937635 3.535534 0 3.535534
|
||||||
z
|
z
|
||||||
" style="stroke: #000000"/>
|
" style="stroke: #000000"/>
|
||||||
</defs>
|
</defs>
|
||||||
<g clip-path="url(#pdb9f71be6c)">
|
<g clip-path="url(#pbc9021e9bd)">
|
||||||
<use xlink:href="#m587d138e69" x="56.684375" y="189.321328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="56.684375" y="189.321328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="60.090968" y="198.717328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="60.090968" y="198.717328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="61.453606" y="202.227328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="61.453606" y="202.227328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="64.17888" y="206.709328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="64.17888" y="206.709328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="66.222837" y="211.839328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="66.222837" y="211.839328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="70.992067" y="223.935328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="70.992067" y="223.935328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="75.761298" y="228.471328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="75.761298" y="228.471328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="80.530529" y="231.873328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="80.530529" y="231.873328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="85.29976" y="239.703328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="85.29976" y="239.703328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="89.387672" y="244.671328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="89.387672" y="244.671328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="92.794265" y="247.641328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="92.794265" y="247.641328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="93.475584" y="248.289328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="93.475584" y="248.289328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="94.156902" y="248.937328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="94.156902" y="248.937328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="94.838221" y="249.585328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="94.838221" y="249.585328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="96.882177" y="252.663328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="96.882177" y="252.663328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="97.563496" y="253.689328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="97.563496" y="253.689328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="98.244815" y="254.715328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="98.244815" y="254.715328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="98.926133" y="255.579328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="98.926133" y="255.579328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="102.332727" y="259.629328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="102.332727" y="259.629328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="103.014045" y="260.547328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="103.014045" y="260.547328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="103.695364" y="261.465328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="103.695364" y="261.465328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="104.376683" y="262.437328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="104.376683" y="262.437328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="107.101957" y="265.677328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="107.101957" y="265.677328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="107.783276" y="266.487328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="107.783276" y="266.487328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="108.464595" y="267.297328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="108.464595" y="267.297328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="109.145913" y="268.269328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="109.145913" y="268.269328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="111.18987" y="269.889328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="111.18987" y="269.889328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="111.871188" y="270.429328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="111.871188" y="270.429328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="112.552507" y="270.969328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="112.552507" y="270.969328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="113.233826" y="271.509328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="113.233826" y="271.509328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="118.684375" y="277.233328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="118.684375" y="277.233328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="123.453606" y="281.121328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="123.453606" y="281.121328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="128.222837" y="284.901328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="128.222837" y="284.901328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="132.992067" y="287.817328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="132.992067" y="287.817328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="135.036023" y="289.221328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="135.036023" y="289.221328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="136.398661" y="290.031328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="136.398661" y="290.031328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="137.079979" y="290.463328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="137.079979" y="290.463328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="139.805254" y="298.887328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="139.805254" y="298.887328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="141.167891" y="302.991328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="141.167891" y="302.991328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="141.84921" y="305.151328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="141.84921" y="305.151328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="142.530529" y="307.365328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="142.530529" y="307.365328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="144.574485" y="309.417328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="144.574485" y="309.417328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="145.255804" y="310.119328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="145.255804" y="310.119328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="145.937122" y="310.821328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="145.937122" y="310.821328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="146.618441" y="311.523328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="146.618441" y="311.523328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="147.29976" y="312.171328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="147.29976" y="312.171328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="149.343716" y="314.439328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="149.343716" y="314.439328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="150.025034" y="315.195328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="150.025034" y="315.195328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="150.706353" y="315.951328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="150.706353" y="315.951328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="151.387672" y="316.707328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="151.387672" y="316.707328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="152.06899" y="317.463328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="152.06899" y="317.463328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="154.112946" y="319.299328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="154.112946" y="319.299328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="156.838221" y="321.891328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="156.838221" y="321.891328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="159.563496" y="324.159328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="159.563496" y="324.159328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="161.607452" y="325.833328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="161.607452" y="325.833328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="164.332727" y="328.533328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="164.332727" y="328.533328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="166.376683" y="330.315328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="166.376683" y="330.315328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="168.420639" y="331.935328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="168.420639" y="331.935328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="171.145913" y="334.041328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="171.145913" y="334.041328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="173.871188" y="336.309328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="173.871188" y="336.309328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="175.915144" y="338.091328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="175.915144" y="338.091328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="180.003056" y="342.411328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="180.003056" y="342.411328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="187.497562" y="347.811328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="187.497562" y="347.811328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="189.541518" y="349.269328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="189.541518" y="349.269328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="192.266793" y="352.023328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="192.266793" y="352.023328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="194.310749" y="353.805328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="194.310749" y="353.805328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="199.079979" y="357.315328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="199.079979" y="357.315328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="203.84921" y="359.961328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="203.84921" y="359.961328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="208.618441" y="363.363328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="208.618441" y="363.363328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="213.387672" y="365.631328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="213.387672" y="365.631328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="218.156902" y="368.385328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="218.156902" y="368.385328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="222.926133" y="371.031328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="222.926133" y="371.031328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="227.695364" y="373.569328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="227.695364" y="373.569328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="232.464595" y="376.215328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="232.464595" y="376.215328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="237.915144" y="378.807328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="237.915144" y="378.807328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="242.684375" y="380.481328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="242.684375" y="380.481328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="247.453606" y="381.561328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="247.453606" y="381.561328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="251.541518" y="382.641328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="251.541518" y="382.641328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="256.992067" y="384.207328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="256.992067" y="384.207328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="261.079979" y="385.341328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="261.079979" y="385.341328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="261.761298" y="385.557328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="261.761298" y="385.557328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="263.805254" y="386.853328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="263.805254" y="386.853328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="264.486573" y="387.231328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="264.486573" y="387.231328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="265.167891" y="387.609328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="265.167891" y="387.609328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="265.84921" y="387.987328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="265.84921" y="387.987328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="266.530529" y="388.311328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="266.530529" y="388.311328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="268.574485" y="388.851328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="268.574485" y="388.851328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="269.255804" y="389.013328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="269.255804" y="389.013328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="269.937122" y="389.175328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="269.937122" y="389.175328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="270.618441" y="389.337328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="270.618441" y="389.337328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="279.475584" y="393.117328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="279.475584" y="393.117328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="280.838221" y="393.711328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="280.838221" y="393.711328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="285.607452" y="395.493328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="285.607452" y="395.493328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="290.376683" y="397.491328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="290.376683" y="397.491328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="295.145913" y="399.057328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="295.145913" y="399.057328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="299.915144" y="400.515328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="299.915144" y="400.515328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="304.684375" y="402.135328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="304.684375" y="402.135328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="309.453606" y="403.755328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="309.453606" y="403.755328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="313.541518" y="405.051328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="313.541518" y="405.051328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="318.992067" y="406.077328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="318.992067" y="406.077328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="321.036023" y="406.563328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="321.036023" y="406.563328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="321.717342" y="406.725328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="321.717342" y="406.725328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="322.398661" y="406.887328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="322.398661" y="406.887328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="323.079979" y="407.049328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="323.079979" y="407.049328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="323.761298" y="407.211328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="323.761298" y="407.211328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="325.805254" y="407.697328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="325.805254" y="407.697328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="327.167891" y="408.021328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="327.167891" y="408.021328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="327.84921" y="408.183328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="327.84921" y="408.183328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="330.574485" y="408.831328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="330.574485" y="408.831328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="331.937122" y="409.155328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="331.937122" y="409.155328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="332.618441" y="409.317328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="332.618441" y="409.317328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="333.29976" y="409.425328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="333.29976" y="409.425328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="335.343716" y="409.749328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="335.343716" y="409.749328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="336.706353" y="409.965328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="336.706353" y="409.965328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="342.156902" y="410.829328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="342.156902" y="410.829328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="342.838221" y="410.991328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="342.838221" y="410.991328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="346.244815" y="411.531328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="346.244815" y="411.531328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="346.926133" y="411.639328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="346.926133" y="411.639328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="352.376683" y="412.503328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="352.376683" y="412.503328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="356.464595" y="413.151328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="356.464595" y="413.151328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="361.233826" y="413.907328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="361.233826" y="413.907328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="366.684375" y="414.771328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="366.684375" y="414.771328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="370.772287" y="415.419328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="370.772287" y="415.419328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
<use xlink:href="#m587d138e69" x="375.541518" y="416.121328" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="375.541518" y="416.121328" style="fill: #ffffff; stroke: #000000"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_8">
|
<g id="patch_8">
|
||||||
|
|
@ -934,7 +934,7 @@ L 56.684375 189.321328
|
||||||
L 283.972287 189.321328
|
L 283.972287 189.321328
|
||||||
L 283.972287 529.521328
|
L 283.972287 529.521328
|
||||||
z
|
z
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: url(#hb8e50bd2d2); opacity: 0.1; stroke: #808080; stroke-linejoin: miter"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: url(#hbe012171af); opacity: 0.1; stroke: #808080; stroke-linejoin: miter"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_9">
|
<g id="patch_9">
|
||||||
<path d="M 261.079979 529.521328
|
<path d="M 261.079979 529.521328
|
||||||
|
|
@ -942,7 +942,7 @@ L 261.079979 189.321328
|
||||||
L 283.972287 189.321328
|
L 283.972287 189.321328
|
||||||
L 283.972287 529.521328
|
L 283.972287 529.521328
|
||||||
z
|
z
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: url(#h606eb00241); opacity: 0.1; stroke: #808080; stroke-linejoin: miter"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: url(#h6625523e7f); opacity: 0.1; stroke: #808080; stroke-linejoin: miter"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_10">
|
<g id="patch_10">
|
||||||
<path d="M 283.972287 484.161328
|
<path d="M 283.972287 484.161328
|
||||||
|
|
@ -953,7 +953,7 @@ L 56.684375 484.161058
|
||||||
L 277.595144 484.161058
|
L 277.595144 484.161058
|
||||||
L 277.595144 480.759328
|
L 277.595144 480.759328
|
||||||
z
|
z
|
||||||
" clip-path="url(#pdb9f71be6c)" style="stroke: #000000; stroke-linejoin: miter"/>
|
" clip-path="url(#pbc9021e9bd)" style="stroke: #000000; stroke-linejoin: miter"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_11">
|
<g id="patch_11">
|
||||||
<path d="M 56.684375 484.161328
|
<path d="M 56.684375 484.161328
|
||||||
|
|
@ -964,7 +964,7 @@ L 283.972287 484.161598
|
||||||
L 63.061518 484.161598
|
L 63.061518 484.161598
|
||||||
L 63.061518 487.563328
|
L 63.061518 487.563328
|
||||||
z
|
z
|
||||||
" clip-path="url(#pdb9f71be6c)" style="stroke: #000000; stroke-linejoin: miter"/>
|
" clip-path="url(#pbc9021e9bd)" style="stroke: #000000; stroke-linejoin: miter"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_12">
|
<g id="patch_12">
|
||||||
<path d="M 283.972287 506.841328
|
<path d="M 283.972287 506.841328
|
||||||
|
|
@ -975,7 +975,7 @@ L 261.079979 506.841058
|
||||||
L 277.595144 506.841058
|
L 277.595144 506.841058
|
||||||
L 277.595144 503.439328
|
L 277.595144 503.439328
|
||||||
z
|
z
|
||||||
" clip-path="url(#pdb9f71be6c)" style="stroke: #000000; stroke-linejoin: miter"/>
|
" clip-path="url(#pbc9021e9bd)" style="stroke: #000000; stroke-linejoin: miter"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_13">
|
<g id="patch_13">
|
||||||
<path d="M 261.079979 506.841328
|
<path d="M 261.079979 506.841328
|
||||||
|
|
@ -986,7 +986,7 @@ L 283.972287 506.841598
|
||||||
L 267.457122 506.841598
|
L 267.457122 506.841598
|
||||||
L 267.457122 510.243328
|
L 267.457122 510.243328
|
||||||
z
|
z
|
||||||
" clip-path="url(#pdb9f71be6c)" style="stroke: #000000; stroke-linejoin: miter"/>
|
" clip-path="url(#pbc9021e9bd)" style="stroke: #000000; stroke-linejoin: miter"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_14">
|
<g id="patch_14">
|
||||||
<path d="M 375.541518 314.061328
|
<path d="M 375.541518 314.061328
|
||||||
|
|
@ -997,7 +997,7 @@ L 283.972287 314.061058
|
||||||
L 369.164375 314.061058
|
L 369.164375 314.061058
|
||||||
L 369.164375 310.659328
|
L 369.164375 310.659328
|
||||||
z
|
z
|
||||||
" clip-path="url(#pdb9f71be6c)" style="stroke: #000000; stroke-linejoin: miter"/>
|
" clip-path="url(#pbc9021e9bd)" style="stroke: #000000; stroke-linejoin: miter"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_15">
|
<g id="patch_15">
|
||||||
<path d="M 283.972287 314.061328
|
<path d="M 283.972287 314.061328
|
||||||
|
|
@ -1008,18 +1008,18 @@ L 375.541518 314.061598
|
||||||
L 290.34943 314.061598
|
L 290.34943 314.061598
|
||||||
L 290.34943 317.463328
|
L 290.34943 317.463328
|
||||||
z
|
z
|
||||||
" clip-path="url(#pdb9f71be6c)" style="stroke: #000000; stroke-linejoin: miter"/>
|
" clip-path="url(#pbc9021e9bd)" style="stroke: #000000; stroke-linejoin: miter"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="matplotlib.axis_3">
|
<g id="matplotlib.axis_3">
|
||||||
<g id="xtick_6">
|
<g id="xtick_6">
|
||||||
<g id="line2d_20">
|
<g id="line2d_20">
|
||||||
<path d="M 56.684375 529.521328
|
<path d="M 56.684375 529.521328
|
||||||
L 56.684375 189.321328
|
L 56.684375 189.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_21">
|
<g id="line2d_21">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="56.684375" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="56.684375" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_11">
|
<g id="text_11">
|
||||||
|
|
@ -1033,11 +1033,11 @@ L 56.684375 189.321328
|
||||||
<g id="line2d_22">
|
<g id="line2d_22">
|
||||||
<path d="M 192.948111 529.521328
|
<path d="M 192.948111 529.521328
|
||||||
L 192.948111 189.321328
|
L 192.948111 189.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_23">
|
<g id="line2d_23">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="192.948111" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="192.948111" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_12">
|
<g id="text_12">
|
||||||
|
|
@ -1053,11 +1053,11 @@ L 192.948111 189.321328
|
||||||
<g id="line2d_24">
|
<g id="line2d_24">
|
||||||
<path d="M 329.211848 529.521328
|
<path d="M 329.211848 529.521328
|
||||||
L 329.211848 189.321328
|
L 329.211848 189.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_25">
|
<g id="line2d_25">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="329.211848" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="329.211848" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_13">
|
<g id="text_13">
|
||||||
|
|
@ -1073,11 +1073,11 @@ L 329.211848 189.321328
|
||||||
<g id="line2d_26">
|
<g id="line2d_26">
|
||||||
<path d="M 465.475584 529.521328
|
<path d="M 465.475584 529.521328
|
||||||
L 465.475584 189.321328
|
L 465.475584 189.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_27">
|
<g id="line2d_27">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="465.475584" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="465.475584" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_14">
|
<g id="text_14">
|
||||||
|
|
@ -1093,11 +1093,11 @@ L 465.475584 189.321328
|
||||||
<g id="line2d_28">
|
<g id="line2d_28">
|
||||||
<path d="M 601.73932 529.521328
|
<path d="M 601.73932 529.521328
|
||||||
L 601.73932 189.321328
|
L 601.73932 189.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_29">
|
<g id="line2d_29">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m2e2981a0fb" x="601.73932" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m49b08245b3" x="601.73932" y="529.521328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_15">
|
<g id="text_15">
|
||||||
|
|
@ -1186,11 +1186,11 @@ z
|
||||||
<g id="line2d_30">
|
<g id="line2d_30">
|
||||||
<path d="M 56.684375 513.321328
|
<path d="M 56.684375 513.321328
|
||||||
L 726.284375 513.321328
|
L 726.284375 513.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_31">
|
<g id="line2d_31">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="513.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="513.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_17">
|
<g id="text_17">
|
||||||
|
|
@ -1216,11 +1216,11 @@ z
|
||||||
<g id="line2d_32">
|
<g id="line2d_32">
|
||||||
<path d="M 56.684375 459.321328
|
<path d="M 56.684375 459.321328
|
||||||
L 726.284375 459.321328
|
L 726.284375 459.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_33">
|
<g id="line2d_33">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="459.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="459.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_18">
|
<g id="text_18">
|
||||||
|
|
@ -1237,11 +1237,11 @@ L 726.284375 459.321328
|
||||||
<g id="line2d_34">
|
<g id="line2d_34">
|
||||||
<path d="M 56.684375 405.321328
|
<path d="M 56.684375 405.321328
|
||||||
L 726.284375 405.321328
|
L 726.284375 405.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_35">
|
<g id="line2d_35">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="405.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="405.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_19">
|
<g id="text_19">
|
||||||
|
|
@ -1258,11 +1258,11 @@ L 726.284375 405.321328
|
||||||
<g id="line2d_36">
|
<g id="line2d_36">
|
||||||
<path d="M 56.684375 351.321328
|
<path d="M 56.684375 351.321328
|
||||||
L 726.284375 351.321328
|
L 726.284375 351.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_37">
|
<g id="line2d_37">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="351.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="351.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_20">
|
<g id="text_20">
|
||||||
|
|
@ -1279,11 +1279,11 @@ L 726.284375 351.321328
|
||||||
<g id="line2d_38">
|
<g id="line2d_38">
|
||||||
<path d="M 56.684375 297.321328
|
<path d="M 56.684375 297.321328
|
||||||
L 726.284375 297.321328
|
L 726.284375 297.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_39">
|
<g id="line2d_39">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="297.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="297.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_21">
|
<g id="text_21">
|
||||||
|
|
@ -1300,11 +1300,11 @@ L 726.284375 297.321328
|
||||||
<g id="line2d_40">
|
<g id="line2d_40">
|
||||||
<path d="M 56.684375 243.321328
|
<path d="M 56.684375 243.321328
|
||||||
L 726.284375 243.321328
|
L 726.284375 243.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_41">
|
<g id="line2d_41">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="243.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="243.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_22">
|
<g id="text_22">
|
||||||
|
|
@ -1337,11 +1337,11 @@ z
|
||||||
<g id="line2d_42">
|
<g id="line2d_42">
|
||||||
<path d="M 56.684375 189.321328
|
<path d="M 56.684375 189.321328
|
||||||
L 726.284375 189.321328
|
L 726.284375 189.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #808080; stroke-opacity: 0.5; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_43">
|
<g id="line2d_43">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m3e2250e2fe" x="56.684375" y="189.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
<use xlink:href="#m5133ebe584" x="56.684375" y="189.321328" style="stroke: #000000; stroke-width: 0.8"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_23">
|
<g id="text_23">
|
||||||
|
|
@ -1414,63 +1414,63 @@ L 89.387672 243.792605
|
||||||
L 92.794265 247.641328
|
L 92.794265 247.641328
|
||||||
L 94.838221 250.525417
|
L 94.838221 250.525417
|
||||||
L 98.926133 255.92897
|
L 98.926133 255.92897
|
||||||
L 104.376683 262.465552
|
L 104.376683 262.465551
|
||||||
L 109.145913 267.644303
|
L 109.145913 267.644302
|
||||||
L 113.233826 271.734137
|
L 113.233826 271.734136
|
||||||
L 118.684375 276.748233
|
L 118.684375 276.748233
|
||||||
L 123.453606 280.772883
|
L 123.453606 280.772883
|
||||||
L 128.222837 284.499409
|
L 128.222837 284.499409
|
||||||
L 135.036023 289.369477
|
L 135.036023 289.369478
|
||||||
L 137.079979 290.736925
|
L 137.079979 290.736926
|
||||||
L 139.805254 298.887328
|
L 139.805254 298.887328
|
||||||
L 142.530529 302.983161
|
L 142.530529 302.983168
|
||||||
L 147.29976 309.665129
|
L 147.29976 309.665145
|
||||||
L 152.06899 315.797703
|
L 152.06899 315.797725
|
||||||
L 156.838221 321.448884
|
L 156.838221 321.44891
|
||||||
L 161.607452 326.675552
|
L 161.607452 326.675579
|
||||||
L 166.376683 331.525698
|
L 166.376683 331.525725
|
||||||
L 171.145913 336.040132
|
L 171.145913 336.040159
|
||||||
L 175.915144 340.253804
|
L 175.915144 340.253829
|
||||||
L 180.003056 343.649093
|
L 180.003056 343.649116
|
||||||
L 189.541518 350.888289
|
L 189.541518 350.888306
|
||||||
L 194.310749 354.191032
|
L 194.310749 354.191045
|
||||||
L 199.079979 357.307215
|
L 199.079979 357.307225
|
||||||
L 203.84921 360.252657
|
L 203.84921 360.252663
|
||||||
L 208.618441 363.041395
|
L 208.618441 363.041396
|
||||||
L 213.387672 365.685935
|
L 213.387672 365.685932
|
||||||
L 222.926133 370.585994
|
L 222.926133 370.585983
|
||||||
L 232.464595 375.029328
|
L 232.464595 375.029309
|
||||||
L 242.684375 379.353742
|
L 242.684375 379.353714
|
||||||
L 251.541518 382.783921
|
L 251.541518 382.783886
|
||||||
L 256.992067 384.764083
|
L 256.992067 384.764044
|
||||||
L 261.079979 385.341328
|
L 261.079979 385.341328
|
||||||
L 264.486573 387.078918
|
L 264.486573 387.078919
|
||||||
L 268.574485 388.91495
|
L 268.574485 388.914951
|
||||||
L 270.618441 389.760951
|
L 270.618441 389.760951
|
||||||
L 280.838221 393.520735
|
L 280.838221 393.520733
|
||||||
L 290.376683 396.559713
|
L 290.376683 396.559708
|
||||||
L 299.915144 399.293855
|
L 299.915144 399.293845
|
||||||
L 309.453606 401.79341
|
L 309.453606 401.793396
|
||||||
L 322.398661 404.883194
|
L 322.398661 404.883174
|
||||||
L 333.29976 407.259485
|
L 333.29976 407.259461
|
||||||
L 346.926133 409.98507
|
L 346.926133 409.985039
|
||||||
L 361.233826 412.595709
|
L 361.233826 412.595672
|
||||||
L 376.222837 415.093656
|
L 376.222837 415.093614
|
||||||
L 392.292323 417.539191
|
L 392.292323 417.539142
|
||||||
L 408.361809 419.776029
|
L 408.361809 419.775975
|
||||||
L 427.645192 422.221889
|
L 427.645192 422.221827
|
||||||
L 446.928575 424.442745
|
L 446.928575 424.442678
|
||||||
L 469.425856 426.789544
|
L 469.425856 426.78947
|
||||||
L 491.923136 428.910277
|
L 491.923136 428.910198
|
||||||
L 517.634314 431.097418
|
L 517.634314 431.097333
|
||||||
L 543.345492 433.068527
|
L 543.345492 433.068435
|
||||||
L 572.270567 435.065893
|
L 572.270567 435.065796
|
||||||
L 604.409539 437.052849
|
L 604.409539 437.052747
|
||||||
L 639.762408 439.000318
|
L 639.762408 439.00021
|
||||||
L 678.329175 440.886358
|
L 678.329175 440.886244
|
||||||
L 694.398661 441.608607
|
L 694.398661 441.608492
|
||||||
L 694.398661 441.608607
|
L 694.398661 441.608492
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke: #0000ff; stroke-width: 1.5; stroke-linecap: square"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke: #0000ff; stroke-width: 1.5; stroke-linecap: square"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_45">
|
<g id="line2d_45">
|
||||||
<path d="M 261.079979 385.341328
|
<path d="M 261.079979 385.341328
|
||||||
|
|
@ -1497,7 +1497,7 @@ L 604.409539 419.473462
|
||||||
L 659.045791 420.398907
|
L 659.045791 420.398907
|
||||||
L 694.398661 420.893099
|
L 694.398661 420.893099
|
||||||
L 694.398661 420.893099
|
L 694.398661 420.893099
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #008000; stroke-width: 1.5"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #008000; stroke-width: 1.5"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_46">
|
<g id="line2d_46">
|
||||||
<path d="M 261.079979 385.341328
|
<path d="M 261.079979 385.341328
|
||||||
|
|
@ -1527,12 +1527,12 @@ L 620.479025 441.299597
|
||||||
L 655.831894 442.963769
|
L 655.831894 442.963769
|
||||||
L 694.398661 444.557189
|
L 694.398661 444.557189
|
||||||
L 694.398661 444.557189
|
L 694.398661 444.557189
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #ff0000; stroke-width: 1.5"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #ff0000; stroke-width: 1.5"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="line2d_47">
|
<g id="line2d_47">
|
||||||
<path d="M 375.541518 529.521328
|
<path d="M 375.541518 529.521328
|
||||||
L 375.541518 189.321328
|
L 375.541518 189.321328
|
||||||
" clip-path="url(#pdb9f71be6c)" style="fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #c0c0c0; stroke-width: 1.5"/>
|
" clip-path="url(#pbc9021e9bd)" style="fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #c0c0c0; stroke-width: 1.5"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="patch_16">
|
<g id="patch_16">
|
||||||
<path d="M 56.684375 529.521328
|
<path d="M 56.684375 529.521328
|
||||||
|
|
@ -2031,7 +2031,7 @@ z
|
||||||
<use xlink:href="#DejaVuSans-6f" x="1151.261719"/>
|
<use xlink:href="#DejaVuSans-6f" x="1151.261719"/>
|
||||||
<use xlink:href="#DejaVuSans-72" x="1212.443359"/>
|
<use xlink:href="#DejaVuSans-72" x="1212.443359"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- Nonlinear + Step Loading: 3.294 -->
|
<!-- Nonlinear + Step Loading: 3.326 -->
|
||||||
<g style="fill: #ff0000" transform="translate(498.151786 268.576828)scale(0.12 -0.12)">
|
<g style="fill: #ff0000" transform="translate(498.151786 268.576828)scale(0.12 -0.12)">
|
||||||
<defs>
|
<defs>
|
||||||
<path id="DejaVuSans-3a" d="M 750 794
|
<path id="DejaVuSans-3a" d="M 750 794
|
||||||
|
|
@ -2053,36 +2053,6 @@ L 1344 0
|
||||||
L 684 0
|
L 684 0
|
||||||
L 684 794
|
L 684 794
|
||||||
z
|
z
|
||||||
" transform="scale(0.015625)"/>
|
|
||||||
<path id="DejaVuSans-39" d="M 703 97
|
|
||||||
L 703 672
|
|
||||||
Q 941 559 1184 500
|
|
||||||
Q 1428 441 1663 441
|
|
||||||
Q 2288 441 2617 861
|
|
||||||
Q 2947 1281 2994 2138
|
|
||||||
Q 2813 1869 2534 1725
|
|
||||||
Q 2256 1581 1919 1581
|
|
||||||
Q 1219 1581 811 2004
|
|
||||||
Q 403 2428 403 3163
|
|
||||||
Q 403 3881 828 4315
|
|
||||||
Q 1253 4750 1959 4750
|
|
||||||
Q 2769 4750 3195 4129
|
|
||||||
Q 3622 3509 3622 2328
|
|
||||||
Q 3622 1225 3098 567
|
|
||||||
Q 2575 -91 1691 -91
|
|
||||||
Q 1453 -91 1209 -44
|
|
||||||
Q 966 3 703 97
|
|
||||||
z
|
|
||||||
M 1959 2075
|
|
||||||
Q 2384 2075 2632 2365
|
|
||||||
Q 2881 2656 2881 3163
|
|
||||||
Q 2881 3666 2632 3958
|
|
||||||
Q 2384 4250 1959 4250
|
|
||||||
Q 1534 4250 1286 3958
|
|
||||||
Q 1038 3666 1038 3163
|
|
||||||
Q 1038 2656 1286 2365
|
|
||||||
Q 1534 2075 1959 2075
|
|
||||||
z
|
|
||||||
" transform="scale(0.015625)"/>
|
" transform="scale(0.015625)"/>
|
||||||
</defs>
|
</defs>
|
||||||
<use xlink:href="#DejaVuSans-4e"/>
|
<use xlink:href="#DejaVuSans-4e"/>
|
||||||
|
|
@ -2113,11 +2083,11 @@ z
|
||||||
<use xlink:href="#DejaVuSans-20" x="1317.292969"/>
|
<use xlink:href="#DejaVuSans-20" x="1317.292969"/>
|
||||||
<use xlink:href="#DejaVuSans-33" x="1349.080078"/>
|
<use xlink:href="#DejaVuSans-33" x="1349.080078"/>
|
||||||
<use xlink:href="#DejaVuSans-2e" x="1412.703125"/>
|
<use xlink:href="#DejaVuSans-2e" x="1412.703125"/>
|
||||||
<use xlink:href="#DejaVuSans-32" x="1444.490234"/>
|
<use xlink:href="#DejaVuSans-33" x="1444.490234"/>
|
||||||
<use xlink:href="#DejaVuSans-39" x="1508.113281"/>
|
<use xlink:href="#DejaVuSans-32" x="1508.113281"/>
|
||||||
<use xlink:href="#DejaVuSans-34" x="1571.736328"/>
|
<use xlink:href="#DejaVuSans-36" x="1571.736328"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- Nonlinear Hyperbolic: 7.395 -->
|
<!-- Nonlinear Hyperbolic: 7.231 -->
|
||||||
<g style="fill: #ff0000" transform="translate(526.218661 282.014203)scale(0.12 -0.12)">
|
<g style="fill: #ff0000" transform="translate(526.218661 282.014203)scale(0.12 -0.12)">
|
||||||
<defs>
|
<defs>
|
||||||
<path id="DejaVuSans-37" d="M 525 4666
|
<path id="DejaVuSans-37" d="M 525 4666
|
||||||
|
|
@ -2155,11 +2125,11 @@ z
|
||||||
<use xlink:href="#DejaVuSans-20" x="1083.398438"/>
|
<use xlink:href="#DejaVuSans-20" x="1083.398438"/>
|
||||||
<use xlink:href="#DejaVuSans-37" x="1115.185547"/>
|
<use xlink:href="#DejaVuSans-37" x="1115.185547"/>
|
||||||
<use xlink:href="#DejaVuSans-2e" x="1178.808594"/>
|
<use xlink:href="#DejaVuSans-2e" x="1178.808594"/>
|
||||||
<use xlink:href="#DejaVuSans-33" x="1210.595703"/>
|
<use xlink:href="#DejaVuSans-32" x="1210.595703"/>
|
||||||
<use xlink:href="#DejaVuSans-39" x="1274.21875"/>
|
<use xlink:href="#DejaVuSans-33" x="1274.21875"/>
|
||||||
<use xlink:href="#DejaVuSans-35" x="1337.841797"/>
|
<use xlink:href="#DejaVuSans-31" x="1337.841797"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- Original Hyperbolic: 1.846 -->
|
<!-- Original Hyperbolic: 1.708 -->
|
||||||
<g style="fill: #ff0000" transform="translate(537.129286 295.451578)scale(0.12 -0.12)">
|
<g style="fill: #ff0000" transform="translate(537.129286 295.451578)scale(0.12 -0.12)">
|
||||||
<use xlink:href="#DejaVuSans-4f"/>
|
<use xlink:href="#DejaVuSans-4f"/>
|
||||||
<use xlink:href="#DejaVuSans-72" x="78.710938"/>
|
<use xlink:href="#DejaVuSans-72" x="78.710938"/>
|
||||||
|
|
@ -2184,9 +2154,9 @@ z
|
||||||
<use xlink:href="#DejaVuSans-20" x="992.480469"/>
|
<use xlink:href="#DejaVuSans-20" x="992.480469"/>
|
||||||
<use xlink:href="#DejaVuSans-31" x="1024.267578"/>
|
<use xlink:href="#DejaVuSans-31" x="1024.267578"/>
|
||||||
<use xlink:href="#DejaVuSans-2e" x="1087.890625"/>
|
<use xlink:href="#DejaVuSans-2e" x="1087.890625"/>
|
||||||
<use xlink:href="#DejaVuSans-38" x="1119.677734"/>
|
<use xlink:href="#DejaVuSans-37" x="1119.677734"/>
|
||||||
<use xlink:href="#DejaVuSans-34" x="1183.300781"/>
|
<use xlink:href="#DejaVuSans-30" x="1183.300781"/>
|
||||||
<use xlink:href="#DejaVuSans-36" x="1246.923828"/>
|
<use xlink:href="#DejaVuSans-38" x="1246.923828"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_29">
|
<g id="text_29">
|
||||||
|
|
@ -2256,7 +2226,7 @@ z
|
||||||
<use xlink:href="#DejaVuSans-6e" x="1647.046875"/>
|
<use xlink:href="#DejaVuSans-6e" x="1647.046875"/>
|
||||||
<use xlink:href="#DejaVuSans-74" x="1710.425781"/>
|
<use xlink:href="#DejaVuSans-74" x="1710.425781"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- Nonlinear + Step Loading: 2.105 -->
|
<!-- Nonlinear + Step Loading: 3.537 -->
|
||||||
<g style="fill: #ff0000" transform="translate(498.151786 359.296828)scale(0.12 -0.12)">
|
<g style="fill: #ff0000" transform="translate(498.151786 359.296828)scale(0.12 -0.12)">
|
||||||
<use xlink:href="#DejaVuSans-4e"/>
|
<use xlink:href="#DejaVuSans-4e"/>
|
||||||
<use xlink:href="#DejaVuSans-6f" x="74.804688"/>
|
<use xlink:href="#DejaVuSans-6f" x="74.804688"/>
|
||||||
|
|
@ -2284,13 +2254,13 @@ z
|
||||||
<use xlink:href="#DejaVuSans-67" x="1220.125"/>
|
<use xlink:href="#DejaVuSans-67" x="1220.125"/>
|
||||||
<use xlink:href="#DejaVuSans-3a" x="1283.601562"/>
|
<use xlink:href="#DejaVuSans-3a" x="1283.601562"/>
|
||||||
<use xlink:href="#DejaVuSans-20" x="1317.292969"/>
|
<use xlink:href="#DejaVuSans-20" x="1317.292969"/>
|
||||||
<use xlink:href="#DejaVuSans-32" x="1349.080078"/>
|
<use xlink:href="#DejaVuSans-33" x="1349.080078"/>
|
||||||
<use xlink:href="#DejaVuSans-2e" x="1412.703125"/>
|
<use xlink:href="#DejaVuSans-2e" x="1412.703125"/>
|
||||||
<use xlink:href="#DejaVuSans-31" x="1444.490234"/>
|
<use xlink:href="#DejaVuSans-35" x="1444.490234"/>
|
||||||
<use xlink:href="#DejaVuSans-30" x="1508.113281"/>
|
<use xlink:href="#DejaVuSans-33" x="1508.113281"/>
|
||||||
<use xlink:href="#DejaVuSans-35" x="1571.736328"/>
|
<use xlink:href="#DejaVuSans-37" x="1571.736328"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- Nonlinear Hyperbolic: 11.345 -->
|
<!-- Nonlinear Hyperbolic: 12.157 -->
|
||||||
<g style="fill: #ff0000" transform="translate(518.583661 372.734203)scale(0.12 -0.12)">
|
<g style="fill: #ff0000" transform="translate(518.583661 372.734203)scale(0.12 -0.12)">
|
||||||
<use xlink:href="#DejaVuSans-4e"/>
|
<use xlink:href="#DejaVuSans-4e"/>
|
||||||
<use xlink:href="#DejaVuSans-6f" x="74.804688"/>
|
<use xlink:href="#DejaVuSans-6f" x="74.804688"/>
|
||||||
|
|
@ -2315,13 +2285,13 @@ z
|
||||||
<use xlink:href="#DejaVuSans-3a" x="1049.707031"/>
|
<use xlink:href="#DejaVuSans-3a" x="1049.707031"/>
|
||||||
<use xlink:href="#DejaVuSans-20" x="1083.398438"/>
|
<use xlink:href="#DejaVuSans-20" x="1083.398438"/>
|
||||||
<use xlink:href="#DejaVuSans-31" x="1115.185547"/>
|
<use xlink:href="#DejaVuSans-31" x="1115.185547"/>
|
||||||
<use xlink:href="#DejaVuSans-31" x="1178.808594"/>
|
<use xlink:href="#DejaVuSans-32" x="1178.808594"/>
|
||||||
<use xlink:href="#DejaVuSans-2e" x="1242.431641"/>
|
<use xlink:href="#DejaVuSans-2e" x="1242.431641"/>
|
||||||
<use xlink:href="#DejaVuSans-33" x="1274.21875"/>
|
<use xlink:href="#DejaVuSans-31" x="1274.21875"/>
|
||||||
<use xlink:href="#DejaVuSans-34" x="1337.841797"/>
|
<use xlink:href="#DejaVuSans-35" x="1337.841797"/>
|
||||||
<use xlink:href="#DejaVuSans-35" x="1401.464844"/>
|
<use xlink:href="#DejaVuSans-37" x="1401.464844"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- Original Hyperbolic: -4.314 -->
|
<!-- Original Hyperbolic: -2.758 -->
|
||||||
<g style="fill: #ff0000" transform="translate(532.799911 386.171578)scale(0.12 -0.12)">
|
<g style="fill: #ff0000" transform="translate(532.799911 386.171578)scale(0.12 -0.12)">
|
||||||
<defs>
|
<defs>
|
||||||
<path id="DejaVuSans-2d" d="M 313 2009
|
<path id="DejaVuSans-2d" d="M 313 2009
|
||||||
|
|
@ -2354,11 +2324,11 @@ z
|
||||||
<use xlink:href="#DejaVuSans-3a" x="958.789062"/>
|
<use xlink:href="#DejaVuSans-3a" x="958.789062"/>
|
||||||
<use xlink:href="#DejaVuSans-20" x="992.480469"/>
|
<use xlink:href="#DejaVuSans-20" x="992.480469"/>
|
||||||
<use xlink:href="#DejaVuSans-2d" x="1024.267578"/>
|
<use xlink:href="#DejaVuSans-2d" x="1024.267578"/>
|
||||||
<use xlink:href="#DejaVuSans-34" x="1060.351562"/>
|
<use xlink:href="#DejaVuSans-32" x="1060.351562"/>
|
||||||
<use xlink:href="#DejaVuSans-2e" x="1123.974609"/>
|
<use xlink:href="#DejaVuSans-2e" x="1123.974609"/>
|
||||||
<use xlink:href="#DejaVuSans-33" x="1155.761719"/>
|
<use xlink:href="#DejaVuSans-37" x="1155.761719"/>
|
||||||
<use xlink:href="#DejaVuSans-31" x="1219.384766"/>
|
<use xlink:href="#DejaVuSans-35" x="1219.384766"/>
|
||||||
<use xlink:href="#DejaVuSans-34" x="1283.007812"/>
|
<use xlink:href="#DejaVuSans-38" x="1283.007812"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_30">
|
<g id="text_30">
|
||||||
|
|
@ -2540,7 +2510,7 @@ z
|
||||||
</g>
|
</g>
|
||||||
<g id="PathCollection_2">
|
<g id="PathCollection_2">
|
||||||
<g>
|
<g>
|
||||||
<use xlink:href="#m587d138e69" x="356.2775" y="206.089453" style="fill: #ffffff; stroke: #000000"/>
|
<use xlink:href="#mb1583126d7" x="356.2775" y="206.089453" style="fill: #ffffff; stroke: #000000"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g id="text_31">
|
<g id="text_31">
|
||||||
|
|
@ -2661,15 +2631,15 @@ L 579.914375 222.653203
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<defs>
|
<defs>
|
||||||
<clipPath id="p5e92c73fb3">
|
<clipPath id="p400380a3d8">
|
||||||
<rect x="56.684375" y="30.561328" width="669.6" height="113.4"/>
|
<rect x="56.684375" y="30.561328" width="669.6" height="113.4"/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
<clipPath id="pdb9f71be6c">
|
<clipPath id="pbc9021e9bd">
|
||||||
<rect x="56.684375" y="189.321328" width="669.6" height="340.2"/>
|
<rect x="56.684375" y="189.321328" width="669.6" height="340.2"/>
|
||||||
</clipPath>
|
</clipPath>
|
||||||
</defs>
|
</defs>
|
||||||
<defs>
|
<defs>
|
||||||
<pattern id="hb8e50bd2d2" patternUnits="userSpaceOnUse" x="0" y="0" width="72" height="72">
|
<pattern id="hbe012171af" patternUnits="userSpaceOnUse" x="0" y="0" width="72" height="72">
|
||||||
<rect x="0" y="0" width="73" height="73" fill="#808080"/>
|
<rect x="0" y="0" width="73" height="73" fill="#808080"/>
|
||||||
<path d="M -36 36
|
<path d="M -36 36
|
||||||
L 36 -36
|
L 36 -36
|
||||||
|
|
@ -2699,7 +2669,7 @@ M 36 108
|
||||||
L 108 36
|
L 108 36
|
||||||
" style="fill: #808080; stroke: #808080; stroke-width: 1.0; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 0.1"/>
|
" style="fill: #808080; stroke: #808080; stroke-width: 1.0; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 0.1"/>
|
||||||
</pattern>
|
</pattern>
|
||||||
<pattern id="h606eb00241" patternUnits="userSpaceOnUse" x="0" y="0" width="72" height="72">
|
<pattern id="h6625523e7f" patternUnits="userSpaceOnUse" x="0" y="0" width="72" height="72">
|
||||||
<rect x="0" y="0" width="73" height="73" fill="#808080"/>
|
<rect x="0" y="0" width="73" height="73" fill="#808080"/>
|
||||||
<path d="M -36 36
|
<path d="M -36 36
|
||||||
L 36 108
|
L 36 108
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 100 KiB |
|
|
@ -1,397 +0,0 @@
|
||||||
"""
|
|
||||||
Title: Soft ground settlement prediction considering the step loading
|
|
||||||
Main Developer: Sang Inn Woo, Ph.D. @ Incheon National University
|
|
||||||
Starting Date: 2022-08-11
|
|
||||||
Abstract:
|
|
||||||
This main objective of this code is to predict
|
|
||||||
time vs. (consolidation) settlement of soft clay ground
|
|
||||||
under step loading conditions.
|
|
||||||
The methodologies used are 1) superposition of time-settlement curves
|
|
||||||
and 2) nonlinear regression for hyperbolic curves.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# Import 섹션
|
|
||||||
# =================
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
import pandas as pd
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
from scipy.optimize import least_squares
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# Function 섹션
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# 주어진 계수를 이용하여 쌍곡선 시간-침하 곡선 반환
|
|
||||||
def generate_data_hyper(px, pt):
|
|
||||||
return pt / (px[0] * pt + px[1])
|
|
||||||
|
|
||||||
# 회귀식과 측정치와의 잔차 반환 (비선형 쌍곡선)
|
|
||||||
def fun_hyper_nonlinear(px, pt, py):
|
|
||||||
return pt / (px[0] * pt + px[1]) - py
|
|
||||||
|
|
||||||
# 회귀식과 측정치와의 잔차 반환 (기존 쌍곡선)
|
|
||||||
def fun_hyper_original(px, pt, py):
|
|
||||||
return px[0] * pt + px[1] - pt / py
|
|
||||||
|
|
||||||
# RMSE 산정
|
|
||||||
def fun_rmse(py1, py2):
|
|
||||||
mse = np.square(np.subtract(py1, py2)).mean()
|
|
||||||
return np.sqrt(mse)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================
|
|
||||||
# 파일 설정 / Pre-processing (임시)
|
|
||||||
# ================================
|
|
||||||
|
|
||||||
# 파일명 설정
|
|
||||||
#filename = "1_S-12.csv"
|
|
||||||
#filename = "1_SP-11.csv"
|
|
||||||
#filename = "1_SP-17.csv"
|
|
||||||
#filename = "1_SP-23.csv"
|
|
||||||
#filename = "3_SP3-65.csv"
|
|
||||||
#filename = "3_SP3-68.csv"
|
|
||||||
filename = "data/4_S-11.csv"
|
|
||||||
|
|
||||||
# 성토 단계 시작 index 리스트 초기화
|
|
||||||
step_start_index = []
|
|
||||||
|
|
||||||
# 성토 단계 끝 index + 1 리스트 초기화
|
|
||||||
step_end_index = []
|
|
||||||
|
|
||||||
# 파일명에 따라서, 성토 단계 index 설정
|
|
||||||
if filename == "1_S-12.csv":
|
|
||||||
step_start_index = [0, 56]
|
|
||||||
step_end_index = [56, 143]
|
|
||||||
elif filename == "1_SP-11.csv":
|
|
||||||
step_start_index = [0, 10, 37, 79]
|
|
||||||
step_end_index = [10, 37, 79, 124]
|
|
||||||
elif filename == "1_SP-17.csv":
|
|
||||||
step_start_index = [0, 122]
|
|
||||||
step_end_index = [122, 163]
|
|
||||||
elif filename == "1_SP-23.csv":
|
|
||||||
step_start_index = [0, 18, 40, 90]
|
|
||||||
step_end_index = [18, 40, 90, 124]
|
|
||||||
elif filename == "3_SP3-65.csv":
|
|
||||||
step_start_index = [0, 94, 136]
|
|
||||||
step_end_index = [ 94, 136, 182]
|
|
||||||
elif filename == "3_SP3-68.csv":
|
|
||||||
step_start_index = [0, 9, 48, 88]
|
|
||||||
step_end_index = [9, 48, 88, 127]
|
|
||||||
elif filename == "4_S-11.csv":
|
|
||||||
step_start_index = [0, 10, 46, 51, 120]
|
|
||||||
step_end_index = [10, 46, 51, 120, 157]
|
|
||||||
|
|
||||||
# 성토 단계 횟수 파악 및 저장
|
|
||||||
num_steps = len(step_start_index)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ====================
|
|
||||||
# 파일 읽기, 데이터 설정
|
|
||||||
# ====================
|
|
||||||
|
|
||||||
# CSV 파일 읽기
|
|
||||||
data = pd.read_csv(filename)
|
|
||||||
|
|
||||||
# 시간, 침하량, 성토고 배열 생성
|
|
||||||
time = data['Time'].to_numpy()
|
|
||||||
settle = data['Settle'].to_numpy()
|
|
||||||
surcharge = data['Surcharge'].to_numpy()
|
|
||||||
|
|
||||||
# 마지막 계측 데이터 index + 1 파악
|
|
||||||
final_index = time.size
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 성토 단계 구분
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# todo: 성토고 데이터를 분석하여, 각 단계 계측 시작 및 끝일에 해당하는 인덱스 파악 필요
|
|
||||||
# 꼭 이전 단계 마지막 인덱스와 현재 단계 처음 인덱스가 이어질 필요는 없음
|
|
||||||
# (각 단계별 시간, 침하를 초기화 한후 예측을 수행하므로...)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================
|
|
||||||
# 최종 단계 데이터 사용 범위 조정
|
|
||||||
# ===========================
|
|
||||||
|
|
||||||
# 최종 성토 단계의 데이터 사용 퍼센트 설정 : 사용자 입력값
|
|
||||||
final_step_predict_percent = 60
|
|
||||||
|
|
||||||
# 데이터 사용 퍼센트에 해당하는 기간 계산
|
|
||||||
final_step_end_date = time[-1]
|
|
||||||
final_step_start_date = time[step_start_index[num_steps - 1]]
|
|
||||||
final_step_period = final_step_end_date - final_step_start_date
|
|
||||||
final_step_predict_end_date = final_step_start_date + final_step_period * final_step_predict_percent / 100
|
|
||||||
|
|
||||||
# 데이터 사용 끝 시점 인덱스 초기화
|
|
||||||
final_step_predict_end_index = -1
|
|
||||||
|
|
||||||
# 데이터 사용 끝 시점 인덱스 검색
|
|
||||||
count = 0
|
|
||||||
for day in time:
|
|
||||||
count = count + 1
|
|
||||||
if day > final_step_predict_end_date:
|
|
||||||
final_step_predict_end_index = count - 1
|
|
||||||
break
|
|
||||||
|
|
||||||
# 마지막 성토 단계, 마지막 계측 시점 인덱스 업데이트
|
|
||||||
step_end_index[num_steps - 1] = final_step_predict_end_index
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 추가 예측 구간 반영
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# 추가 예측 일 입력
|
|
||||||
add_days = time[-1]
|
|
||||||
|
|
||||||
# 마지막 성토고 및 마지막 계측일 저장
|
|
||||||
final_surcharge = surcharge[final_index - 1]
|
|
||||||
final_time = time[final_index - 1]
|
|
||||||
|
|
||||||
# 추가 시간 및 성토고 배열 설정 (100개의 시점 설정)
|
|
||||||
time_add = np.linspace(final_time + 1, final_time + add_days, 100)
|
|
||||||
surcharge_add = np.ones(100) * final_surcharge
|
|
||||||
|
|
||||||
# 기존 시간 및 성토고 배열에 붙이기
|
|
||||||
time = np.append(time, time_add)
|
|
||||||
surcharge = np.append(surcharge, surcharge_add)
|
|
||||||
|
|
||||||
# 마지막 인덱스값 재조정
|
|
||||||
final_index = time.size
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =============================
|
|
||||||
# Settlement Prediction (Step)
|
|
||||||
# =============================
|
|
||||||
|
|
||||||
# 예측 침하량 초기화
|
|
||||||
sp_step = np.zeros(time.size)
|
|
||||||
|
|
||||||
# 만일 계수 중에 하나가 음수가 나오면 에러 출력
|
|
||||||
error_step = 0
|
|
||||||
|
|
||||||
# 각 단계별로 진행
|
|
||||||
for i in range(0, num_steps):
|
|
||||||
|
|
||||||
# 각 단계별 계측 시점과 계측 침하량 배열 생성
|
|
||||||
tm_this_step = time[step_start_index[i]:step_end_index[i]]
|
|
||||||
sm_this_step = settle[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
# 이전 단계까지 예측 침하량 중 현재 단계에 해당하는 부분 추출
|
|
||||||
sp_this_step = sp_step[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
# 현재 단계 시작 부터 끝까지 시간 데이터 추출
|
|
||||||
tm_to_end = time[step_start_index[i]:final_index]
|
|
||||||
|
|
||||||
# 기존 예측 침하량에 대한 보정
|
|
||||||
sm_this_step = sm_this_step - sp_this_step
|
|
||||||
|
|
||||||
# 초기 시점 및 침하량 산정
|
|
||||||
t0_this_step = tm_this_step[0]
|
|
||||||
s0_this_step = sm_this_step[0]
|
|
||||||
|
|
||||||
# 초기 시점에 대한 시간 조정
|
|
||||||
tm_this_step = tm_this_step - t0_this_step
|
|
||||||
tm_to_end = tm_to_end - t0_this_step
|
|
||||||
|
|
||||||
# 초기 침하량에 대한 침하량 조정
|
|
||||||
sm_this_step = sm_this_step - s0_this_step
|
|
||||||
|
|
||||||
# 침하 곡선 계수 초기화
|
|
||||||
x0 = np.ones(2)
|
|
||||||
|
|
||||||
# 회귀분석 시행
|
|
||||||
res_lsq_hyper_nonlinear \
|
|
||||||
= least_squares(fun_hyper_nonlinear, x0, args=(tm_this_step, sm_this_step))
|
|
||||||
|
|
||||||
# 쌍곡선 계수 저장 및 출력
|
|
||||||
x_step = res_lsq_hyper_nonlinear.x
|
|
||||||
print(x_step)
|
|
||||||
|
|
||||||
# 만일 계수 중에 하나가 음수일 경우, 에러 메세지 출력하고 Break
|
|
||||||
#if x_step[0] < 0 or x_step[0] < 0 :
|
|
||||||
# print("More than one parameter is negative!")
|
|
||||||
# error_step = 1
|
|
||||||
# break
|
|
||||||
|
|
||||||
# 현재 단계 예측 침하량 산정 (침하 예측 끝까지)
|
|
||||||
sp_to_end_update = generate_data_hyper(x_step, tm_to_end)
|
|
||||||
|
|
||||||
# 예측 침하량 업데이트
|
|
||||||
sp_step[step_start_index[i]:final_index] = \
|
|
||||||
sp_step[step_start_index[i]:final_index] + sp_to_end_update + s0_this_step
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =========================================================
|
|
||||||
# Settlement prediction (nonliner and original hyperbolic)
|
|
||||||
# =========================================================
|
|
||||||
|
|
||||||
# 성토 마지막 데이터 추출
|
|
||||||
tm_hyper = time[step_start_index[num_steps-1]:step_end_index[num_steps-1]]
|
|
||||||
sm_hyper = settle[step_start_index[num_steps-1]:step_end_index[num_steps-1]]
|
|
||||||
|
|
||||||
# 현재 단계 시작 부터 끝까지 시간 데이터 추출
|
|
||||||
time_hyper = time[step_start_index[num_steps-1]:final_index]
|
|
||||||
|
|
||||||
# 초기 시점 및 침하량 산정
|
|
||||||
t0_hyper = tm_hyper[0]
|
|
||||||
s0_hyper = sm_hyper[0]
|
|
||||||
|
|
||||||
# 초기 시점에 대한 시간 조정
|
|
||||||
tm_hyper = tm_hyper - t0_hyper
|
|
||||||
time_hyper = time_hyper - t0_hyper
|
|
||||||
|
|
||||||
# 초기 침하량에 대한 침하량 조정
|
|
||||||
sm_hyper = sm_hyper - s0_hyper
|
|
||||||
|
|
||||||
# 회귀분석 시행 (비선형 쌍곡선)
|
|
||||||
x0 = np.ones(2)
|
|
||||||
res_lsq_hyper_nonlinear = least_squares(fun_hyper_nonlinear, x0,
|
|
||||||
args=(tm_hyper, sm_hyper))
|
|
||||||
# 비선형 쌍곡선 법 계수 저장 및 출력
|
|
||||||
x_hyper_nonlinear = res_lsq_hyper_nonlinear.x
|
|
||||||
print(x_hyper_nonlinear)
|
|
||||||
|
|
||||||
# 회귀분석 시행 (기존 쌍곡선법) - (0, 0)에 해당하는 초기 데이터를 제외하고 회귀분석 실시
|
|
||||||
x0 = np.ones(2)
|
|
||||||
res_lsq_hyper_original = least_squares(fun_hyper_original, x0,
|
|
||||||
args=(tm_hyper[1:], sm_hyper[1:]))
|
|
||||||
# 기존 쌍곡선 법 계수 저장 및 출력
|
|
||||||
x_hyper_original = res_lsq_hyper_original.x
|
|
||||||
print(x_hyper_original)
|
|
||||||
|
|
||||||
# 현재 단계 예측 침하량 산정 (침하 예측 끝까지)
|
|
||||||
sp_hyper_nonlinear = generate_data_hyper(x_hyper_nonlinear, time_hyper)
|
|
||||||
sp_hyper_original = generate_data_hyper(x_hyper_original, time_hyper)
|
|
||||||
|
|
||||||
# 예측 침하량 산정
|
|
||||||
sp_hyper_nonlinear = sp_hyper_nonlinear + s0_hyper
|
|
||||||
sp_hyper_original = sp_hyper_original + s0_hyper
|
|
||||||
time_hyper = time_hyper + t0_hyper
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ==========
|
|
||||||
# RSME 산정
|
|
||||||
# ==========
|
|
||||||
|
|
||||||
# RMSE 계산 데이터 구간 설정 (계측, 단계, 비선형 쌍곡선, 기존 쌍곡선)
|
|
||||||
sm_rmse = settle[step_start_index[num_steps - 1]:final_step_predict_end_index]
|
|
||||||
sp_step_rmse = sp_step[step_start_index[num_steps - 1]:final_step_predict_end_index]
|
|
||||||
sp_hyper_nonlinear_rmse = sp_hyper_nonlinear[:final_step_predict_end_index - step_start_index[num_steps - 1]]
|
|
||||||
sp_hyper_original_rmse = sp_hyper_original[:final_step_predict_end_index - step_start_index[num_steps - 1]]
|
|
||||||
|
|
||||||
# RMSE 산정 (단계, 비선형 쌍곡선, 기존 쌍곡선)
|
|
||||||
RMSE_step = fun_rmse(sm_rmse, sp_step_rmse)
|
|
||||||
RMSE_hyper_nonlinear = fun_rmse(sm_rmse, sp_hyper_nonlinear_rmse)
|
|
||||||
RMSE_hyper_original = fun_rmse(sm_rmse, sp_hyper_original_rmse)
|
|
||||||
|
|
||||||
# RMSE 출력 (단계, 비선형 쌍곡선, 기존 쌍곡선)
|
|
||||||
print("RMSE(Nonlinear Hyper + Step): %0.3f" %RMSE_step)
|
|
||||||
print("RMSE(Nonlinear Hyperbolic): %0.3f" %RMSE_hyper_nonlinear)
|
|
||||||
print("RMSE(Original Hyperbolic): %0.3f" %RMSE_hyper_original)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =====================
|
|
||||||
# Post-Processing
|
|
||||||
# =====================
|
|
||||||
|
|
||||||
# 그래프 크기, 서브 그래프 개수 및 비율 설정
|
|
||||||
fig, axes = plt.subplots(2, 1, figsize=(10, 10),
|
|
||||||
gridspec_kw={'height_ratios':[1,2]})
|
|
||||||
|
|
||||||
# 성토고 그래프 표시
|
|
||||||
axes[0].plot(time, surcharge, 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[0:settle.size], -settle, s=50, facecolors='white', edgecolors='black', label='measured data')
|
|
||||||
axes[1].plot(time, -sp_step, linestyle='-', color='blue', label='Nonlinear + Step Loading')
|
|
||||||
axes[1].plot(time_hyper, -sp_hyper_nonlinear,
|
|
||||||
linestyle='--', color='green', label='Nonlinear Hyperbolic')
|
|
||||||
axes[1].plot(time_hyper, -sp_hyper_original,
|
|
||||||
linestyle='--', color='red', label='Original Hyperbolic')
|
|
||||||
|
|
||||||
# 침하량 그래프 설정
|
|
||||||
axes[1].set_xlabel("Time (day)", fontsize=15)
|
|
||||||
axes[1].set_ylabel("Settlement (mm)", fontsize=15)
|
|
||||||
axes[1].set_ylim(top=0)
|
|
||||||
axes[1].set_ylim(bottom=-1.5 * settle.max())
|
|
||||||
axes[1].set_xlim(left=0)
|
|
||||||
axes[1].grid(color="gray", alpha=.5, linestyle='--')
|
|
||||||
axes[1].tick_params(direction='in')
|
|
||||||
|
|
||||||
# 범례 표시
|
|
||||||
axes[1].legend(loc=1, ncol=2, frameon=True, fontsize=12)
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 음영 처리 - 단계성토
|
|
||||||
plt.axvspan(0, final_step_predict_end_date,
|
|
||||||
alpha=0.2, color='grey', hatch='///')
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 음영 처리 - 기존 및 비선형 쌍곡선
|
|
||||||
plt.axvspan(final_step_start_date, final_step_predict_end_date,
|
|
||||||
alpha=0.2, color='grey', hatch='///')
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 표시 화살표 세로 위치 설정
|
|
||||||
arrow1_y_loc = 1.3 * min(-settle)
|
|
||||||
arrow2_y_loc = 1.4 * min(-settle)
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 화살표 처리 - 단계성토
|
|
||||||
axes[1].arrow(0, arrow1_y_loc, final_step_predict_end_date, 0,
|
|
||||||
head_width=10, color='black', length_includes_head='True')
|
|
||||||
axes[1].arrow(final_step_predict_end_date, arrow1_y_loc, -final_step_predict_end_date, 0,
|
|
||||||
head_width=10, color='black', length_includes_head='True')
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 화살표 처리 - 기존 및 비선형 쌍곡선
|
|
||||||
axes[1].arrow(final_step_start_date, arrow2_y_loc,
|
|
||||||
final_step_predict_end_date - final_step_start_date, 0,
|
|
||||||
head_width=10, color='black', length_includes_head='True')
|
|
||||||
axes[1].arrow(final_step_predict_end_date, arrow2_y_loc,
|
|
||||||
final_step_start_date - final_step_predict_end_date, 0,
|
|
||||||
head_width=10, color='black', length_includes_head='True')
|
|
||||||
|
|
||||||
# Annotation 표시용 공간 설정
|
|
||||||
space = max(time) * 0.01
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 범례 표시 - 단계성토
|
|
||||||
plt.annotate('Data Range Used (Nonlinear + Step Loading)', xy=(final_step_predict_end_date, arrow1_y_loc),
|
|
||||||
xytext=(final_step_predict_end_date + space, arrow1_y_loc),
|
|
||||||
horizontalalignment='left', verticalalignment='center')
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 범례 표시 - 기존 및 비선형 쌍곡선
|
|
||||||
plt.annotate('Data Range Used (Nonlinear and Original Hyperbolic)', xy=(final_step_predict_end_date, arrow1_y_loc),
|
|
||||||
xytext=(final_step_predict_end_date + space, arrow2_y_loc),
|
|
||||||
horizontalalignment='left', verticalalignment='center')
|
|
||||||
|
|
||||||
# RMSE 출력
|
|
||||||
mybox = {'facecolor': 'white', 'edgecolor': 'black', 'boxstyle': 'round', 'alpha': 0.4}
|
|
||||||
plt.text(max(time), 0.25 * min(-settle),
|
|
||||||
" RMSE (Nonlinear + Step Loading) = %0.3f" % RMSE_step
|
|
||||||
+ "\n" + " RMSE (Nonlinear Hyperbolic) = %0.3f" % RMSE_hyper_nonlinear
|
|
||||||
+ "\n" + " RMSE (Original Hyperbolic) = %0.3f" % RMSE_hyper_original,
|
|
||||||
color='r', horizontalalignment='right',
|
|
||||||
verticalalignment='top', fontsize='12', bbox=mybox)
|
|
||||||
|
|
||||||
# 그래프 저장
|
|
||||||
plt.savefig('output.svg')
|
|
||||||
|
|
||||||
# 그래프 출력
|
|
||||||
plt.show()
|
|
||||||
|
|
@ -1,244 +0,0 @@
|
||||||
# =================
|
|
||||||
# Import 섹션
|
|
||||||
# =================
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
import pandas as pd
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
from matplotlib import rcParams
|
|
||||||
from scipy.optimize import least_squares
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# Function 섹션
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# 주어진 계수를 이용하여 쌍곡선 시간-침하 곡선 반환
|
|
||||||
def generate_data_hyper(px, pt):
|
|
||||||
return pt / (px[0] * pt + px[1])
|
|
||||||
|
|
||||||
# 회귀식과 측정치와의 잔차 반환 (비선형 쌍곡선)
|
|
||||||
def fun_hyper_nonlinear(px, pt, py):
|
|
||||||
return pt / (px[0] * pt + px[1]) - py
|
|
||||||
|
|
||||||
# 회귀식과 측정치와의 잔차 반환 (기존 쌍곡선)
|
|
||||||
def fun_hyper_original(px, pt, py):
|
|
||||||
return px[0] * pt + px[1] - pt / py
|
|
||||||
|
|
||||||
# RMSE 계산
|
|
||||||
def fun_rmse(py1, py2):
|
|
||||||
mse = np.square(np.subtract(py1, py2)). mean()
|
|
||||||
return np.sqrt(mse)
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 입력값 설정
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# CSV 파일 읽기
|
|
||||||
data = pd.read_csv("4. S-11.csv")
|
|
||||||
|
|
||||||
# 시간, 침하량, 성토고 배열 생성
|
|
||||||
time = data['Time'].to_numpy()
|
|
||||||
settle = data['Settle'].to_numpy()
|
|
||||||
surcharge = data['Surcharge'].to_numpy()
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 성토 단계 구분
|
|
||||||
# =================
|
|
||||||
|
|
||||||
step_start_index = [0, 10, 46, 51, 120] # 성토 단계 시작 index
|
|
||||||
step_end_index = [10, 46, 51, 120, 139] # 실제 최종 성토 종료 index : 157
|
|
||||||
final_index = time.size # 마지만 계측 데이터 index + 1
|
|
||||||
num_steps = 5 # 성토 단계 횟수
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 추가 예측 구간 반영
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# 추가 예측 일 입력
|
|
||||||
add_days = 500
|
|
||||||
|
|
||||||
# 마지막 성토고 및 마지막 계측일 저장
|
|
||||||
final_surcharge = surcharge[final_index - 1]
|
|
||||||
final_time = time[final_index -1]
|
|
||||||
|
|
||||||
# 추가 시간 및 성토고 배열 설정 (100개의 시점 설정)
|
|
||||||
time_add = np.linspace(final_time + 1, final_time + add_days, 100)
|
|
||||||
surcharge_add = np.ones(100) * final_surcharge
|
|
||||||
|
|
||||||
# 기존 시간 및 성토고 배열에 붙이기
|
|
||||||
time = np.append(time, time_add)
|
|
||||||
surcharge = np.append(surcharge, surcharge_add)
|
|
||||||
|
|
||||||
# 마지막 인덱스값 재조정
|
|
||||||
final_index = time.size
|
|
||||||
|
|
||||||
# =============================
|
|
||||||
# Settlement Prediction (Step)
|
|
||||||
# =============================
|
|
||||||
|
|
||||||
# 예측 침하량 초기화
|
|
||||||
sp = np.zeros(time.size)
|
|
||||||
|
|
||||||
# 각 단계별로 진행
|
|
||||||
for i in range(0, num_steps):
|
|
||||||
|
|
||||||
# 각 단계별 계측 시점과 계측 침하량 배열 생성
|
|
||||||
tm_this_step = time[step_start_index[i]:step_end_index[i]]
|
|
||||||
sm_this_step = settle[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
# 이전 단계까지 예측 침하량 중 현재 단계에 해당하는 부분 추출
|
|
||||||
sp_this_step = sp[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
# 현재 단계 시작 부터 끝까지 시간 데이터 추출
|
|
||||||
tm_to_end = time[step_start_index[i]:final_index]
|
|
||||||
|
|
||||||
# 기존 예측 침하량에 대한 보정
|
|
||||||
sm_this_step = sm_this_step - sp_this_step
|
|
||||||
|
|
||||||
# 초기 시점 및 침하량 산정
|
|
||||||
t0_this_step = tm_this_step[0]
|
|
||||||
s0_this_step = sm_this_step[0]
|
|
||||||
|
|
||||||
# 초기 시점에 대한 시간 조정
|
|
||||||
tm_this_step = tm_this_step - t0_this_step
|
|
||||||
tm_to_end = tm_to_end - t0_this_step
|
|
||||||
|
|
||||||
# 초기 침하량에 대한 침하량 조정
|
|
||||||
sm_this_step = sm_this_step - s0_this_step
|
|
||||||
|
|
||||||
# 침하 곡선 계수 초기화
|
|
||||||
x0 = np.ones(2)
|
|
||||||
|
|
||||||
# 회귀분석 시행
|
|
||||||
res_lsq_hyper_nonlinear \
|
|
||||||
= least_squares(fun_hyper_nonlinear, x0, args=(tm_this_step, sm_this_step))
|
|
||||||
|
|
||||||
# 쌍곡선 계수 저장 및 출력
|
|
||||||
x_step = res_lsq_hyper_nonlinear.x
|
|
||||||
print(x_step)
|
|
||||||
|
|
||||||
# 현재 단계 예측 침하량 산정 (침하 예측 끝까지)
|
|
||||||
sp_to_end_update = generate_data_hyper(x_step, tm_to_end)
|
|
||||||
|
|
||||||
# 예측 침하량 업데이트
|
|
||||||
sp[step_start_index[i]:final_index] = \
|
|
||||||
sp[step_start_index[i]:final_index] + sp_to_end_update + s0_this_step
|
|
||||||
|
|
||||||
# =========================================================
|
|
||||||
# Settlement prediction (nonliner and original hyperbolic)
|
|
||||||
# =========================================================
|
|
||||||
|
|
||||||
# 성토 마지막 데이터 추출
|
|
||||||
tm_hyper = time[step_start_index[num_steps-1]:step_end_index[num_steps-1]]
|
|
||||||
sm_hyper = settle[step_start_index[num_steps-1]:step_end_index[num_steps-1]]
|
|
||||||
|
|
||||||
# 현재 단계 시작 부터 끝까지 시간 데이터 추출
|
|
||||||
time_hyper = time[step_start_index[num_steps-1]:final_index]
|
|
||||||
|
|
||||||
# 초기 시점 및 침하량 산정
|
|
||||||
t0_hyper = tm_hyper[0]
|
|
||||||
s0_hyper = sm_hyper[0]
|
|
||||||
|
|
||||||
# 초기 시점에 대한 시간 조정
|
|
||||||
tm_hyper = tm_hyper - t0_hyper
|
|
||||||
time_hyper = time_hyper - t0_hyper
|
|
||||||
|
|
||||||
# 초기 침하량에 대한 침하량 조정
|
|
||||||
sm_hyper = sm_hyper - s0_hyper
|
|
||||||
|
|
||||||
# 회귀분석 시행 (비선형 쌍곡선)
|
|
||||||
x0 = np.ones(2)
|
|
||||||
res_lsq_hyper_nonlinear = least_squares(fun_hyper_nonlinear, x0,
|
|
||||||
args=(tm_hyper, sm_hyper))
|
|
||||||
# 비선형 쌍곡선 법 계수 저장 및 출력
|
|
||||||
x_hyper_nonlinear = res_lsq_hyper_nonlinear.x
|
|
||||||
print(x_hyper_nonlinear)
|
|
||||||
|
|
||||||
# 회귀분석 시행 (기존 쌍곡선법) - (0, 0)에 해당하는 초기 데이터를 제외하고 회귀분석 실시
|
|
||||||
x0 = np.ones(2)
|
|
||||||
res_lsq_hyper_original = least_squares(fun_hyper_original, x0,
|
|
||||||
args=(tm_hyper[1:], sm_hyper[1:]))
|
|
||||||
# 기존 쌍곡선 법 계수 저장 및 출력
|
|
||||||
x_hyper_original = res_lsq_hyper_original.x
|
|
||||||
print(x_hyper_original)
|
|
||||||
|
|
||||||
# 현재 단계 예측 침하량 산정 (침하 예측 끝까지)
|
|
||||||
sp_hyper_nonlinear = generate_data_hyper(x_hyper_nonlinear, time_hyper)
|
|
||||||
sp_hyper_original = generate_data_hyper(x_hyper_original, time_hyper)
|
|
||||||
|
|
||||||
# 예측 침하량 산정
|
|
||||||
sp_hyper_nonlinear = sp_hyper_nonlinear + s0_hyper
|
|
||||||
sp_hyper_original = sp_hyper_original + s0_hyper
|
|
||||||
time_hyper = time_hyper + t0_hyper
|
|
||||||
|
|
||||||
# 각 방법에 대한 RMSE 계산
|
|
||||||
RMSE_hyper_nonlinear_Step = fun_rmse(settle[step_start_index[-1]:step_end_index[-1]], sp_this_step)
|
|
||||||
|
|
||||||
RMSE_hyper_original = fun_rmse(settle[step_start_index[-1]:step_end_index[-1]], sp_hyper_original[0:(step_end_index[-1]-step_start_index[-1])])
|
|
||||||
|
|
||||||
RMSE_hyper_nonlinear = fun_rmse(settle[step_start_index[-1]:step_end_index[-1]], sp_hyper_nonlinear[0:(step_end_index[-1]-step_start_index[-1])])
|
|
||||||
|
|
||||||
# =====================
|
|
||||||
# Post-Processing
|
|
||||||
# =====================
|
|
||||||
|
|
||||||
# 그래프 크기, 서브 그래프 개수 및 비율 설정
|
|
||||||
fig, axes = plt.subplots(2, 1, figsize=(10, 10),
|
|
||||||
gridspec_kw={'height_ratios':[1,2]})
|
|
||||||
|
|
||||||
# 성토고 그래프 표시
|
|
||||||
axes[0].plot(time, surcharge, color='black', label='surcharge height')
|
|
||||||
|
|
||||||
# 성토고 그래프 설정
|
|
||||||
axes[0].set_ylabel("Surcharge height (m)", fontsize=17)
|
|
||||||
axes[0].set_xlim(left=0)
|
|
||||||
axes[0].grid(color="gray", alpha=.5, linestyle='--')
|
|
||||||
axes[0].tick_params(direction='in')
|
|
||||||
|
|
||||||
# 계측 및 예측 침하량 표시
|
|
||||||
axes[1].scatter(time[0:settle.size], -settle, s=50, facecolors='white', edgecolors='black', label='measured data')
|
|
||||||
axes[1].plot(time, -sp, linestyle='-', color='blue', label='Nonlinear + Step Loading')
|
|
||||||
axes[1].plot(time_hyper, -sp_hyper_nonlinear,
|
|
||||||
linestyle='--', color='green', label='Nonlinear Hyperbolic')
|
|
||||||
axes[1].plot(time_hyper, -sp_hyper_original,
|
|
||||||
linestyle='--', color='red', label='Original Hyperbolic')
|
|
||||||
|
|
||||||
# 침하량 그래프 설정
|
|
||||||
axes[1].set_xlabel("Time (day)", fontsize=15)
|
|
||||||
axes[1].set_ylabel("Settlement (mm)", fontsize=15)
|
|
||||||
axes[1].set_ylim(top=0)
|
|
||||||
axes[1].set_ylim(bottom=-1.5 * settle.max())
|
|
||||||
axes[1].set_xlim(left=0)
|
|
||||||
axes[1].grid(color="gray", alpha=.5, linestyle='--')
|
|
||||||
axes[1].tick_params(direction='in')
|
|
||||||
|
|
||||||
# 범례 표시
|
|
||||||
axes[1].legend(loc=1, ncol=2, frameon=True, fontsize=12)
|
|
||||||
|
|
||||||
# 침하예측 활용 구간 표시
|
|
||||||
axes[1].axvspan(time[step_start_index[-1]], time[step_end_index[-1]], alpha = 0.2, color = 'gray', hatch = '///')
|
|
||||||
axes[1].annotate('Date range used', xy=(time[step_end_index[-1]], min(-settle) * 0.5),
|
|
||||||
xytext=(time[step_end_index[-1]] + 20, min(-settle) * 0.8),
|
|
||||||
arrowprops=dict(facecolor='black', shrink=0.05),
|
|
||||||
horizontalalignment='left', verticalalignment='bottom')
|
|
||||||
|
|
||||||
|
|
||||||
# RMSE 박스 생성
|
|
||||||
mybox = {'facecolor':'red', 'edgecolor':'black', 'boxstyle':'round', 'alpha':0.4}
|
|
||||||
axes[1].text(0.015 * max(time), -1.4 * max(settle),
|
|
||||||
" RMSE(Hyperbolic(Nonlinear_Step)) = %0.3f " % RMSE_hyper_nonlinear_Step
|
|
||||||
+ "\n" + " RMSE(Hyperbolic(original)) = %0.3f " % RMSE_hyper_original
|
|
||||||
+ "\n" + " RMSE(Hyperbolic(Nonlinear)) = %0.3f " % RMSE_hyper_nonlinear,
|
|
||||||
color = 'r', horizontalalignment='left', verticalalignment='bottom',
|
|
||||||
fontsize='14', bbox=mybox)
|
|
||||||
|
|
||||||
# 그래프 저장
|
|
||||||
plt.savefig('4_S-11.svg')
|
|
||||||
|
|
||||||
# 그래프 출력
|
|
||||||
plt.show()
|
|
||||||
|
|
@ -1,484 +0,0 @@
|
||||||
"""
|
|
||||||
Title: Soft ground settlement prediction considering the step loading
|
|
||||||
Main Developer: Sang Inn Woo, Ph.D. @ Incheon National University
|
|
||||||
Starting Date: 2022-08-11
|
|
||||||
Abstract:
|
|
||||||
This main objective of this code is to predict
|
|
||||||
time vs. (consolidation) settlement curves of soft clay ground
|
|
||||||
under step loading conditions.
|
|
||||||
The methodologies used are 1) superposition of time-settlement curves
|
|
||||||
and 2) nonlinear regression for hyperbolic curves.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# TODO: Asaoka 법 코드 삽입
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# Import 섹션
|
|
||||||
# =================
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
import pandas as pd
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
from scipy.optimize import least_squares
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# Function 섹션
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# 주어진 계수를 이용하여 쌍곡선 시간-침하 곡선 반환
|
|
||||||
def generate_data_hyper(px, pt):
|
|
||||||
return pt / (px[0] * pt + px[1])
|
|
||||||
|
|
||||||
# 회귀식과 측정치와의 잔차 반환 (비선형 쌍곡선)
|
|
||||||
def fun_hyper_nonlinear(px, pt, py):
|
|
||||||
return pt / (px[0] * pt + px[1]) - py
|
|
||||||
|
|
||||||
# 회귀식과 측정치와의 잔차 반환 (기존 쌍곡선)
|
|
||||||
def fun_hyper_original(px, pt, py):
|
|
||||||
return px[0] * pt + px[1] - pt / py
|
|
||||||
|
|
||||||
# RMSE 산정
|
|
||||||
def fun_rmse(py1, py2):
|
|
||||||
mse = np.square(np.subtract(py1, py2)).mean()
|
|
||||||
return np.sqrt(mse)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 파일 설정 / 입력값
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# TODO: Argument를 이용해서 데이터 파일명을 입력 받도록 수정 필요
|
|
||||||
|
|
||||||
# 데이터 보관 폴더 및 결과 파일 저장 폴더 설정
|
|
||||||
data_folder_name = "data"
|
|
||||||
output_foler_name = "output"
|
|
||||||
|
|
||||||
# 파일명 설정
|
|
||||||
#filename = "1_S-12.csv"
|
|
||||||
#filename = "1_SP-11.csv"
|
|
||||||
#filename = "1_SP-17.csv"
|
|
||||||
#filename = "1_SP-23.csv"
|
|
||||||
#filename = "3_SP3-65.csv"
|
|
||||||
#filename = "3_SP3-68.csv"
|
|
||||||
filename = "4_S-11.csv"
|
|
||||||
#filename = "west_test_2_5_No_54.csv"
|
|
||||||
|
|
||||||
# 최종 성토 단계의 데이터 사용 퍼센트 설정 : 사용자 입력값
|
|
||||||
final_step_predict_percent = 20
|
|
||||||
|
|
||||||
# 추가 계측 구간 퍼센트 설정 : 사용자 입력값
|
|
||||||
additional_predict_percent = 100
|
|
||||||
|
|
||||||
# 성토 단계 시작 index 리스트 초기화
|
|
||||||
step_start_index = []
|
|
||||||
|
|
||||||
# 성토 단계 끝 index + 1 리스트 초기화
|
|
||||||
step_end_index = []
|
|
||||||
|
|
||||||
# TODO: 성토 단계를 분석해서 Step을 설정할 수 있도록 수정할 것
|
|
||||||
# 고려사항 1: 안정된 분석을 위해서는 성토 시작일로부터 얼마 후 데이터를 활용할 것인가? --> Buffer 설정
|
|
||||||
# 고려사항 2: 데이터 개수가 충분한가? --> 최소 데이터량 결정
|
|
||||||
# 고려사항 3: 시간-침하 곡선 형태가 직선이나 음의 곡률을 가질 경우, 어떻게 할 것인가 --> 회귀분석 불가 구역
|
|
||||||
# 고려사항 4: 상기 사항을 만족하지 않은 Step을 제외하고 분석을 수행할 수 있는가?
|
|
||||||
|
|
||||||
# 파일명에 따라서, 성토 단계 index 설정
|
|
||||||
if filename == "1_S-12.csv":
|
|
||||||
step_start_index = [0, 56]
|
|
||||||
step_end_index = [56, 143]
|
|
||||||
elif filename == "1_SP-11.csv":
|
|
||||||
step_start_index = [0, 10, 37, 79]
|
|
||||||
step_end_index = [10, 37, 79, 124]
|
|
||||||
elif filename == "1_SP-17.csv":
|
|
||||||
step_start_index = [0, 122]
|
|
||||||
step_end_index = [122, 163]
|
|
||||||
elif filename == "1_SP-23.csv":
|
|
||||||
step_start_index = [0, 18, 40, 90]
|
|
||||||
step_end_index = [18, 40, 90, 124]
|
|
||||||
elif filename == "3_SP3-65.csv":
|
|
||||||
step_start_index = [0, 94, 136]
|
|
||||||
step_end_index = [ 94, 136, 182]
|
|
||||||
elif filename == "3_SP3-68.csv":
|
|
||||||
step_start_index = [0, 9, 48, 88]
|
|
||||||
step_end_index = [9, 48, 88, 127]
|
|
||||||
elif filename == "4_S-11.csv":
|
|
||||||
step_start_index = [0, 10, 46, 51, 120]
|
|
||||||
step_end_index = [10, 46, 51, 120, 157]
|
|
||||||
elif filename == "west_test_2_5_No_54.csv":
|
|
||||||
step_start_index = [111, 195, 269, 287]
|
|
||||||
step_end_index = [195, 269, 287, 409]
|
|
||||||
|
|
||||||
# 성토 단계 횟수 파악 및 저장
|
|
||||||
num_steps = len(step_start_index)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ====================
|
|
||||||
# 파일 읽기, 데이터 설정
|
|
||||||
# ====================
|
|
||||||
|
|
||||||
# CSV 파일 읽기
|
|
||||||
data = pd.read_csv(data_folder_name + '/' + filename)
|
|
||||||
|
|
||||||
# 시간, 침하량, 성토고 배열 생성
|
|
||||||
time = data['Time'].to_numpy()
|
|
||||||
settle = data['Settle'].to_numpy()
|
|
||||||
surcharge = data['Surcharge'].to_numpy()
|
|
||||||
|
|
||||||
# 마지막 계측 데이터 index + 1 파악
|
|
||||||
final_index = time.size
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 성토 단계 구분
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# todo: 성토고 데이터를 분석하여, 각 단계 계측 시작 및 끝일에 해당하는 인덱스 파악 필요
|
|
||||||
# 꼭 이전 단계 마지막 인덱스와 현재 단계 처음 인덱스가 이어질 필요는 없음
|
|
||||||
# (각 단계별 시간, 침하를 초기화 한후 예측을 수행하므로...)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================
|
|
||||||
# 최종 단계 데이터 사용 범위 조정
|
|
||||||
# ===========================
|
|
||||||
|
|
||||||
# 데이터 사용 퍼센트에 해당하는 기간 계산
|
|
||||||
final_step_end_date = time[-1]
|
|
||||||
final_step_start_date = time[step_start_index[num_steps - 1]]
|
|
||||||
final_step_period = final_step_end_date - final_step_start_date
|
|
||||||
final_step_predict_end_date = final_step_start_date + final_step_period * final_step_predict_percent / 100
|
|
||||||
|
|
||||||
# 데이터 사용 끝 시점 인덱스 초기화
|
|
||||||
final_step_predict_end_index = -1
|
|
||||||
|
|
||||||
# 데이터 사용 끝 시점 인덱스 검색
|
|
||||||
count = 0
|
|
||||||
for day in time:
|
|
||||||
count = count + 1
|
|
||||||
if day > final_step_predict_end_date:
|
|
||||||
final_step_predict_end_index = count - 1
|
|
||||||
break
|
|
||||||
|
|
||||||
# 마지막 성토 단계, 마지막 계측 시점 인덱스 업데이트
|
|
||||||
final_step_monitor_end_index = step_end_index[num_steps - 1]
|
|
||||||
step_end_index[num_steps - 1] = final_step_predict_end_index
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
|
||||||
# 추가 예측 구간 반영
|
|
||||||
# =================
|
|
||||||
|
|
||||||
# 추가 예측 일 입력 (현재 전체 계측일 * 계수)
|
|
||||||
add_days = (additional_predict_percent / 100) * time[-1]
|
|
||||||
|
|
||||||
# 마지막 성토고 및 마지막 계측일 저장
|
|
||||||
final_surcharge = surcharge[final_index - 1]
|
|
||||||
final_time = time[final_index - 1]
|
|
||||||
|
|
||||||
# 추가 시간 및 성토고 배열 설정 (100개의 시점 설정)
|
|
||||||
time_add = np.linspace(final_time + 1, final_time + add_days, 100)
|
|
||||||
surcharge_add = np.ones(100) * final_surcharge
|
|
||||||
|
|
||||||
# 기존 시간 및 성토고 배열에 붙이기
|
|
||||||
time = np.append(time, time_add)
|
|
||||||
surcharge = np.append(surcharge, surcharge_add)
|
|
||||||
|
|
||||||
# 마지막 인덱스값 재조정
|
|
||||||
final_index = time.size
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =============================
|
|
||||||
# Settlement Prediction (Step)
|
|
||||||
# =============================
|
|
||||||
|
|
||||||
# 예측 침하량 초기화
|
|
||||||
sp_step = np.zeros(time.size)
|
|
||||||
|
|
||||||
# 만일 계수 중에 하나가 음수가 나오면 에러 출력
|
|
||||||
error_step = 0
|
|
||||||
|
|
||||||
# 각 단계별로 진행
|
|
||||||
for i in range(0, num_steps):
|
|
||||||
|
|
||||||
# 각 단계별 계측 시점과 계측 침하량 배열 생성
|
|
||||||
tm_this_step = time[step_start_index[i]:step_end_index[i]]
|
|
||||||
sm_this_step = settle[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
# 이전 단계까지 예측 침하량 중 현재 단계에 해당하는 부분 추출
|
|
||||||
sp_this_step = sp_step[step_start_index[i]:step_end_index[i]]
|
|
||||||
|
|
||||||
# 현재 단계 시작 부터 끝까지 시간 데이터 추출
|
|
||||||
tm_to_end = time[step_start_index[i]:final_index]
|
|
||||||
|
|
||||||
# 기존 예측 침하량에 대한 보정
|
|
||||||
sm_this_step = sm_this_step - sp_this_step
|
|
||||||
|
|
||||||
# 초기 시점 및 침하량 산정
|
|
||||||
t0_this_step = tm_this_step[0]
|
|
||||||
s0_this_step = sm_this_step[0]
|
|
||||||
|
|
||||||
# 초기 시점에 대한 시간 조정
|
|
||||||
tm_this_step = tm_this_step - t0_this_step
|
|
||||||
tm_to_end = tm_to_end - t0_this_step
|
|
||||||
|
|
||||||
# 초기 침하량에 대한 침하량 조정
|
|
||||||
sm_this_step = sm_this_step - s0_this_step
|
|
||||||
|
|
||||||
# 침하 곡선 계수 초기화
|
|
||||||
x0 = np.ones(2)
|
|
||||||
|
|
||||||
# 회귀분석 시행
|
|
||||||
res_lsq_hyper_nonlinear \
|
|
||||||
= least_squares(fun_hyper_nonlinear, x0,
|
|
||||||
bounds=((0, 0),(np.inf, np.inf)),
|
|
||||||
args=(tm_this_step, sm_this_step))
|
|
||||||
|
|
||||||
# 쌍곡선 계수 저장 및 출력
|
|
||||||
x_step = res_lsq_hyper_nonlinear.x
|
|
||||||
print(x_step)
|
|
||||||
|
|
||||||
# 만일 계수 중에 하나가 음수일 경우, 에러 메세지 출력하고 Break
|
|
||||||
#if x_step[0] < 0 or x_step[0] < 0 :
|
|
||||||
# print("More than one parameter is negative!")
|
|
||||||
# error_step = 1
|
|
||||||
# break
|
|
||||||
|
|
||||||
# 현재 단계 예측 침하량 산정 (침하 예측 끝까지)
|
|
||||||
sp_to_end_update = generate_data_hyper(x_step, tm_to_end)
|
|
||||||
|
|
||||||
# 예측 침하량 업데이트
|
|
||||||
sp_step[step_start_index[i]:final_index] = \
|
|
||||||
sp_step[step_start_index[i]:final_index] + sp_to_end_update + s0_this_step
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =========================================================
|
|
||||||
# Settlement prediction (nonliner and original hyperbolic)
|
|
||||||
# =========================================================
|
|
||||||
|
|
||||||
# 성토 마지막 데이터 추출
|
|
||||||
tm_hyper = time[step_start_index[num_steps-1]:step_end_index[num_steps-1]]
|
|
||||||
sm_hyper = settle[step_start_index[num_steps-1]:step_end_index[num_steps-1]]
|
|
||||||
|
|
||||||
# 현재 단계 시작 부터 끝까지 시간 데이터 추출
|
|
||||||
time_hyper = time[step_start_index[num_steps-1]:final_index]
|
|
||||||
|
|
||||||
# 초기 시점 및 침하량 산정
|
|
||||||
t0_hyper = tm_hyper[0]
|
|
||||||
s0_hyper = sm_hyper[0]
|
|
||||||
|
|
||||||
# 초기 시점에 대한 시간 조정
|
|
||||||
tm_hyper = tm_hyper - t0_hyper
|
|
||||||
time_hyper = time_hyper - t0_hyper
|
|
||||||
|
|
||||||
# 초기 침하량에 대한 침하량 조정
|
|
||||||
sm_hyper = sm_hyper - s0_hyper
|
|
||||||
|
|
||||||
# 회귀분석 시행 (비선형 쌍곡선)
|
|
||||||
x0 = np.ones(2)
|
|
||||||
res_lsq_hyper_nonlinear = least_squares(fun_hyper_nonlinear, x0,
|
|
||||||
args=(tm_hyper, sm_hyper))
|
|
||||||
# 비선형 쌍곡선 법 계수 저장 및 출력
|
|
||||||
x_hyper_nonlinear = res_lsq_hyper_nonlinear.x
|
|
||||||
print(x_hyper_nonlinear)
|
|
||||||
|
|
||||||
# 회귀분석 시행 (기존 쌍곡선법) - (0, 0)에 해당하는 초기 데이터를 제외하고 회귀분석 실시
|
|
||||||
x0 = np.ones(2)
|
|
||||||
res_lsq_hyper_original = least_squares(fun_hyper_original, x0,
|
|
||||||
args=(tm_hyper[1:], sm_hyper[1:]))
|
|
||||||
# 기존 쌍곡선 법 계수 저장 및 출력
|
|
||||||
x_hyper_original = res_lsq_hyper_original.x
|
|
||||||
print(x_hyper_original)
|
|
||||||
|
|
||||||
# 현재 단계 예측 침하량 산정 (침하 예측 끝까지)
|
|
||||||
sp_hyper_nonlinear = generate_data_hyper(x_hyper_nonlinear, time_hyper)
|
|
||||||
sp_hyper_original = generate_data_hyper(x_hyper_original, time_hyper)
|
|
||||||
|
|
||||||
# 예측 침하량 산정
|
|
||||||
sp_hyper_nonlinear = sp_hyper_nonlinear + s0_hyper
|
|
||||||
sp_hyper_original = sp_hyper_original + s0_hyper
|
|
||||||
time_hyper = time_hyper + t0_hyper
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ==========
|
|
||||||
# 에러 산정
|
|
||||||
# ==========
|
|
||||||
|
|
||||||
# RMSE 계산 데이터 구간 설정 (계측)
|
|
||||||
sm_rmse = settle[final_step_predict_end_index:final_step_monitor_end_index]
|
|
||||||
|
|
||||||
# RMSE 계산 데이터 구간 설정 (단계)
|
|
||||||
sp_step_rmse = sp_step[final_step_predict_end_index:final_step_monitor_end_index]
|
|
||||||
|
|
||||||
# RMSE 계산 데이터 구간 설정 (쌍곡선)
|
|
||||||
sp_hyper_nonlinear_rmse = sp_hyper_nonlinear[final_step_predict_end_index - step_start_index[num_steps - 1]:
|
|
||||||
final_step_predict_end_index - step_start_index[num_steps - 1] +
|
|
||||||
final_step_monitor_end_index - final_step_predict_end_index]
|
|
||||||
sp_hyper_original_rmse = sp_hyper_original[final_step_predict_end_index - step_start_index[num_steps - 1]:
|
|
||||||
final_step_predict_end_index - step_start_index[num_steps - 1] +
|
|
||||||
final_step_monitor_end_index - final_step_predict_end_index]
|
|
||||||
|
|
||||||
# RMSE 산정 (단계, 비선형 쌍곡선, 기존 쌍곡선)
|
|
||||||
RMSE_step = fun_rmse(sm_rmse, sp_step_rmse)
|
|
||||||
RMSE_hyper_nonlinear = fun_rmse(sm_rmse, sp_hyper_nonlinear_rmse)
|
|
||||||
RMSE_hyper_original = fun_rmse(sm_rmse, sp_hyper_original_rmse)
|
|
||||||
|
|
||||||
# RMSE 출력 (단계, 비선형 쌍곡선, 기존 쌍곡선)
|
|
||||||
print("RMSE (Nonlinear Hyper + Step): %0.3f" %RMSE_step)
|
|
||||||
print("RMSE (Nonlinear Hyperbolic): %0.3f" %RMSE_hyper_nonlinear)
|
|
||||||
print("RMSE (Original Hyperbolic): %0.3f" %RMSE_hyper_original)
|
|
||||||
|
|
||||||
# (최종 계측 침하량 - 예측 침하량) 계산
|
|
||||||
final_error_step = settle[-1] - sp_step_rmse[-1]
|
|
||||||
final_error_hyper_nonlinear = settle[-1] - sp_hyper_nonlinear_rmse[-1]
|
|
||||||
final_error_hyper_original = settle[-1] - sp_hyper_original_rmse[-1]
|
|
||||||
|
|
||||||
# (최종 계측 침하량 - 예측 침하량) 출력 (단계, 비선형 쌍곡선, 기존 쌍곡선)
|
|
||||||
print("Error in Final Settlement (Nonlinear Hyper + Step): %0.3f" %final_error_step)
|
|
||||||
print("Error in Final Settlement (Nonlinear Hyperbolic): %0.3f" %final_error_hyper_nonlinear)
|
|
||||||
print("Error in Final Settlement (Original Hyperbolic): %0.3f" %final_error_hyper_original)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =====================
|
|
||||||
# Post-Processing
|
|
||||||
# =====================
|
|
||||||
|
|
||||||
# 그래프 크기, 서브 그래프 개수 및 비율 설정
|
|
||||||
fig, axes = plt.subplots(2, 1, figsize=(12, 9),
|
|
||||||
gridspec_kw={'height_ratios':[1,3]})
|
|
||||||
|
|
||||||
# 성토고 그래프 표시
|
|
||||||
axes[0].plot(time, surcharge, 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[0:settle.size], -settle, s=50, facecolors='white', edgecolors='black', label='measured data')
|
|
||||||
axes[1].plot(time[step_start_index[0]:], -sp_step[step_start_index[0]:], linestyle='-', color='blue', label='Nonlinear + Step Loading')
|
|
||||||
axes[1].plot(time_hyper, -sp_hyper_nonlinear,
|
|
||||||
linestyle='--', color='green', label='Nonlinear Hyperbolic')
|
|
||||||
axes[1].plot(time_hyper, -sp_hyper_original,
|
|
||||||
linestyle='--', color='red', label='Original Hyperbolic')
|
|
||||||
|
|
||||||
# 침하량 그래프 설정
|
|
||||||
axes[1].set_xlabel("Time (day)", fontsize=15)
|
|
||||||
axes[1].set_ylabel("Settlement (cm)", fontsize=15)
|
|
||||||
axes[1].set_ylim(top=0)
|
|
||||||
axes[1].set_ylim(bottom=-1.5 * settle.max())
|
|
||||||
axes[1].set_xlim(left=0)
|
|
||||||
axes[1].grid(color="gray", alpha=.5, linestyle='--')
|
|
||||||
axes[1].tick_params(direction='in')
|
|
||||||
|
|
||||||
# 범례 표시
|
|
||||||
axes[1].legend(loc=1, ncol=2, frameon=True, fontsize=12)
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 음영 처리 - 단계성토
|
|
||||||
plt.axvspan(time[step_start_index[0]], final_step_predict_end_date,
|
|
||||||
alpha=0.1, color='grey', hatch='//')
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 음영 처리 - 기존 및 비선형 쌍곡선
|
|
||||||
plt.axvspan(final_step_start_date, final_step_predict_end_date,
|
|
||||||
alpha=0.1, color='grey', hatch='\\')
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 표시 화살표 세로 위치 설정
|
|
||||||
arrow1_y_loc = 1.3 * min(-settle)
|
|
||||||
arrow2_y_loc = 1.4 * min(-settle)
|
|
||||||
|
|
||||||
# 화살표 크기 설정
|
|
||||||
arrow_head_width = 0.03 * max(settle)
|
|
||||||
arrow_head_length = 0.01 * max(time)
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 화살표 처리 - 단계성토
|
|
||||||
axes[1].arrow(time[step_start_index[0]], arrow1_y_loc,
|
|
||||||
final_step_predict_end_date - time[step_start_index[0]], 0,
|
|
||||||
head_width=arrow_head_width, head_length=arrow_head_length,
|
|
||||||
color='black', length_includes_head='True')
|
|
||||||
axes[1].arrow(final_step_predict_end_date, arrow1_y_loc,
|
|
||||||
time[step_start_index[0]] - final_step_predict_end_date, 0,
|
|
||||||
head_width=arrow_head_width, head_length=arrow_head_length,
|
|
||||||
color='black', length_includes_head='True')
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 화살표 처리 - 기존 및 비선형 쌍곡선
|
|
||||||
axes[1].arrow(final_step_start_date, arrow2_y_loc,
|
|
||||||
final_step_predict_end_date - final_step_start_date, 0,
|
|
||||||
head_width=arrow_head_width, head_length=arrow_head_length,
|
|
||||||
color='black', length_includes_head='True')
|
|
||||||
axes[1].arrow(final_step_predict_end_date, arrow2_y_loc,
|
|
||||||
final_step_start_date - final_step_predict_end_date, 0,
|
|
||||||
head_width=arrow_head_width, head_length=arrow_head_length,
|
|
||||||
color='black', length_includes_head='True')
|
|
||||||
|
|
||||||
# Annotation 표시용 공간 설정
|
|
||||||
space = max(time) * 0.01
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 범례 표시 - 단계성토
|
|
||||||
plt.annotate('Data Range Used (Nonlinear + Step Loading)', xy=(final_step_predict_end_date, arrow1_y_loc),
|
|
||||||
xytext=(final_step_predict_end_date + space, arrow1_y_loc),
|
|
||||||
horizontalalignment='left', verticalalignment='center')
|
|
||||||
|
|
||||||
# 예측 데이터 사용 범위 범례 표시 - 기존 및 비선형 쌍곡선
|
|
||||||
plt.annotate('Data Range Used (Nonlinear and Original Hyperbolic)', xy=(final_step_predict_end_date, arrow1_y_loc),
|
|
||||||
xytext=(final_step_predict_end_date + space, arrow2_y_loc),
|
|
||||||
horizontalalignment='left', verticalalignment='center')
|
|
||||||
|
|
||||||
# RMSE 산정 범위 표시 화살표 세로 위치 설정
|
|
||||||
arrow3_y_loc = 0.55 * min(-settle)
|
|
||||||
|
|
||||||
# RMSE 산정 범위 화살표 표시
|
|
||||||
axes[1].arrow(final_step_predict_end_date, arrow3_y_loc,
|
|
||||||
final_step_end_date - final_step_predict_end_date, 0,
|
|
||||||
head_width=arrow_head_width, head_length=arrow_head_length,
|
|
||||||
color='black', length_includes_head='True')
|
|
||||||
axes[1].arrow(final_step_end_date, arrow3_y_loc,
|
|
||||||
final_step_predict_end_date - final_step_end_date, 0,
|
|
||||||
head_width=arrow_head_width, head_length=arrow_head_length,
|
|
||||||
color='black', length_includes_head='True')
|
|
||||||
|
|
||||||
# RMSE 산정 범위 세로선 설정
|
|
||||||
axes[1].axvline(x=final_step_end_date, color='silver', linestyle=':')
|
|
||||||
|
|
||||||
# RMSE 산정 범위 범례 표시
|
|
||||||
plt.annotate('RMSE Estimation Section', xy=(final_step_end_date, arrow3_y_loc),
|
|
||||||
xytext=(final_step_end_date + space, arrow3_y_loc),
|
|
||||||
horizontalalignment='left', verticalalignment='center')
|
|
||||||
|
|
||||||
# RMSE 출력
|
|
||||||
mybox = {'facecolor': 'white', 'edgecolor': 'black', 'boxstyle': 'round', 'alpha': 0.2}
|
|
||||||
plt.text(max(time), 0.25 * min(-settle),
|
|
||||||
"Root Mean Squared Error"
|
|
||||||
+ "\n" + "Nonlinear + Step Loading: %0.3f" % RMSE_step
|
|
||||||
+ "\n" + "Nonlinear Hyperbolic: %0.3f" % RMSE_hyper_nonlinear
|
|
||||||
+ "\n" + "Original Hyperbolic: %0.3f" % RMSE_hyper_original,
|
|
||||||
color='r', horizontalalignment='right',
|
|
||||||
verticalalignment='top', fontsize='12', bbox=mybox)
|
|
||||||
|
|
||||||
# (최종 계측 침하량 - 예측값) 출력
|
|
||||||
plt.text(max(time), 0.65 * min(-settle),
|
|
||||||
"Error in Final Monitored Settlement"
|
|
||||||
+ "\n" + "Nonlinear + Step Loading: %0.3f" % final_error_step
|
|
||||||
+ "\n" + "Nonlinear Hyperbolic: %0.3f" % final_error_hyper_nonlinear
|
|
||||||
+ "\n" + "Original Hyperbolic: %0.3f" % final_error_hyper_original,
|
|
||||||
color='r', horizontalalignment='right',
|
|
||||||
verticalalignment='top', fontsize='12', bbox=mybox)
|
|
||||||
|
|
||||||
# 그래프 제목 표시
|
|
||||||
plt.title(filename + ": up to %i%% data used in the final step" % final_step_predict_percent)
|
|
||||||
|
|
||||||
# 그래프 저장 (SVG 및 PNG)
|
|
||||||
plt.savefig(output_foler_name + '/' + filename +' %i percent (SVG).svg' %final_step_predict_percent, bbox_inches='tight')
|
|
||||||
plt.savefig(output_foler_name + '/' + filename +' %i percent (PNG).png' %final_step_predict_percent, bbox_inches='tight')
|
|
||||||
|
|
||||||
# 그래프 출력
|
|
||||||
plt.show()
|
|
||||||
|
|
@ -57,14 +57,12 @@ data_folder_name = "data"
|
||||||
output_foler_name = "output"
|
output_foler_name = "output"
|
||||||
|
|
||||||
# 파일명 설정
|
# 파일명 설정
|
||||||
#filename = "1_S-12.csv"
|
filename = "1_S-12.csv"
|
||||||
#filename = "1_SP-11.csv"
|
#filename = "1_SP-11.csv"
|
||||||
#filename = "1_SP-17.csv"
|
|
||||||
#filename = "1_SP-23.csv"
|
#filename = "1_SP-23.csv"
|
||||||
#filename = "3_SP3-65.csv"
|
#filename = "3_SP3-65.csv"
|
||||||
#filename = "3_SP3-68.csv"
|
#filename = "3_SP3-68.csv"
|
||||||
filename = "4_S-11.csv"
|
#filename = "4_S-11.csv"
|
||||||
#filename = "west_test_2_5_No_54.csv"
|
|
||||||
|
|
||||||
# 최종 성토 단계의 데이터 사용 퍼센트 설정 : 사용자 입력값
|
# 최종 성토 단계의 데이터 사용 퍼센트 설정 : 사용자 입력값
|
||||||
final_step_predict_percent = 20
|
final_step_predict_percent = 20
|
||||||
|
|
@ -72,46 +70,14 @@ final_step_predict_percent = 20
|
||||||
# 추가 계측 구간 퍼센트 설정 : 사용자 입력값
|
# 추가 계측 구간 퍼센트 설정 : 사용자 입력값
|
||||||
additional_predict_percent = 100
|
additional_predict_percent = 100
|
||||||
|
|
||||||
# 성토 단계 시작 index 리스트 초기화
|
# 성토고 구분 버퍼값 : 사용자 입력값
|
||||||
step_start_index = []
|
step_date_buffer = 35
|
||||||
|
|
||||||
# 성토 단계 끝 index + 1 리스트 초기화
|
# 안정된 분석을 위해서는 충분히 많은 데이터가 필요함
|
||||||
step_end_index = []
|
# 성토 단계가 너무 짧을 경우, 데이터 개수가 충분치 않아 해석이 힘듦
|
||||||
|
# Buffer 설정: 최소 30일 이상의 방치 기간 필요 설정
|
||||||
|
|
||||||
# TODO: 성토 단계를 분석해서 Step을 설정할 수 있도록 수정할 것
|
|
||||||
# 고려사항 1: 안정된 분석을 위해서는 성토 시작일로부터 얼마 후 데이터를 활용할 것인가? --> Buffer 설정
|
|
||||||
# 고려사항 2: 데이터 개수가 충분한가? --> 최소 데이터량 결정
|
|
||||||
# 고려사항 3: 시간-침하 곡선 형태가 직선이나 음의 곡률을 가질 경우, 어떻게 할 것인가 --> 회귀분석 불가 구역
|
|
||||||
# 고려사항 4: 상기 사항을 만족하지 않은 Step을 제외하고 분석을 수행할 수 있는가?
|
|
||||||
|
|
||||||
# 파일명에 따라서, 성토 단계 index 설정
|
|
||||||
'''
|
|
||||||
if filename == "1_S-12.csv":
|
|
||||||
step_start_index = [0, 56]
|
|
||||||
step_end_index = [56, 143]
|
|
||||||
elif filename == "1_SP-11.csv":
|
|
||||||
step_start_index = [0, 10, 37, 79]
|
|
||||||
step_end_index = [10, 37, 79, 124]
|
|
||||||
elif filename == "1_SP-17.csv":
|
|
||||||
step_start_index = [0, 122]
|
|
||||||
step_end_index = [122, 163]
|
|
||||||
elif filename == "1_SP-23.csv":
|
|
||||||
step_start_index = [0, 18, 40, 90]
|
|
||||||
step_end_index = [18, 40, 90, 124]
|
|
||||||
elif filename == "3_SP3-65.csv":
|
|
||||||
step_start_index = [0, 94, 136]
|
|
||||||
step_end_index = [ 94, 136, 182]
|
|
||||||
elif filename == "3_SP3-68.csv":
|
|
||||||
step_start_index = [0, 9, 48, 88]
|
|
||||||
step_end_index = [9, 48, 88, 127]
|
|
||||||
elif filename == "4_S-11.csv":
|
|
||||||
step_start_index = [0, 10, 46, 51, 120]
|
|
||||||
step_end_index = [10, 46, 51, 120, 157]
|
|
||||||
elif filename == "west_test_2_5_No_54.csv":
|
|
||||||
step_start_index = [111, 195, 269, 287]
|
|
||||||
step_end_index = [195, 269, 287, 409]
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
# ====================
|
# ====================
|
||||||
# 파일 읽기, 데이터 설정
|
# 파일 읽기, 데이터 설정
|
||||||
|
|
@ -129,29 +95,72 @@ surcharge = data['Surcharge'].to_numpy()
|
||||||
final_index = time.size
|
final_index = time.size
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# =================
|
# =================
|
||||||
# 성토 단계 구분
|
# 성토 단계 구분
|
||||||
# =================
|
# =================
|
||||||
|
|
||||||
# 성토 단계 index 생성
|
# 성토 단계 시작 index 리스트 초기화
|
||||||
current_surcharge = surcharge[0]
|
|
||||||
step_start_index = [0]
|
step_start_index = [0]
|
||||||
start_index_counter = 0
|
|
||||||
|
# 성토 단계 끝 index 리스트 초기화
|
||||||
step_end_index = []
|
step_end_index = []
|
||||||
|
|
||||||
for index in range(len(surcharge)) :
|
# 현재 성토고 설정
|
||||||
if surcharge[index]!=current_surcharge :
|
current_surcharge = surcharge[0]
|
||||||
current_surcharge = surcharge[index]
|
|
||||||
step_start_index.append(index)
|
|
||||||
step_end_index.append(index)
|
|
||||||
start_index_counter = start_index_counter + 1
|
|
||||||
|
|
||||||
if index == len(surcharge) - 1:
|
# 단계 시작 시점 초기화
|
||||||
|
step_start_date = 0
|
||||||
|
|
||||||
|
# 모든 시간-성토고 데이터에서 순차적으로 확인
|
||||||
|
for index in range(len(surcharge)):
|
||||||
|
|
||||||
|
# 만일 성토고의 변화가 있을 경우,
|
||||||
|
if surcharge[index] != current_surcharge:
|
||||||
|
|
||||||
|
# 현재 시간과 성토로를 설정
|
||||||
|
current_date = time[index]
|
||||||
|
current_surcharge = surcharge[index]
|
||||||
|
|
||||||
|
# 시간 SPAN이 30일 이상일 경우,
|
||||||
|
if current_date - step_start_date > step_date_buffer:
|
||||||
|
# Index를 추가함
|
||||||
step_end_index.append(index)
|
step_end_index.append(index)
|
||||||
|
step_start_index.append(index)
|
||||||
|
|
||||||
|
# 단계 시작일 업데이트
|
||||||
|
step_start_date = current_date
|
||||||
|
|
||||||
|
# 마지막 성토 단계 끝 index 추가
|
||||||
|
step_end_index.append(len(surcharge) - 1)
|
||||||
|
|
||||||
# 성토 단계 횟수 파악 및 저장
|
# 성토 단계 횟수 파악 및 저장
|
||||||
num_steps = len(step_start_index)
|
num_steps = len(step_start_index)
|
||||||
|
|
||||||
|
# TODO: 직접 파악한 성토 단계 index와 코드로 파악한 성토 단계 index 비교 필요
|
||||||
|
''' 직접 파악한 성토 단계 index
|
||||||
|
if filename == "1_S-12.csv":
|
||||||
|
step_start_index = [0, 56]
|
||||||
|
step_end_index = [56, 143]
|
||||||
|
elif filename == "1_SP-11.csv":
|
||||||
|
step_start_index = [0, 10, 37, 79]
|
||||||
|
step_end_index = [10, 37, 79, 124]
|
||||||
|
elif filename == "1_SP-23.csv":
|
||||||
|
step_start_index = [0, 18, 40, 90]
|
||||||
|
step_end_index = [18, 40, 90, 124]
|
||||||
|
elif filename == "3_SP3-65.csv":
|
||||||
|
step_start_index = [0, 94, 136]
|
||||||
|
step_end_index = [ 94, 136, 182]
|
||||||
|
elif filename == "3_SP3-68.csv":
|
||||||
|
step_start_index = [0, 9, 48, 88]
|
||||||
|
step_end_index = [9, 48, 88, 127]
|
||||||
|
elif filename == "4_S-11.csv":
|
||||||
|
step_start_index = [0, 10, 46, 51, 120]
|
||||||
|
step_end_index = [10, 46, 51, 120, 157]
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================
|
# ===========================
|
||||||
# 최종 단계 데이터 사용 범위 조정
|
# 최종 단계 데이터 사용 범위 조정
|
||||||
# ===========================
|
# ===========================
|
||||||