{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Global Optimization (Particle Swarm)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from optiland import optic, optimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define a starting lens:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(
, )" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lens = optic.Optic()\n", "\n", "# add surfaces\n", "lens.surfaces.add(index=0, thickness=50)\n", "lens.surfaces.add(index=1, thickness=5, radius=40, material=\"N-BK7\", is_stop=True)\n", "lens.surfaces.add(index=2, thickness=50, radius=-40)\n", "lens.surfaces.add(index=3)\n", "\n", "# set aperture\n", "lens.set_aperture(aperture_type=\"EPD\", value=12)\n", "\n", "# add field\n", "lens.fields.set_type(field_type=\"object_height\")\n", "lens.fields.add(y=0)\n", "\n", "# add wavelength\n", "lens.wavelengths.add(value=0.55, is_primary=True)\n", "\n", "# draw lens\n", "lens.draw(num_rays=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define optimization problem:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "problem = optimization.OptimizationProblem()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add operands (targets for optimization):" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# RMS spot size target\n", "for field in lens.fields.get_field_coords():\n", " input_data = {\n", " \"optic\": lens,\n", " \"Hx\": field[0],\n", " \"Hy\": field[1],\n", " \"surface_number\": -1,\n", " \"num_rays\": 5,\n", " \"wavelength\": 0.55,\n", " \"distribution\": \"hexapolar\",\n", " }\n", " problem.add_operand(\n", " operand_type=\"rms_spot_size\",\n", " target=0,\n", " weight=1,\n", " input_data=input_data,\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define variables - we let the radii vary. Note that PSO requires finite bounds for all variables:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "problem.add_variable(lens, \"radius\", surface_number=1, min_val=25, max_val=100)\n", "problem.add_variable(lens, \"radius\", surface_number=2, min_val=-100, max_val=-25)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check initial merit function value and system properties:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "╒════╤════════════════════════╤═══════════════════╕\n", "│ │ Merit Function Value │ Improvement (%) │\n", "╞════╪════════════════════════╪═══════════════════╡\n", "│ 0 │ 9.89095 │ 0 │\n", "╘════╧════════════════════════╧═══════════════════╛\n", "╒════╤════════════════╤══════════╤══════════════╤══════════════╤══════════╤═══════════════╤═════════╤═════════╤════════════════╕\n", "│ │ Operand Type │ Target │ Min. Bound │ Max. Bound │ Weight │ Eff. Weight │ Value │ Delta │ Contrib. [%] │\n", "╞════╪════════════════╪══════════╪══════════════╪══════════════╪══════════╪═══════════════╪═════════╪═════════╪════════════════╡\n", "│ 0 │ rms spot size │ 0 │ │ │ 1 │ 1 │ 3.145 │ 3.145 │ 100 │\n", "╘════╧════════════════╧══════════╧══════════════╧══════════════╧══════════╧═══════════════╧═════════╧═════════╧════════════════╛\n", "╒════╤═════════════════╤═══════════╤═════════╤══════════════╤══════════════╕\n", "│ │ Variable Type │ Surface │ Value │ Min. Bound │ Max. Bound │\n", "╞════╪═════════════════╪═══════════╪═════════╪══════════════╪══════════════╡\n", "│ 0 │ radius │ 1 │ 40 │ 25 │ 100 │\n", "│ 1 │ radius │ 2 │ -40 │ -100 │ -25 │\n", "╘════╧═════════════════╧═══════════╧═════════╧══════════════╧══════════════╛\n" ] } ], "source": [ "problem.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define optimizer:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "optimizer = optimization.ParticleSwarm(problem)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run optimization:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PSO start: best merit = 0.495756518209, swarm_size = 20, ndim = 2\n", "Iter 1 | best merit = 0.385379232348 | improvement = 0.110377\n", "Iter 2 | best merit = 0.0342386453248 | improvement = 0.351141\n", "Iter 3 | best merit = 0.025628852796 | improvement = 0.00860979\n", "Iter 4 | best merit = 0.025628852796 | improvement = 0\n", "Iter 5 | best merit = 0.0238220692892 | improvement = 0.00180678\n", "Iter 6 | best merit = 0.0238220692892 | improvement = 0\n", "Iter 7 | best merit = 0.0232647160272 | improvement = 0.000557353\n", "Iter 8 | best merit = 0.0232647160272 | improvement = 0\n", "Iter 9 | best merit = 0.0232647160272 | improvement = 0\n", "Iter 10 | best merit = 0.0232647160272 | improvement = 0\n", "Iter 11 | best merit = 0.0232647160272 | improvement = 0\n", "Iter 12 | best merit = 0.0232647160272 | improvement = 0\n", "Iter 13 | best merit = 0.0232647160272 | improvement = 0\n", "Iter 14 | best merit = 0.0229899364483 | improvement = 0.00027478\n", "Iter 15 | best merit = 0.0229899364483 | improvement = 0\n", "Iter 16 | best merit = 0.0229899364483 | improvement = 0\n", "Iter 17 | best merit = 0.0229512509028 | improvement = 3.86855e-05\n", "Iter 18 | best merit = 0.0229512509028 | improvement = 0\n", "Iter 19 | best merit = 0.0229512509028 | improvement = 0\n", "Iter 20 | best merit = 0.0229512509028 | improvement = 0\n", "Iter 21 | best merit = 0.0229472840767 | improvement = 3.96683e-06\n", "Iter 22 | best merit = 0.0229472840767 | improvement = 0\n", "Iter 23 | best merit = 0.0229472840767 | improvement = 0\n", "Iter 24 | best merit = 0.0229472840767 | improvement = 0\n", "Iter 25 | best merit = 0.0229472840767 | improvement = 0\n" ] }, { "data": { "text/plain": [ " message: Optimization converged: global best stalled within tol=0.001 for 20 iterations.\n", " success: True\n", " fun: 0.02294728407671323\n", " x: [-7.306e-01 -1.275e+00]\n", " nit: 25\n", " nfev: 520\n", " swarm_size: 20\n", " inertia: 0.7\n", " individual: 1.5\n", " social: 1.5" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimizer.optimize(maxiter=30, swarm_size=20, seed=42)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print merit function value and system properties after optimization:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "╒════╤════════════════════════╤═══════════════════╕\n", "│ │ Merit Function Value │ Improvement (%) │\n", "╞════╪════════════════════════╪═══════════════════╡\n", "│ 0 │ 0.0229473 │ 99.768 │\n", "╘════╧════════════════════════╧═══════════════════╛\n", "╒════╤════════════════╤══════════╤══════════════╤══════════════╤══════════╤═══════════════╤═════════╤═════════╤════════════════╕\n", "│ │ Operand Type │ Target │ Min. Bound │ Max. Bound │ Weight │ Eff. Weight │ Value │ Delta │ Contrib. [%] │\n", "╞════╪════════════════╪══════════╪══════════════╪══════════════╪══════════╪═══════════════╪═════════╪═════════╪════════════════╡\n", "│ 0 │ rms spot size │ 0 │ │ │ 1 │ 1 │ 0.151 │ 0.151 │ 100 │\n", "╘════╧════════════════╧══════════╧══════════════╧══════════════╧══════════╧═══════════════╧═════════╧═════════╧════════════════╛\n", "╒════╤═════════════════╤═══════════╤══════════╤══════════════╤══════════════╕\n", "│ │ Variable Type │ Surface │ Value │ Min. Bound │ Max. Bound │\n", "╞════╪═════════════════╪═══════════╪══════════╪══════════════╪══════════════╡\n", "│ 0 │ radius │ 1 │ 26.9429 │ 25 │ 100 │\n", "│ 1 │ radius │ 2 │ -27.4896 │ -100 │ -25 │\n", "╘════╧═════════════════╧═══════════╧══════════╧══════════════╧══════════════╛\n" ] } ], "source": [ "problem.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Draw final lens:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(
, )" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lens.draw(num_rays=5)" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.2" } }, "nbformat": 4, "nbformat_minor": 2 }