2020年亚太杯APMCM数学建模大赛A题激光标记舱口轮廓生成求解全过程文档及程序

news2025/1/12 18:52:55

2020年亚太杯APMCM数学建模大赛

A题 激光标记舱口轮廓生成

原题再现:

  激光是20中的一项重要发明世纪,它被称为“最锋利的刀”、“最精确的尺子”和“最不寻常的光”。 激光已越来越多地应用于工业加工, 其中可以是就业在各种加工业务例如作为标记、焊接、钻孔、切割、热处理和喷涂。 激光具有良好的方向性,可以汇聚成微小的光斑,达到高度集中的能源; 此外,到期了去它的声音单色性, 激光是很容易去控制。
  激光打标是指用激光对LOGO,字符,符号,图像等进行标记。 在产品表面。 它是一种广泛使用的加工方法,具有加工效率高、非接触操作、无耗材、对产品表面变形影响小、标记含量坚固等优点。
  激光打标机的舱口工具可用于舱口指定的2D复合曲线图,不同舱口参数的设置对不同材料的加工效果影响很大。 方向平行孵化和轮廓平行孵化是孵化的两种基本方式。方向平行舱口,也称为“锯齿形”舱口,其路径沿平行于最初选定的参考方向的线段移动。 基于这种策略,通过将这些并行段连接起来,得到连接路径,使它们要么从右到左(或从左到右),要么从左到右和从右到左交替遍历。 而轮廓平行舱口使用偏移段,边界曲线作为光滑舱口路径,类似于边界曲线。 因此,轮廓平行舱口是以螺旋状的方式产生的曲线,在恒定距离的曲线边界。 哪种舱口在实践中的应用高度依赖于标记材料和工艺对特定加工任务的影响。
  孵化实体必须是封闭的曲线多边形,多个相互嵌套的轮廓对象可以通过分组匹配来填充。 对于图形的孵化过程,现有的边界轮廓应首先根据边缘距离向内或向外偏移,然后再受锯齿形平行或轮廓平行孵化的影响。 舱口曲线应均匀、规则,并保持基本平行。 不允许有遗漏填写区域,也不允许重复填写区域。 激光标记的孵化应以实时方式在线生成孵化轮廓。 为了满足高效率激光打标的要求,舱口曲线应与图形的边界线保持平行,最大程度上均匀分布,并自动快速生成。 效率是产生孵化数字的重要指标。
在这里插入图片描述
  请研究图形课题采用锯齿形平行和等高线平行孵化的特点,建立孵化的数学模型,设计算法,讨论算法的效率,回答下列问题:
  1. 实现附件1中单层轮廓图案的锯齿形平行和轮廓平行舱口;在这里,只考虑水平方向(0°度)的舱口。 请根据附件1中图的坐标点数据(单位:mm)实现两组输入参数下的孵化):
  (1) 内收缩边界距离1mm,舱口线间距1mm;
  (2) 内缩边距0.1mm,舱口线间距0.1mm。
  在这两组参数下,计算锯齿形平行和等高线平行舱口的孵化曲线的孵化线的总长度,并计算锯齿形平行舱口的水平线数和等高线平行舱口的圆圈数。 根据孵化程序的多次运行计算平均运行时间(单位:ms),计算参数组(2)和(1)条件下程序运行的运行时间比)。
  2. 实现附件2中相互嵌套的多层轮廓图案的锯齿形平行和轮廓平行孵化;在这里,只考虑水平方向(0°度)的孵化。 请根据附件2中图的坐标点数据(单位:mm)实现两组输入参数下的孵化):
  (1) 内收缩边界距离1mm,舱口线间距1mm;
  (2) 内缩边距0.1mm,舱口线间距0.1mm。
  在两组参数下,计算受锯齿形平行和等高线平行舱口的孵化曲线的孵化线总长,并计算锯齿形平行舱口的水平线数和等高线平行舱口的圆圈数。 根据孵化程序的多次运行计算平均运行时间(单位:ms),计算参数组(2)和(1)条件下程序运行的运行时间比)。
  3. 激光打标机产生的光斑直径很小。 激光打标的孵化线间距一般为0.01mm-0.1mm。激光打标产生大量的等高线数据,任何形状的等高线对程序的运行效率都有极高的要求。 请检查您的孵化算法经过的时间,并分析其性能,为优化孵化算法的性能和效率提供策略或方向,使其能够满足实际工业应用的效率要求。

整体求解过程概述(摘要)

  激光打标已广泛应用于工业加工中。对于不同的阴影方法,标记图案的操作效率和清晰度也不同。我们需要根据不同的参数分别实现单层和多层轮廓图案的Z字形平行和轮廓平行阴影,对算法进行评估,并给出优化策略。建立了三个模型:模型一:Z字形平行剖面线模型;模型二:等高线平行剖面线模型;模型三:绩效评价函数模型。

  对于模型I,我们首先计算平行线的数量,然后用等距平行线和轮廓曲线的交点构造一个相交矩阵,并将交点依次收缩为轮廓线,通过相交矩阵位置对应点的斜率确定不连续点,最后得到传递矩阵。最后,将传递矩阵划分为块,并将每个块矩阵的元素按从左到右和从右到左的交替顺序连接,以获得水平等距影线。根据我们建立的模型,附件1中单层轮廓图案中水平线间距为1mm和0.1mm的影线分别为797mm和9972mm,Z字形平行影线的水平线数分别为88和907,基于多次运行影线程序的平均经过时间分别为289ms和1886ms,经过时间比为6.52;附件2中多层轮廓图案中水平线间距为1mm和0.1mm的总长度分别为1011mm和11079mm,水平线数量分别为126和954,平均经过时间分别为266ms和1952ms;经过时间的比率为7.34。

  对于模型II,我们建立了一种基于点的多边形填充算法:曲率较小的轮廓曲线直接向内收缩,同时使用Douglas Puck算法保留拐点并删除一些不重要的平滑点,有效地减少了循环次数;在曲率较大的地方,通过干涉点消除无效循环。最后,对轮廓终止条件进行了说明。根据模型,附件1中单层轮廓图案中的阴影线总长分别为402mm和1021mm,轮廓平行阴影的圆数分别为11和85,平均经过时间分别为326ms和4090ms,比值为12.55;附件2中多层轮廓图案中的总长度分别为408mm和1099mm,圆圈数分别为12和106,平均经过时间分别为440ms和5030ms;比值为11.27。

  为了评估算法的效率,我们通过分析上述问题中计算结果的参数和实际情况,构建了一个性能函数来评估评分效率,然后基于该性能函数,我们使用遗传算法提出了进一步改进模型的策略和方向,使其能够满足实际工业应用的效率要求。最后,给出了该模型的优缺点。

模型假设:

  •假设1:在实际情况下,拐点延迟对程序运行时间的影响可以忽略不计,并且认为标记物理图与程序设计中的图之间没有偏差。

  •假设2:填充的等距轮廓线必须是闭合的弯曲多边形。

  •假设3:本文中的所有曲线都是平行移动的,Z字形平行阴影仅使用0°扫描线填充。

  •假设4:在激光打标的实际生产中,不存在设备故障导致的事故。

问题重述:

  对于不同的材料和不同的工艺参数,激光的效果也不同。方向平行填充和轮廓平行填充是两种基本的填充方法。对于平行方向填充方法,激光器平行于最初选择的参考方向移动。而轮廓线的平行图案填充是以螺旋方式沿着曲线生成的,与曲线边界保持恒定的距离。实际使用哪种类型的舱口在很大程度上取决于标记材料和加工过程对特定加工任务的影响。我们需要建立数学模型来解决以下问题:

  问题1:在只考虑水平Z字形平行影线的情况下,实现附件1中单层轮廓图案的Z字形平行和轮廓平行影线,并根据附件1的图形坐标数据实现两个输入参数下的影线。

  (1) 内缩边界距离1mm,影线间距1mm;
  (2) 内缩边界距离0.1mm,影线间距0.1mm。

  在两组参数下,计算:

  (a) Z字形平行和轮廓平行阴影的阴影曲线的阴影线的总长度;

  (b) 锯齿形平行影线的水平线数;

  (c) 轮廓平行影线的圆数;

  (d) 基于孵化程序的多次运行的平均经过时间;

  (e) 在参数组(2)和(1)的条件下程序运行的经过时间的比率。

  问题2:实现附件2中相互嵌套的多层轮廓图案的Z字形平行和轮廓平行图案填充。参数设置等计算内容与问题1相同。

  问题3:检查孵化算法的运行时间并分析其性能,为优化孵化算法的性能和效率提供策略或方向。

  激光打标机的填充工具可以用来填充指定的二维复合曲线图,不同填充参数的设置对不同材料的加工效果有很大影响。为了解决这些问题并进一步探索阅卷效率,我们的团队将做以下工作:

  •忽略一些微不足道的影响。

  •建立两个多边形平行舱口模型:锯齿形和轮廓平行舱口。然后记录两个模型在不同平行扫描线间距下的填充方法、运行时间、扫描次数、长度等数据。

  •建立性能评估函数来测试我们的模型,并基于遗传算法优化孵化算法。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

部分程序如下:
function y=inward(all,d)
while (all(1,:)==all(end,:))
all(end,:)=[];
end
n=size(all,1);
L1=zeros(n,2);
a=(all(2,:)−all(n,:));
b=zeros(2,1);
b(2)=−a(1);
b(1)=a(2);
b=b./(sum(b.^2)^(1/2));
b=b’;
L1(1,:)=all(1,:)+b*d;
note=[];
note1=[];
for i=2:1:n−1
a=(all(i+1,:)−all(i−1,:));
b=zeros(2,1);
b(2)=−a(1);
b(1)=a(2);
b=b./(sum(b.^2)^(1/2));
b=b’;
L1(i,:)=all(i,:)+b*d;
if(i>=4)
note=[note;findwr(L1,i)];
end
if (comp2(all(i−1,:)’,all(i,:)’,L1(i−1,:)’,L1(i,:)))
note1=[note1,i];
end
end
a=(all(1,:)−all(n−1,:));
b=zeros(2,1);
b(2)=−a(1);
b(1)=a(2);
b=b./(sum(b.^2)^(1/2));
b=b’;
L1(n,:)=all(n,:)+b*d;
note=[note;findwr([L1;L1(1,:)],n+1)];
L1=[L1;L1(1,:)];
if (note)
L12=resetp(L1,note,note1,all);
else
L12={L1};
end
for i=1:1:length(L12)
L112=L12{i};
if size(L112,1)>2
L112=[L112;L112(1,:)];
plot(L112(:,1),L112(:,2),’−k’);
end
end
axis equal;
y=L12;
end
function y=resetp(L1,note,note1,yall)
n0=size(L1,1);
n1=size(note,1)
mark=ones(n1,1);
m=1;
k=note(n1,1);
if (n1>=2)
com=note(1:end−1,1)−note(2:end,1);
for i=n1−1:−1:1
if (com(i)>0)
m=m+1;
mark(i)=m;
k=[k,note(i,1)];
else
while(m>0 && note(i,1)<k(end))
k(end)=[];
m=m−1;
end
m=m+1;
mark(i)=m;
k=[k,note(i,1)];
end
end
else
if(n1==1)
mark=1;
end
end
deco=judgcc(L1,mark,note);
ano=deco{3};
dele=[deco{1},note1];
comple=deco{2};
L1(comple(:,3),:)=comple(:,1:2);
i=1;
remjd=[];
while(i<=n1)
j=judgct(note(i,:),note1,n0);
note1=j{2};
if(j{1})
remjd=[remjd,note(i,1)+2:note(i,2)−1];
end
i=i+1;
end
m=size(ano,1);
numc=(1:size(L1,1));
Lc=[L1,numc];
Lc([dele,remjd],:)=[];
numc2=(1:size(Lc,1));
y={};
kk=Lc(:,3);
tt=Lc(:,1:2);
for i=1:1:m
a=numc2(kk==ano(i,1));
b=numc2(kk==ano(i,2));
c=numc2(kk==ano(i,3));
d=numc2(kk==ano(i,4));
y=[y,{tt([a:b,c:d],:)}];
Lc([a:b,c:d],:)=[];
end
tt=Lc(:,1:2);
y=[y,{tt}];
for i=1:1:length(y)
m=length(y{i});
if(m<=3)
y{i}=[];
elseif(m<=200)
yy=y{i};
j=1;
while (j<=m)
if(deld2(yall,yy(j,:)))
j=m+1;
y{i}=[];
end
j=j+1;
end
end
end
end
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1108798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STL库——Vector常见使用接口

一、介绍 1. vector是表示可变大小数组的序列容器&#xff0c;就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0…

报错InitializeComponent报错(提示不存在)

我是c#新手。为了解决这个问题&#xff0c;需要按照以下步骤进行。、 首先&#xff0c;确保项目的类型为WPF应用(.NET Framework)&#xff1b; 然后&#xff0c;代码的位置应正确处于项目的MainWindow.xaml.cs&#xff1b; 最后&#xff0c;将MainWindow.xaml打开&#xff0c;…

FPGA软件【紫光】

软件&#xff1a;编程软件。 注册账号需要用到企业邮箱 可以使用【企业微信】的邮箱 注册需要2~3天&#xff0c;会收到激活邮件 授权&#xff1a; 找到笔记本网卡的MAC&#xff0c; 软件授权选择ADS 提交申请后&#xff0c;需要2~3天等待邮件通知。 使用授权&#xff1a; 文…

最新!两步 永久禁止谷歌浏览器 Google Chrome 自动更新

先放效果图&#xff1a; CSDN这个问题最火的大哥的用了没用 像他这样连浏览器都打不开 为什么要禁止chrome自动更新 看到很多搞笑的大哥&#xff0c;说为啥要禁止&#xff1b; 我觉得最大的原因就是chromedriver跟不上chrome的自动更新&#xff0c;导致我们做selenium爬虫的…

在 Python 3 中释放 LightGBM 的力量:您的机器学习大师之路

机器学习是 Python 占据主导地位的领域,它一直在给全球各行各业带来革命性的变化。要在这个不断变化的环境中脱颖而出,掌握正确的工具是关键。LightGBM 就是这样一个工具,它是一个强大且快速的梯度提升框架。在这份综合指南中,我们将通过实际示例和示例数据集从基础知识到高…

PRCV 2023 - Day3

主会场——主旨报告 报告题目&#xff1a;变与不变&#xff1a;有关大模型的一些数理基础问题 讲者&#xff1a;徐宗本&#xff08;中国科学院院士&#xff09; 徐宗本院士的演讲首先通过一系列示例阐释了ChatGPT引领了人工智能研究的新浪潮&#xff0c;推动了人工智能从深度…

行业追踪,2023-10-18

自动复盘 2023-10-18 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

15.2 主机探测与路由追踪

Ping 使用 Internet 控制消息协议&#xff08;ICMP&#xff09;来测试主机之间的连接。当用户发送一个 ping 请求时&#xff0c;则对应的发送一个 ICMP Echo 请求消息到目标主机&#xff0c;并等待目标主机回复一个 ICMP Echo 回应消息。如果目标主机接收到请求并且网络连接正常…

Top 10 数据恢复工具,可从iPhone 和 iPad 恢复数据

您是否正在寻找最好的 iPad 恢复软件&#xff0c;但不知道哪个选项最好&#xff1f;没有什么可担心的。本文将为您提供有关根据文件类型、设备兼容性和数据丢失原因等因素选择合适的 iPad 恢复软件的提示。此外&#xff0c;前 10 名提到的恢复软件是安全可靠的。 第 1 部分、iP…

这可能是最全面的TCP面试八股文了

计算机网络基础&#xff0c;考验一个程序员的基本功&#xff0c;也能更快的筛选出更优秀的人才。 说说TCP的三次握手 假设发送端为客户端&#xff0c;接收端为服务端。开始时客户端和服务端的状态都是CLOSED。最全面的Java面试网站 第一次握手&#xff1a;客户端向服务端发起…

2023年【公路水运工程施工企业安全生产管理人员】新版试题及公路水运工程施工企业安全生产管理人员模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 公路水运工程施工企业安全生产管理人员新版试题是安全生产模拟考试一点通生成的&#xff0c;公路水运工程施工企业安全生产管理人员证模拟考试题库是根据公路水运工程施工企业安全生产管理人员最新版教材汇编出公路水…

Freemarker快速入门(SpringBoot版)

文章目录 Freemarker快速入门1、Freemarker概述2、Freemarker初体验3、数据类型3.0 常见操作符3.1 数值类型3.2 字符串类型3.3 布尔类型3.4 日期类型3.5 序列类型3.6 哈希类型 4、运算符4.1 算术运算符4.2 逻辑运算符4.3 比较运算符4.4 空值运算符 5、常用指令5.1 assign 自定义…

python argparse解析参数

用法比较简单&#xff0c;直接看代码 import argparseargparser argparse.ArgumentParser(descriptionthis is a hello argparser program) argparser.add_argument(--arg1, -a, typestr, helparg1 has value) argparser.add_argument(--arg2, typestr, default"value2&q…

Web攻防02-MySQL注入概述MySQL架构注入获取数据

文章目录 SQL注入概述&#xff1a;sql注入的原理&#xff1a;sql注入攻击&#xff1a; MYSQL-Web组成架构MYSQL5.0以上版本&#xff1a;自带的数据库information_schema MYSQL注入流程MYSQL注入查询数据过程查询数据流程靶场案例 MYSQL-SQL跨库注入查询跨库注入&#xff1a;影响…

xray的使用

不需要扫描 点击 双击xray 1.打开 2.使用 主打扫描 3.被动扫描 网站 与 Burp 联动 - xray 安全评估工具文档 双击 xray cmd xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output text.html 1.bp 2.这道这个 3.配置 xray 改为* 4.代理

Hadoop3教程(二十二):Yarn的基础架构与工作流程

文章目录 &#xff08;126&#xff09;基础架构&#xff08;127&#xff09;YARN的工作机制&#xff08;128&#xff09;作业全流程参考文献 &#xff08;126&#xff09;基础架构 之前基本介绍完了Hadoop的几个核心组件&#xff0c;接下来可以思考下&#xff0c;在MR程序运行…

计算未来:微软眼中的人工智能

计算未来 :人工智能及其社会角色&#xff08;The Future Computed. Artificial Intelligence and its role in society &#xff09;这本书于2018年09月由北京大学出版社出版。 书籍的作者是&#xff1a;沈向洋&#xff08;微软全球执行副总裁&#xff09;,&#xff08;美&…

C++标准模板(STL)- 类型支持 (数值极限,quiet_NaN,signaling_NaN,denorm_min)

数值极限 提供查询所有基础数值类型的性质的接口 定义于头文件 <limits> template< class T > class numeric_limits; numeric_limits 类模板提供查询各种算术类型属性的标准化方式&#xff08;例如 int 类型的最大可能值是 std::numeric_limits<int>::ma…

AST实战|比较大的混淆文件(超过10M)怎么还原

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 1. 需求 目前&#xff0c;我接触到的混淆js文件大小刷新了新记录&…

在 Visual Studio Code (VS Code) 中设置

在 Visual Studio Code (VS Code) 中设置代理服务器的详细教程如下&#xff1a; 打开 Visual Studio Code。 在顶部菜单栏中&#xff0c;点击 "File"&#xff08;文件&#xff09; > "Preferences"&#xff08;首选项&#xff09; > "Settings…