201971010160-謝家俊 實驗二 軟體工程個人專案 揹包問題專案報告
阿新 • • 發佈:2022-03-21
專案 | 內容 |
---|---|
課程班級部落格連結 | 2019級卓越工程師班 |
這個作業要求連結 | 實驗二 軟體工程個人專案 |
我的課程學習目標 | 1.掌握Github釋出軟體專案的操作方法; 2.完成D{0-1}KP問題個人開發專案; 3.掌握軟體專案個人開發的流程。 |
這個作業在哪些方面幫助我實現學習目標 | 深入學習0/1揹包問題的演算法,掌握PSP流程 |
專案Github的倉庫連結地址 | Github倉庫 |
任務一:閱讀教師部落格“常用原始碼管理工具與開發工具”內容要求並點評部落格。
-
點評部落格
點評部落格作者 | 點評部落格地址 |
---|---|
Eggsy | 地址1 |
N0Name | 地址2 |
Almira |
任務二:總結詳細閱讀《構建之法》第1章、第2章,掌握PSP流程
- 第1章主要介紹了電腦科學的領域、軟體的幾個特性、軟體工程是什麼以及軟體工程與電腦科學的關係。
- 第2章主要講了單元測試、迴歸測試、效能分析、個人軟體開發流程。講述了一個好的軟體工程師應該怎樣合理分析軟體錯誤並明確各個模組功能和提高效能還有如何管理自己的原始碼。
任務三:個人專案開發——揹包問題
1、專案開發背景:
揹包問題(Knapsack Problem,KP)是NP Complete問題,也是一個經典的組合優化問題,有著廣泛而重要的應用背景。{0-1}揹包問題({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP問題形式,它的一般描述為:從若干具有價值係數與重量係數的物品(或項)中,選擇若干個裝入一個具有載重限制的揹包,如何選擇才能使裝入物品的重量係數之和在不超過揹包載重前提下價值係數之和達到最大?
2、需求分析:
{0-1}KP資料集是研究{0-1}揹包問題時,用於評測和觀察設計演算法效能的標準資料集;動態規劃演算法、回溯演算法是求解{0-1}揹包問題的經典演算法。查閱相關資料,設計一個採用貪心演算法、動態規劃演算法、回溯演算法求解{0-1}揹包問題的程式。
3、功能設計:
-
可正確讀入實驗資料檔案的有效{0-1}KP資料;
-
能夠繪製任意一組{0-1}KP資料以價值重量為橫軸、價值為縱軸的資料散點圖;
-
能夠對一組{0-1}KP資料按重量比進行非遞增排序;
-
使用者能夠自主選擇貪心演算法、動態規劃演算法、回溯演算法求解指定{0-1} KP資料的最優解和求解時間(以秒為單位);
-
任意一組{0-1} KP資料的最優解、求解時間和解向量可儲存為txt檔案或匯出EXCEL檔案。
4、設計實現: -
回溯法:
list1 = [] for i in index: list1.append(i) list1.reverse() index = np.array(list1) a = self.v.copy() b = self.w.copy() for i in range(self.v.size): a[i] = self.v[index[i]] b[i] = self.w[index[i]] self.v = a.copy() self.w = b.copy() return self.v, self.w, index
5、測試執行:
- 散點圖:
- 執行結果:
總結:
- 通過做這次專案掌握了繪製散點圖的方法,瞭解了相關的函式;能夠計算出價值與重量的比值並進行排序。開始進行問題求解設計和編碼,最後經過努力還是對基本功能的實現中的動態規劃演算法測試還是有bug但是回溯演算法已經實現,基本的五個功能雖說有所差距,體會到了自己努力編碼和整體軟體工程的方法指導是密不可分的,本次專案中時間差距最大的還是編碼部分,由於在前期需求分析階段,對回溯和動態規劃演算法理解不清楚,設計和編碼的時候,浪費了很多的時間去除錯程式碼,重新分析演算法、設計演算法。通過這次的專案意識到自己缺乏的很多,需要學習的內容還有很多,在以後的學習中還需要更加努力。
PSP
PSP2.1 | 任務內容 | 計劃共完成需要的時間(min) | 實際完成需要的時間(min) |
---|---|---|---|
Planning | 計劃 | 10 | 15 |
Estimate | 估計這個任務需要多少時間,並規劃大致工作步驟 | 15 | 15 |
Development | 開發 | 600 | 800 |
Analysis | 需求分析 (包括學習新技術) | 30 | 50 |
Design Spec | 生成設計文件 | 15 | 15 |
Design Review | 設計複審 (和同事稽核設計文件) | 10 | 10 |
Coding Standard | 程式碼規範 (為目前的開發制定合適的規範) | 15 | 20 |
Design | 具體設計 | 60 | 80 |
Coding | 具體編碼 | 300 | 430 |
Code Review | 程式碼複審 | 40 | 30 |
Test | 測試(自我測試,修改程式碼,提交修改) | 20 | 20 |
Reporting | 報告 | 90 | 130 |
Test Report | 測試報告 | 20 | 15 |
Size Measurement | 計算工作量 | 20 | 15 |
Postmortem & Process Improvement Plan | 事後總結 ,並提出過程改進計劃 | 30 | 40 |