项目 内容
课程班级博客链接 班级博客
这个作业要求链接 作业要求
我的课程学习目标 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}背包问题的程序,程序基本功能要求如下:

    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文件;

项目背景

  • 题目描述

    给定 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》项目报告的更多相关文章

  1. 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...

  2. 201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接☛ 班级博客 这个作业要求链接☛ 作业要求 我的课程学习目标☛ 1. 体验软件项目开发中的两人合作,练习结对编程(Pair programming).2. 掌握Github ...

  3. 201871030115-康旭 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 18卓越班 这个作业要求链接 实验三结对编程要求 我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming):(2)掌握Git ...

  4. 201871030140-朱婷婷 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 实验三 结对项目 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程:2.掌握GitHub协作开发程序的操作方法. 这个 ...

  5. 201871030136-颜静 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    ​ 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu- ...

  6. 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...

  7. 20155219&20155224 《信息安全系统设计基础》实验二 固件程序设计

    实验二 固件程序设计-1-MDK 0. 注意不经老师允许不准烧写自己修改的代码 1. 两人(个别三人)一组 2. 参考云班课资源中"信息安全系统实验箱指导书.pdf "第一章,1. ...

  8. 201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)详细阅读<构建之法>学习并掌握PSP的具体流程(2)掌握背包问题,通过查阅相关资料,设计一个采用 ...

  9. 201871030132-熊文婷 实验二 个人项目―《D{0-1}KP问题》项目报告

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

随机推荐

  1. web testing

    web testing cypress https://www.cypress.io/ https://github.com/cypress-io/cypress https://docs.cypre ...

  2. uniapp 创建简单的tabs

    tabs组件 <template> <view class="tabs"> <view class="bar" :style=&q ...

  3. Dart 中断Future

    更多 中断future 方法1) import 'package:async/async.dart'; void main() { var get = CancelableOperation.from ...

  4. NGK公链如何构建区块链数字经济商业帝国?

    2020年对于区块链市场来说,重大的利好消息莫过于NGK公链的上线了.NGK公链其广泛的市场前景.顶尖的技术,一直备受众多大型机构以及投资者所看好.同时,NGK公链也不负众望,在上线以后,就开始落地到 ...

  5. mysql explain type详解

    本文转载自最官方的 mysql explain type 字段解读 读了很多别人的笔记都杂乱不堪,很少有实例,什么都不如原装的好,所以当你读到我的笔记的时候如果觉得说的不明白,最好参考官方的手册. 我 ...

  6. Java并发包源码学习系列:同步组件Semaphore源码解析

    目录 Semaphore概述及案例学习 类图结构及重要字段 void acquire() 非公平 公平策略 void acquire(int permits) void acquireUninterr ...

  7. Nifi组件脚本开发—ExecuteScript 使用指南(三)

    上一篇:Nifi组件脚本开发-ExecuteScript 使用指南(二) Part 3 - 高级特征 本系列的前两篇文章涵盖了 flow file 的基本操作, 如读写属性和内容, 以及使用" ...

  8. hutool的DateUtil工具类

    1.0.DateUitl(日期时间) 0)坐标 <dependency> <groupId>cn.hutool</groupId> <artifactId&g ...

  9. 微信小程序:app.json中通过使用扩展库userExtendedLib的方式,引入并使用weui

    微信小程序  PK  APP: 1.微信有海量⽤⼾,⽽且粘性很⾼,在微信⾥开发产品更容易触达⽤⼾:而推⼴app的成本太⾼. 2.微信小程序也可以跨平台(Android和IOS). 一.project. ...

  10. 使用 xunit 编写测试代码

    使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使 ...