项目 内容
课程班级博客链接 班级博客
这个作业要求链接 作业要求
我的课程学习目标 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. C++算法代码——纪念品分组[NOIP2007 普及组]

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1099 https://www.luogu.com.cn/problem/P1094 ...

  2. 使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适用问题的解决

    问题如下图片: 之前项目上开发了一个上传文件的功能,使用的是sun.net.ftp.FtpClient这个类 连接服务器的代码大概如下: public static FtpClient ftpClie ...

  3. golang知识总结

    目录 1.slice扩容规则 2.内存寻址.内存对齐,go结构体内存对齐策略 3.go语言map类型分析 3.1 hash冲突 3.2 hash表扩容 3.3 go语言中的map结构是hash表. 3 ...

  4. gitlab和gitlab项目迁移

    一.概述 原gitlab 操作系统:centos 6.9 版本:GitLab 社区版 10.5.1 安装方式:yum 新gitlab 操作系统:centos 7.6 版本:GitLab Communi ...

  5. es6 快速入门 —— 函数

    其他章节请看: es6 快速入门 系列 函数 函数是所有编程语言的重要组成部分,es6之前函数语法一直没什么变化,遗留了许多问题,javaScript开发者多年来不断抱怨,es6终于决定大力度更新函数 ...

  6. SSAS表格模型

    Analysis Services 是在决策支持和业务分析中使用的分析数据引擎 (Vertipaq) . 它为商业智能提供企业级语义数据模型功能 (BI) .数据分析和报告应用程序,如 Power B ...

  7. FreeBSD jail 折腾记(一)

    创建jail目录 mkdir -p /usr/jail/ 放入基本系统 方案一 make buildworld #编译基本系统 make installworld DESTDIR=/usr/jail/ ...

  8. Flask面试问题

    1,什么是Flask,有什么优点?概念解释Flask是一个Web框架,就是提供一个工具,库和技术来允许你构建一个Web应用程序.这个Web应用程序可以是一些Web页面,博客,wiki,基于Web的日里 ...

  9. CSS网页的布局

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  10. 攻防世界 reverse Newbie_calculations

    Newbie_calculations Hack-you-2014 题目名百度翻译成新手计算,那我猜应该是个实现计算器的题目.... IDA打开程序,发现一长串的函数反复调用,而且程序没有输入,只有输 ...