簡體   English   中英

Python CPLEX 熱啟動從不可行的解決方案

[英]Python CPLEX warm starts from infeasible solution

我目前解決了一個(整數)LP 問題,其中包含以下數學約束作為偽代碼。

Packages_T1 + Packages_T2 + Packages_T3 + RPackages = 25

它代表三個包裹卡車(T1、T2 和 T3),每個包裹都可以分配給每個包裹,加上一個在目標函數中使用的殘留/溢出包裹變量。 當前值 25 表示總包需求。

假設我想重新解決這個問題,但將當前的 25 包需求更改為 35 包。 當我從前一個帶有 25 個包的解決方案熱啟動時,CPLEX 錯誤地指出所提供的解決方案不可行:這是完全合理的。 然而,它隨后無法修復先前的解決方案,即使最直接的方法是為這些約束中的每一個“增加” RPackages變量。

我的問題是是否有可能仍然使用先前解決的問題中的信息作為新問題的熱開始。 例如,有沒有辦法從解決方案中刪除所有RPackages並重新計算它們以適應右側的新約束? 我想到的“最后手段”的努力是自己手動重新計算所有這些RPackages值,並在舊解決方案中替換它們,但更傾向於使用更自動化的解決方案來解決這個問題。 我使用標准的 CPLEX Python API 作為參考。

先感謝您。

即使熱啟動不可行,CPLEX 也可以使用一些信息。

讓我使用動物園的例子

https://www.linkedin.com/pulse/making-optimization-simple-python-alex-fleischer/

from docplex.mp.model import Model

mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.minimize(nbbus40*500 + nbbus30*400)

warmstart=mdl.new_solution()
warmstart.add_var_value(nbbus40,4)
warmstart.add_var_value(nbbus30,0)
mdl.add_mip_start(warmstart)


sol=mdl.solve(log_output=True)

for v in mdl.iter_integer_vars():
    print(v," = ",v.solution_value)

Warning:  No solution found from 1 MIP starts.
Retaining values of one MIP start for possible repair.

暫無
暫無

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

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