我正在寫一個模擬退火程序,並且在調試時遇到了一些麻煩。任何的建議都受歡迎。如何更快地調試蒙特卡羅仿真?
首先,輸出是不確定的,所以我已經運行了一百次,查看平均值和標準偏差。
但是,它需要年齡和年齡(> 30分鐘)才能完成一個測試用例。
通常,我會盡量減少輸入,但減少迭代的次數會直接降低結果的準確性,但這種方式不是完全可預測的。例如,冷卻時間表是按照迭代次數縮放的指數衰減。減少單獨運行的次數使輸出非常不可靠(我試圖追捕的一個錯誤是運行之間的巨大差異)。我知道不成熟的優化是所有邪惡的根源,當然,在程序正確之前進行優化肯定還爲時過早,但我認真考慮重寫這是一種更快的語言(Cython或C),知道我爲了提交,我們必須將其移回Python。
那麼,有沒有什麼辦法比我現在有更好的測試模擬退火算法?還是應該在測試之間進行其他工作?
信息披露:這是課程作業的作業,但我並沒有要求您幫助我進行實際的模擬。
你可以做很多日誌記錄,然後手動運行,直到找到出錯的地方。 – 2011-03-06 00:54:08
你可能想要分析你的代碼,看看什麼是如此之慢。並提出一些測試用例,並確保它們在嘗試複雜之前正在工作。從小開始建立。 – madmik3 2011-03-06 00:55:30
我已經嘗試了日誌記錄和單元測試。看起來進入主退火循環的所有功能都是正確的,而且從記錄來看,它看起來像我正在做出我打算做出的決定。問題似乎在於我不明白產生候選人和冷卻計劃的正確策略,導致快速收斂,所以我正在測試一系列不同的策略。我已經考慮將單獨運行並行化,但是我想知道這是否值得付出努力。 – Wang 2011-03-06 01:10:38