减少爆管定位代码中引入的不确定性

This commit is contained in:
2026-03-09 11:29:57 +08:00
parent d55e23bc44
commit f9111ab9c1
5 changed files with 145 additions and 31 deletions
@@ -44,7 +44,7 @@ def cal_similarity_simple_return_dd(
similarity_dis = 0
else:"""
none_flag = 0
sensor_for_cos = list(
sensor_for_cos = sorted(
set(dpressure_s.index).intersection(set(act_dpressure.index))
)
"""if len(dpressure_s) ==0 or len(dpressure) ==0:
@@ -74,7 +74,7 @@ def cal_similarity_simple_return_dd(
none_flag = 1
else:"""
none_flag = 0
important_sensor = list(
important_sensor = sorted(
set(important_sensor).intersection(set(act_dpressure.index))
)
part_dpressure = dpressure_s[important_sensor] - dpressure[important_sensor]
@@ -107,7 +107,7 @@ def cal_similarity_simple_return_dd(
elif similarity_mode == "CAD_new_gy" or similarity_mode == "CDF":
# cos
sensor_for_cos = list(
sensor_for_cos = sorted(
set(dpressure_s.index).intersection(set(act_dpressure.index))
)
if len(sensor_for_cos) == 0 and len(dpressure_s) == 0:
@@ -141,7 +141,7 @@ def cal_similarity_simple_return_dd(
similarity_cos = s1 / s2
# DIS
important_sensor_new = list(
important_sensor_new = sorted(
set(important_sensor).intersection(set(act_dpressure.index))
)
if len(important_sensor_new) == 0:
@@ -172,7 +172,7 @@ def cal_similarity_simple_return_dd(
similarity_cos = 0
none_flag = 0
# DIS
important_sensor_new = list(
important_sensor_new = sorted(
set(important_sensor).intersection(set(act_dpressure.index))
)
if len(important_sensor_new) == 0:
@@ -762,15 +762,24 @@ def update_similarity(leak_candidate_center, similarity, leak_center_dict):
return similarity_new
def extra_judge(similarity):
def extra_judge(
similarity, min_candidates_to_prune: int = 200, std_relax_factor: float = 0.5
):
if len(similarity.index) == 0:
return 1.0, similarity
if len(similarity.index) < int(min_candidates_to_prune):
return 1.0, similarity
mean_similarity = float(similarity.mean())
record_sensor = []
record_value = []
for i in range(len(similarity.index)):
if similarity.iloc[i] >= mean_similarity - 1e-10:
record_value.append(similarity.iloc[i])
record_sensor.append(similarity.index[i])
out_put_similarity = pd.Series(record_value, index=record_sensor, dtype=float)
std_similarity = float(similarity.std())
if not math.isfinite(std_similarity):
std_similarity = 0.0
threshold = mean_similarity - float(std_relax_factor) * std_similarity
out_put_similarity = similarity[similarity >= threshold - 1e-10]
if len(out_put_similarity.index) == 0:
out_put_similarity = similarity.iloc[:1]
cut_ratio = len(out_put_similarity.index) / len(similarity.index)
return cut_ratio, out_put_similarity