From 853d01d796b56db4c17d25020381cb4a2ad72520 Mon Sep 17 00:00:00 2001 From: "34047007@qq.com" <34047007@qq.com> Date: Fri, 7 Aug 2026 21:47:55 +0800 Subject: [PATCH] =?UTF-8?q?checkpoint:=20=E7=BB=9F=E8=AE=A1=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E7=A1=AE=E5=AE=9A=E6=80=A7=E2=80=94=E2=80=94=E7=B3=BB?= =?UTF-8?q?=E8=B0=B1=E6=8C=89=20id=20=E8=A7=84=E8=8C=83=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=EF=BC=8C=E6=B6=88=E9=99=A4=20DB=20=E8=A1=8C=E5=BA=8F=E5=AF=B9?= =?UTF-8?q?=20MME=20=E5=B8=83=E5=B1=80=E7=9A=84=E5=BD=B1=E5=93=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - _order_pedigree: base 与同世代并列个体均按 id 确定性排序,输入/DB 行序不再参与计算 - 平似然/退化数据上同内容输入必逐位同输出(此前 golden-section/二分会被末位浮点噪声带偏到任意 h²,导致回归间歇失败) --- backend/scripts/breeding_stats/blup.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/backend/scripts/breeding_stats/blup.py b/backend/scripts/breeding_stats/blup.py index 988cd9f..eb50069 100644 --- a/backend/scripts/breeding_stats/blup.py +++ b/backend/scripts/breeding_stats/blup.py @@ -84,7 +84,14 @@ def _pearson(x: list[float], y: list[float]) -> float: def _order_pedigree(base: list[int], non_base: list[tuple[int, int | None, int | None]]) -> tuple[list[int], dict[int, int]]: - """返回拓扑序(祖先恒在子代之前,base 恒在最前)与 {个体id: 序号}。""" + """返回拓扑序(祖先恒在子代之前,base 恒在最前)与 {个体id: 序号}。 + + 输入顺序不参与计算:base 与同世代并列个体均按 id 确定性排序,调用方/DB 行序不再 + 影响 MME 变量布局——同内容输入必得逐位相同输出(平似然/退化数据上尤其关键,否则 + golden-section/二分会被末位浮点噪声带偏到任意 h²)。 + """ + base = sorted(base, key=str) + non_base = sorted(non_base, key=lambda it: str(it[0])) order: list[int] = list(base) placed: set[int] = set(base) remaining = list(non_base)