201871030131-谢林江 实验二 个人项目—《D{0-1} KP》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | 班级博客 |
这个作业要求链接 | 作业要求 |
我的课程学习目标 | 1.学习编写PSP 2.完成个人项目实验要求 3.在Github建仓 |
这个作业在哪些方面帮助我实现学习目标 | 1.首次编写PSP,更好的分割利用时间 2.对项目进行模块化处理,简单化复杂问题 3.Github建仓对项目进行托管 |
项目Github的仓库链接地址 | https://github.com/krypton052/lsp_mode |
实验二
任务1——点评班级博客中至少3份作业
任务2——详细阅读《构建之法》第1章、第2章,掌握PSP流程
个人开发流程(PSP)
PSP2.1 | 任务内容 |
---|---|
planing | 计划 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 |
Development | 开发 |
· Analysis | 需求分析 (包括学习新技术) |
· Design Spec | · 生成设计文档 |
· Design Review | · 设计复审 (和同事审核设计文档) |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) |
· Design | · 具体设计 |
· Coding | · 具体编码 |
· Code Review | · 代码复审 |
· Test | · 测试(自我测试,修改代码,提交修改) |
Reporting | 报告 |
· Test Report | · 测试报告 |
· Size Measurement | · 计算工作量 |
· Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 |
PSP特点
- 不局限于某一种软件技术,而是着眼于软件开发的流程。
- 不依赖于考试,而是依赖工程师自己收集数据,然后分析,提高。
- 在小型、初创的团队中,很难找到高质量的项目需求,这意味着给程序员的输入质量不高,在这种情况下,程序员的输入(程序/软件)往往质量也不高,然而这并不能全由程序员负责。
- PSP依赖于数据。
- 需要工程师输入数据,记录工程师的各项活动,这本身就需要不小的时间代价。
- 如果数据不准确或有遗失,怎么办?
- 如何保证工程师如实记录数据?
- PSP的目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度。工程师如果开发一款不受顾客喜欢的软件,那么这位工程师是否优秀?
任务3——项目开发
需求分析
- 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}背包问题的程序,程序基本功能要求如下:
- 可正确读入实验数据文件的有效D{0-1}KP数据;
- 能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
- 能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
- 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
- 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件;
项目背景
题目描述
给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi,应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?
总体思路
动态规划法
在解决问题之前,为描述方便,首先定义一些变量:Vi表示第 i 个物品的价值,Wi表示第 i 个物品的体积,定义V(i,j):当前背包容量 j,前 i 个物品最佳组合对应的价值,同时背包问题抽象化(X1,X2,…,Xn,其中 Xi 取0或1,表示第 i 个物品选或不选)。应用动态规划法有如下递推关系式:
- j<w(i) V(i,j)=V(i-1,j)
- j>=w(i) V(i,j)=max{V(i-1,j),V(i-1,j-w(i))+v(i)}
回溯法
通过上面的方法可以求出背包问题的最优解,但还不知道这个最优解由哪些商品组成,故要根据最优解回溯找出解的组成,根据填表的原理可以有如下的寻解方式:
- V(i,j)=V(i-1,j)时,说明没有选择第i 个商品,则回到V(i-1,j)
- V(i,j)=V(i-1,j-w(i))+v(i)时,说明装了第i个商品,该商品是最优解组成的一部分,随后我们得回到装该商品之前,即回到V(i-1,j-w(i))
- 一直遍历到i=0结束为止,所有解的组成都会找到
设计实现
动态规划法部分
public void solve() {
for(int i=1;i<numOfItems+1;i++) {
for(int w=1;w<capacityOfKnapsack+1;w++) {
int notTakingItem = knapsackTable[i-1][w];
int takingItem = 0;
if(weights[i]<=w) {
takingItem = values[i]+knapsackTable[i-1][w-weights[i]];
}
knapsackTable[i][w] = Math.max(notTakingItem, takingItem);
}
}
totalBenefit = knapsackTable[numOfItems][capacityOfKnapsack];
}
散点图部分
public void showAttr(LinkedList ac_cnlList,ArrayList all) {
DefaultXYDataset xydataset = new DefaultXYDataset();
StandardChartTheme mChartTheme = new StandardChartTheme("CN");
mChartTheme.setExtraLargeFont(new Font("黑体", Font.BOLD, 20));
mChartTheme.setLargeFont(new Font("宋体", Font.CENTER_BASELINE, 15));
mChartTheme.setRegularFont(new Font("宋体", Font.CENTER_BASELINE, 15));
ChartFactory.setChartTheme(mChartTheme);
for(int l = 0; l < all.size(); l++){
int size = ((Set) all.get(l)).size();
double [][]datas = new double[2][size];
int m =0;
for(Iterator it = ((Set) all.get(l)).iterator();it.hasNext();m++){
HashMap line = ((HashMap)ac_cnlList.get((Integer) it.next()));
double AC = (Double) line.get("AC");
double CNL = (Double) line.get("CNL");
datas[0][m] = AC;
datas[1][m] = CNL;
}
xydataset.addSeries(l, datas);
}
JFreeChart chart = ChartFactory.createScatterPlot("k2 =10,k3=20,kernel=2", "GR", "CNL", xydataset, PlotOrientation.VERTICAL, true, false, false);
ChartFrame frame = new ChartFrame("散点图", chart, true);
chart.setBackgroundPaint(Color.white);
chart.setBorderPaint(Color.GREEN);
chart.setBorderStroke(new BasicStroke(1.5f));
XYPlot xyplot = (XYPlot) chart.getPlot();
xyplot.setBackgroundPaint(new Color(255, 253, 246));
ValueAxis vaaxis = xyplot.getDomainAxis();
vaaxis.setAxisLineStroke(new BasicStroke(1.5f));
ValueAxis va = xyplot.getDomainAxis(0);
va.setAxisLineStroke(new BasicStroke(1.5f));
va.setAxisLineStroke(new BasicStroke(1.5f));
va.setAxisLinePaint(new Color(215, 215, 215));
xyplot.setOutlineStroke(new BasicStroke(1.5f));
va.setLabelPaint(new Color(10, 10, 10));
va.setTickLabelPaint(new Color(102, 102, 102));
ValueAxis axis = xyplot.getRangeAxis();
axis.setAxisLineStroke(new BasicStroke(1.5f));
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot
.getRenderer();
xylineandshaperenderer.setSeriesOutlinePaint(0, Color.WHITE);
xylineandshaperenderer.setUseOutlinePaint(true);
NumberAxis numberaxis = (NumberAxis) xyplot.getDomainAxis();
numberaxis.setAutoRangeIncludesZero(false);
numberaxis.setTickMarkInsideLength(2.0F);
numberaxis.setTickMarkOutsideLength(0.0F);
numberaxis.setAxisLineStroke(new BasicStroke(1.5f));
frame.pack();
frame.setVisible(true);
}
PSP
PSP2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
planing | 计划 | 10 | 15 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 15 |
Development | 开发 | 600 | 725 |
· Analysis | 需求分析 (包括学习新技术) | 10 | 10 |
· Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 (和同事审核设计文档) | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
· Design | · 具体设计 | 30 | 30 |
· Coding | · 具体编码 | 250 | 350 |
· Code Review | · 代码复审 | 60 | 70 |
· Test | · 测试(自我测试,修改代码,提交修改) | 200 | 215 |
Reporting | 报告 | 50 | 80 |
· Test Report | · 测试报告 | 10 | 15 |
· Size Measurement | · 计算工作量 | 10 | 15 |
· Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 30 | 50 |
任务4——完成任务3的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中
201871030131-谢林江 实验二 个人项目—《D{0-1} KP》项目报告的更多相关文章
- 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...
- 201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接☛ 班级博客 这个作业要求链接☛ 作业要求 我的课程学习目标☛ 1. 体验软件项目开发中的两人合作,练习结对编程(Pair programming).2. 掌握Github ...
- 201871030115-康旭 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18卓越班 这个作业要求链接 实验三结对编程要求 我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming):(2)掌握Git ...
- 201871030140-朱婷婷 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 实验三 结对项目 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程:2.掌握GitHub协作开发程序的操作方法. 这个 ...
- 201871030136-颜静 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu- ...
- 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...
- 20155219&20155224 《信息安全系统设计基础》实验二 固件程序设计
实验二 固件程序设计-1-MDK 0. 注意不经老师允许不准烧写自己修改的代码 1. 两人(个别三人)一组 2. 参考云班课资源中"信息安全系统实验箱指导书.pdf "第一章,1. ...
- 201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)详细阅读<构建之法>学习并掌握PSP的具体流程(2)掌握背包问题,通过查阅相关资料,设计一个采用 ...
- 201871030132-熊文婷 实验二 个人项目―《D{0-1}KP问题》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
随机推荐
- puppeteer render local HTML template bug
puppeteer render local HTML template bug ➜ url-to-poster git:(master) ✗ dev ^-v-^ app is running in ...
- js 斩掉单行注释和多行注释
var json = ` // e { /* hello */ name:/* a */ 'ajanuw' // c /** * * hello * ? adsd * todo */ // c } ` ...
- rxjs 常用的subject
api列表 Subject Subject是可观察的一种特殊类型,它允许将值多播到许多观察者 import {Subject} from 'rxjs'; const l = console.log; ...
- 浅析VAST代币与SPC算力币的释放模式
许多区块链业界分析师认为,2021年的区块链市场或许与2020年的有些许不同.2020年的区块链市场更注重的是DeFi领域,很多公链项目以及资本市场的巨鲸们也是将目光锁定在DeFi领域.而2021年的 ...
- 打造NGK生态星空计划,高倍币VAST即将震撼上线!
援引华盛顿邮报.彭博社.路透社以及CNN等知名媒体的报道,NGK官方近日宣布,为了完善NGK生态星空计划,NGK官方近日即将推出SPC的子币VAST,以鼓励更多的生态建设者参与. NGK官方相关负责人 ...
- [转]基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动
原文出处: https://blog.csdn.net/Forrest_Z/article/details/55002484 准备工作 1.下载串口通信的ROS包 (1)cd ~/catkin_ws/ ...
- nodejs+express+mongodb实现登录注册
nodejs+express+mongodb实现登录注册 1 简介 登录注册功能使用nodejs+express+mongodb完成,其中对mongodb的操作使用mongoose完成,对mongod ...
- Morris莫里斯遍历
程序员代码面试指南(第2版)第3章 二叉树问题:遍历二叉树的神级方法 https://leetcode.com/articles/binary-tree-inorder-traversal/ Step ...
- 大家最常用的编程论坛是哪个呢,欢迎评论!!掘金16 juejin 简书41 jianshu 博客85 csdn137 csdn
软件编程交流论坛 掘金 16 juejin 简书 41 jianshu 博客 85 cnblogs csdn 137 csdn stackoverflow 0 思否 github 大家最常用的 ...
- 剑指 Offer 65. 不用加减乘除做加法 + 位运算
剑指 Offer 65. 不用加减乘除做加法 Offer_65 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGa ...