
光芯片版图布局算法及相关数学算法实现(Python)
文章平均质量分 67
本专栏收录了博主非常多做模拟遇到的算法编程问题,以及画图方面的高级画法。物超所值,请尊重博主的版权,谢谢。129元吐血大放送。
优惠券已抵扣
余额抵扣
还需支付
¥129.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
勤奋的大熊猫
芯片设计及版图布局工程师
接专业问题咨询,有需求的可以私信我,价格可以商量。
展开
-
二分法查找元素
二分法是一种常用的搜索元素的手段,本文我们将对这种方法进行介绍。原创 2025-02-28 15:39:08 · 67 阅读 · 0 评论 -
版图自动化连接算法开发 00004 ------ 给定一个点,添加一个中间点实现 Manhattan 方式连接两个给定的坐标点
此处,我们对给定点的坐标进行一下限制,因为是只添加一个点,因此,给定点的 x 或者 y 坐标其中的一个至少需要等于初始点 1 或者初始点 2 对应的坐标。否则我们将需要添加至少两个点才能将整个图形勾勒出来。原创 2025-02-28 15:19:41 · 277 阅读 · 0 评论 -
版图自动化连接算法开发 00003 ------ 添加两个中间点实现 Manhattan 方式连接两个给定的坐标点
插入两个点,在没有限制的情况下,两个中间点的横坐标只能在区间 (p1.x, p2.x) 之间,利用这一特点我们可以使用如下代码实现需求。之前,我们实现了添加单个中间点的 Manhattan 连接方式,这里,我们将添加两个中间点实现 Manhattan 连接。运行后,我们会随机得到以下两幅图像中的一幅。必读文章 ------原创 2025-02-28 13:36:16 · 282 阅读 · 0 评论 -
版图自动化连接算法开发 00002 ------ 添加一个中间点实现 Manhattan 方式连接两个给定的坐标点
之前,我们实现了两个坐标点之间的直接连接,属于最简单的布线方式,但是对于光芯片或者电芯片的版图连线,斜线连接的方式是不被提倡的。通常我们通过直角转弯的方式进行连线,这里我们展示如何通过添加一个中间点实现这种连线方式。这里,我们实现了一种随机的可能性,我们可以添加的中间点有两种情况,分别对应如下两幅图展示的结果,运行代码后将随机得到如下两幅图中的一幅。必读文章 ------原创 2025-02-28 11:35:41 · 387 阅读 · 0 评论 -
版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点
由于人工智能的加速普及,每次手动绘制版图都会觉得特别繁琐,作者本人在想可否搞一个自动化连接器件端口的算法,后期可以根据一些设定的限制进行避障。对于版图布局工程师来说就方便多了。甚至是否可以训练一个属于自己的 AI 来做这个事情,在此,作者本人新开一个坑,记录个人关于这个课题的所有探索。欢迎大家一起讨论。绘图显示代码直接连接两个坐标点运行上述代码后获取到的图像如下图所示:如果大家觉得有用,就点个赞让更多的人看到吧~原创 2025-02-28 11:26:50 · 308 阅读 · 0 评论 -
A star search algorithm
通过该算法我们可以搜寻到实际生活中,地图上或者游戏中存在障碍物时从初始点到达终点的最短路径。该算法是最好的且最受欢迎的寻路算法之一。之所以说它是最好的路径,是因为相比于传统的寻路算法,它仿佛拥有大脑,它可以非常聪明地选择路径。A star 算法的核心是通过 f 值来选择节点,f 值等于两个参数 g 和 h 的和。在我们仅仅被允许朝向上、下、左、右四个方向移动的时候。h 通常被考虑是一个启发式,它是一个聪明的猜测。比如我们来考虑一个如下图所示网格状的地图。有两种精确计算 h 参数的方法。原创 2024-12-31 15:46:20 · 102 阅读 · 0 评论 -
PSO Python 代码实现
这里我们展示如何使用 Python 代码求解。一文中描述的问题,不使用任何。原创 2024-08-16 13:36:56 · 180 阅读 · 0 评论 -
PSO 算法实例(手动推导过程)
关于 算法的基础概念可以参考 Particle Swarm Optimization 基础概念。本文我们将举一个示例对这个算法进行详细说明。这里我们再来重温下算法步骤,并且我们给出更为具体的算法操作步骤。使用 算法找出如下方程的极大值。使用四个粒子,且各粒子的初始位置是 x1=1.5x_1=1.5x1=1.5,x2=0.0x_2=0.0x2=0.0,x3=0.5x_3=0.5x3=0.5,x4=1.25x_4=1.25x4=1.25。假设 w=0.8w=0.8w=0.8,c1=c2=2..05c原创 2024-08-15 16:31:02 · 547 阅读 · 0 评论 -
Particle Swarm Optimization 基础概念
它涉及了一组粒子或者代理人,通过在空间中移动来寻找给定问题的最优解。比如,求解一个函数表达式的全局极值,可以是全局最大值,也可以是全局最小值。上述表明,每一次粒子做完运动后,会根据当前群组的最优解以及单个粒子的最优解对自身速度进行调整,从而进行下一次的迭代运算。是加速度银子,与单个粒子和群整体相关。表示单个粒子对它周围粒子的可信度。叫做惯性,可以理解为粒子上一次运动的速度。叫做社会影响,粒子群最佳位置的影响。被叫做个人影响,即单个粒子的影响。表示单个粒子对自身的可信度,粒子的运动可以用下图来描述。原创 2024-08-15 14:50:32 · 201 阅读 · 0 评论 -
给定两个点坐标和半径,求圆心位置(Python 代码完美实现)
【代码】给定两个点坐标和半径,求圆心位置(完美代码实现)原创 2024-05-09 16:08:36 · 419 阅读 · 0 评论 -
给定两个点坐标和半径,求圆心位置
这里,我们不做过多的推导过程,后续有时间了作者会添加,这里直接上结论。圆形的坐标可以通过以下等式求出。如果我们事先要求,圆心位于两个点连线的左侧,那么圆心坐标就唯一了。有了 (2)-(7)式,将它们带入(1)式中,即可得到最终的结果。今天在做项目的时候遇到了一个问题,当给定两个点。由此,我们得到两个可以满足要求的圆心点,一个为。的时候,该如何确定圆心的位置。最后我们可以根据上面的过程通过。编程来实现求解圆心坐标。原创 2024-05-09 15:14:56 · 508 阅读 · 0 评论 -
二维平移矩阵 (2D translate matrix)
之前我们介绍了矢量旋转矩阵的形式,这里我们来介绍一下平移矩阵的形式。比如,我们我们有一个点,其坐标为。这里我们以向右移动一个单位为例。只是,对于最终的结果,我们只需要提取前两行即可。那么我们如何操作才能够将这个点沿着。点上时,就可以实现单点的平移操作。当我们将 (1) 式作用在。可以看到,此时,我们将。原创 2024-05-09 11:13:54 · 332 阅读 · 0 评论 -
给定矢量初始位置,旋转角度,求解最终位置
可以看到,我们得到了最终矢量的坐标。如果我们将这个矢量正向旋转。这里如果我们给定一个矢量。度,该矢量新的末端坐标。原创 2024-05-08 17:17:29 · 409 阅读 · 0 评论 -
矢量旋转矩阵
一般情况下,我们遇到的旋转矩阵都是 anti-clockwise rotation matrix,即逆时针旋转矩阵。那么有些小伙伴们可能就会问了,顺时针旋转矩阵的形式应该是什么样子呢?很简单,只需要把参数。原创 2024-05-08 17:07:20 · 562 阅读 · 0 评论 -
Python 获取两个数组中各个坐标点对之间最短的欧氏距离
【代码】Python 获取两个数组中各个坐标点对之间最短的欧氏距离。原创 2023-11-21 17:11:42 · 279 阅读 · 0 评论 -
K nearest neightbor algorithm(K 最近邻算法)
接下来我们想要将每个点的最近邻元素之间使用线段给它们连接起来进行可视化显示,那么首先,我们需要创建这些对应线段的端点。由于每个线段都是由两个端点组成的,因此,且我们截取的是前。是三个近邻点,可是我看你图上的线段分明每个点只有两条线段和它相连啊,这是因为,每一个点中的最近邻点首先是它自己,其次才是剩余的点,因此,时,出去自己与自己之间看不到的连线,只有两条线段会被显示。获取五个生成的随机点,且这些随机点的坐标值均位于。个最紧邻的点,因此对于每个点,我们需要创建。则表示坐标点的第一个坐标,即横坐标。原创 2023-11-21 16:37:14 · 444 阅读 · 0 评论 -
Python 狄拉克delta函数的傅里叶变换(完美实现)
函数的傅里叶变换结果是一个常数。今天给大家介绍一下如何使用。原创 2023-05-03 10:19:44 · 871 阅读 · 0 评论 -
Python nearest 简单算法实现(完美实现)
输入参数为一个数组array变量或者也可以称之为vector变量和一个单独的数字number。计算数组所有元素中距离给定数字number最近的元素。返回数组中距离给定数字number最近元素的索引值,数值以及与给定数字number的差值。原创 2023-04-23 14:39:33 · 384 阅读 · 0 评论 -
FDTD方法
FDTD方法原创 2022-10-31 09:03:34 · 859 阅读 · 0 评论 -
Python 模拟Laguerre Polynomial拉盖尔多项式
Python 模拟Laguerre Polynomial拉盖尔多项式原创 2022-09-20 10:59:09 · 906 阅读 · 0 评论 -
Python 模拟Hermite Polynomial厄米特多项式
Python 模拟Hermite Polynomial厄米特多项式原创 2022-09-19 20:23:03 · 841 阅读 · 0 评论 -
Python 绘制透镜的Conical Surface
Python 绘制透镜的Conical Surface原创 2022-07-06 20:32:27 · 439 阅读 · 0 评论 -
Python 绘制反高斯光束光强分布
反高斯函数图像的绘制原创 2022-06-29 12:43:52 · 801 阅读 · 0 评论 -
Python 数值求解偏微分方程(含两个示例)
数值求解微分方程原创 2022-06-15 08:14:17 · 2493 阅读 · 2 评论 -
Python 偏微分方程(扩散方程)的有限差分求解法
偏微分方程数值解法原创 2022-06-14 19:40:23 · 1877 阅读 · 0 评论 -
Python 用差分法计算函数各个点的值
差分方程求解函数原创 2022-06-14 15:39:14 · 430 阅读 · 0 评论 -
一阶向前,向后,中心差分方程
常用差分方程原创 2022-06-14 11:14:08 · 2170 阅读 · 0 评论 -
Python 计算变上限二重积分的数值模拟基础
Python 计算变上限二重积分的数值模拟基础原创 2022-06-05 20:15:33 · 957 阅读 · 0 评论 -
Python 矩形积分法推荐采样点设置个数
矩形积分法采样点个数设置经验原创 2022-06-05 18:11:42 · 390 阅读 · 0 评论 -
Python 计算变上限二重积分的数值模拟进阶
变上限二重积分数值算法原创 2022-06-05 18:03:54 · 625 阅读 · 0 评论 -
Python 矩形法求1/x的定积分(完美实现)
∫1e1xdx=lnx∣1e=lne−ln1=1−0=1\int_1^e\frac{1}{x}\mathrm{d}x=\ln{x}|_1^e=\ln{e} - \ln{1} = 1 - 0 = 1∫1ex1dx=lnx∣1e=lne−ln1=1−0=1代码如下:# -*- coding:utf-8 -*-import numpy as npnum = 1001 # 采样点个数x_min = 1.0 # 积分下限x_max = np.e # 积分上限x = np.linspa原创 2022-05-25 10:14:38 · 1062 阅读 · 0 评论 -
Python 辛普森积分法 simps计算常数的积分值,当上下限一致时的问题
在我们使用Python包scipy.integrate中的simps函数计算积分时,如果积分上下限一致,在数学上我们知道,此时积分值应该为0。然而当我们写程序时,如果采用一样的上下限来计算积分,会出问题,代码如下:import numpy as npfrom scipy.integrate import simpsnum_ = 100y_min = 1.0y_max = 1.0y_ = np.linspace(y_min, y_max, num_)z = np.ones(num_)# 注意原创 2022-05-22 18:39:37 · 1729 阅读 · 0 评论 -
Python 辛普森积分法 simps计算常数的积分值
这里以函数y=1举例。∫011dx=x∣01=1−0=1\int_0^1 1\mathrm{d}x = x|_0^1 = 1 - 0 = 1∫011dx=x∣01=1−0=1代码如下:num = 101x_min = 0.0x_max = 1.0x = np.linspace(x_min, x_max, num)y = np.ones(num) # 一定要注意,这里必须给一个和x相同尺寸的全1数组,而不能直接给1result = simps(y, x)print(result)""原创 2022-05-22 16:44:54 · 1388 阅读 · 0 评论 -
Python 辛普森积分法 simps计算sin(x)的值(完美实现)
我们使用辛普森积分法simps计算sin(x)的值。代码如下:import numpy as npfrom scipy.integrate import simpsnum = 101 # 采样点的个数x_min = 0.0 # 自变量最小值,积分下限x_max = np.pi # 自变量最大值,积分上限x = np.linspace(x_min, x_max, num) # 所有采样的坐标值f_x = np.sin(x) # f_x的值result = simps(np.sin(x),原创 2022-05-22 16:03:53 · 1567 阅读 · 0 评论 -
Python 矩形积分调换积分上下限(代码可优化)
在我们使用Python做积分运算的时候,我们本质上计算的是函数与坐标轴x围城的面积。因此在实际操作中,即使我们交换了积分的上下限,积分值也不会发生变化,但是这和我们实际积分的性质是有出入的,因此在实际操作中,我们应该先绘图观察积分的正负,如果积分值为负,则应做想应的处理。这里我们以使用矩形积分法计算sin(x)\sin\left(x\right)sin(x)来进行说明。代码如下:import numpy as npnum = 101left_vertex = 0right_vertex = 1原创 2022-05-22 15:34:09 · 646 阅读 · 0 评论 -
Python 矩形积分法计算f_x=x函数的值(完美实现)
方法一:import numpy as npinterval = 1e-7left_point = 0right_point = 1x = np.arange(left_point, right_point + interval, interval)y = xresult = np.sum(y * interval)print(result)"""result:0.5000001500000099"""方法二:import numpy as npstep = 100000原创 2022-05-04 18:09:47 · 619 阅读 · 0 评论 -
Python 矩形法求sin(x)的定积分(完美实现)
关于矩形法的定义,这里不做过多解释。如果不知道,可以自行百度或谷歌。如果读者认为有必要,可以评论区留言给我,后续我可以添加。这里需要注意的是我们求的是定积分,即所求曲线与坐标横轴所夹的面积。这里举两个简单的例子来说明矩形法的应用。示例1:sinx\sin{x}sinx在区间[0,2π]\left[0, 2\pi\right][0,2π]上的定积分。首先我们先画一下这个函数的图像。# -*- coding:utf-8 -*-import numpy as npimport matplotlib.p原创 2021-09-26 10:42:10 · 2467 阅读 · 0 评论 -
Python 中点法求积分
中点法可以类比于二阶龙格库塔法(超链接点击跳转)。与龙格库塔法类似,中点法也主要用于求解被积分函数的原函数。推荐优先阅读二阶龙格库塔法。这里简单地说一下推导的结果:yn+1=yn+h∗(λ1∗k1+λ2∗k2)y_{n+1} = y_n + h * (\lambda_1 * k_1 + \lambda_2 * k_2)yn+1=yn+h∗(λ1∗k1+λ2∗k2)f(x,y)f\left(x, y\right)f(x,y):想要求解的原函数的导函数。k1=f(xn,yn)k_1 = f\原创 2021-09-27 10:03:47 · 1078 阅读 · 0 评论 -
Python 二阶龙格库塔法求积分
关于龙格库塔法的定义,这里不做过多解释。如果不知道,可以自行百度或谷歌。如果读者认为有必要,可以评论区留言给我,后续我可以添加。这里简单地说一下推导的结果:yn+1=yn+h∗(λ1∗k1+λ2∗k2)y_{n+1} = y_n + h * (\lambda_1 * k_1 + \lambda_2 * k_2)yn+1=yn+h∗(λ1∗k1+λ2∗k2)f(x,y)f\left(x, y\right)f(x,y):想要求解的原函数的导函数。k1=f(xn,yn)k_1 = f\left原创 2021-09-26 17:23:23 · 650 阅读 · 0 评论 -
Python 三阶龙格库塔法求积分
关于龙格库塔法的定义,这里不做过多解释。如果不知道,可以自行百度或谷歌。如果读者认为有必要,可以评论区留言给我,后续我可以添加。阅读本篇前推荐优先阅读二阶龙格库塔法求积分。这里简单地说一下推导的结果:yn+1=yn+h6∗(k1+4k2+k3)y_{n+1} = y_n + \frac{h}{6} * (k_1 + 4k_2 + k_3)yn+1=yn+6h∗(k1+4k2+k3)f(x,y)f\left(x, y\right)f(x,y):想要求解的原函数的导函数。k1=f(xn,yn原创 2021-09-27 17:28:34 · 661 阅读 · 0 评论