项目 内容
课程班级博客链接 班级博客
这个作业要求链接 作业要求
我的课程学习目标 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. Flutter 设置input边框

    example 1 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp ext ...

  2. Flutter 使用p5

    p5 工作示例 install dependencies: p5: ^0.0.5 main.dart import 'package:flutter/material.dart'; import &q ...

  3. Power Query 合并数据

    1 导入数据 合并数据 筛选字段 关闭并上载

  4. 15_MySQL·WHERE子句中条件执行的顺序

  5. 【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文

    目录 1 启动脚本 1.1 start 1.2 stop 2 主站实例创建 2.1 Master Phases 2.2 数据报与状态机 数据报 状态机 2.3 master状态机及数据报初始化 2.4 ...

  6. 基于element-ui封装一个Table模板组件

    大家在做后台管理系统的时候,写的最多的可能就是表格页面了,一般分三部分:搜索功能区.表格内容区和分页器区.一般这些功能都是使用第三方组件库实现,比如说element-ui,或者vuetify.这两个组 ...

  7. Aliyun Oss 上传文件

    目录 Aliyun OSS OSS 简介 OSS 基本概念 OSS 功能概述 OSS 使用 创建存储空间Bucket 创建子目录 Java编码 测试 Aliyun OSS OSS 简介 阿里云对象存储 ...

  8. CSS相关知识(持续更新中)

    1. 弹性布局 一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式.引入弹性布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列.对齐和分配空白空间. 2. ...

  9. SpringMVC-05 Json交互处理

    SpringMVC-05 Json交互处理 Json 1.什么是JSON? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别 ...

  10. WPF 基础 - 事件

    1. 前言 WPF 事件的路由环境是 UI 组件树,先来看看这棵树. 1.1 Logical Tree 和 Visual Tree WPF 中的树有两种,一颗是逻辑树,另一颗也是逻辑树. 开玩笑,WP ...