本次作業deadline: 2017-10-09 22:00
作業需求
編碼實現一個部門與學生的智能匹配的程序。
提供輸入包括:
- 20個部門
- 部門編號(唯一確定值),字符;
- 各部門需要學生數的要求的上限,單個,數值,在[10,15]內;
- 各部門的特點標簽,多個(兩個以上),字符;
- 各部門的常規活動時間段,多個(兩個以上),字符。
- 300個學生
- 學生編號(唯一確定值),字符;
- 學生空閑時間段,多個(兩個以上),字符;
- 興趣標簽,多個(兩個以上),字符(學生的興趣標簽一定是所有部門特點標簽其中的一個)
- 每個學生有不多於5個的部門意願(助教測試時測試數據中部門意願可能會出現空缺,非空缺的部分一定是部門編號中的一個,並按照優先級從高到底的順序排序)。
實現一個智能自動分配算法,根據輸入信息,輸出部門和學生間的匹配信息(一個學生可以確認多個他所申請的部門,一個部門可以分配少於等於其要求的學生數的學生) 及 未被分配到學生的部門 和 未被部門選中的學生。
要求
- 1、構造輸入數據的生成程序,實現可定制的輸入數據(輸入數據是指 input_data.txt)。在博客中舉一個樣例(貼出關鍵數據即可),並說明生成數據的所考慮因素。
- 2、需要為智能匹配算法確立幾條分配或排序原則,比如 興趣優先、或活動時間優先、或其他等等,請你們結對討論確定。
- 3、給出結果分析,分析自己的輸出是否達到算法所達到的指標。關於相關指標條件,每個組感受應當不同,請把想法寫在博客中。
- 4、代碼需要遵循一定的規范,在博客中描述結對團隊遵循的代碼規范,並截取部分關鍵代碼佐證說明。
- 5、本次結對項目實現使用程序語言不做具體限制,但需要能生成Windows平台的可執行文件。C/C++/C#編譯后即可生成,其他語言可以使用打包工具把依賴打包上傳,比如 exe4j。但注意,本次沒有重測機會,請確保你項目的所有依賴文件都上傳到了Github中。為確保沒有問題,最好在無相應語言環境的機器上克隆項目並進行測試。
- 6、代碼提交在GitHub上,並給GitHub鏈接。
- 7、兩個人發布獨立博客,包含上述內容的描述,同時包含結對感受,以及兩個人對彼此結對中的閃光點或建議的分享。項目的測試分數兩人共享,博客的分數各自獨立。博客可以有共享的架構設計圖等,但不可雷同,否則視作抄襲。
- 8、助教將收集各組成員的程序,並基於一組特殊數據進行測試(該測試數據遵循下面的輸入規范,該數據由助教根據真實場景討論得出,作業評定時會給出,事先不對外公布)。測試結果基於全部同學的輸出,助教將統計各組同學對於各個部門錄取相關人員的頻率,得出一組部門與成員的錄取關系數據(該數據遵循下面的輸出規范),並與各組同學的數據作對比,最終評判同學們的測試結果。
測試須知
測試機為Windows環境,所以提交到Github上的項目均需要建立一個名字為BIN
的文件夾,里面必須含有可執行文件(以exe為后綴)與相關的依賴庫,請注意以下兩點:
- 確保可執行文件的名字命名為
test.exe
。 - 確保輸出的文件
output_data.txt
(文件名固定) 與可執行文件在同一目錄下,並遵守下述輸出格式的約定,生成文件時使用相對路徑("./output_data.txt"即可,無需考慮太多)。 - 測試時助教將提供與可執行文件同目錄的輸入文件
input_data.txt
,其格式滿足下述的輸入輸出格式約定。
一個示例組織目錄如下所示:
/ Project(工程名字自行指定即可,放代碼即可)
/ 數據生成程序
/ 匹配程序
/ *評估程序(評估程序可有可無,其輸入為input_data.txt和output_data.txt,程序用於評估該匹配算法的效果)
/ BIN
/ Lib.dll (exe運行需要的動態鏈接庫文件,可以沒有,或者其他依賴文件,也可以是一個文件夾存儲,形式自定)
/ test.exe
/ output_data.txt (運行exe后生成的文件)
下面是一個示例:https://github.com/peiqiaoWang/department_student
助教在測試時,將以命令行運行可執行文件的方式進行批量測試。用例:
test.exe
讀取當前目錄下的input_data.txt,輸出對應的結果的output_data.txt
博文規范
1.給出結對成員的學號及姓名。
2.首頁給出項目的Github鏈接。
3.貼出你們生成的一組最“好”的數據(這里的數據特指 input_data.txt,數據給出對應鏈接即可),並詳細說明"數據生成"程序的原理以及你們所考慮的因素。(15')
4.詳細說明你們數據建模及匹配程序的思路及實現方式。(30')
5.你們在代碼遵循了一定的規范,在博客中描述結對團隊遵循的代碼規范,並截取部分關鍵代碼佐證說明。(5')
6.結果評估。對於程序的匹配結果,你們是否滿意?請對你們程序處理結果進行分析。(20')
7.已經嘗試過結對編碼,你一定很多話要說。請發表結對感受,以及兩個人對彼此結對中的閃光點或建議的分享。(10‘)
注意事項
1.請務必遵循測試標准,交之前一定要反復檢查,如非測試程序導致測試失敗的,一律不再重測!!!
2.說明:僅就上述內容,實現一個單獨的程序模塊。不要和之前的原型整合到一個博客中。
3.本次作業滿分為100分,其中博客分80分,測試分20分,請按點答題。
輸入輸出格式約定
輸入
json格式
{
"students": [
{
"free_time": [
"Mon.16:00~18:00",
"Mon.12:00~14:00",
"Tues.10:00~12:00",
"Wed.18:00~20:00",
"Fri.20:00~22:00",
"Fri.12:00~14:00",
"Sat.8:00~10:00",
"Sat.18:00~20:00",
"Sat.14:00~16:00",
"Sun.16:00~18:00",
"Sun.14:00~16:00",
"Sun.20:00~22:00"
],
"student_no": "031502001",
"applications_department": [
"D007",
"D010",
"D012",
"D005",
"D013"
],
"tags": [
"reading",
"programming"
]
},
...
],
"departments": [
{
"event_schedules": [
"Sun.8:00~9:00"
],
"member_limit": 14,
"department_no": "D001",
"tags": [
"film",
"English",
"reading",
"music",
"dance",
"basketball",
"chess"
]
},
...
]
}
輸出
json
{
"unlucky_student": [
"031502001",
"031502002",
"031502003",
...
],
"admitted": [
{
"member": [
"031502141"
],
"department_no": "D001"
},
...
],
"unlucky_department": [
"D004",
"D005"
]
}