Photonic Inverse Design Overview - Python API

来自 https://support.lumerical.com/hc/en-us/articles/360049853854-Photonic-Inverse-Design-Overview-Python-API

一、动机

随着器件密度和集成度的提高,光子集成电路变得越来越复杂。通常,需要平衡几个相互竞争的设计约束,例如性能、制造公差、紧凑性等。传统的设计周期涉及系统地改变一小组特征参数,模拟这些设备以确定它们的性能并进行迭代以满足设计要求。尽管此过程很简单,但一旦您引入了多个设计参数,即使是经验丰富的设计师也会与他们的直觉作斗争。为了克服人类的限制,聪明的工程师可能会使用数学方法来开始预测强大的候选者并更快地收敛到令人满意的设计。

让我们考虑梯度下降优化(gradient descent optimization);我们可以将参数视为设计空间中的坐标,将品质因数(figure of merit)视为由该空间中的表面表示的这些参数的函数。首先,我们需要定义一个封装我们设计性能的品质因数。从理论上讲,这可以是任何东西,但正如您将看到的那样,我们将自己限制在仅考虑导模光学中的功率传输。虽然,我们事先不知道品质因数表面是什么样子,但我们可以使用 FDTD 等物理模拟器为给定的一组参数计算它。在这里,我们可以看到两个参数的 FOM 表面可能是什么样子。

图 1:FOM表面

要绘制两个参数的分析函数,可以直接定义结构化网格并计算每个点的输出; 然而,在我们的框架中,每个 FOM 计算都需要计算成本高昂的模拟。 扫描两个参数我们可以粗略地映射 FOM,但不能保证我们已经解析了重要的特征,如下图所示。

图 2:欠采样的参数空间

最终我们的目标是找到一个“最优”的解决方案,而系统地计算表面是不必要的昂贵; 此外,当我们的空间维度扩展到 10、100 或 1000 个参数时,这个过程变得难以处理。 相反,如果我们在每个函数调用时引入一些开销( overhead)来计算梯度,我们可以更仔细地确定下一组参数,这样我们就可以用更短的路径找到最佳解决方案。

图 3:梯度下降流线

图 3 说明了使用流线(streamlines)的函数的梯度。 优化器将朝着流线的方向移动,但我们没有考虑其他重要因素,如步长( step-size)或预处理(preconditioning)。 注意局部最小值(local minima)作为起始位置的收集器; 然而,一些起始位置不会达到这些最小值,例如沿山脊边缘的位置。 在我们的实现中,我们最小化 FOM,通常称为成本函数(the cost function),相当于最大化 FOM。 有关梯度下降方法的进一步讨论,请参阅以下文章。

• Gradient Descent: All you Need to Know
• Intro to optimization in deep learning: Gradient Descent
•Scipy Tutorial on Mathematical Optimization

个人翻译:逆向设计相关算法学习(一)——梯度下降(Gradient Descent)

二、伴随法


有关更严格的推导和更多信息,请参阅以下优秀资源。

• Adjoint shape optimization applied to electromagnetic design, Optics Express 2013 Vol. 21, Issue 18(2013)
•Optimizing Nanophotonics: from Photorecievers to Waveguides (THESIS), Christopher Lalau-Keraly

三、形状与拓扑

这种无源光子组件设计周期的范式转变,我们通常称为逆向设计。 为了使该方案起作用,工程师提供了以下内容:

•模拟设置
•设计参数化
•品质因数
•包括占地面积(footprint)和材料在内的合理起点

初始化后,优化器会自动遍历更高维度的设计空间,探索新颖的设计,并在具有出色性能的设备上收敛。 此外,实施的技术将解决方案限制在可制造的约束范围内,并在工艺角落包括性能考虑。

上面概述的伴随方法被打包为一个名为 lumopt 的 python 模块,它使用 Lumerical FDTD 作为客户端来求解 Maxwell 的方程和 scipy 库来执行优化。最初的努力是由 Christopher Keraly 进行的,这个公式记录在 Lumopt Read the Docs 下。 Github 上托管的版本与 Lumerical 安装程序附带的 lumopt 模块之间存在一些差异。尽管有许多共同点,但我们在这里专门指的是捆绑的 Lumerical 版本。使用这个 lumopt 框架需要求解器许可证和 API 许可证。

Lumopt 有两种不同的风格——形状优化和拓扑优化。通过形状优化,可以直接定义要变化的几何参数,以及这些参数的界限。例如,沿Y分束器边缘的坐标。这允许用户从一个好的初始起点开始设计并对其进行改进;但是,定义几何形状需要一些工作,并且可以通过此参数化实现的解决方案集可能会受到限制。像这样的显式参数化意味着可轻松执行可制造性的设计规则。

拓扑逆向设计要求用户简单地定义可优化的封装和所涉及的材料。 结果,参数只是该区域的体素,允许实现非常不直观的形状。 通常会实现莫名其妙的形状和出色的性能,但由于出现的小特征,这些结构往往更难用光刻法制造。 我们采取了多种措施来确保它们的可制造性,包括平滑函数和惩罚项以减少小特征。

有关 lumopt 的安装和机制,请参阅下一节。

Lumerical Python API学习(五)——光子逆向设计概述相关推荐

  1. Lumerical Python API学习(七)——可视化几何

    Optimizable Geometry - Python API 来自 https://support.lumerical.com/hc/en-us/articles/360052044913-Op ...

  2. Lumerical Python API学习笔记(二)

    笔记参考 LINK 1.会话管理 fdtd = lumapi.FDTD 打开新的FDTD Solutions界面 可以一次创建同一产品和不同产品的多个会话,例如: mode1 = lumapi.MOD ...

  3. Lumerical Python API学习(八)——在纳米线应用示例中使用 Python API

    此示例演示了使用应用程序编程接口 (API) 将 Lumerical FDTD 与 Python 集成的可行性. 在此示例中,我们将基于 2D Mie 散射(2D Mie scattering )示例 ...

  4. Lumerical Python API学习(六)——lumopt入门

    Getting Started with lumopt - Python API 来自 https://support.lumerical.com/hc/en-us/articles/36005099 ...

  5. Lumerical Python API学习之补充笔记

    一.笔记1 1.1.关于SYS 在导入之前添加 Python代码解释 当我们导入一个模块时: import xxx ,默认情况下python解释器会搜索当前目录.已安装的内置模块和第三方模块. 搜索路 ...

  6. Lumerical Python API学习笔记(一):Lumopt配置以及样例运行

    参考文章 完美解决Windows用户下lumerical(FDTD)的python库lumopt安装方法 bilibili–lumerical配合pycharm使用python联合开发的问题 0.先说 ...

  7. Python技术学习之Django框架设计思想

    Python是目前比较流行的计算机编程语言,据用丰富和强大的库,被称为胶水语言,能够把用其他语言制作的各种模块很轻松地联结在一起. Python功能强大,用途广泛,可广泛应用于云计算.web开发.科学 ...

  8. Python基础学习五 内置模块

    time 模块 1 >>> import time2 >>> time.time()3 1491064723.8086694 >>> # time ...

  9. Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

最新文章

  1. Specification排序orderby
  2. 波士顿动力机器狗化身警犬入宅执法,网友:我不想生活在《黑镜》里
  3. 5、时间日期的处理:Java Date类、Calendar类详解
  4. 简单案例:unittest+HTMLTestRunner实现生成测试报告
  5. 7z制作自解压安装包
  6. Python清屏小结
  7. c++ 字符串转数字
  8. 基于 Serverless 打造如 Windows 体验的个人专属家庭网盘
  9. 1982:【19CSPJ普及组】数字游戏
  10. H264所采用的指数格伦布熵编码算法原理及应用
  11. C++ 变量、常量、符号常量
  12. 【转】XP下OpenProcess( PROCESS_ALL_ACCESS...失败
  13. 关于项目404解决方法:前提条件:项目路径都是正确的
  14. 插件前奏-android黑科技 hook介绍
  15. python画图显示中文_Python绘图实现显示中文
  16. 【校招VIP】前端js语言考点之事件冒泡与捕捉
  17. ClouderaCDH安装配置说明
  18. 写给朋友们的Markdown教程,真的很好用,而且很简单
  19. ae字体预设下载_AE超强文字预设包(附插件和教程)Videohive 2D Text Preset Pack for Animation Composer Plug-in...
  20. 基于cnn的人脸识别_鬼都藏不住,人脸识别新突破!就算遮住半张脸也能100%被识别...

热门文章

  1. 【Python】1032 挖掘机技术哪家强 (20 分)
  2. 算法优化之c++多线程优化:思考与总结
  3. 2021年5月11日 星期二 晴
  4. 第五周作业 三种建模工具的综合比较
  5. 两台电脑其中一台无法ping通的问题
  6. 基于PHP的班级签到管理系统
  7. 试验数据管理系统-海岸TDM关键技术分析
  8. 【FPGA教程案例37】通信案例7——基于FPGA的FFT,IFFT傅里叶变换和逆变换
  9. Zigbee Commissioning
  10. 单片机c语言0x 1x,科目1单片机C语言基础.doc