簡體   English   中英

為所有代理找到初始可行解決方案

[英]Find initial feasible solution for all agents

編輯以獲得更好的解釋(對不起)。

我有一個半分散的優化問題。 半去中心化的意思是:我有一個聚合器來控制每個代理的最佳響應,但是這些代理有一個單獨的成本 function (變量和約束都被復制了)。 理論上,我只需要找到一個初始可行點(對於所有代理),然后通過迭代解決每個代理的優化問題,它會收斂到一個最優值。

我的問題是,為了找到一個初始可行點,我不會同時考慮每個代理,而是在沒有目標 function(帶有 mdl.remove_objective)的情況下使用迭代循環進行優化階段。 我想,通過運行足夠多的時間,它最終會為所有代理提供一個可行的解決方案。 但是,CPLEX 得出的解決方案都非常相似。 這使得無論我運行多少次,第 6 個代理都沒有可行的解決方案。

我的問題是:如何在每次迭代中強制可行點是可行集中的實際隨機點? 因為看起來,也許從 CPLEX 用來尋找可行解決方案的捷徑來看,它總是選擇相似的解決方案。

(我知道我可以同時解決所有代理的初始可行點,但我仍然有興趣知道是否可以做我想做的事)

謝謝!

兩個想法:

  • 對於一個給定的 model 實例,您可以嘗試Model.populate_solution_pool ,它返回一個解決方案池。
  • 其次,如果目標並不重要,但您想探索不同方向的可行解空間,您可以嘗試在每次運行中設置不同的“隨機”目標。 CPLEX 旨在為目標找到最佳解決方案; 因此,設定目標是“驅動” cplex 在不同方向尋找解決方案的方式。 例如,生成二進制變量的子集,計算總和並嘗試最大化這個總和(或者在你的情況下更合適的任何東西。)

這就是說,也可能發生您的問題非常緊湊以至於不存在很多解決方案,並且 CPLEX 總是依賴於相同的解決方案。 如果 CPLEX 日志顯示找到的具有不同目標的解決方案很少,那么您就會知道會發生這種情況。

最后,將mip emphasis參數設置為 1(可行性)或 4(隱藏的可行性)可能有助於使可行性優於最優性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM