2020年亚太杯APMCM数学建模大赛A题激光标记舱口轮廓生成求解全过程文档及程序
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名片即可
相关文章:
2020年亚太杯APMCM数学建模大赛A题激光标记舱口轮廓生成求解全过程文档及程序
2020年亚太杯APMCM数学建模大赛 A题 激光标记舱口轮廓生成 原题再现: 激光是20中的一项重要发明世纪,它被称为“最锋利的刀”、“最精确的尺子”和“最不寻常的光”。 激光已越来越多地应用于工业加工, 其中可以是就业在各种加工业务例如作…...
【单元测试】--工具与环境
一、单元测试工具概览 1.1 JUnit JUnit 是一个广泛用于 Java 程序开发的开源测试框架。它是单元测试的标准工具之一,用于编写和运行测试用例,以确保 Java 程序的各个组件按预期工作。以下是一些关键特点和概念,来介绍 JUnit: 注…...
基于Java的汽车维修预约管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...
vscode调试container(进行rocksdb调试)+vscode比较git项目不同分支和fork的哪个分支
vscode调试container(进行rocksdb调试) 参考链接: https://blog.csdn.net/qq_29809823/article/details/128445308#t5 https://blog.csdn.net/qq_29809823/article/details/121978762#t7 使用vscode中的插件dev containners->点击左侧的…...
[python-大语言模型]从浅到深一系列学习笔记记录
整体学习路径参照:点这里 python-机器学习-深度学习-大语言模型-数据开发 面向开发者的LLM入门提示原则 面向开发者的LLM入门 学习链接: github地址:https://github.com/datawhalechina/prompt-engineering-for-developers 在线阅读地址&…...
Android 指定有线网或Wifi进行网络请求
Android 指定有线网或Wifi进行网络请求 文章目录 Android 指定有线网或Wifi进行网络请求一、前言:二、指定网络通讯测试1、 窗口命令 ping -I 网络节点 IP2、Java 代码指定特定网络通讯 三、指定特定网络的demo app 开发1、效果图:2、实际测试结果说明&a…...
消除过期的对象引用
Java虽然有自己的垃圾回收机制,但是并没有那么的智能,对于被引用的对象,就算我们已经不在使用它了,但是Java的回收机制是不会回收它们的,人们称之为“内存泄漏”。 以下为三种不同的内存泄漏场景,极其优化方案 1、只要类自己管理内存,就该警惕内存泄漏问题 例如Stack…...
【Shell】环境变量 自定义变量 特殊变量
Shell变量:环境变量 目标 1、理解什么是系统环境变量? 2、掌握常用的系统环境变量都有哪些? Shell变量的介绍 变量用于存储管理临时的数据, 这些数据都是在运行内存中的. 变量类型 系统环境变量 自定义变量 特殊符号变量 系统环境变…...
Maven 打包 jar、war 包配置
1、导出 jar 包配置 <build><finalName>weaver-customerservice-distribution-component</finalName><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></inc…...
感悟:一个小小的摄像头APP,也解决了很多BUG
本来以为,简单的测试一下就行了,应该没有几个BUG。应该是比较轻松的。 然而现实是每天干活时,都能发现几个BUG。这BUG不解决还不行。六石管理学告诉我们四大容易:说容易,看容易,看别人容易,会了…...
顺序表第三节(通讯录基础版)
目录 可以先看一遍第二节在看这个 顺序表(第二节)实现和解析-CSDN博客 1.顺序表的头文件 2.初始化通讯录 3.添加通讯录 特殊:查找对应姓名的通讯录的序号 4.删除通讯录 5.展示通讯录 6.查找通讯录 7.修改通讯录 8.销毁通讯…...
数字ID和字符串ID互相转化
对于想隐藏真实id的需求,比如想加密userId等 使用示例: * 不指定长度* AlphaIDCustom(12354); //会将数字转换为字母。* AlphaIDCustom(PpQXn7COf,true);//会将字母ID转换为对应的数字。* 指定长度* Alpha…...
「Qt中文教程指南」如何创建基于Qt Widget的应用程序(三)
Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文描述了如何使用…...
Django CSRF Bypass
自存用 Django CSRF Bypass (CVE-2016-7401) 漏洞分析...
微信小程序 —— 会议OA项目首页布局与Mock数据交互
14天阅读挑战赛如果世界上有奇迹,那一定是努力的另一个名字。 目录 一、小程序布局 1.1 Flex布局 1.2 Flex属性 二、OA会议首页搭建 2.1 首页底部菜单 2.2 创建后端结口 2.3 Mock模拟数据 2.4 首页轮播图搭建 2.5 首页内容搭建 一、小程序布局 1.1 Flex布…...
机器学习-K-近邻(KNN)算法
目录 一 . K-近邻算法(KNN)概述 二、KNN算法实现 三、 MATLAB实现 四、 实战 一 . K-近邻算法(KNN)概述 K-近邻算法(KNN)是一种基本的分类算法,它通过计算数据点之间的距离来进行分类。在…...
shell_38.Linux读取脚本名
读取脚本名 (1)示例 $ cat positional0.sh #!/bin/bash # Handling the $0 command-line parameter # echo This script name is $0. exit $ $ bash positional0.sh This script name is positional0.sh. $ (2)如果使用另一个命令来运行 shell 脚本,则命令…...
面试题-React(十七):如何使用RTK进行状态管理
Redux Toolkit(RTK) 是一个强大的工具集,旨在简化和改进Redux的使用。它提供了一组工具和约定,使Redux的配置和编写更加直观和高效。 一、Redux Toolkit简介 Redux Toolkit是一个由Redux官方团队开发和维护的库,旨在…...
网络安全—自学笔记
目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类…...
Java后端开发(五)-- 对象转换工具类
为避免返回给前端的字段信息太多,在缓解前、后端通信的带宽压力的前提下,对不必要的字段的信息进行不返回时,entity层对象需要向vo层对象进行转换,同事尽量减少geetter与setter方法的编码。 1. ConvertUtils工具类 import org.slf4j.Logger; import org.slf4j.LoggerFacto…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
