2009-01-07 64 views
0

總體規劃自動化類的時間表優化爬蟲?

讓我的類信息來自動優化並利用其 企業登錄引擎登錄選擇我的單班時間表的網站

整個算法

  1. 登錄到
  2. 查找我當前的學期及其 相關科目(預設)
  3. 導航到正確的頁面,並從各相關 被攝體的數據(講座,實用, 車間倍)
  4. 地帶無用 信息
  5. 排名的數據,更接近 對方更高的班,在 隨機天低
  6. 的人解決一個最佳時機解表
  7. 輸出我 最好的情況下信息
  8. 輸出我的詳細清單的詳細列表可能的類信息(一些 可能已滿例如)
  9. 獲得程序來選擇最佳 類自動
  10. 繼續檢查,看看我們是否可以 詳細 達到7

6獲得所有課程,以講座爲重點,排名最高(每個科目只有一個),並嘗試安排課程。

問題

誰能爲我提供鏈接的東西,可能是類似這樣的希望寫在蟒蛇? 關於6:你建議用什麼數據結構來存儲這些信息?每個單類對象都有一個鏈表? 我應該將所有信息寫入文本文件嗎?

我想佑霖是建立像下面 屬性:

  • 主題
  • 排名
  • 時間
  • 類型
  • 教師

我幾乎經歷在Python中,並認爲這個w應該是一個很好的學習項目,試圖完成。 感謝您提供任何幫助和鏈接,以幫助我開始,開放編輯標記適當或什麼是必要的(不知道這是根據以外的其他編程和python?)

編輯:真的不能得到正確的格式,我想這個SO職位> <

+0

也許這種格式更接近你想要的 – 2009-01-07 11:03:07

回答

2

根據多遠你計劃採取#6,以及數據集有多大,它可能是不平凡的;它肯定會對我的NP難全局優化...

但是,如果你在談論數十(寧比數百)節點,相當愚蠢的算法應該給予足夠好的性能。

所以,你有兩個限制:

  1. 上了班按分數的總體排序; 這是靈活的。
  2. 班級衝突;這不靈活。

我的意思靈活的是,你可以更間隔了類(得分越低),但你不能一次是兩班。有趣的是,評分與衝突之間可能存在正相關關係;更高的得分類別更有可能發生衝突。

我在算法第一關:如果類是長度不均勻的

selected_classes = [] 
classes = sorted(classes, key=lambda c: c.score) 
for clas in classes: 
    if not clas.clashes_with(selected_classes): 
     selected_classes.append(clas) 

努力擺脫衝突可能是尷尬的,在奇怪的時間啓動等問題。將開始和結束時間映射爲時間「塊」的簡化表示(每15分鐘/ 30分鐘或您需要的任何內容)可以更輕鬆地查找不同類的開始和結束之間的重疊。

0

BeautifulSoup在這裏提到了幾次,e.g get-list-of-xml-attribute-values-in-python

美麗的湯是一個Python的HTML/XML分析器設計爲快速週轉項目,如屏幕抓取。三個特點使其功能強大:

  1. 美麗的湯不會嗆,如果你給它壞標記。它產生一個解析樹,與您的原始文檔大致相同。這通常足夠收集你需要的數據並逃跑。
  2. 美麗的湯提供了一些簡單的方法和Pythonic成語,用於瀏覽,搜索和修改解析樹:一個解剖文檔和提取所需內容的工具包。您不必爲每個應用程序創建自定義分析器。
  3. 美麗的湯自動將傳入文檔轉換爲Unicode和傳出文檔爲UTF-8。您不必考慮編碼,除非文檔未指定編碼,而美麗湯不能自動檢測編碼。然後您只需指定原始編碼。

美麗的湯分析你給它的任何東西,併爲你樹遍歷的東西。你可以告訴它「查找所有鏈接」,或者「查找外部鏈接類的所有鏈接」,或者「查找所有與urls匹配的鏈接」foo.com「,或者」查找帶有粗體文本的表格標題,然後給出我的文字「。

現在一度鎖定在設計拙劣的網站

有價值的數據是唾手可得。這將採取小時只需要與美麗的湯分項目。

0

這裏有太多的問題了。

請將此分解爲主題區域並針對每個主題提出具體問題。請關注其中一個具體問題。請定義你的條款:「最好」並不意味着沒有一些特定的測量來優化。

下面是我認爲我在主題列表中看到的內容。

  1. 使用其企業登錄引擎登錄

    2查找我的學期和相關學科(預安裝)

    3導航到刮痧HTML

    1登錄到網站獲取每個相關主題的數據(講座,實踐和研討會時間)

    4剝離無用信息的數據

  2. 一些基於「彼此更近」來尋找「最佳時間」的算法。由於這些術語未定義,因此幾乎不可能提供任何幫助。

    5排名它們彼此更接近較高的類,關於隨機天下

    6的那些解決一個最好的時間表溶液

  3. 輸出的東西。

    7出我的最好的情況下信息

    8輸出我的可能的類信息的詳細列表的詳細清單(有些人可能充滿例如)

  4. 優化的東西,尋找「最好的」。另一個無法定義的術語。

    9獲取的程序來選擇最好的班級自動

    10繼續檢查,看看我們是否能達到7

BTW,Python有 「lists」。他們是否「聯繫」並不真正進入。