论文整理与动态读取

论文整理部分

Dynamic Multi-Objective Optimization With jMetal and Spark: a Case
Study

这篇论文主要通过应用Spark流处理技术和JMetal框架来实现其主要的目的,主要流程应该是通过流处理技术将数据读取进来,然后通过一定的技术将这些数据转化为我们想要的到的JMetal框架当中的问题格式,然后再通过应用JMetal框架当中的算法来解决问题,将问题以帕累托最优的格式输出。
从上面的叙述当中我们可以看出来,动态优化与我们当前实现的静态优化算法最主要的区别是,将实时数据进行处理并且转化为我们想要的问题格式,在使用静态的算法进行批量处理就可以实现动态解决的思路,因此问题的关键在于如何抓取数据,并且将数据转化为JMetal的问题格式,对于抓取数据部分,论文中并没有太多的赘述,下面我们将会对数据格式转化部分进行详细的介绍。
在论文中,其使用了纽约交通部门提供的开发数据源,这个数据源将会在每分钟内数次更新纽约的实时交通信息,在这部分的信息当中主要包含下列指标

– Id:路径标识
– Speed:车辆在最近间隔内路径上面行驶的平均速度.
– TravelTime: .车辆在路径行驶是的平均时间
– Status: 路径的状态,是否是开放状态
– EncodedPolyLine:表示GPS坐标的编码字符串,它是使用谷歌一个算法编码实现的
– DataAsOf:.接收到链路状态的最后日期
– LinkName: 链路未知的描述以及其终止点

但是由于信息是以链路状态的形式,而不是节点之间的关系给与的,因此我们需要对数据进行一个预处理,将其转化为可用的TSP问题,我们通过比较GPS信息来加入路由,当一个路由的终止点和一个路由的七点非常接近时(相隔误差很小的情况下)一个通信communication就建立了起来,然后我们对所有的节点进行迭代,删除掉那些度数小于2的节点。另外需要注意的是GPS坐标列表是通过对link数据当中的EncodedPolyLine属性解码得到。
当对所有数据结构化处理完成之后,我们可以得到一个由93个位置点和315个他们之间的通信所组成的DTSP问题,需要注意的是,这里的问题路径明显的不是对称的。当我们处理到这里,我们可以发现一个问题那就是我们得到的DTSP问题中缺少了distance这个关键属性,为了确定每个点之间的距离问题,我们使用谷歌服务,来解决两个点之间的距离,这一步是为了初始化路图,时间和速度这两个指标都已经存在在最初读取的文件中。至此我们便能够得到多目标数据当中的time和distance两个属性,数据初始化和结构化任务也就完成了。

动态读取的实现

如果要想实现动态问题的解决,我们的思路是将动态的问题转化为静态问题来解决,具体来说,我们将不同时段的问题同时存放在一个问题文件夹当中,然后在程序中读取这个文件夹中所有的文件,对每一个问题文件都进行一次独立的算法运算,然后得到数个与问题文件相对应的帕累托解集,然后我们再将这些解集统一的输出到一个指定的解集文件夹当中,这样就可以模拟了数据的动态读取与输出,具体的实现代码就是对文件夹内的文件的计数和读取

    public SSAMultiTspSolutionSet run(String path) {
        File root = new File(path);
        File[] files = root.listFiles();
        String[] Filename = root.list();
        if (Filename == null) {
        } else {
            for (int i = 0; i < Filename.length; i++) {
                String p1 = files[i].list()[0];
                String p2 = files[i].list()[1];
                SSAMultiTspSolutionSet child = getResult(new Multi_Tsp(100, p1, p2));
                p1=p1.substring(0,7);
                p2=p2.substring(0,7);
                String pathname="D:\\answer_parato\\"+p1+p2+".txt";
                System.out.println(pathname);
                File file = new File(pathname);//定义一个file对象,用来初始化FileReader
                FileWriter writer = null;//定义一个fileReader对象,用来初始化BufferedReader
                try {
                    writer = new FileWriter(file);

                } catch (IOException e) {
                    e.printStackTrace();
                }
                int m = 0;
                BufferedWriter bwriter = new BufferedWriter(writer);//new一个BufferedReader对象,将文件内容读取到缓存
                while (m < child.array.size()) {//逐行读取文件内容,不读取换行符和末尾的空格
                    //String[] ss=s.split(" ");
                    try {
                        if (child.array.get(m).rank == 1) {
                            bwriter.write(child.array.get(m).fitness[0] + " " + child.array.get(m).fitness[1]);
                            bwriter.newLine();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    m++;
                }
                try {
                    bwriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }


        return null;

    }

以上便是具体的代码解释,实际上只是一个文件io的简单操作,其实也可以有更加拟真的操作,比如通过一个保护线程定时监控文件夹内有没有新的传入,然后当发现有输入时,便运行算法,得到新的解集输出,这个可以作为新的idea点来为下一步的工作做准备。

标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的数据,并通过其内置的数字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的数据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角数据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行数据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和数据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出数据的中断;之后是数据读取,通过中断服务程序从DMP接收姿态角数据,数据通常以四元数或欧拉角形式呈现;再接着是数据显示,将姿态角数据转换为可读的度数格
MathorCup高校数学建模挑战赛是一项旨在提升学生数学应用、创新和团队协作能力的年度竞赛。参赛团队需在规定时间内解决实际问题,运用数学建模方法进行分析并提出解决方案。2021年第十一届比赛的D题就是一个典型例子。 MATLAB是解决这类问题的常用工具。它是一款强大的数值计算和编程软件,广泛应用于数学建模、数据分析和科学计算。MATLAB拥有丰富的函数库,涵盖线性代数、统计分析、优化算法、信号处理等多种数学操作,方便参赛者构建模型和实现算法。 在提供的文件列表中,有几个关键文件: d题论文(1).docx:这可能是参赛队伍对D题的解答报告,详细记录了他们对问题的理解、建模过程、求解方法和结果分析。 D_1.m、ratio.m、importfile.m、Untitled.m、changf.m、pailiezuhe.m、huitu.m:这些是MATLAB源代码文件,每个文件可能对应一个特定的计算步骤或功能。例如: D_1.m 可能是主要的建模代码; ratio.m 可能用于计算某种比例或比率; importfile.m 可能用于导入数据; Untitled.m 可能是未命名的脚本,包含临时或测试代码; changf.m 可能涉及函数变换; pailiezuhe.m 可能矩阵的排列组合相关; huitu.m 可能用于绘制回路图或流程图。 matlab111.mat:这是一个MATLAB数据文件,存储了变量或矩阵等数据,可能用于后续计算或分析。 D-date.mat:这个文件可能包含D题相关的特定日期数据,或是模拟过程中用到的时间序列数据。 从这些文件可以推测,参赛队伍可能利用MATLAB完成了数据预处理、模型构建、数值模拟和结果可视化等一系列工作。然而,具体的建模细节和解决方案需要查看解压后的文件内容才能深入了解。 在数学建模过程中,团队需深入理解问题本质,选择合适的数学模
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值