201871030121-马艳 实验二 个人软件项目

项目 内容
课程班级博客链接 班级博客链接
作业要求链接 作业要求链接
我的课程学习目标 掌握软件项目的个人开发流程,熟悉步骤,掌握Github软件存储发布代码的基本操作
这个作业在哪些方面帮助我实现学习目标 根据老师的提示,一步步进行操作,熟悉基础的操作流程,加强自己的基础知识的应用
项目Github的仓库链接地址

任务1:

​ 阅读教师博客“常用源代码管理工具与开发工具”内容要求,点评班级博客中已提交相关至少3份作业。

任务2:

​ 总结详细阅读《构建之法》第1章、第2章,掌握PSP流程。

  • 《构建之法》https://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html
    • 第一章 :软件工程是把系统的,有序的,可量化的方法应用到软件的开发,运营和维护上。软件工程包括:软件需求分析,软件构建,软件设计,软件测试和软件维护。 软件是可以运行在计算机上及电子设备中的指令和数据的有序集合。软件以下特性:复杂性,不可见性,易变性,服从性,非连续性。软件工程,就是把软件中的Bug 消灭的过程。软件=程序+软工程。
    • 第二章:作者对PSP(Personal Software Process)进行了介绍,并且根据中科大大四学生和工作三年的工程师的PSP表格进行对比,综合各类表格的比较,总结出了个人软件开发流程PSP的任务清单。

任务3:

​ 项目开发背景:背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。{0-1}背包问题({0-1}Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的描述一般为:从若干具有价值体系与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数系数在不超过背包载重前提下价值系数之和达到最大?

​ {0-1} KP是经典{ 0-1}背包问题的一个拓展形式,用以对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP 问题要求计算在不超过背包载重量C的条件下,从给定的一-组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大; 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文件。

  • 需求分析

​ 我们知道,背包问题它有着广泛而重要的应用背景,是一个经典的组合优化问题,而{0-1}背包问题({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文件。
  • 设计实现

  • 测试运行

  • 代码片段

    读取文件:

    with open('idkp1-10.txt') as f: 
        lines = f.readlines() # 读取文本中所有内容,并保存在一个列表中,列表中每一个元素对应一行数据
    print lines # 每一行数据都包含了换行符
    print ''
    for line in lines:
        print line.rstrip()   
    print ''
    pi_str = '' # 初始化为空字符
    for line in lines:
        pi_str += line.rstrip() #字符串连接
    print pi_str
    

    回溯法求解:

    w = int(input())    #背包大小
        n = int(input())    #物品个数
     
        listWV = [[0,0]]
        listTemp = []
        sumW = 0
        sumV = 0
        for i in range(n):
            listTemp = list(map(int, input().split()))  #借助临时list每次新增物品对应的list加入到listWV中
            sumW += listTemp[0]
            sumV += listTemp[1]
            listWV.append(listTemp) #依次输入每个物品的重量与价值
    

    总结

    • 此次的个人项目开发,我并没有能够按时完成,比如数据切割,导出EXCEL文件等等,没有完全达到老师的要求,虽然查阅了很多资料,但是还是很难完成。
  • PSP展示

    PSP2.1 任务内容 计划共需完成的时间(min) 实际完成需要的时间(min)
    Planning 计划 1200 2250
    Estimate 估计这个任务需要多长时间,并规划大致工作步骤 35 30
    Development 开发 610 720
    Analysis 需求分析(包括学习新技术) 50 60
    Design Spec 生成设计文档 40 70
    Design Review 设计复审(和同时审核设计文档) 50 30
    Coding Standard 代码规范(为目前的开发制定合适的规范) 120 200
    Design 具体设计 90 110
    Coding 具体编码 90 130
    Code Review 代码复审 30 35
    Test 测试(自我测试、修改代码、提交修改) 40 20
    Reporting 报告 120 100
    Test Report 测试报告 40 50
    Size Measurement 计算工作量 50 20
    Postmortem &Process Improvement Plan 事后总结,并提出过程改进计划 30 30

任务4:

​ 完成任务3的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中。

posted @ 2021-03-31 09:55  马艳啊  阅读(89)  评论(1)    收藏  举报