/ concept-collection / fastandaccurate
Sign in
concept-collection / fastandaccurate
fastandaccurate / src / app / pages / AboutPage.tsx
94 lines · 4.5 KBBlameHistoryRaw
1import { RESULTS_REPO_URL } from "../results";
3const REPO_URL = "https://github.com/concept-collection/fastandaccurate";
5export function AboutPage() {
6 const cliUrl = `https://concept-collection.github.io/fastandaccurate/cli.tgz?v=${__BUILD_ID__}`;
7 return (
8 <>
9 <p className="small">
10 <a href="#/">← problems</a>
11 </p>
12 <h1>About</h1>
13 <p>
14 A limitation of most solver comparisons is that they fix a
15 discretization, which quietly decides much of the outcome. Here each{" "}
16 <strong>problem</strong> is posed in the continuum, with an exact or
17 highly accurate reference solution; a solver chooses its own
18 discretization and is scored at problem-specified evaluation points.
19 Each problem defines its own interface and a short list of official{" "}
20 <strong>instances</strong> (parameter combinations) in a written
21 specification, so every solver is compared on identical inputs.
22 Solvers are MATLAB function files run by{" "}
23 <a href="https://numbl.org">numbl</a> (MATLAB syntax in the browser
24 and in node), so everything on this site runs client side, and the
25 identical harness runs from the command line.
26 </p>
28 <h2>Measurement</h2>
29 <p>
30 The central object is the <strong>work-precision curve</strong>:
31 error against compute time, traced out as the solver's resolution
32 parameter varies. Errors are measured at a fixed set of evaluation
33 points defined per instance, relative to the reference solution.
34 Timing is one untimed warmup run (which absorbs JIT compilation),
35 then the median of repeated timed runs; a run includes the solver's
36 own discretization, assembly, solve, and evaluation. There is
37 deliberately no single ranking: which curve is best can differ by
38 accuracy regime, instance, and machine, and the site presents the
39 curves rather than a verdict. Times from different machines are not
40 comparable; every result records its environment, and the charts
41 label curves by machine.
42 </p>
44 <h2>Results and provenance</h2>
45 <p>
46 Results are JSON files in{" "}
47 <a href={RESULTS_REPO_URL}>fastandaccurate-results</a>, added by pull
48 request; the site reads that repository statically, so there is no
49 database and no server. Every result carries its provenance: the
50 instance spec and its hash, solver id and version, timing protocol,
51 runtime, numbl version, and machine. Results produced by in-browser
52 solvers can be rerun by any visitor on their own machine, directly on
53 the problem page. Results from solvers outside the repository (and,
54 in the future, from other languages and hardware) enter the same way
55 and are marked as not reproducible in the browser.
56 </p>
58 <h2>Running outside the browser</h2>
59 <p>
60 The command line installs from this site itself (node 20 or newer;
61 nothing on the npm registry):
62 </p>
63 <pre>{`npx ${cliUrl} run --label "my workstation"`}</pre>
64 <p>
65 This runs the standard sweeps and writes one result JSON per instance
66 and solver. Useful flags: <code>--instance &lt;id&gt;</code>,{" "}
67 <code>--solver &lt;id&gt;</code>, <code>--repeats N</code>,{" "}
68 <code>--max-n N</code>, <code>--out dir</code>. To benchmark your own
69 solver, point the harness at a MATLAB function file implementing the
70 problem's solver interface:
71 </p>
72 <pre>{`npx ${cliUrl} run --solver-file my_method.m --solver-id my-method`}</pre>
73 <p className="small muted">
74 Note that npx caches by the exact URL string; the <code>?v=</code>{" "}
75 suffix above ties the command to the current deployment so a later
76 visit installs the current build.
77 </p>
79 <h2>Submitting</h2>
80 <p>
81 Result files can be loaded on a problem page (load result file) to
82 view them against the committed curves before submitting anything. To
83 publish results, open a pull request adding the files under{" "}
84 <code>results/</code> in the{" "}
85 <a href={RESULTS_REPO_URL}>results repository</a>. To add a solver to
86 the site itself, so visitors can rerun it in the browser, PR the
87 solver directory and a manifest entry to{" "}
88 <a href={REPO_URL}>the main repository</a>; submissions are reviewed
89 against the problem specification, including that a solver must not
90 special-case the known solution.
91 </p>
92 </>
93 );
moveopenescclose