新增修改

This commit is contained in:
2026-04-23 12:48:59 +08:00
parent df46812eff
commit 92b856b622
60 changed files with 18623 additions and 398 deletions

112
final/scripts/f_net1125.py Normal file
View File

@@ -0,0 +1,112 @@
# f_net1125.py ← 边关系已算完,只算任务网络
from __future__ import annotations
import numpy as np
from typing import Dict, List, Tuple
NodeID = str
TaskScore = float # 网络效能得分 [0,1]
class TaskNetworkEvaluator:
"""
输入:
nodes - 节点数据(含 function_vector / performance / temporal
relations - 已算好的全部边关系
格式relations[("IS","DEF001","CMD001")] = 0.87
"""
def __init__(self,
nodes: Dict[NodeID, Dict],
relations: Dict[Tuple[str, NodeID, NodeID], float],
weights: Dict[str, Dict[str, float]] = None):
self.nodes = nodes
self.rels = relations
self.w = weights
# ---------- 工具 ----------
def _avg(self, scores: List[float]) -> float:
return float(np.mean(scores)) if scores else 0.0
def _collect_func(self, key: str) -> List[float]:
"""所有节点指定功能值"""
return [n["function_vector"][key] for n in self.nodes.values()]
def _collect_rel(self, tag: str) -> List[float]:
"""预存关系强度列表"""
return [v for k, v in self.rels.items() if k[0] == tag]
def _collect_resp(self) -> List[float]:
"""响应时间得分"""
return [np.exp(-0.1 * n["temporal"]["response_time"]) for n in self.nodes.values()]
# ---------- 2.1 综合防御 ----------
def eval_defense(self) -> TaskScore:
w = self.w["defense"]
f_ic = self._avg(self._collect_func("f_IC"))
f_ia = self._avg(self._collect_func("f_IA"))
l_is = self._avg(self._collect_rel("IS"))
t_resp = self._avg(self._collect_resp())
l_cc = self._avg(self._collect_rel("CC"))
return w["w1"] * f_ic + w["w2"] * f_ia + w["w3"] * l_is + w["w4"] * t_resp + w["w5"] * l_cc
# ---------- 2.2 火力打击 ----------
def eval_fire(self) -> TaskScore:
w = self.w["fire"]
f_cs = self._avg(self._collect_func("f_CS"))
f_ia = self._avg(self._collect_func("f_IA"))
l_co = self._avg(self._collect_rel("CO"))
perf_cs = self._avg([n["performance"]["core_performance"] * n["function_vector"]["f_CS"]
for n in self.nodes.values()])
l_is = self._avg(self._collect_rel("IS"))
return w["w1"] * f_cs + w["w2"] * f_ia + w["w3"] * l_co + w["w4"] * perf_cs + w["w5"] * l_is
# ---------- 2.3 后勤保障 ----------
def eval_logistics(self) -> TaskScore:
w = self.w["logistics"]
f_cps = self._avg(self._collect_func("f_CPS"))
f_dp = self._avg(self._collect_func("f_DP"))
l_pd = self._avg(self._collect_rel("PD"))
p_rel = self._avg([n["performance"]["mtbf"] / 1000 for n in self.nodes.values()])
f_it = self._avg(self._collect_func("f_IT"))
return w["w1"] * f_cps + w["w2"] * f_dp + w["w3"] * l_pd + w["w4"] * p_rel + w["w5"] * f_it
# ---------- 2.4 医疗救援 ----------
def eval_medical(self) -> TaskScore:
w = self.w["medical"]
f_cps = self._avg(self._collect_func("f_CPS"))
t_resp = self._avg(self._collect_resp())
f_it = self._avg(self._collect_func("f_IT"))
l_sf = self._avg(self._collect_rel("SF"))
fresh = self._avg([np.exp(-0.1 * n["temporal"]["data_age"]) for n in self.nodes.values()])
return w["w1"] * f_cps + w["w2"] * t_resp + w["w3"] * f_it + w["w4"] * l_sf + w["w5"] * fresh
# ---------- 2.5 紧急疏散 ----------
def eval_evacuation(self) -> TaskScore:
w = self.w["evacuation"]
f_cc = self._avg(self._collect_func("f_CC"))
f_it = self._avg(self._collect_func("f_IT"))
l_cc = self._avg(self._collect_rel("CC"))
f_cps = self._avg(self._collect_func("f_CPS"))
t_resp = self._avg(self._collect_resp())
return w["w1"] * f_cc + w["w2"] * f_it + w["w3"] * l_cc + w["w4"] * f_cps + w["w5"] * t_resp
# ---------- 一键评估 ----------
def eval_all(self) -> Dict[str, TaskScore]:
results = {
"defense": self.eval_defense(),
"fire": self.eval_fire(),
"logistics": self.eval_logistics(),
"medical": self.eval_medical(),
"evacuation": self.eval_evacuation(),
}
# 计算五个维度的分数
dimensions = {
"function": self._avg(self._collect_func("f_IC")),
"relationship": self._avg(self._collect_rel("IS")),
"performance": self._avg([n["performance"]["core_performance"] for n in self.nodes.values()]),
"temporal": self._avg(self._collect_resp()),
"interaction": self._avg(self._collect_rel("SF"))
}
results["dimensions"] = dimensions
return results