假設我有標記爲A-Z一束組件相互遞歸...我開始通過發送各成分的1.0的值,並且每個組件返回雙(比如說A_0,B_0,..,Z_0)。下一次迭代,我發送總和(1.0 + a_0 + ... + z_0)到每個組件獲得26個新的雙打(a_1,...,z_1)和一個新的值(1.0 + a_0 + ... + z_0 + ... + a_1 + ... + z_1)。計算以這種方式每天都在繼續。與許多參數
的問題是每個組件本身遞歸和依賴於從以前的20天左右的值。所以最明顯的遞歸實現會變得麻煩,因爲組件計算的每個獨立路徑都有一個大量的冗餘遞歸調用。
在我目前的執行情況我分離的成分到誰是負責傳遞來完成計算自己的狀態和使用信息多個代理。我現在處於需要對模型進行更改的位置,並且我發現此實現不靈活。
我的新想法是使用不可變對象來保存每個迭代我克隆我的組件對象,並利用判別工會更新狀態的組件的狀態。即
Component(oldcomponent, [Parameter1(22.0), Parameter14(10.0)])
將具有 oldcomponent但更新參數1和14的狀態,使得分量計算的每一個路徑將是易於閱讀,因爲大多數路徑只更新的幾個參數。作爲獎勵,我可以將計算分爲一系列函數,它們將突變列表作爲輸入並輸出新的突變列表。
不過,我覺得這個問題是非常適合於功能性的語言,我有點從功能設計,這是很好的,但偏離我很好奇,別人會怎麼去解決這個問題呢?
編輯:
我想判別聯盟方面是沒有意義的,當我可以使用的「語法」創紀錄的周圍通過。
基於代理的消息傳遞樣式對我來說看起來很好 - 所以當然它的優秀設計是通過20值arround--爲什麼不呢? – Carsten
我會重新思考基於代理的方法,我現在需要對我的模型進行更改,其中涉及使用跨多個代理分佈的參數,我覺得實現此更改會更復雜,然後它應該......只要傳遞大約20個參數,當涉及到玩我的模型時,當我需要添加一個或兩個參數時,它開始覺得多餘,我發現我自己更新了六個遞歸調用來解釋它。 – Jizugu
我認爲這將有助於查看您的代碼。 – Daniel