2

我正在使用CPLEX解決MIP問題。解決之後,我想要降低成本。我意識到降低成本不爲MIP存在的事實,所以我做了以下內容:CPLEX獲得MIP的降低成本?

 int type = CPXgetprobtype(env, lp); 
    if(CPXchgprobtype(env, lp, CPXPROB_FIXEDMILP)) abort(); 
    if(CPXlpopt(env,lp)) abort(); 
    int blabla; double blublu; 
    if(CPXsolution (env, lp, &blabla , &blublu , x, pi, slack, dj)) abort(); 
    for (int i = 0; i < CPXgetnumcols(env,lp); i++) { 
     printf("v%d = %f, ", i,dj[i]); 
     if ((i+1) % 10 == 0) printf("\n"); 
    } 
    if(CPXchgprobtype(env, lp, type)) abort(); 

當我打印陣列DJ,這是全0。我也嘗試使用CPXgetdj而不是CPXsolution,結果相同。

看完後this我相信我所做的是正確的。但它似乎並不奏效。我的問題有20000個變量,我已經嘗試了一堆,它總是說0 ...

我有一個小的時間限制,所以它不證明最優性(但它確實找到了一個整數解決方案),我不確定這件事。

由於

+0

你得到同樣的行爲,如果你與互動嘗試爲[這裏]描述(http://www-01.ibm.com/support/docview.wss? UID = swg21400009)? – rkersh

+0

感謝您的提示。我剛剛嘗試過。當MIP的「寫入解決方案」時,沒有關於約束的雙重信息,也沒有降低變量的成本值。然後我輸入「更改問題修復」,再次解決,再次保存解決方案,這次所有約束都有一個雙重值(非0),但所有變量的成本都降低了0.所以我猜我的C代碼沒有錯?如何降低成本爲0?看起來很奇怪。另外,約束的雙重性給了我什麼信息? (我是新來的優化...)謝謝! – ddeunagomez

+0

難道我所有的方程都是方程,而且沒有不等式嗎? – ddeunagomez

回答

1

考慮一個一般的線性問題P其中所有變量都固定在一個給定的整數問題的整數最優解的值。讓P

enter image description here

其中上劃線的BJ是XJ在最佳整數解的值。對偶問題P的d

enter image description here

的成本Z(d)= Z(P)= z與d)的最佳解決方案可能被發現設置

enter image description here

個從而降低成本

enter image description here