Version 2.1.0. These rules apply to all starter challenges. Each challenge page lists its own requirements and score.
save_optiland_file (see "How to submit"). You can also add a notebook that shows how you made the design. The judge uses only the lens file.Optimize with any method or software you like. Only the final prescription counts.
Material("N-BK7", catalog="SCHOTT"). The judge does not substitute similar names. Air is the only other medium.RadialAperture) in your file, the judge uses its r_max as a hard aperture. If not, the judge sets an automatic clear radius: the highest real ray on that surface, over the full pupil, at every verification field and wavelength, plus 0.1%. So without apertures, no ray is clipped except by the stop.The judge rejects a lens file with any of these as Invalid prescription:
IdealMaterial other than air, AbbeMaterial) and glasses without a catalog;RadialAperture only, no central obscuration);objectNA (use EPD, imageFNO or float_by_stop_size).The judge ignores the fields, wavelengths, vignetting factors, ray aiming and other analysis settings in your file. It always uses the settings of the challenge.
Mechanical vignetting is not allowed. Every ray of the full pupil must pass all clear apertures, at every verification field and every wavelength. Natural illumination falloff at the edge of the field is allowed.
The judge traces 1,024 pupil rays, the chief ray and 256 rays on the pupil rim, at each verification field and each wavelength. The verification fields use finer steps than the scoring fields (see each challenge). One blocked, lost or totally internally reflected ray makes the design ineligible.
The limit applies to at every verification field. Barrel and pincushion distortion count the same.
Lateral chromatic aberration (an image shift between the wavelengths) therefore makes the spot larger.
| Status | Meaning |
|---|---|
| Eligible | All requirements pass. The design is ranked. |
| Invalid prescription | The file is not valid: format, glass name, crossing surfaces or stop position. |
| Constraint failed | A requirement fails: EFL, f-number, element count, BFD, track, thickness, distortion, ... |
| Ray validation failed | One or more rays are blocked or lost (vignetting). |
| Needs numerical review | The design passes, but a numerical check did not converge. A maintainer looks at it. |
| Evaluator error | The judge failed. This is our problem, not yours. |
In your notebook or script, save your final lens with Optiland:
from optiland.fileio import save_optiland_file
save_optiland_file(lens, "my_lens.json")
On the challenge page, click Submit Design and paste the content of my_lens.json (or select the file). A link to a notebook that shows how you made the design is optional.
is_stop=True. If your aperture is defined by EPD or imageFNO, the judge calculates the stop radius once, then keeps the stop fixed.Privacy. Only you can see your prescription and its full report while the challenge runs. After the deadline, all prescriptions and reports are public, so everybody can learn from them. Your score, notebook link and description show on the leaderboard.
The judge evaluates each prescription with the reference evaluator. Your submission list on the submit page shows the status and, if a requirement fails, the reasons. Only eligible results show on the leaderboard.
The evaluator is open source: github.com/optiland/challenges-eval. It is the same code that the judge uses.
git clone https://github.com/optiland/challenges-eval
cd challenges-eval
python -m pip install -r requirements.txt
python challenge_evaluator.py my_lens.json --challenge rms
Use rms, doublet or wide_angle. The report shows every requirement, its value and its limit. In the locked environment (below) your result is official and equal to the judge's result. In another environment, for example Colab, the evaluator still calculates every value but marks the result as unofficial.
Rules version 2.1.0, evaluator 2.1.0. Optiland commit 61f096bb, NumPy 2.5.4, SciPy 1.18.1, Python 3.12.
| Change | Reason |
|---|---|
No penalty term P. A design that fails a requirement is not ranked. | In version 1, each participant wrote their own P, so scores were not comparable. |
| Equal field weights, written out. | Version 1 used weights w_i but did not give their values. |
| Mechanical vignetting is not allowed. | Clipping rays can make a spot smaller while it removes light. Version 1 did not say if this was allowed. |
| One sensor plane and one common centroid for all wavelengths. | Version 1 did not say where the image plane is, or how to combine the wavelengths. |
| Exact wavelengths. | Version 1 gave rounded values (0.486, 0.588, 0.656 µm). |
| Doublet: the score is the polychromatic RMS spot, with a hard limit on axial chromatic aberration. | With the stop at the lens, the first-order lateral chromatic aberration of a thin doublet is zero, so the version 1 score did not measure achromatism. Axial chromatic aberration is the important error of a doublet. |
| Wide angle: distortion is a hard limit (2%), and the score is MTF only. | The limit makes the trade-off clear: first low distortion, then the sharpest design wins. |
| One published evaluator with a fixed version. | Everybody gets the same result for the same design. |
| You submit the Optiland file of your lens. | One format for everybody, written by Optiland itself. No hand-written JSON. |
| Surfaces without an aperture get an automatic real-ray clear radius. | You do not have to set apertures. Paraxial apertures are too small at wide field angles and would clip real rays. |