分享好友 最新动态首页 最新动态分类 切换频道
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

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

最新文章
百度蜘蛛池租用:清风算法官网蜘蛛池,助力网站优化,提升搜索引擎排名
清风算法官网提供的蜘蛛池租用服务,助力网站优化,有效提升搜索引擎排名,助力企业网络营销。本文目录导读:清风算法官网蜘蛛池简介清风算法官网蜘蛛池的使用方法清风算法官网蜘蛛池的优势随着互联网的快速发展,搜索引擎优化(SEO)成为
迈威尔科技定制HBM解决方案:AI加速器性能大幅提升
近日,迈威尔科技(MRVL.US)宣布其在高带宽内存(HBM)领域的重大突破,将为人工智能处理器带来显著的性能提升。这项创新性的定制HBM解决方案是通过与美光科技、三星及SK海力士等主要内存设计公司的合作,实现的,旨在满足日益增长的AI计
高清美女写真生成神器!体验搜狐简单AI的魅力
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个数字化的时代,如何创造出一个完美的‘自己’成了许多人的追求,尤其是想要通过AI技术
网站优化中的内部链接和外部链接?
对于网站优化而言,内部链接和外部链接一定是我们经常接触到的名词,但对于许多刚接触网站的朋友这两个名词可能会有些许陌生,因此,下面就来给大家讲讲这两个我们日后会经常接触到的名词。一、内部链接 指通过用户点击此超链接,将用户从
小米全新智能生活App引领智能生活新时代
小米推出最新款App,引领智能生活革新。该应用致力于提供便捷、智能的服务,为用户带来全新的生活体验。通过先进的科技手段,实现智能家居控制、健康管理、娱乐休闲等功能,让日常生活更加智能化、便捷化。这款App将成为用户智能生活的得力
用AI一键生成超逼真美女写真,轻松搞定你的视觉需求!
Deep Dream Generator:这个工具擅长通过深度学习技术来重塑图像,能生成独特的艺术风格。生成的图像富有梦幻色彩,适合希望创造出奇异效果的用户。不过,由于其生成的的图像往往较为抽象,可能不符合所有用户的需求。Generate.AI:作为新
轻松搭建企业,塑造专业品牌形象全攻略
本教程将指导您轻松搭建企业,助您塑造专业企业形象。涵盖从到设计、内容编辑及SEO优化等关键步骤,助您快速上线并提升品牌影响力。挑选合适的建设明确的功能与布局设计建设详细步骤的与优化策略在互联网迅猛发展的今天,企业已成为企业塑
这些豫企相当潮丨一只“雨燕”翱翔AI时代——来自麒麟合盛网络技术股份有限公司的调研报告
  企业家名片  李涛,麒麟合盛网络技术股份有限公司(APUS)董事长兼CEO,1999年进入互联网行业,2014年创办APUS,见证了中国互联网乃至全球互联网起起伏伏的发展历程,凭借敏锐的市场洞察力,对我国互联网、大数据、云计算、移动安全
星尘智能发布AI机器人Astribot S1
  上证报中国证券网讯(记者 孙小程)近日,星尘智能发布新一代AI机器人Astribot S1。在未经加速处理的视频中,S1机器人通过模仿学习,在家居、工作场景中执行一系列对人有用的复杂任务。公司表示,S1已接入大模型测试,能像人一样学习、
首个被人类骗钱骗感情的AI出现了
一段话,让 AI 给我打几万美元。爽文都不敢想的情节,发生在了现实之中。事实上并没有。11 月 29 日,Freysa 累计和 195 名人类聊了 482 次,被骗走约 4.7 万美元。12 月 2 日,在和 330 名人类周旋之后,Freysa 又一次被骗走约 1.3 万美元
相关文章
推荐文章
发表评论
0评