簡體   English   中英

如何將決策變量的結果傳遞給 Docplex python 中的另一個 model?

[英]How can I pass the result of the decision variable to another model in Docplex python?

我想迭代地解決 model 並且在每次迭代中,時間都增加一個周期。 在每次迭代中,我都會再次求解 model。 所以,我想知道我是否可以將第一次迭代中決策變量的第一期結果分配給第二次迭代中的第一期。 例如,在第一次迭代中,時間段為T=7 ,在下一次迭代中,它變為T=8 如果決策變量是x_t,n其中t是時間, n是迭代計數器,我可以將x_1,1結果分配給x_1,2中的 x_1,2 嗎? 我的目標是使用滾動水平技術。

在這個答案中,我假設您使用的是 DOcplex model 的一個實例。 模型是增量可編輯的,也就是說,一旦求解,您仍然可以將新變量和約束添加到 model 並再次求解。 先前的解決方案將用作起點(如果可行)或用作啟發式(如果不可行)。

有幾種方法可以設置變量值:

  • 首先通過將其下限和上限設置為相同的值v :這是一個硬約束,如
x.lb = 3 x.ub = 3
  • 或者通過添加顯式約束這也是一個硬約束,為問題添加一個約束。 CPLEX 預求解自然會簡化此操作,但這會增加復雜性。 當 model 可能變得不可行時,可以首選此方法; 使用優先級,您可以探索通過放寬一些限制來使其變得可行的方法。

示例代碼

c3 = (x==3)
mdl.add(c3)

另一種方法是使用變量值構建“熱啟動”解決方案,用作起點,假設您正在解決混合 Integer 程序。 在這種方法中,值被用作啟發式起點,而不是硬約束; 換句話說,值可以通過求解來改變。 有關詳細信息,請參閱Model.add_mip_start()

暫無
暫無

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

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