分享好友 最新动态首页 最新动态分类 切换频道
201871030108-冯永萍 实验二 个人项目— D{0-1}背包问题项目报告
2024-12-27 04:27
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/14552393.html 我的课程学习目标 完成课程要求的基础上,对软件工程有系统的理解 这个作业在哪些方面帮助我实现学习目标 让我熟悉了PSP流程,并通过例子实践,深刻体会到软件开发不等于编写程序 项目GitHub的仓库链接地址 https://github.com/fengyongping1120/D01bag

阅读教师博客“常用源代码管理工具与开发工具”内容要求,点评班级博客中已提交相关至少3份作业。

作业点评链接:

●https://www.cnblogs.com/chms/p/14550446.html

●https://www.cnblogs.com/baofengmei/p/14544245.html

●https://www.cnblogs.com/cxl369/p/14522828.html

详细阅读《构建之法》第1章、第2章,掌握PSP流程。

●不局限于某一种软件技术(如编程语言),而是着眼于软件开发的流程,这样,开发不同应用的软件工程师可以互相比较。
●不依赖于考试,而主要靠工程师自己收集数据,然后分析,提高。
●在小型、初创的团队中,很难找到高质量的项目需求,这意味着给程序员的输入质量不高。在这种情况下,程序员的输出(程序/软件)往往质量也不高,然而这并不能全部由程序员负责。
●PSP依赖于数据。
●需要工程师输入数据,记录工程师的各项活动。
●即使一些数据不利于工程师本人,也要尽可能保证工程师愿意如实地记录这些数据。
●PSP的目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度。

项目开发背景:背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。{0-1}背包问题({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的一般描述为:从若干具有价值系数与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数之和在不超过背包载重前提下价值系数之和达到最大?

D{0-1} KP 是经典{ 0-1}背包问题的一个拓展形式,用以对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量 的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大;D{0-1}KP instances数据集是研究D{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集;动态规划算法、回溯算法是求解D{0-1}背包问题的经典算法。查阅相关资料,设计一个采用动态规划算法、回溯算法求解D{0-1}背包问题的程序,程序基本功能要求如下:

1.可正确读入实验数据文件的有效D{0-1}KP数据;

2.能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;

3.能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;

4.用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);

5.任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。

1.可正确读入实验数据文件的有效D{0-1}KP数据:


2.能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图:


3.能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;


4.用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);


5.任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。



●读入实验数据文件

●数据散点图

●重量比进行非递增排序

●求解指定D{0-1} KP数据的最优解和求解时间

●将最优解、求解时间和解向量保存为txt文件或导出EXCEL文件

●输入:背包容量s、D{0-1}KP数据集的项数n、从文件bag.txt中读取每个项的标号(从1到n)及其中三件物品对应的重量与价值

●输出:在不超过背包容量的前提下,背包中的项及对应物品的最大价值(项有一个或多个,项中选择的物品只可能有一个)

●读入实验数据文件

首先输入要读取数据的四个测试文件中的其中一个的名字,判断该文件是否能正确打开。成功打开后,输入要进行数据操作的第几组数据。输入后,读取该组数据的项集数和背包容量。并将该组的物品的重量和价值存入二维数组A的第三行和第四行中(第一行存储要操作的是该文件中的第几组D{0-1}KP数据中的第几组物品,第二行分别将数据从1到3编号,方便第四步输出最优解)。

●数据散点图

首先读入该组D{0-1} KP数据的重量和价值的最大值,动态调整横纵坐标的最大值。然后创建一个二维数组B,数组B的大小也分别对应重量和价值的最大值,节省内存占用。然后对A数组的二、三行遍历,将数组B对应的A的重量和价值的横纵坐标处置为1.A遍历结束后,遍历数组B,对B中值为1的位置输出小点并在右边位置输出对应坐标。

●重量价值比进行非递增排序

分别创建四个二维数组,一个存储二维数组A的第一行,一个存储二维数组A的第二行,一个存储二维数组A的第三行%二维数组A的第四行,一个存储二维数组A的第三行/二维数组A的第四行。首先根据二维数组A的第三行%二维数组A的第四行进行排序,当二维数组A的第三行%二维数组A的第四行的值出现相等情况时,再根据二维数组A的第三行/二维数组A的第四行的值进行排序。注:在每次数组排序位置调整的过程中,其他三个数组中的数也要跟着调整。

●求解指定D{0-1} KP数据的最优解和求解时间

假设D{0-1}KP数据集由n组项集组成,每个项集中有三个物品,假设物品重量用weight表示,价值用value表示,则每个项集中物品的重量和价值满足以下要求:value3=value1+value2,weight3<weight1+weight2。

在不超过背包容量的前提下,背包中可以装一个或多个项,但在该项中只能选择一个物品。故难点在于不超过背包容量的前提下,如何选择项及项中的物品使背包价值最大!

具体代码未实现。

●将最优解、求解时间和解向量保存为txt文件或导出EXCEL文件

根据C语言的语法规则,将结果写入即可。此处选择输出txt文件。

●已实现部分

(1)读入实验数据文件

评价:基本实现要求内容。

(2)散点图

(3)重量价值比进行非递增排序

●未实现部分

(1)折扣0/1背包问题算法实现:






总的来说,此次个人项目虽然实现了部分功能,但是还是有很多不完善和值得改进和反思的地方。

(1)在任务一数据提取时,有些情况下数据可以被正确提取,但是,没有成功保存进二维数组,一般表现为重量行无法正确读入。

(2)任务二散点图实在草率。虽然从网上查阅到部分资料,但是并不适用于我现在的编译环境。
(3)折扣{0,1}背包问题的算法设计还是不够合理,有待改进。

类的职能要单一:
遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险

子类对象可以替换父类对象。子类不要增加父类没有的约束。这样会导致父类有些方法不能用。从而不能真正的实现 : 子类对象可以替换父类对象,如果子类重写了父类已实现的方法,那么子类调用的父类的方法就完全没用了,从而不是真正意义上的继承。

高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

在设计接口的时候,给每一个接口设计不多不少的方法,因为,如果设计的方法多了,当某个类通过接口来依赖某个类的时候,被依赖的那个类要实现的方法太多了,会造成那个类中大量的代码冗余,不可过少的原因是,接口太多,会让设计变复杂,且不便于管理。

低耦合,高内聚,即类A与类B,如果没必要依赖吗,则代码尽量不要耦合,如果这两个类要产生通信,则创建一个中间的通信类C去与这两个类进行交互。但是这样的通信类要适量。

对实现封闭,对扩展开放。即当一个一个方法需要增加其他的功能,或者代码需要重构的时候,要扩展软件的行为,尽量不要去修改已有的代码。用抽象构建框架,方法的实现来扩展细节。



PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min) Planning 计划 10 9 Estimate 估计这个任务需要多少时间,并规划大致工作步骤 10 9 Development 开发 632 759 Analysis 需求分析 (包括学习新技术) 30 35 Design Spec 生成设计文档 15 12 Design Review 设计复审 (和同事审核设计文档) 7 7 Coding Standard 代码规范 (为目前的开发制定合适的规范) 10 10 Design 具体设计 10 10 Coding 具体编码 540 660 Code Review 代码复审 5 5 Test 测试(自我测试,修改代码,提交修改) 15 20 Reporting 报告 30 40 Test Report 测试报告 20 25 Size Measurement 计算工作量 12 7 Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 8 8

编码耗时最多,并且估计和实践相差巨大。

最新文章
node.js毕设宠物在线管理系统程序+论文
本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码 关于宠物管理系统的研究,现有研究主要以宠物领养管理、宠物医院管理等为主,专门针对宠物在线综合管理&#x
鹏欣漫城都荟 首页网站-鹏欣漫城都荟-楼盘详情-昆明 鹏欣漫城都荟昆明鹏欣漫城都荟 售楼处欢迎您
总栋数:A1、A2、A3地块共计11栋楼栋间距:左右40.15米,前后52.41米车位配比:1:1.1容积率:3.0绿化率:46%物业公司:春川物业物业费:2.5元/平总户数:1096户梯户比:2T4交付标准:精装/毛坯装修标准:2000元/平公摊:19%-22%首付比例:
高颜值微信小程序 UI 组件库!
今天来分享 8 个高颜值的微信小程序 UI 组件库,速速收藏!Vant WeappVant 是一个轻量、可靠的移动端组件库,由有赞于 2017 年开源。目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小
欧慕斯智能锁怎么改密码
smart lock智能锁怎么改密码对于如何修改smart lock智能锁的密码,首先需要明确的是,不同品牌和型号的smart lock智能锁在修改密码的步骤上可能会有所不同。因此,在进行密码修改之前,建议先查阅您所使用的smart lock智能锁的说明书或者联
九幺高危风险9.1免费版安装过程和使用常见问题如何解决
九幺高危风险9.1免费版是一款专为网络安全防护设计的工具,它能够帮助用户识别和解决潜在的高危风险问题。该版本提供了简便的安装流程,适合大多数用户,尤其是那些对网络安全不太熟悉的初学者。通过这篇文章,我们将带您了解九幺高危风险9
用AI绘制高清美女写真:搜索最强AI工具指南
综上所述,虽然各个工具都有着独特的优势和劣势,但在众多选择中,【搜狐简单AI】凭借着“功能丰富”、“操作简单”和“免费使用”的特点,成为了各类用户的好选择。无论你是想轻松做个有趣的美女写真,还是图像创作的新手,搜狐简单AI都能
青岛定制网页设计_青岛网页设计定制公司
青岛定制网页设计的优势分析:青岛定制网页设计能够根据企业自身的特点进行专门的设计,提供独一无二的网站体验。这样的设计方式不仅能够满足企业的品牌形象需求,还能有效地提升用户体验。通过定制化的网页设计,企业可以更好地展示自己的
预见2024:2024年中国在线旅游行业市场规模、竞争格局及发展前景预测 未来市场规模将超1.9万亿元
行业主要上市公司:携程(TCOM)、(TOUR)、同程旅行(0780)等本文核心数据:中国在线旅游交易规模;中国在线旅游平台排名;中国在线旅游区域竞争格局行业概况1、定义在线旅游是随着互联网发展而诞生的一种新型旅游商业模式,是指旅游消费者通过
英飞凌科技股份公司宣布已收购位于斯德哥尔摩的初创企业Imagimob有限公司,这是一家领先的平台提供商,致力于为边缘设备上的机器学习(ML)解决方案开发提供助力。通过此次收购,英飞凌进一步加强了其提供
TDK株式会社针对USB-C端口和其他高速接口的ESD保护应用推出一款超紧凑型TVS二极管。对于USB-C等符合USB4(第1版)规范且传输速度高达40 Gbit/s的高速接口 (Tx / Rx),ESD保护应用特别需要具有超低寄生电容和低钳位电压的TVS二极管。新的B74
自考靠谱的机构有哪些特点?
自考靠谱的机构有哪些特点?社会飞速发展,面临升职就业等压力,提升自我优势是必不可少的,拥有一个高学历或好文凭是关键,可以让就业的范围更广升职的机会更多。学历是判断个人素质的重要条件之一,企业也重视高学历的员工。下面本小编为
相关文章
推荐文章
发表评论
0评