P60 · 极值构型 · 经典问题 · 应用前沿 · 难

实射影空间中的直线打包 · n = 21

在 R^d 中选择 n 条过原点的直线,使任意两条之间的夹角的最小值尽可能大。等价地:最小化最大重合度 μ = max |cos∠(vᵢ, vⱼ)|。

子题d = 5, n = 21
目标最小化 最大重合度 μ

严格定义

  • 容器d 维实空间 R^d,所有直线都过原点;答案是实射影空间 RP^{d-1} 中的 n 个点
  • 提交恰好 n 个非零向量,每个 d 个坐标;向量代表它张成的直线
  • 目标最小化 μ² = max (vᵢ·vⱼ)²/(|vᵢ|²|vⱼ|²),全程有理数交叉相乘比较,无归一化无开方
  • 计分纪录是 ceil(μ²·10¹⁸),向不利于提交者的方向取整;页面显示 μ,向上取整到第 9 位小数
挑战这个纪录
已验证构造21 个方向的两两重合度热图,越亮越接近

帮助理解

换一种说法

d = 4 时,一个非零向量归一化后是单位四元数,q 与 −q 是同一个三维旋转,所以 d = 4 的子题就是「选 n 个彼此最分散的三维姿态」,机器人和渲染里真实使用的问题。

前沿在哪里

Grassmannian frame 用于抗噪声与抗擦除的数据表示、无线通信与压缩感知。Sloane 的打包表维护着这些参数的最好已知值并公开邀请改进;d = 3 的最优性证明只到 n = 8。

查看来源
当前第一名

0.998855204

最大重合度 μ

纪录保持者创始基准
解题方式人工
挑战这个纪录
ANSWER FORMAT

答案怎么写

每条直线由一个非零向量表示,d 个坐标写成 [-1, 1] 内的十进制字符串,最多九位小数。向量的正负和非零缩放代表同一条直线。

提交 vectors:恰好 n 行,每行 d 个 [-1, 1] 内的十进制字符串坐标。每行是一个非零向量,代表它张成的直线;正负与缩放不改变答案。

当前第一名的答案

{
  "vectors": [
    [
      "1.000000000",
      "0.047619048",
      "0.002267574",
      "0.000107980",
      "0.000005142"
    ],
    [
      "1.000000000",
      "0.095238095",
      "0.009070295",
      "0.000863838",
      "0.000082270"
    ],
    [
      "1.000000000",
      "0.142857143",
      "0.020408163",
      "0.002915452",
      "0.000416493"
    ],
    [
      "1.000000000",
      "0.190476190",
      "0.036281179",
      "0.006910701",
      "0.001316324"
    ],
    [
      "1.000000000",
      "0.238095238",
      "0.056689342",
      "0.013497462",
      "0.003213682"
    ],
    [
      "1.000000000",
      "0.285714286",
      "0.081632653",
      "0.023323615",
      "0.006663890"
    ],
    [
      "1.000000000",
      "0.333333333",
      "0.111111111",
      "0.037037037",
      "0.012345679"
    ],
    [
      "1.000000000",
      "0.380952381",
      "0.145124717",
      "0.055285606",
      "0.021061183"
    ],
    [
      "1.000000000",
      "0.428571429",
      "0.183673469",
      "0.078717201",
      "0.033735943"
    ],
    [
      "1.000000000",
      "0.476190476",
      "0.226757370",
      "0.107979700",
      "0.051418905"
    ],
    [
      "1.000000000",
      "0.523809524",
      "0.274376417",
      "0.143720980",
      "0.075282418"
    ],
    [
      "1.000000000",
      "0.571428571",
      "0.326530612",
      "0.186588921",
      "0.106622241"
    ],
    [
      "1.000000000",
      "0.619047619",
      "0.383219955",
      "0.237231400",
      "0.146857534"
    ],
    [
      "1.000000000",
      "0.666666667",
      "0.444444444",
      "0.296296296",
      "0.197530864"
    ],
    [
      "1.000000000",
      "0.714285714",
      "0.510204082",
      "0.364431487",
      "0.260308205"
    ],
    [
      "1.000000000",
      "0.761904762",
      "0.580498866",
      "0.442284850",
      "0.336978934"
    ],
    [
      "1.000000000",
      "0.809523810",
      "0.655328798",
      "0.530504265",
      "0.429455834"
    ],
    [
      "1.000000000",
      "0.857142857",
      "0.734693878",
      "0.629737609",
      "0.539775094"
    ],
    [
      "1.000000000",
      "0.904761905",
      "0.818594104",
      "0.740632761",
      "0.670096308"
    ],
    [
      "1.000000000",
      "0.952380952",
      "0.907029478",
      "0.863837599",
      "0.822702475"
    ],
    [
      "1.000000000",
      "1.000000000",
      "1.000000000",
      "1.000000000",
      "1.000000000"
    ]
  ]
}
提交格式与技术细节需要编写程序或准备 JSON 答案时再查看

子题参数

{
  "n": 21,
  "d": 5
}

当前第一名的答案

{
  "vectors": [
    [
      "1.000000000",
      "0.047619048",
      "0.002267574",
      "0.000107980",
      "0.000005142"
    ],
    [
      "1.000000000",
      "0.095238095",
      "0.009070295",
      "0.000863838",
      "0.000082270"
    ],
    [
      "1.000000000",
      "0.142857143",
      "0.020408163",
      "0.002915452",
      "0.000416493"
    ],
    [
      "1.000000000",
      "0.190476190",
      "0.036281179",
      "0.006910701",
      "0.001316324"
    ],
    [
      "1.000000000",
      "0.238095238",
      "0.056689342",
      "0.013497462",
      "0.003213682"
    ],
    [
      "1.000000000",
      "0.285714286",
      "0.081632653",
      "0.023323615",
      "0.006663890"
    ],
    [
      "1.000000000",
      "0.333333333",
      "0.111111111",
      "0.037037037",
      "0.012345679"
    ],
    [
      "1.000000000",
      "0.380952381",
      "0.145124717",
      "0.055285606",
      "0.021061183"
    ],
    [
      "1.000000000",
      "0.428571429",
      "0.183673469",
      "0.078717201",
      "0.033735943"
    ],
    [
      "1.000000000",
      "0.476190476",
      "0.226757370",
      "0.107979700",
      "0.051418905"
    ],
    [
      "1.000000000",
      "0.523809524",
      "0.274376417",
      "0.143720980",
      "0.075282418"
    ],
    [
      "1.000000000",
      "0.571428571",
      "0.326530612",
      "0.186588921",
      "0.106622241"
    ],
    [
      "1.000000000",
      "0.619047619",
      "0.383219955",
      "0.237231400",
      "0.146857534"
    ],
    [
      "1.000000000",
      "0.666666667",
      "0.444444444",
      "0.296296296",
      "0.197530864"
    ],
    [
      "1.000000000",
      "0.714285714",
      "0.510204082",
      "0.364431487",
      "0.260308205"
    ],
    [
      "1.000000000",
      "0.761904762",
      "0.580498866",
      "0.442284850",
      "0.336978934"
    ],
    [
      "1.000000000",
      "0.809523810",
      "0.655328798",
      "0.530504265",
      "0.429455834"
    ],
    [
      "1.000000000",
      "0.857142857",
      "0.734693878",
      "0.629737609",
      "0.539775094"
    ],
    [
      "1.000000000",
      "0.904761905",
      "0.818594104",
      "0.740632761",
      "0.670096308"
    ],
    [
      "1.000000000",
      "0.952380952",
      "0.907029478",
      "0.863837599",
      "0.822702475"
    ],
    [
      "1.000000000",
      "1.000000000",
      "1.000000000",
      "1.000000000",
      "1.000000000"
    ]
  ]
}

提交 vectors:恰好 n 行,每行 d 个 [-1, 1] 内的十进制字符串坐标。每行是一个非零向量,代表它张成的直线;正负与缩放不改变答案。 · 验证器 v1.0.0

DISCUSSION

讨论区

聊思路、贴方法、问为什么卡住。发帖即公开署名,与纪录同一个名字;署名后的 #编号是账号的注册序号,冒不了名。发言资格与实绩绑定:破过一次纪录,就永久拥有发言权。新发言经自动审核后公开。

还没有帖子。第一个聊聊这道题的思路?