基于梯度下降的变压器铁心柱横截面设计算法

  • 一、应用背景
  • 二、实现思路
    • 1.数学模型建立
    • 2.梯度下降算法
  • 三、实现代码
  • 四、一点总结

一、应用背景

变压器铁心柱横截面通常为多级矩形,本算法旨在当给定铁心柱直径(mm)、分级数时,以截面圆内铁心填充率最高为目标,设计出最优的铁芯界面尺寸方案,并给出各级片宽(mm)与叠厚(mm)及最终的铁心填充率

二、实现思路

1.数学模型建立

易知当设计方案最优时,图形左右对称,故仅取半圆分析

取角度θ[i]为自变量,易知片宽w[i],叠厚t[i]与θ[i]及θ[i+1]的关系为


则填充率 filling rate 可表示为

2.梯度下降算法

梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)。其迭代公式为

,其中代表梯度负方向, 表示梯度方向上的搜索步长。

在本应用中,填充率对θ[i]的偏导为

取适当的步长,多次迭代后可以轻易得出最优解

三、实现代码

import numpy as npclass model:def __init__(self, diameter_0, layer_num_0):self.diameter = diameter_0self.radius = diameter_0 / 2.0self.layer_num = np.int(layer_num_0)self.semicircle = 3.1415 * self.radius * self.radius/2self.theta = np.linspace(0.0, 3.1415/8.0, self.layer_num+1) # 初始化theta使theta1至thetan在0-45度上均匀分布self.theta[self.layer_num] = 3.1415/2.0self.width = [0 for num in range(0, layer_num_0)]self.thickness = [0 for num in range(0, layer_num_0)]def update_model(self):for num in range(0, self.layer_num):self.width[num] = 2*self.radius*np.sin(self.theta[num])for num in range(0, self.layer_num):self.thickness[num] = self.radius*(np.cos(self.theta[num])-np.cos(self.theta[num+1]))def calculate_filling_rate(self):area = 0.00for num in range(0, self.layer_num):area = area + self.width[num]*self.thickness[num]filling_rate = area/self.semicirclereturn filling_ratedef optimize(self, learning_rate, steps):self.update_model()filling_rate = 0l_r = 3.1415*learning_ratefor step in range(0, steps):self.theta[0] = self.theta[0] - l_r * (np.cos(2 * self.theta[0])- np.cos(self.theta[0 + 1]) * np.cos(self.theta[0])) * (-2/3.1415)for num in range(1, self.layer_num):self.theta[num] = self.theta[num] - l_r * (np.cos(2*self.theta[num])- np.cos(self.theta[num+1])*np.cos(self.theta[num])+ np.sin(self.theta[num-1])*np.sin(self.theta[num]))/(-2/3.1415)self.update_model()if step % 100 == 0:filling_rate = self.calculate_filling_rate()# print("step: " + str(step) + "      filling_rate: " + str(filling_rate*100)+"%"+"\n")return filling_ratediameter_0 = 120.0
layer_num_0 = 12
learning_rate_0 = 0.001
step_0 = 10000print("铁芯直径:")
print(diameter_0)
print("\n级数:6")if layer_num_0 % 2 == 0:mymodel = model(diameter_0, np.int(layer_num_0/2))filling_rate_result = mymodel.optimize(learning_rate_0, step_0)width_result = []# print("角度为:")# print(180 * mymodel.theta / 3.14)width_result.extend(mymodel.width)width_result.extend(mymodel.width[::-1])print("\n宽度为:")print(width_result)thickness_result = []thickness_result.extend(mymodel.thickness)thickness_result.extend(mymodel.thickness[::-1])print("\n厚度为:")print(thickness_result)print("\n填充率为:")print(filling_rate_result)print("\n有效面积为:")print(filling_rate_result*3.1415*diameter_0*diameter_0/(4.0*100))
else:mymodel = model(diameter_0, np.int((layer_num_0+1)/2))filling_rate_result = mymodel.optimize(learning_rate_0, step_0)width_result = []# print(mymodel.width)width_result.extend(mymodel.width[0:np.int((layer_num_0+1)/2)-1])width_result.append(mymodel.width[np.int((layer_num_0+1)/2)-1])width_result.extend((mymodel.width[0:np.int((layer_num_0+1)/2)-1])[::-1])print("\n宽度为:")print(width_result)thickness_result = []thickness_result.extend(mymodel.thickness[0:np.int((layer_num_0+1)/2)-1])thickness_result.append(2*mymodel.thickness[np.int((layer_num_0+1)/2)-1])thickness_result.extend((mymodel.thickness[0:np.int((layer_num_0+1)/2)-1])[::-1])print("\n厚度为:")print(thickness_result)print("\n填充率为:")print(filling_rate_result)print("\n有效面积为:")print(filling_rate_result*3.1415*diameter_0*diameter_0/(4.0*100))

运行结果:

四、一点总结

查阅资料后可知,本算法计算出的设计方案对比工程实际中常用的标准来说有一些差距,虽然填充率相对实际中的方案更高,但工件加工难度有所上升。

因此,本方案并不能直接应用在工程实际中,但对工程实际中的铁心柱界面设计还是有一定的指导意义。

基于梯度下降的变压器铁心柱横截面设计算法相关推荐

  1. 吴恩达机器学习(十四)推荐系统(基于梯度下降的协同过滤算法)

    目录 0. 前言 1. 基于内容的推荐算法(Content-based recommendations) 2. 计算电影特征 3. 基于梯度下降的协同过滤算法(Collaborative filter ...

  2. qr分解求线性方程组_梯度下降求解线性方程组算例设计

    凸二次优化问题 Theory. 设 是实对称正定矩阵, ,则求解凸二次优化问题 等价于求解线性方程组 . Proof. 二次型二阶可导,极小值点处梯度为零,现对优化的目标函数求梯度.二次型本质上具有: ...

  3. 机器学习--详解基于梯度下降的Logistic回归算法原理

    先给出Logistic回归的sigmod函数数学表达式: 很简单的表达式,再看看它的性质,当时,,因此 当时,,因此 Logistic回归之所以称为Logistic是因为只有两个状态即0和1,这也是数 ...

  4. 如何使基于梯度下降的机器学习并行化

    转载自:http://blog.csdn.net/u013166160/article/details/17539427 本文,讨论batch-gradient和stochastic gradient ...

  5. LeCun称梯度下降是最优雅的 ML 算法,Marcus:我不同意

    作者|李梅 编辑|陈彩娴 来源|AI科技评论 前几天刚跟马斯克吵完架的Gary Marcus,又双叒叕跟人吵起来了,这次的吵架对象是Yann LeCun. 一向喜欢给深度学习泼冷水的Marcus,在今 ...

  6. LeCun称梯度下降是最优雅的 ML 算法,Marcus:我不同意!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CVer 微信技术交流群 转载自:AI科技评论  作者|李梅  编辑|陈彩娴 前几天刚跟 ...

  7. 使用随机梯度下降SGD的BP反向传播算法的PyTorch代码实现

    Index 目录索引 写在前面 PyTorch的 .data() PyTorch的 .item() BP with SGD的PyTorch代码实现 参考文章 写在前面 本文将用一个完整的例子,借助Py ...

  8. 机器不学习:浅显易懂!「高中数学」读懂梯度下降的数学原理

    https://www.toutiao.com/a6677899033182208523/ 梯度下降是最常用的机器学习优化算法之一,Towards Data Science 近日发布了一篇文章,浅显易 ...

  9. 在深度学习模型的优化上,梯度下降并非唯一的选择

    如果你是一名机器学习从业者,一定不会对基于梯度下降的优化方法感到陌生.对于很多人来说,有了 SGD,Adam,Admm 等算法的开源实现,似乎自己并不用再过多关注优化求解的细节.然而在模型的优化上,梯 ...

最新文章

  1. SQL Server的数据库连接的极限在哪儿?
  2. 千亿级携程酒店AWS实践
  3. H5 唤起 APP的解决方案
  4. Pycharm安装pip pip安装第三方模块
  5. CUBRID学习笔记 3 net连接数据库并使用cubrid教程示例
  6. 使用Windbg调试StackOverflowException异常
  7. C++中string构造函数的解析
  8. c#使用Path.Combine的一个坑
  9. java 工厂模式详解_Java设计模式之工厂模式详解
  10. java day38【Servlet 、HTTP协议 、Request】
  11. (Giser源数据获取必备)地理空间数据云
  12. 安装基于Ubuntu的微信小程序开发工具
  13. Windows XP 电脑桌面图标后面有蓝色阴影怎么去除
  14. opencv 将视频流转换成帧图像(支持asf,mp4,avi)
  15. 《Python编程快速上手——让繁琐的工作自动化》读书笔记2
  16. 绘画教程:日式温泉场景怎么画?露天浴场的正确画法!
  17. vscode新手注意事项(字体间隔,报错提示波浪线,头文件路径,opencv头文件路径)
  18. Qiime2 软件安装
  19. 【深度学习】模型过拟合的原因以及解决办法
  20. Ambari2.7.4 + HDP3.1.4 离线安装(2)

热门文章

  1. 第四周-自动班作业及实验
  2. # Markdown 常用语法(画图)
  3. iOS多张图片合成一张
  4. 数据库设计的规范与注意事项
  5. 10款替代Windows Media Player的播放器
  6. php mailto,PHP将电子邮件地址转换成mailto:链接形式,防止采集
  7. print,printf,println的区别
  8. 基于javaweb+jsp的企业财务记账管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)
  9. 我的世界java版tp_我的世界:最快交通工具是tp?你错了!“折跃门”传送比它快10倍...
  10. shell脚本常用时间格式