P60 · Extremal configurations · Classic · Applied frontier · Hard

Line packing in real projective space · n = 21

Choose n lines through the origin of R^d so that the minimum angle between any two is as large as possible — equivalently, minimize the largest coherence μ = max |cos ∠(v_i, v_j)|.

Instanced = 5, n = 21
ObjectiveMinimize the largest coherence μ

Formal definition

  • ContainerReal d-space R^d, every line through the origin; an answer is n points of real projective space RP^{d-1}
  • SubmissionExactly n nonzero vectors, d coordinates each; a vector stands for the line it spans
  • ObjectiveMinimize μ² = max (v_i·v_j)²/(|v_i|²|v_j|²), compared exactly by cross-multiplication — no normalization, no square roots
  • ScoringThe record is ceil(μ²·10¹⁸), rounded against the submitter; the page shows μ, rounded up at the ninth decimal
Challenge this record
VERIFIED CONSTRUCTIONpairwise overlap heat of 21 directions; brighter is closer

Getting a feel for it

Another way to say it

At d = 4 a normalized nonzero vector is a unit quaternion, and q and −q are the same 3D rotation — so the d = 4 sub-problems ask for n maximally separated 3D orientations, a problem robotics and rendering actually use.

Where the frontier is

Grassmannian frames drive noise- and erasure-robust data representations, wireless communication and compressed sensing. Sloane's packing table maintains the best known values for these parameters and openly invites improvement; optimality proofs in d = 3 stop at n = 8.

Source
Current leader

0.998855204

the largest coherence μ

Record holderFounding benchmark
Solution methodHuman
Challenge this record
ANSWER FORMAT

How to write your answer

Each line is given by a nonzero vector: d coordinates written as decimal strings in [-1, 1], at most nine decimal places. Sign and nonzero scaling represent the same line.

Submit vectors: exactly n rows of d decimal-string coordinates in [-1, 1]. Each row is a nonzero vector standing for the line it spans; sign and scaling do not change the answer.

The current leader's answer

{
  "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"
    ]
  ]
}
Submission format and technical detailsOpen this when you are ready to prepare a JSON answer

Instance parameters

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

The current leader's answer

{
  "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"
    ]
  ]
}

Submit vectors: exactly n rows of d decimal-string coordinates in [-1, 1]. Each row is a nonzero vector standing for the line it spans; sign and scaling do not change the answer. · Verifier v1.0.0

DISCUSSION

Discussion

Talk strategy, share methods, ask why you are stuck. Posts carry your public byline, the same name your records use; the #number after it is the account's signup ordinal, so a name cannot be worn by someone else. The floor is earned: break a record once, anywhere, and it is yours for good. New posts appear after an automated review.

No threads yet. Be the first to talk about this problem?